* 해당 포스트는 기초적인 딥러닝을 다루므로, 전문적인 지식을 탐구하기엔 부족할 수 있습니다.
또한, 전자공학 또는 컴퓨터공학에 사용되는 기초적 배경지식을 전제로 합니다.
질문과 비판, 오류 정정 등 모든 댓글 환영합니다.
2023.09.19 - [딥러닝/기초 이론] - #0. INTRO
2023.10.09 - [딥러닝/기초 이론] - #1. 머신러닝 VS 딥러닝
2023.10.10 - [딥러닝/기초 이론] - #2. 인공신경망
2023.10.10 - [딥러닝/기초 이론] - #3. 활성화 함수(ACTIVATION FUNCTION)
#3. 활성화 함수(ACTIVATION FUNCTION)
* 해당 포스트는 기초적인 딥러닝을 다루므로, 전문적인 지식을 탐구하기엔 부족할 수 있습니다. 또한, 전자공학 또는 컴퓨터공학에 사용되는 기초적 배경지식을 전제로 합니다. 질문과 비판,
bongjukim.tistory.com
지난 시간에는 활성화 함수에 대해 알아보았다.
우린 활성화 함수를 사용하여 여러 hidden layer를 통해 나온 중간, 또는 최종 함수를 비선형 함수로 표현하여 빨간 점과 파란 점을 선형이 아닌 비선형으로 자세히 구별할 수 있도록 했다. 이미지의 분류로 생각한다면, 강아지와 고양이를 좀 더 자세히 구별하기 위한 함수이다.
지금까지 설명했던 것들을 종합하자면,
INPUT -> HIDDEN LAYER -> ACTIVATION FUNCTION -> HIDDEN LAYER -> ACT. -> ... -> SOFTMAX(분류) -> OUTPUT
으로 정의되는데, 이것이 가장 기본적인 인공신경망이다.
하지만, 이러한 단순한 신경망으로는 딥러닝을 할 수 없다.
저 신경망을 통해 우리가 원하는 분류 능력을 학습한다고 하면, 그건 그냥 단순한 러닝이다. 우린 학습을 통해 분류한 결과를 보고, 잘못 분류한 것을 수정하고, 이를 토대로 다시 신경망을 학습시키고, ... -> 이러한 행동을 반복해 최적의 분류 모델을 찾길 원한다.
그렇다면, 우린 오류를 포착하고, 이 오류를 피드백해 다시 신경망을 학습시켜야 한다(만약 전자공학과나 전기공학과를 다니고 있는 자랑스러운 공학도라면, 자동제어의 feedback 회로와 비슷하다고 생각하면 된다).
우린 위의 가장 기본적인 인공신경망을 통해 순방향(forward)을 구성했으니, 이제 오류에 대한 정보를 가지고 처음으로 돌아가는 역방향(backward)를 구성하면 비로소 단순한 딥러닝 모델을 구축할 수 있을 것이다.

이 역방향을 구성하기 위해 오차를 가져오는 함수, 즉 손실 함수(loss function)가 사용된다.
기본적인 손실 함수
보통 강아지와 고양이 분류기의 성능을 확인하려면, 정확도(accuracy)를 지표로 사용해 평가할 것이다. 우리가 원하는 것은 결국 분류기의 정확도가 100%로 가도록 하는 것이다. 그럼, 이제 정확도가 100%로 가도록 도와주는 역방향 함수를 사용하면 되는데, 상황에 따라 맞는 함수가 여럿 있다. (CE loss는 분류기에 매우 적합하여 자주 사용되는 함수이지만, 기초적인 딥러닝을 다룰 것이므로 후의 CNN 구현에서 설명하겠다)
MAE (Mean Absolute Error) loss, (= L1 loss)
MSE (Mean Squared Error) loss, (= L2 loss)
수식을 풀어보면, (모델이 생각한 예측값 - 실제값)에 절댓값을 씌우거나, 제곱을 해서 평균을 낸 것이다.
그냥 직관적으로 생각한다면, MAE loss는 오차에 절댓값을 씌우고, MSE loss는 오차에 제곱을 하므로 MSE loss는 이상치(outlier)에 민감하다고 볼 수 있다.
풀어봐도 뭔 말인지 모르겠으니, 예시를 통해 알아보자.
EX1)
#3에서 언급했던 softmax함수를 통해 최종적으로 나온 강아지, 고양이의 예측값이 순서대로 [0.8, 0.2]라고 하자.
사실상 분류기가 제시한 답은 (80%확률로 강아지)이다. 마찬가지로, 정답이 강아지였다면 실제값은 [1.0, 0.0]일 것이다.
그렇다면, MAE loss의 값은 (|0.8-1.0| + |0.2-0.0|)/2 = 0.2이다. MSE loss의 값은 (0.2^2 + 0.2^2)/2 = 0.04이다.
EX2)
강아지, 고양이의 예측값이 [0.8, 0.2]라고 하자. 하지만, 정답이 고양이였다면 실제값은 [0.0, 1.0]일 것이다.
그렇다면, MAE loss의 값은 (|0.8-0.0| + |0.2-1.0|)/2 = 0.8이다. MSE loss의 값은 (0.8^2 + 0.8^2)/2 = 0.64이다.
RESULT)
이처럼, 분류기가 제시한 예측값과 실제값이 같아질 수록 loss의 값은 낮아지고, 달라질 수록 loss의 값은 올라간다.
만약 loss의 값이 0이 되도록 모델을 학습시킨다면, 정확도는 100%로 수렴할 것이다.
굳이 loss function이 필요할까?
"굳이 간접적으로 loss function을 사용해야 되냐? 그냥 정확도를 사용하면 되잖아.
그럼 훨씬 더 빨라질텐데?"

