브렌쏭의 Veritas_Garage

[CS231n] #3. Loss Function, 최적화 본문

[Project_하다]/[Project_공부]

[CS231n] #3. Loss Function, 최적화

브렌쏭 2024. 6. 28. 13:04

손실 함수(Loss Function)는 기계 학습 모델의 성능을 측정하는 데 사용되는 함수이다.

왜 이름이 이따구냐 생각이 들지만, 모델의 예측이 실제 값과 얼마나 다른지를 측정하는 방식이기 때문에 손실값을 재기 때문이다.
즉, 작을수록 좋다.

모델 개발 중 이 Loss function 의 값을 낮추기 위해서 Hyperparameter같은 파라미터들을 조정한다.
이 과정에서 "경사하강법"이 등장한다.

Mean Squared Error, MSE

평균 제곱 오차(Mean Squared Error, MSE):

  • 정의: MSE는 모델 예측값과 실제 값의 차이의 제곱을 평균낸 값이다. 주로 회귀 문제에 사용한다고 한다.
  • 수식: \text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2
  • 여기서 y_i 는 실제 값, \hat{y}_i 는 예측 값, n 은 데이터 포인트의 수.

Multiclass SVM

SVM이 3개 이상의 카테고리를 분류하기 시작하면 이제 다중클래스가 된다.

1.일대일(One-vs-One) 방식:

  • 이 방식은 각 클래스 쌍을 개별적으로 비교하여 분류기를 훈련
  • 총 N 개의 클래스가 있을 경우, \frac{N(N-1)}{2} 개의 분류기가 필요하다.
  • 예를 들어, 세 개의 클래스 A, B, C가 있는 경우, A 대 B, A 대 C, B 대 C 등 세 개의 분류기를 만들어서 모든 경우의 수를 커버한다.
  • 분류할 때는 모든 분류기를 사용하여 가장 많은 투표를 얻은 클래스를 최종 예측 결과로 선택한다.

2.일대다(One-vs-All) 방식:

  • 이 방식은 한 클래스를 양성 클래스로 두고 나머지 모든 클래스를 음성 클래스로 간주하여 분류기를 훈련. 하나씩 각개 격파한다.
  • 따라서 N 개의 클래스가 있을 경우, N 개의 분류기가 필요하다.
  • 각 분류기는 각각의 클래스를 다른 모든 클래스와 구별하도록 훈련한다. 자신의 클래스만 알아보고 분류하도록 한다.
  • 분류 시 각 분류기의 결정 함수값이 가장 높은 클래스를 최종 선택.

Multiclass SVM Loss

일단 SVM에서 마진을 최대화해서 문제를 최소화하려 하는데, 이제 클래스가 많아지면서 마진을 구하는 것이 어려워진다.

수식으로 표현된 다중 클래스 SVM 손실은 다음과 같다:
L_i = \sum_{j \neq y_i} \max(0, s_j - s_{y_i} + \Delta)

으악 이게 뭐야
최소 0, 최대 무한으로 값이 나올 수 있다.

Hinge Loss, Square Hinge Loss

Squre Hinge Loss의 경우 제곱이라서 손실값이 매우 크게 나온다. 따라서 최적화를 진행할때 좀더 급진적으로 진행할 수 있도록 도와준다.


일반적인 힌지손실은 이렇게 생겼고, 제곱의 경우에는 x^2 처럼 올라가겠지


Regularization Loss

정규화 손실이다. 단독으로 쓰이는 것이 아니라 모델의 복잡도를 조절하고 과적합을 방지하기 위해 사용되는 추가항이다.

L1 정규화 (Lasso Regularization)

  • 수식: R(w) = \lambda \sum |w_i|
  • 특징: L1 정규화는 가중치의 절대값의 합에 비례하여 패널티를 부과한다.
  • 이 방법은 일부 가중치를 정확히 0으로 만들어 모델에서 해당 특성을 제거하는 효과가 있다.
  • 이는 특성 선택(feature selection)에 유용하며, 모델을 단순화하기 좋다는 것.

L2 정규화 (Ridge Regularization)

  • 수식: R(w) = \lambda \sum w_i^2
  • 특징: L2 정규화는 가중치의 제곱의 합에 비례하여 패널티를 부과.
  • 이는 모든 가중치를 작게 유지하도록 강제하여, 모델의 예측에 각 특성이 과도하게 영향을 미치는 것을 방지한다.
  • L2는 가중치를 완전히 0으로 만들지는 않지만, 모델의 일반화 능력을 향상시키는 데 효과적이다.

