Softmax 함수는 다중 클래스 분류 문제에서 사용되는 활성화 함수로, 입력 값들을 확률 분포로 변환하는 역할을 한다. 이름은 '소프트(Soft)'와 '맥스(Max)'의 합성어로, 가장 큰 값을 선택하는 Max 함수와 달리, Softmax는 모든 입력 값을 정규화하여 부드럽게 확률값으로 변환한다.
Softmax 함수는 입력 값을 지수함수를 이용해 변환한 후, 변환된 값들의 합으로 나누어 정규화하는 방식으로 작동한다. 이 과정에서 출력값은 0과 1 사이의 확률 값이 되며, 모든 출력 값의 합은 1이 된다.
Softmax 함수는 여러 실수 입력값을 합이 1인 확률 분포 형태로 변환하는 함수이다. 다중 클래스 분류 문제의 출력층에서 각 클래스에 대한 상대적인 점수를 확률처럼 해석할 수 있도록 변환할 때 주로 사용한다.
Softmax라는 이름은 가장 큰 값 하나만 선택하는 max 연산과 달리, 모든 입력값의 상대적 크기를 지수함수로 반영하여 부드러운 확률 분포를 만든다는 의미에서 유래한다. 출력값은 각각 0보다 크고 1보다 작으며, 전체 출력값의 합은 1이다.
Softmax 함수는 다음과 같이 정의된다.
\[ \sigma(x_i)=\frac{e^{x_i}}{\sum_j e^{x_j}} \]
여기서 \(x_i\)는 입력 값이며, 각 입력 값을 지수함수로 변환한 후 모든 입력 값의 지수함수 합으로 나눈다.
입력 벡터가 \(\mathbf{x}=(x_1,x_2,\ldots,x_K)\)일 때, i번째 클래스에 대한 Softmax 출력은 다음과 같다.
\[ \sigma(\mathbf{x})_i=\frac{e^{x_i}}{\sum_{j=1}^{K}e^{x_j}},\qquad i=1,2,\ldots,K \]
여기서 \(x_i\)는 i번째 클래스의 입력 점수이며, 흔히 로짓(logit)이라고 한다. 각 로짓을 지수함수로 변환한 뒤 전체 지수값의 합으로 나누므로 모든 출력의 합은 1이 된다.
[계산 예시] 출력 노드 A=3.0, B=2.0, C=1.0이 있을 때(자연상수 \(e\approx2.718\) 사용), 각 노드의 Softmax 값은 다음과 같이 구한다.
\[ e^A=e^{3.0}\approx20.09,\quad e^B=e^{2.0}\approx7.39,\quad e^C=e^{1.0}\approx2.72 \] \[ \sum e^x=20.09+7.39+2.72\approx30.20 \] \[ \begin{aligned} softmax(A)&=\frac{20.09}{30.20}\approx0.665,\\ softmax(B)&=\frac{7.39}{30.20}\approx0.245,\\ softmax(C)&=\frac{2.72}{30.20}\approx0.090 \end{aligned} \]
계산 결과 값이 가장 큰 A의 확률이 가장 높게(약 66.5%) 나오지만, B와 C도 0이 아닌 확률값을 가지는 것을 확인할 수 있다. 이처럼 Softmax는 가장 큰 값만 선택하는 것이 아니라, 모든 입력 값의 상대적인 크기 차이를 확률 분포로 부드럽게(soft) 반영한다는 점이 특징이다.
[참고] 계산 시 오버플로우 방지
지수함수 \(e^x\)는 입력 값이 커지면 매우 빠르게 커지기 때문에, 실제 구현에서는 오버플로우를 방지하기 위해 입력 값들 중 최댓값을 빼준 뒤 계산한다.
\[ softmax(x_i)=\frac{e^{x_i-\max(\mathbf{x})}}{\sum_j e^{x_j-\max(\mathbf{x})}} \]
최댓값을 빼도 분자·분모에 동일한 값이 곱해지는 효과이므로 결과값은 변하지 않으면서 수치적으로 안정적인 계산이 가능하다.
인공신경망의 출력층에 Softmax 함수를 사용하면 분류 문제를 해결할 수 있다.
Sigmoid 함수와 Softmax 함수는 모두 출력 값을 확률처럼 사용할 수 있다. 하지만 용도가 다르다.
Sigmoid와 Softmax는 모두 출력값을 확률처럼 해석할 수 있도록 변환하지만 적용하는 문제와 출력 사이의 관계가 다르다.
| 구분 | Sigmoid | Softmax |
|---|---|---|
| 주요 용도 | 이진 분류 또는 다중 레이블 분류 | 상호 배타적인 다중 클래스 분류 |
| 출력 관계 | 각 출력을 독립적으로 계산 | 모든 출력을 함께 정규화 |
| 출력값의 합 | 반드시 1일 필요가 없음 | 항상 1 |
| 예시 | 한 이미지에 고양이와 개가 함께 있는지 각각 판별 | 한 이미지를 고양이·개·새 중 하나로 분류 |
[참고] 손실 함수와의 관계
다중 클래스 분류 모델은 보통 출력층에서 Softmax로 확률 분포를 구한 뒤, 실제 정답 클래스와의 차이를 교차 엔트로피(Cross-Entropy) 손실 함수로 계산하여 학습한다. 이 둘을 묶어 Softmax-크로스엔트로피 손실이라고 부르기도 하며, 신경망 분류기 학습에서 가장 널리 쓰이는 조합이다.
다중 클래스 분류 모델은 일반적으로 출력층의 Softmax로 확률 분포를 구한 뒤, 실제 정답과의 차이를 교차 엔트로피(Cross-Entropy) 손실로 계산한다.
\[ L=-\sum_{i=1}^{K}y_i\log(p_i) \]
원-핫 정답에서 정답 클래스가 c라면 \(L=-\log(p_c)\)가 된다. 실무 라이브러리의 교차 엔트로피 함수는 수치적 안정성을 위해 로짓에서 Softmax와 로그 계산을 내부적으로 함께 처리하는 경우가 많다.
[예제] Softmax 계산
출력 노드 A=3.0, B=2.0, C=1.0에 Softmax 함수를 적용할 때 노드 B의 변환 근삿값은? (단, \(e=3.0\)으로 가정한다.)
(1) 0.23
(2) 0.33
(3) 0.67
(4) 0.83
[풀이]
Softmax 함수는 각 출력값을 지수함수로 변환한 뒤, 전체 합으로 나누어 확률처럼 해석할 수 있는 값으로 바꾼다.
\(e^A=e^{3.0}\), \(e^B=e^{2.0}\), \(e^C=e^{1.0}\)이고, 문제에서 \(e=3.0\)으로 가정했으므로 \(e^3=27\), \(e^2=9\), \(e^1=3\)이며 이들의 합은 \(27+9+3=39\)이다.
\[ softmax(B)=\frac{e^B}{e^A+e^B+e^C}=\frac{9}{39}\approx0.23 \]
(참고로 값이 가장 큰 A가 가장 높은 확률 \(27/39\approx0.69\)를 가지며, Softmax는 값들 사이의 상대적 크기 차이를 확률 분포로 바꿔 주는 함수이다.)
[답] 1