티스토리 뷰
해당 글은 Stanford CS class CS231n: Convolutional Neural Networks for Visual Recognition 강의를 기반으로 하고 있습니다.
(출처 :http://cs231n.stanford.edu/syllabus.html) Video 강의와 강의 note를 가지고 정리하고 있습니다.
Recall... Linear Classification
Linear classifier와 같은 분류 모델을 설정하고 나면 해야할 일 두가지가 있습니다.
1. Define a loss function
loss function은 classifier의 성능을 보여주는 척도입니다. loss function 값이 작을 수록, 즉 0에 가까울수록 classifier가 데이터 샘플을 잘 분류하는 것이죠.
2. Find the parameters that minimize the loss function.( =optimization )
때문에 loss function 값을 작게 만들도록 parameter를 조정해야합니다. Linear Classifier의 경우를 생각해보면,
loss function의 값을 최소로 만드는 W parameter 값을 찾을 때까지 parameter update를 진행하는 데, 이 과정을 optimization이라고 합니다.
Loss Function
loss function을 수식으로 살펴보면 다음과 같습니다.
가 인풋되는 i번째 이미지 데이터이고,
가 i번째 이미지 데이터의 정답 label(target) 일 때,
최종 Loss는 모든 데이터셋에 대해서 다음과 같이 정의됩니다.
모든 input dataset x에 대해 클래스 스코어가 계산되고(ex. Linear classifier의 경우 Wx) 이를 이미지의 label과 비교하여 계산하는 loss function값이 각 이미지마다 계산됩니다. 전체 Loss function 계산 결과를 평균낸 값이 해당 모델의 최종 Loss 값이 됩니다.
Multiclass SVM loss
가 인풋되는 i번째 이미지 데이터이고,
가 i번째 이미지 데이터의 정답 label(target) 일 때,
는 f( )가 linear classifier 함수로 가정한 상황에서, Wx의 결과인 class score vector를 의미합니다.
는 Xi 인풋의 정답 label이 아닌 클래스의 score vector 값이고, 는 xi 인풋의 정답 label인 클래스의 score vector값을 의미합니다. 즉, {(다른 클래스로 예측한 벡터 값)-(정답 클래스로 예측한 벡터 값)+1}을 0과 비교하여 더 큰 값을 loss로 취하는 방법이 Multiclass SVM loss의 알고리즘입니다.
0을 선택하게 되는 경우와 s_j - s_yi + 1을 선택하는 경우를 비교해서 생각해보면 쉽게 이해할 수 있습니다.
1. 가 0보다 크다는 것은 인풋 이미지를 다른 클래스로 예측한 값이 정답 클래스로 예측한 값보다 더 크다는 것을 의미합니다. 잘못 예측하고 있는 경우이죠!
예를 들어 cat 이미지가 들어왔을 때, cat class score vector는 2.0이고, car class score vector는 5.0인 경우,
= 5.0 - 2.0 = 3.0 이군요. 이 식에 의해 후자가 max 값으로 선택되어 loss function 값은 4.0이 됩니다.(3.0 + 1 // 1이 더해지는 것에 대해서는 아래에서 설명하도록 하겠습니다. ) 잘못 예측할수록 loss 값은 커지고 그만큼 모델의 성능이 좋지 않음을 의미한다는 것을 알 수 있습니다.
2. 가 0보다 작다는 것은 인풋 이미지를 다른 클래스로 예측한 값보다 정답 클래스로 맞게 예측한 값이 더 크다는 것을 의미합니다. 잘 예측하고 있는 경우군요!
예를 들어 cat 이미지가 들어왔을 때, cat class score vector는 5.0이고, car class score vector는 2.0인 경우,
= 2.0 - 5.0 = -3.0 입니다. 이 식에 의해 max 값으로 0이 선택되어 loss function의 값은 0 이 됩니다. 예측을 잘할 경우 loss 값이 0이 됨을 알 수 있습니다.
: 1을 더해주는 부분에 대해서 의아하지 않으셨나요? 여기서 1을 더해주는 것은 'safty margin'을 주기 위해서 입니다. 안정적인 분류를 위해서 다른 클래스로 예측한 값보다, 정답 클래스로 예측한 값이 최소 1만큼 차이가 나야 잘 예측했다고 판단하는 것입니다. 아래 그림에서는 'delta'가 safty margin값을 의미합니다. Multiclass SVM은 정답 클래스의 score가 다른 클래스의 score보다 최소 delta 만큼은 높게 나오기를 바라는 것! 이라고 정리할 수 있습니다. delta 이상 차이나는 경우는 loss 가 0으로 아예 쌓이지 않고, 정답 클래스와 오답 클래스의 score 차이가 delta 보다 작게 나는 경우는, 조금씩 loss 가 쌓이게 됩니다. 정답 클래스 score가 가장 높긴하나, 안정적으로 분류하지 않았다는 것이죠.
※ Multiclass SVM loss는 여러개의 class로 분류하는 문제에서 주로 사용되어, multiclass svm 이라 불린다.
※ 하나의 input마다 전체 클래스 갯수 (N-1)회 만큼 계산
※ min loss = 0 , max loss = ∞
'2018 _study > CS231n CNN ' 카테고리의 다른 글
[Lec4]Introduction to Neural Neural Networks (0) | 2018.01.25 |
---|---|
[Lec3]Loss Functions and Optimization(2) (0) | 2018.01.24 |
Assignment #1 환경설정 conda python36(1) (0) | 2018.01.22 |
[Lec2]Image Classification(3) (0) | 2018.01.09 |
[Lec2]Image Classification(2) (0) | 2018.01.04 |