Lecture 3: Loss Functions and Optimization

2024. 10. 28. 13:38·Stanford CS231n
반응형

Stanford에서 강의하는 CS231n에 대해서 공부하고 정리한 글입니다.

Slide: cs231n_2017_lecture3.pdf

Loss Function

loss function은 현재 classifier가 얼마나 좋은지 알려주는 함수이다.

$x_i$ 는 입력 이미지, $y_i$는 정답이다. 최종 Loss는 모든 데이터들의 loss 평균으로 구할 수 있다.

 


Multiclass SVM loss

예시와 같이 Multi-class의 문제에서는 Multiclass SVM loss 를 사용할 수 있다. $s_j$는 오답 클래스의 예측값이며, $s_(y_i)$는 정답 클래스의 예측값이다. 1은 SVM 에서 설정한 Margin 값이며 어떠한 크기든 상관 없다. 3개의 클래스를 갖는 학습 데이터를 통해 loss를 계산하면 다음과 같다.

 

Cat : $L1 = max(0, 5.1-3.2+1) + max(0, -1.7-3.2+1) = max(0,2.9) + max(0, -3.9) = 2.9 + 0 = 2.9$
Car : $L2 = max(0, 1.3-4.9+1) + max(0, 2.0-4.9+1) = max(0,-2.6) + max(0, -1.9) = 0 + 0 = 0$
Frog : $L3 = max(0, 2.2 -(-3.1) + 1) + max(0, 2.5 -(-3.1) + 1) = max(0, 6.3) + max(0 ,6.6) = 6.3 + 6.6 = 12.9$
$$L = (2.9 + 0 + 12.9)/3 = 5.27$$

각 Class의 Loss는 2.9, 0, 12.9가 되며, 전체 Loss는 평균인 5.27이다.

 

Question 1) Car의 스코어가 조금 변하면 Loss에는 무슨 변화가 일어날까?
정답은 Loss가 바뀌지 않을 것이다. SVM loss의 특성을 잘 생각해보면, Car의 스코어가 다른 스코어 + Margin 값 보다 크기 때문에, 스코어를 조금 조정한다 해도 Loss는 변하지 않을 것이다.

 

Question 2) SVM Loss의 최대값, 최소값은 무엇일까?
최소값은 0이다. 정답 클래스의 스코어가 제일 크다면, 모든 학습 데이터에서 loss가 0이기 때문이다.
최대값은 무한대이다. 정답 클래스 스코어가 매우 낮은 음수 값인 경우에 해당한다.

 

Question 3) 모든 스코어 $s$가 거의 0에 가깝고, 값이 서로 거의 비슷하다면 Multiclass SVM에서 loss값은 어떻게 될까?
정답은 "클래스의 수 - 1"이다. 직접 계산해보면 알 수 있다. 해당 조건을 바탕으로 Cat의 loss를 구해보면 다음과 같다.

Cat : $L1 = max(0, 1) + max(0,1) = 1 + 1 = 2$ (=number of class -1) // 이는 Margin이 1 인 경우에만 해당한다.

이를 통해 디버깅 전략을 가질 수 있다. 학습을 처음 시작할 때 Loss가 C(클래스 수) - 1이 아니라면, 버그가 있는 것으로 생각할 수 있다.

 

Question 4) SVM Loss는 정답인 클래스는 빼고 다 더한다. 정답인 놈을 포함한다면 Loss는 어떻게 될까?

기존의 Loss에 +1 이 된다. (직접 계산해보면 쉽게 알 수 있다.)

 

Question 5) Loss를 구하는 식에서 합이 아니라 평균을 쓰면 어떻게 될까?

영향을 미치지 않는다. 클래스의 수는 정해져 있으며, 평균을 취하는 것은 단지 손실 함수를 리스케일링 할 뿐이다. 따라서, 손실 함수 값이 스케일만 변하며, 우리는 손실 함수의 스코어 값이 몇인지 직접적으로 신경쓰진 않기 때문에 영향을 미치지 않는다.

 

Question 6) 손실 함수를 오차의 제곱 항으로 바꾸면 어떻게 될까?

결과는 달라진다.

(강의에 의하면) 손실 함수의 요지는 "얼마나 구린지"를 정량화 하는 것이다. 만약, Loss에 제곱을 한다면 "엄청 엄청 안좋은 것들"은 "곱절로 안좋은 것"이 된다. 반면에 hinge loss를 사용하게 되면 "조금 잘못된 것"과 "많이 잘못된 것"을 크게 신경쓰지 않게 된다. 둘 중 어떤 loss를 선택하느냐는 에러에 대해 얼마나 신경을 쓰고 있고, 어떻게 정량화 할 것인가에 달렸다.

 

Question 7) Loss가 0인 W는 유일한가?

유일하지 않다. 그림에서와 같이 $f(x,W) = Wx$ 인 분류기가 있다고 가정하고, $Wx$일 때와 $2Wx$일 때를 비교해보면 Loss는 0으로 같다.

하지만, L=0이 되는 $W$를 찾는 것은 옳지 않다. 이것은 우리의 분류기에게 학습 데이터에 꼭 맞는 $W$를 찾으라고 하는 것과 같지만, 실제로 우리는 학습 데이터가 아닌 테스트 데이터에 적용되야 하기 때문이다.

 

