[CS231n] 강의3. Loss Functions and Optimization (1) 리뷰
본 글은 2021년 4월에 강의한 스탠포드 대학의 “Convolutional Neural Networks for Visual Recognition” 2021년 강의를 듣고 정리한 내용입니다.
개인 공부 목적으로 작성되었으며, 설명이 맞지 않거나 글 오타가 있으면 알려주시길 바랍니다.
원본 링크 : cs231n.stanford.edu
한글 번역 링크 : aikorea.org - cs231n
강의 링크 : youtube - 2017 Spring (English)
Loss Function
- 이전 내용에서 이미지의 픽셀 값에서 클래스 점수를 산출하는 함수를 정의했으며, 가중치 세트로 파라미터화했다.
- 가중치를 제어하며 예측된 클래스 점수가 학습 데이터의 정답 레이블과 일치하도록 가중치를 설정해본다.
- 스코어 차이를 정량화하는 손실 함수(loss function) 정의
- 그 다음, 손실 함수를 최소화하는 매개변수(parameter)를 효율적으로 찾을 수 있는 방법을 생각한다.
- 최적화(optimization) 정의
- 손실 함수(loss function)는 현재 분류기(classifier)가 얼마나 좋은지를 알려준다.
- 주어진 데이터셋의 샘플 : ${(x_i,y_i)}_{i=1}^N$
- $x_i$ : 이미지
- $y_i$ : (정수) 라벨(label)
- 즉, 입력 이미지 x에 대한 정답 카테고리
- 데이터셋에 대한 손실은 각 N개의 샘플에 대한 손실의 평균이다.
- $L=\frac{1}{N}\sum_iL_i(f(x_i, W),y_i)$
- $f$ : 입력 이미지 x와 가중치 행렬 w를 입력으로 받아서 새로운 테스트 이미지에 대해 y를 예측
- 딥러닝 알고리즘 : 어떤 x와 y가 존재하고, 가중치 w가 얼마나 좋을지를 정량화하는 손실 함수를 만드는 것
Multiclass Support Vector Machine loss
- SVM 손실은 서포드 벡터 머신이 각 이미지에 대한 올바른 클래스를 원하여 고정된 마진 $\Delta$에 의한 잘못된 클래스보다 다소 높은 점수를 얻도록 설정한다.
- 서포트 벡터 머신(SVM) : 결정 경계(Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델1
- 서포트 벡터(support vector) : 결정 경계에 가장 가까운 각 클래스의 점들
- 마진(Margin) : 결정 경계와 서포트 벡터 사이의 거리를 의미
p.s. Similarity is not a distance!
- 위에서 손실 함수를 정의한 걸 이용한다.
- 스코어 벡터 $s$로 간결하게 나타낸다.
- $s=f(x_i,W)$
- 예를 들어 j번째 클래스의 점수 j번째 요소이다.
- $s_j=f(x_i,W)_j$
- SVM 손실은 다음과 같다.
- $L_i=\sum_{i\ne j}max(0,s_j-s_{y_i}+1)$
- $s_j$ : 정답이 아닌 클래스의 스코어
- $s_{y_i}$ : 정답 클래스의 스코어
- $1$ : safety margin
- 여기서 $s_{y_i}$가 $s_j+1$보다 크면 loss는 0이 된다.
-
힌지 로스(Hinge loss)
- 실제 계산 과정을 알아본다.
- 고양이의 loss는 SVM loss 공식에 따라 계산이 된다.
- max(0, 5.1-3.2+1) + max(0, -1.7-3.2+1)
- = max(0, 2.9) + max(0, -3.9)
- = 2.9
- 차의 loss도 위처럼 똑같이 계산한다.
- max(0, 1.3-4.9+1) + max(0, 2.0-4.9+1)
- = max(0, -2.6) + max(0, -1.9)
- = 0
- 다음은 개구리 클래스이다.
- max(0, 2.2-(-3.1)+1) + max(0, 2.5-(-3.1)+1)
- = max(0, 6.3) + max(0, 6.6)
- = 12.9
- 각 loss 값을 구했으니 이를 평균낸다.
- L = (2.9 + 0 + 12.9)/3 = 5.27
Question & Answer
- 다음은 강의노트에 나온 질문의 답이다.
-
What happens to loss if car scores change a bit?
- 자동차의 점수를 4.9에서 3.9로 바꾸어도, loss는 0으로 변함이 없다.
- 여기서 알 수 있는 점은, SVM 힌지 로스는 데이터에 민감하지 않다.
- 단지, $s_{y_i}$가 $s_j$보다 높은가에만 관심이 있다.
-
What is the min/max possible loss?
- min : 손실의 최소는 0이다.
- max : 손실의 최대는 무한대 값이다.
-
At initialization W is small so all $s\approx0$. What is the loss?
- 스코어가 0에 가까워 지면 saftety margin만 남게 되고, 각 로스는 1+1=2가 된다.
- loss = nums of class - 1
- 이건 디버그 용도로 많이 사용된다. (= sanity check)
-
What if the sum was over all classes? (including $j=y_i$)
- 만약 정답 클래스 점수를 포함해서 계산하면 어떻게 될까?
- loss 평균이 1이 증가하게 된다.
- 우리가 찾고 싶은건 loss가 0이 되는 것이다.
-
What if we used mean instead of sum?
- 합 대신 평균을 낸다면 loss의 스케일만 작아질 뿐이다.
- No difference!!
-
What if we used $L_i=\sum_{i\ne j}max(0,s_j-s_{y_i}+1)^2$
- 달라진다.
- 이 때는 제곱을 하기 때문에 non-linear하게 된다.
- 따라서 hinge loss 에서 직선이 아닌 곡선으로 올라가게 된다. (다른 그래프가 그려짐)
- 하지만, 일반적으로 제곱을 사용하지 않는다.
-
Supposed that we found a W such that L=0. Is this W unique?
- 아니다. 가중치에 2배를 해도 loss는 0을 갖게 된다.
- 즉, W는 여러 개가 될 수 있다.
Regularization
- 학습된 가중치 w는 학습 데이터셋에 맞추어 진행되었다.
- 학습 데이터셋에만 너무 많이 학습하게 되면 과적합(Overfitting)이 일어날 수 있다.
- 즉, 테스트셋에도 알맞은 W를 찾아야 한다.
- 규제(regularization)을 도입하는 이유이다.
- Data loss : 모델 예측은 학습 데이터와 비교한다.
- Regularization : 학습 데이터셋에만 맞는 가중치 W를 학습하려고 할때, 어느정도 페널티(penalty)를 부여한다.
- Occam’s Razar : 가설을 세울 때 단순한 것이 가장 좋다.
- $\lambda$ : 규제 강도 (hyper parameter)
- 왜 규제를 해야 할까?
- 가중치에 대한 선호도 표현
- 모델을 단순하게 만들어 테스트 데이터에서 작동
- 곡면성(curvature)을 추가하여 최적화 향상
- L1 규제 : $R(W)=\sum_k\sum_l\vert W_{k,l}\vert$
- L2 규제 : $R(W)=\sum_k\sum_l W_{k,l}^2$
- Elastic net (L1+L2)
- $\sum_k\sum_l\beta W_{k,l}^2+\vert W_{k,l}\vert$
- 그외 방법들이 있다.
- 드롭아웃(Dropout)
- 배치 정규화(Batch normalization)
- Stochastic depth
- Fractional pooling
Softmax classifier
- 소프트맥스(Softmax)는 multinomial logistic regression이라고도 불린다.
- 이전 multiclass SVM loss에서는 스코어 자체는 신경을 안 쓰고 safety margin을 포함해 높은지 낮은지만 판단했다.
- softmax function은 스코어 자체에 추가적인 의미(=확률 분포)를 부여한다.
- 각 클래스 스코어를 확률 분포 계산
- 소프트맥스 함수
- $P(Y=k\vert X=x_i)=\frac{e^sk}{\sum_je^sj}$
- where $f(x_i;W)$
- 옳은 클래스의 최대 확률
- $L_i=-logP(Y=y_i\vert X=x_i)$
- softmax 최종 수식
- $L_i=-log(\frac{e^sk}{\sum_je^sj})$
-
다음은 $y=-logx$의 그래프 (-log를 붙이는 이유)
Softmax vs SVM
Recap
- 배운 내용을 정리해본다.
- 데이터셋 (dataset)이 있다.
- $(x,y)$
- 입력 $x$로부터 스코어를 얻기 위해 스코어 함수(score function)를 사용한다.
- $s=f(x;W)=Wx$
- 손실 함수(loss function)를 사용해서 모델의 예측 값이 정답에 비해 얼마나 차이나는지 측정한다.
- 그리고 모델의 복잡함과 단순함을 통제하기 위해 규제(regularization)를 추가한다.
- softmax: $L_i=-log(\frac{e^sk}{\sum_je^sj})$
- SVM: $L_i=\sum_{i\ne j}max(0,s_j-s_{y_i}+1)$
-
Full loss : $\frac{1}{N}\sum_{i=1}^NL_i+R(W)$
- 이 모든걸 합쳐서 최종 손실 함수가 최소가 되게 하는 가중치 행렬 $W$를 구한다.
댓글남기기