[Andrew Ng] 7-1. Softmax Regression

Prettypotato·2026년 2월 18일

Softmax란?

Softmax 함수는 다중 클래스 분류에서 각 클래스의 확률을 정규화된 값으로 변환해주는 중요한 함수다.

이 함수는 각 입력값을 지수화하고, 전체 지수 합으로 나누어 확률을 계산하며, 그 결과로 0과 1 사이의 값을 얻을 수 있다.

ai=ezij=1nezja_i = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}}

Softmax 분류기는 다중 클래스 분류(Multi-class Classification)를 위한 기본 모델이다. Logistic Regression을 C개 클래스로 확장한 형태라고 이해하면 쉽다.


l1l1+l2+l3\frac{l_1}{l_1 + l_2 + l_3}l1l1+l2+l3\frac{|l_1|}{|l_1| + |l_2| + |l_3|}을 사용하면 안 될 까?

  • l1l1+l2+l3\frac{l_1}{l_1 + l_2 + l_3}은 음수가 나올 수 있기 때문에 사용하면 안된다.
  • l1l1+l2+l3\frac{|l_1|}{|l_1| + |l_2| + |l_3|}는 절댓값을 사용하기 때문에 (li)(l_i)부호 정보가 완전히 사라진다. 따라서 강한 음의 값과 강한 양의 값을 동일하게 취급하여, 모델이 각 클래스에 대해 갖는 선호 방향(positive vs. negative evidence)을 구분할 수 없게 된다.

Softmax Loss Function (Cross Entropy)

정답을 one-hot 벡터 yy라고 하면 손실 함수는 아래와 같다.

L=k=1Cyklogy^kL = - \sum_{k=1}^{C} y_k \log \hat{y}_k

하지만 one-hot 특성상 정답 class만 1이므로 실제로는 아래와 같다. 따라서 정답 class 예측값 y^\hat{y}이 1과 가깝게 만드는 것에 집중 할 것이다.

L=logy^trueL = - \log \hat{y}_{\text{true}}

Softmax 출력은 모든 클래스 확률의 합이 1이기 때문에, 정답 클래스의 확률을 1에 가깝게 높이면 나머지 클래스들의 확률은 자동으로 줄어든다. 따라서 다른 클래스를 직접 조절하지 않아도 정답 클래스 확률을 최대화하는 것만으로 전체 확률 분포가 조정된다.


Gradient Descent with Softmax

손실 함수는 Cross-Entropy Loss로

L=k=1Cyklogy^kL = - \sum_{k=1}^C y_k \log \hat{y}_k

여기서 (y^k)(\hat{y}_k)는 softmax 출력:

y^k=ezkj=1Cezj\hat{y}_k = \frac{e^{z_k}}{\sum_{j=1}^C e^{z_j}}

Step 1: (Ly^k)(\frac{\partial L}{\partial \hat{y}_k}) 계산

Ly^k=yky^k\frac{\partial L}{\partial \hat{y}_k} = - \frac{y_k}{\hat{y}_k}

Step 2: (y^kzj)(\frac{\partial \hat{y}_k}{\partial z_j}) 계산

softmax 함수가 복잡하지만, 다음 두 경우로 나눠서 계산할 수 있다.

y^k=ezkS,S=k=1Cezk\hat{y}_k = \frac{e^{z_k}}{S}, \quad S = \sum_{k=1}^C e^{z_k}
  • k=jk = j:
y^kzk=ezk(Sezk)S2=y^k(1y^k)\frac{\partial \hat{y}_k}{\partial z_k} = \frac{e^{z_k} (S - e^{z_k})}{S^2} = \hat{y}_k (1 - \hat{y}_k)
  • kjk \neq j:
y^kzj=ezkezjS2=y^ky^j\frac{\partial \hat{y}_k}{\partial z_j} = - \frac{e^{z_k} e^{z_j}}{S^2} = - \hat{y}_k \hat{y}_j

Step 3: 체인 룰 적용

Lzj=k=1CLy^ky^kzj\frac{\partial L}{\partial z_j} = \sum_{k=1}^C \frac{\partial L}{\partial \hat{y}_k} \cdot \frac{\partial \hat{y}_k}{\partial z_j}

이를 풀면,

Lzj=k=1C(yky^k)y^kzj=(yjy^jy^j(1y^j)+kjyky^ky^ky^j)=(yj(1y^j)+y^jkjyk)\begin{aligned} \frac{\partial L}{\partial z_j} &= \sum_{k=1}^C \left(-\frac{y_k}{\hat{y}_k}\right) \cdot \frac{\partial \hat{y}_k}{\partial z_j} \\ &= - \left( \frac{y_j}{\hat{y}_j} \hat{y}_j (1 - \hat{y}_j) + \sum_{k \neq j} \frac{y_k}{\hat{y}_k} \hat{y}_k \hat{y}_j \right) \\ &= - \left( y_j (1 - \hat{y}_j) + \hat{y}_j \sum_{k \neq j} y_k \right) \end{aligned}

Step 4: one-hot 벡터 특성 활용

one-hot 벡터에서는 “전체 합 = 1”이므로, 특정 클래스 하나를 제외한 나머지 합은 항상 1에서 그 클래스 값을 뺀 것과 같다.

kjyk=1yj\sum_{k \neq j} y_k = 1 - y_j

따라서,

Lzj=(yj(1y^j)+y^j(1yj))=y^jyj\frac{\partial L}{\partial z_j} = - \left( y_j (1 - \hat{y}_j) + \hat{y}_j (1 - y_j) \right) = \hat{y}_j - y_j

결론

Lzj=y^jyj\boxed{ \frac{\partial L}{\partial z_j} = \hat{y}_j - y_j }
  • 즉, gradient는 예측 확률과 정답의 차이
  • 매우 간단하고 계산이 효율적임

출처 및 참고 자료

  • Andrew Ng, Improving Deep Neural Network, DeepLearningAI
  • 혁펜하임, Easy! 딥러닝

0개의 댓글