Regularization

파란색 점은 학습 데이터, 초록색 점은 테스트 데이터이다. 우리는 학습 데이터에 완벽하게 학습을 하여 완벽한 분류기를 만들어서 파란 곡선을 만들어 냈다. 하지만, 이는 잘못된 분류기이다. 우리는 항상 테스트 데이터의 성능을 고려해야 한다. 만약, 테스트 데이터가 들어오게 되면 앞서 학습한 파란색 곡선은 완전히 틀리게 된다. 우리가 의도한건 파란색 곡선보단 초록색 선에 가깝다. 보통 이를 해결하는 방법을 통틀어 Regularization 이라 한다. Regularization은 분류기가 복잡한 고차 다항식보다 단순한 저차 다항식을 선택하도록 유도한다.

 

예를 들어, 다음과 같은 다항함수(polynomial function)이 있다고 가정한다.
$$ y = w_0 + w_1x + w_2x^2 + ... + w_dx^d $$

위의 식을 변형하여 Linear Regression 문제처럼 바꾸어 본다.
$$ y = w_0 + w_1x_1 + w_2x_2 + ... + x_dx_d $$

위 식은 계수(w)들이 클 수록 구불구불한 함수가 나옴을 생각해볼 수 있다. 이를 저차원의 함수로 바꾸기 위해선 계수(w)들의 크기를 줄여야 하고, Loss함수에 계수(w)들을 더해주는 L1, L2 Regularization을 더해줌으로써 그 크기가 커질 때 페널티를 부과할 수 있다.

 


Softmax Classifier

우리는 앞서 multi-class SVM loss에 대해 알아보았다. multi-class SVM loss는 각 클래스에 해당하는 스코어 자체는 크게 신경쓰지 않고, 정답인 클래스가 정답이 아닌 클래스들보다 더 높은 스코어를 내기만을 원했다. 이번에 얘기할 Softmax Classifier는 해당 클래스가 정답일 확률을 구하는 것이다.

모든 스코어들에 지수를 취해 양수가 되게 만든 뒤, 지수들의 합으로 정규화를 시킨다. 이를 통해 확률 분포를 얻을 수 있고, 이는 해당 클래스일 확률이 된다.

Softmax Classifier의 Loss는 "-log(정답클래스확률)" 이다.

Loss는 이 Classifier가 얼마나 구린지를 측정하는 것이기 때문에, 정답클래스 확률에 '-' 를 붙인다.

Cat 에 대한 스코어를 Softmax를 취하여 각각 0.13, 0.87, 0.00인 확률을 나타내었다. 정답 클래스가 정답일 확률은 0.13이고, loss는 0.89 이다.

 

Question 7) Softmax loss의 최댓값과 최솟값은 얼마일까?

최솟값은 0, 최대값은 무한이다.

최소값 : $-log(1) = 0$

최대값 : $-log(0) = \infty$

 

Question 8) 만약 모든 s가 0에 가까울 때, Loss는 어떻게 될까?

Loss = $-log(1/c) = log(C)$

 

Question 9) 예측 점수를 조금 변화시킨다면 Softmax와 SVM Loss는 어떻게 될까?

정답 스코어가 조금 변한다고 해서 SVM Loss는 변하지 않을 것이다. 반면, Softmax는 정답 클래스가 정답일 확률을 1로 만드려고 하기 때문에 Loss는 변한다. 만약, 정답 스코어가 변해서 정답 스코어와 오답 스코어 간의 차이가 마진 보다 적다면 SVM Loss도 변할 것이다.

Reference

Regularization: https://quick-cat.com/entry/ML-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-Polynomial-Regression-Regularization-%EB%8B%A4%ED%95%AD%EC%8B%9D-%ED%9A%8C%EA%B7%80-%EB%B6%84%EC%84%9D%EA%B3%BC-%EC%A0%95%EA%B7%9C%ED%99%94

반응형

'Stanford CS231n' 카테고리의 다른 글

Lecture 9: CNN Architectures  (1) 2024.11.11
Lecture 7: Training Neural Networks 2  (1) 2024.11.08
Lecture 6: Training Neural Networks 1  (2) 2024.11.08
Lecture 5: Image Classification with CNNS  (0) 2024.11.05
Lecture 4: Backpropagation and Neural Networks  (0) 2024.10.30
'Stanford CS231n' 카테고리의 다른 글
  • Lecture 7: Training Neural Networks 2
  • Lecture 6: Training Neural Networks 1
  • Lecture 5: Image Classification with CNNS
  • Lecture 4: Backpropagation and Neural Networks
hangyuwon
hangyuwon
  • hangyuwon
    191
    hangyuwon
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (38)
      • 기타 (1)
      • Stanford CS231n (19)
      • 논문 리뷰 (5)
      • Error (4)
      • 알고리즘 (2)
      • Linux (1)
      • 잡동사니 (2)
      • 딥러닝 (4)
  • 인기 글

  • 태그

    논문 리뷰
    error
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hangyuwon
Lecture 3: Loss Functions and Optimization
상단으로

티스토리툴바