Loss function이란?
Weight(가중치) 값이 지금 얼마나 안 좋은지를 정량화시켜 보여주는 함수로
라는 식으로 표현된다.
Multi-class SVM loss
Binary SVM의 일반화된 형태로, 정답 스코어가 다른 스코어들보다 충분히 좋은지를 판단하는 손실함수다.
식은 단순한데,
로 표현된다. 여기서 1은 safety margin으로, 정답 스코어가 다른 스코어들보다 충분히 높은 값을 갖게 하기 위해 사용된다.
SVM loss
를 에 대한 함수로 직접 그려보면 위와 같은 모양이 되는데, 이런 모양의 손실 함수를 Hinge loss라고 부른다.SVM loss는 오직 정답 스코어와 다른 스코어들의 차이가 충분히 큰지만 고려하기 때문에, 정답 스코어의 값을 조금 바꾸더라도 손실 함수의 값은 변하지 않는다.
아래에 설명할 Softmax 함수와의 가장 큰 차이점이다.
Regularization
우리가 손실 함수를 통해 분류기를 학습시킬 때, 우리가 분류기에게 명령을 내리는 것은 그저 트레이닝 데이터에 대해 fit하라고 말하는 것일 뿐이다.
이는 우리가 의도한 바와 다르다. 우리는 항상 테스트 데이터 세트에 대한 성능을 고려해야 한다.
파란색 원을 트레이닝 데이터라고 본다면 만약 우리가 트레이닝 데이터만을 고려할 시, 파란색 곡선을 그리게 되겠지만 실제로는 초록색 선이 이상적이게 된다.
이를 해결하는 방법을 Regularization이라고 한다.
위 식에서 를 Regularization term이라고 하며, 모델이 좀 더 단순한 W를 선택하도록 도와준다.
Regularization에는 위와 같은 것들이 있다.
그 외에도 Max norm regularization, Dropout, 좀 더 현대적인 방식인 Batch normalization, Stochastic depth와 같은 방법들이 존재한다.
여기서 중요한 점은 각 regularization 방식마다 “복잡하다”고 측정하는 기준이 다르다는 것이다.
Softmax Classifier (Multinomial Logistic Regression)
Multi-class SVM의 경우 우리는 그 스코어 자체에 크게 신경쓰지 않았다. 하지만
Softmax
함수의 경우 스코어 자체에 추가적인 의미를 부여하게 된다. 식은 아래와 같다.각 스코어들에 지수를 취해 전부 양수로 만들고, 그 지수들의 합에서 차지하는 비율로 나타낸다.
결과적으로 해당 값은 확률을 나타내며 0~1 사이의 값이 되고, 모든 확률들의 합은 1이 된다.
손실 함수는 해당 식에 log를 붙이고, 부호만 마이너스로 바꿔주면 되는데
가 된다.
여기서 는 정답 클래스의 확률이고, 정답 클래스의 확률이 1에 가까울 시 손실 함수의 값은 0에 가까워지게 된다.
반면 정답 클래스의 확률이 0에 가까울 시 손실 함수의 값은 양의 무한대로 커진다. (이 때문에 앞에 마이너스를 붙인 것이다.)
SVM vs Softmax
이미 앞서 SVM 같은 경우, 정답 스코어의 값을 조금 바꾸더라도 손실 함수의 값은 변하지 않는다고 했다.
하지만, Softmax 함수는 언제나 확률을 1에 가깝게 만드려고 하기 때문에 계속해서 성능을 높이려고 한다는 특징이 있다.
다만, 실제 딥러닝 애플리케이션에서 두 손실 함수의 성능 차이는 그렇게 크지 않다.
Gradient Descent
그렇다면 어떻게 weight 값을 업데이트해 성능을 개선시킬 수 있을까?
바로 미분값을 이용해 점차적으로 값을 업데이트해 나가면 된다.
Gradient(미분값)을 계산한 후, 해당 방향에 step size(혹은 learning rate)를 곱해, 원래 weight 값에서 빼주는 방식으로 업데이트한다.
여기서 step size(혹은 learning rate)는 가장 중요한 hyperparameter 중 하나로, 학습 전에 정해주어야 한다.
Stochastic Gradient Descent
하지만 위의 작업을 모든 data들에 대하여 위의 작업을 반복하는 것은 매우 오래 걸린다.
N이 백만에 가까운 숫자라고 하면, gradient를 한번 더 계산하기 위해 N개의 전체 트레이닝 세트를 한번 더 돌면서 계산해야 한다.
따라서 우리는 주로
Stochastic Gradient Descent
라는 방법을 사용하는데, 전체 데이터 세트의 gradient와 loss를 계산하는 것이 아니라 minibatch라는 작은 트레이닝 샘플 집합으로 나눠서 학습시키는 것이다.SGD의 식은 아래와 같이 표현된다.
minibatch의 Loss와 Gradient를 이용해 Loss의 추정치와 Gradient의 추정치를 사용하는 것이라고 이해할 수 있다.