Broccoli's House

#3-(2) 학습 : 손실 함수 본문

공부/딥러닝

#3-(2) 학습 : 손실 함수

김콜리 2018. 2. 25. 19:24

※ 이 글의 내용은 O'REILLY의 <밑바닥부터 시작하는 딥러닝> 책을 기반으로 한다.




신경망 학습 : 손실 함수




  • 손실 함수
 - 손실 함수(cost function) : 손실 함수란 신경망이 학습할 수 있도록 해주는 지표이다. 머신러닝 모델의 출력값과 사용자가 원하는 출력값의 차이, 즉 오차를 말한다. 이 손실 함수 값이 최소화되도록 하는 가중치와 편향을 찾는 것이 바로 학습이다. 일반적인 손실 함수로 평균 제곱 오차나 교차 엔트로피 오차를 사용한다.




  • 평균 제곱 오차


 - 평균 제곱 오차(Mean Squared Error : MSE) : 계산이 간편하여 가장 많이 사용되는 손실 함수이다. 기본적으로 모델의 출력 값과 사용자가 원하는 출력 값 사이의 거리 차이를 오차로 사용한다. 그러나 오차를 계산할 때 단순히 거리 차이를 합산하여 평균내게 되면, 거리가 음수로 나왔을 때 합산된 오차가 실제 오차보다 줄어드는 경우가 생긴다. 그렇기 때문에 각 거리 차이를 제곱하여 합산한 후에 평균내는 것이다. 위의 식에서는 1/2를 곱하는 것으로 되어 있으나 실제로는 2가 아닌 전체 데이터의 수를 나누어 1/n을 곱해주어야 한다.

 - 거리 차이를 제곱하면 좋은 점은, 거리 차이가 작은 데이터와 큰 데이터 오차의 차이가 더욱 커진다는 점이다. 이렇게 되면 어느 부분에서 오차가 두드러지는지 확실히 알 수 있다는 장점이 있다.




  • 교차 엔트로피 오차


 - 교차 엔트로피 오차(Cross Entropy Error : CEE) : 교차 엔트로피 오차는 기본적으로 분류(Classification) 문제에서 원-핫 인코딩(one-hot encoding)했을 경우에만 사용할 수 있는 오차 계산법이다. 위의 식에서 t값이 원-핫 인코딩된 벡터이고, 거기에다 모델의 출력 값에 자연로그를 취한 것이 곱해지는 형태이다. 결과적으로 교차 엔트로피 오차는 정답일 때의 모델 값에 자연로그를 계산하는 식이 된다. 


 - 분류 문제에서 모델의 출력은 0에서 1 사이이므로 -log(y)의 함수는 위와 같다. 즉, 정답이 1이라고 했을 때, 정답에 근접하는 경우에는 오차가 0에 거의 수렴해간다. 그러나 0에 가까워지면, 정답에 멀어지면 멀어질수록 오차가 기하급수적으로 증가하는 것을 볼 수 있다. 정답에 멀어질수록 큰 패널티를 부여하는 것이다. 


 - 일반적으로 분류 문제에서는 데이터의 출력을 0과 1로 구분하기 위하여 시그모이드(sigmoid) 함수를 사용한다. 시그모이드 함수 식에는 자연상수 e가 포함되므로 기존의 평균 제곱 오차를 사용하면, 매끄럽지 못하고 울퉁불퉁한 표면을 지닌 그래프의 개형이 그려진다. 이런 상태에서 경사 하강법(Gradient Descent Algorithm)을 적용하면 전역 최소점(global minimum)을 찾지 못하고 지역 최소점(local minimum)에 걸릴 가능성이 크다. 이것을 방지하기 위해 자연 상수 e에 반대되는 자연 로그를 모델의 출력 값에 취하는 손실 함수를 사용하는 것이다.




  • 손실 함수의 목적

 - 머신러닝 모델의 최종적인 목적은 높은 정확도를 끌어내는 매개변수(가중치, 편향)를 찾는 것이다. 신경망 학습에서는 최적의 매개변수를 탐색할 때 손실함수의 값을 가능한 한 작게 하는 매개변수 값을 찾는다. 이 때, 매개변수의 미분(기울기)을 계산하고, 그 미분 값을 토대로 매개변수 값을 갱신하는 과정을 반복한다. 


 - 주요한 점은, 정확도와는 달리 손실 함수는 매개변수의 변화에 따라 연속적으로 변화한다는 점이다. 손실 함수와는 달리 정확도는 매개변수의 변화에 둔감하고, 또한 변화가 있다하여도 불연속적으로 변화하기 때문에 미분을 할 수 없다. 미분이 되지 않으면 최적화를 할 수 없으므로 정확도가 아닌 손실 함수를 지표로 삼아 학습을 해나가는 것이다. 

Comments