정규화 파라미터 \lambda

  • 정규화 강도: \lambda 는 정규화의 강도를 조절하는 파라미터로, 이 값이 클수록 정규화 손실의 영향이 커지고 모델의 복잡도가 낮다. 반대로, \lambda 가 작으면 원래의 손실 함수에 더 큰 가중치가 주어져, 모델의 복잡도가 높다.

Multinomial Logistic Regression :: Softmax Regression

두 개 이상의 범주를 가진 대상을 분류하기 위한 일반화된 선형 회귀 모델이다. 

Multinomial Logistic Regression은 주로 “Softmax 함수”를 사용하여 각 클래스에 속할 확률을 추정하고, 가장 높은 확률을 가진 클래스를 예측 값으로 선택한다.

Softmax Function

각 클래스에 대한 선형 점수를 확률로 변환하는 함수이다.

결과적으로, 각 데이터 포인트는 각 클래스에 속할 확률을 갖게 되며, 가장 확률이 높은 클래스가 해당 데이터 포인트의 예측 클래스가 된다.

 

위에 SVM의 경우 YES/NO 의 결정과 비교에 집중했다면, 소프트맥스는 각 분류에 들어갈 확률을 구한다.

Cross-Entropy Loss

softmax를 사용할때에는 크로스 엔트로피 손실함수를 이용한다.

크로스 엔트로피는 정보 이론에서 유래한 개념으로, 한 확률 분포가 다른 확률 분포를 얼마나 잘 설명하는지를 측정한다.

 

  1. 모델 예측: 모델은 각 클래스에 대한 확률을 출력한다. 예를 들어, 고양이, 개, 새 3가지 클래스가 있는 문제에서 모델은 각각에 대한 확률을 예측한다.
  2. 실제 레이블: 각 데이터 포인트는 실제 클래스를 하나 가지고 있으며, 이를 원-핫 인코딩으로 표현. 원-핫 인코딩된 벡터는 실제 클래스 위치에만 1을, 나머지 위치에는 0으로 표현한다.

 

  • 완벽한 예측: 모델이 정확한 클래스에 대해 확률 1.0을 예측하면, 손실은 0 (-\log(1) = 0).
  • 잘못된 예측: 모델이 실제 클래스의 확률을 낮게 예측할수록 (즉, 0에 가까워질수록), 로그 항은 음의 무한대로 간다. 손실은 매우 큼.

 

최적화 :: OPTIMIZATION

이제 위 함수들을 이용해서 손실함수의 값이 0에 최대한 가까워지도록 최적화를 하면 된다.

보통 임의의 지점에서 점차 낮은 쪽으로 이동하면서 손실을 최소화하는 방법을 쓴다. (경사하강법)

 

Gradient Descent 경사하강법

이 알고리즘의 기본 아이디어는 손실 함수의 그래디언트(기울기)를 계산하고, 그 기울기가 가리키는 방향(즉, 가장 빠르게 증가하는 방향의 반대 방향)으로 반복적으로 파라미터를 조정해 손실 함수의 최소값을 찾는 것이다.

 

실제로 작동시키면 모든 경우에 수에 대해 진행하는 것보다 표본을 뽑아서 경사하강법을 이용하는 것이 보다 효율적이라고 한다.

  • 배치 경사 하강법 (Batch Gradient Descent): 전체 훈련 데이터를 사용하여 한 번에 그래디언트를 계산. 데이터셋 전체에 대한 정확한 그래디언트를 계산하지만, 매우 큰 데이터셋에서는 계산 지옥.
  • 확률적 경사 하강법 (Stochastic Gradient Descent, SGD): 훈련 데이터셋에서 무작위로 하나의 샘플을 선택해서 계산. 각 반복이 빠르지만, 그래디언트의 분산으로 인해 업데이트 경로가 불안정할 수 있다.
  • 미니 배치 경사 하강법 (Mini-batch Gradient Descent): 훈련 데이터의 소규모 무작위 부분집합(미니 배치)으로 계산한다. 배치와 SGD의 장점을 혼합하여, 계산 효율성을 높이면서도 안정적인 수렴 경로를 제공.

 

Comments