매우 좋은 생각이다. 굳이 손실함수를 왜 중간 다리로 사용해서 정확도를 100%로 가도록 만들까?
(여기에 #3 마지막 장에서 얘기했던 '미분'의 적용도 들어가니, 궁금했다면 읽어보자)
이해하기 쉽도록 숫자 맞추기를 예로 들어보자.
출제자가 생각한 답은 [50, 29, 340, 67]이다.
내가 [50, 40, 350, 66]을 얘기했을 때, 출제자는 정확도가 25%라고 할 것이다. 그렇다면, 이 정확도를 토대로 내가 어떤 숫자를 바꿔야 할까? 당연히 모른다. 만약 [49,28,339,66]을 얘기한다면, 답을 알고 있는 출제자의 입장에서는 너무나도 안타까울 것이다. 답에 너무나도 근접했지만, 정확도는 오히려 0%이기 때문이다.
하지만, 위의 loss를 사용한다면 어떨까?
[50,40,350,66]의 MAE loss는 (0+11+10+1) / 4 = 5.5이다. 만약 [49,28,339,66]을 얘기했다면, loss는 (1+1+1+1) / 4 = 1이 된다. 정확도는 여전히 0%지만, 내가 얘기한 숫자가 정답에 훨씬 근접하고 있다는 것을 알 수 있는 것이다.
근데, 또 추가로 생각해야될 것은, [51,29,341,68]로 얘기를 해도 loss는 1이란 것이다. 그럼 이건 어떻게 해야할까?
이것의 해결법이 바로 '미분'이다.

우리가 loss의 미분을 해서 기울기를 알고 있다면, 여기서는 벡터의 기울기가 각각 1, -1이므로 두 값 사이에 정답이 있는 걸 알 수 있다.
또한, 완전히 차이가 큰 숫자들을 얘기했을 시에는 기울기가 당연히 클 것이고, 차이가 적은 숫자를 얘기했을 시에는 기울기가 작아질 것이므로 숫자를 얼마나 크게, 또는 작게 바꿔야 할지도 알 수 있다.
여기에서 activation function이 ReLU였다면, 양수일 경우 loss의 크기만큼 가중치를 업데이트 해줄 것이고, 음수일 경우 가중치 업데이트를 진행하지 않는다.
지금까지 loss fucntion에 대해 알아보았다.
이 글을 열심히 봐주셨다면, loss 값의 기울기를 따라가다보면 결국엔 최솟값에 도달할 것이라는 결론이 나왔다.
그렇다고 해서 이제 분류기를 만들기 위한 최종적인 신경망은 이게 끝이냐?
아쉽지만, 절대 아니다. 'loss의 기울기가 0인 곳에 도달했다고 해서 이곳이 진짜 정확도가 100%가 되는 곳이라고 확신할 수도 없고, 심지어 기울기가 진짜 0에다가 학습 정확도가 100%라면 그건 오버피팅이다.'


필자는 이 얘기를 수업이 끝나갈 때 듣고, 현타가 좀 씨게 와서 딥러닝이고 뭐고 그냥 다 때려치우고 싶었다(지금도 그러고 싶다).

하지만 어쩌겠나. 공부를 하기 싫었다면 취업을 했어야지. 나는 대학원생이지 않은가.
'딥러닝 > 기초 이론' 카테고리의 다른 글
#3. 활성화 함수(ACTIVATION FUNCTION) (3) | 2023.10.10 |
---|---|
#2. 인공신경망 (2) | 2023.10.10 |
#1. 머신러닝 VS 딥러닝 (0) | 2023.10.09 |
#0. INTRO (0) | 2023.09.19 |