지금까지 배운 Logistic Regression은 0과 1, 두 가지 중 하나를 분류했습니다.
이번엔 세 가지 이상의 클래스를 분류할 수 있는 Softmax Classifier를 알아보겠습니다.
Softmax 함수란?
예측된 값들을 0과 1 사이의 값으로 변환하고, 그 합이 1이 되도록 만들어 확률로 해석할 수 있게 하는 함수입니다.
아래 예시를 보면:
입력값 Softmax 적용 argmax One-Hot Encoding
2.0 → 0.7 → 1 [1]
1.0 0.2 [0]
0.1 0.1 [0]
합계 = 1.0
- 입력값들을 확률로 변환 → 모두 더하면 반드시 1.0
- 가장 높은 확률(0.7)을 가진 클래스가 최종 예측
One-Hot Encoding
가장 높은 확률을 가진 클래스를 1로, 나머지는 0으로 만들어 최종 예측을 표현하는 방식입니다.
예측 확률 : [0.7, 0.2, 0.1]
One-Hot : [1, 0, 0 ] ← 가장 높은 확률 위치만 1
Cost Function : Cross-Entropy
Softmax Classifier에서는 Cross-Entropy Cost Function 을 사용합니다.
cost = -∑ L * log(S) = -∑ L * log(y)
- L : 실제 정답 (One-Hot 벡터)
- S : Softmax를 통과한 예측값
왜 log를 사용할까?
1 | │
| \
| \
0 | \
--------\-------->
0 1
- y = 1 에 가까울수록 → cost → 0 (잘 예측했으니 패널티 없음)
- y = 0 에 가까울수록 → cost → ∞ (틀렸으니 패널티 매우 큼)
직접 계산으로 이해하기
실제 정답이 B 클래스라면:
L (실제 정답) = [0] A
[1] B ← 정답
① 예측이 맞았을 때 (예측도 B)
예측 Y = [0]
[1] ← 맞음 ✅
[0] [0] [0] [∞] [0]
[1] ο -log [1] = [1] ο [0] = [0] → 합계 = 0
cost = 0 → 잘 예측했으니 패널티 없음!
② 예측이 틀렸을 때 (예측이 A)
예측 Y = [1] ← 틀림 ❌
[0]
[0] [1] [0] [0] [0]
[1] ο -log [0] = [1] ο [∞] = [∞] → 합계 = ∞
cost = ∞ → 틀렸으니 엄청난 패널티!
ο 는 Element-wise 곱 (같은 위치의 값끼리 곱하는 것)입니다.
궁극적인 목표
예측이 맞을 경우에는 cost가 작은 값이,
틀릴 경우에는 cost가 엄청 크게 되어서 벌을 주도록 하는 것!
최종 Cost 수식
L = 1/n * ∑ D(S(WX + b), L)
- WX + b : Linear 연산
- S(...) : Softmax 함수 적용
- D(...) : Cross-Entropy 거리 계산
- 1/n * ∑ : 전체 데이터 평균
전체 흐름 정리
입력 X
↓
WX + b → Linear 연산
↓
Softmax 함수 → 각 클래스의 확률로 변환 (합 = 1)
↓
Cross-Entropy Cost → 예측이 맞으면 0, 틀리면 ∞
↓
Gradient Descent → cost 최소화
↓
argmax → One-Hot → 최종 클래스 분류
Logistic vs Softmax 비교
Logistic Regression Softmax Classifier
| 분류 수 | 2개 (0 또는 1) | 3개 이상 |
| 출력 함수 | Sigmoid | Softmax |
| Cost 함수 | Binary Cross-Entropy | Cross-Entropy |
| 출력 | 0.0 ~ 1.0 | 각 클래스의 확률 (합 = 1) |
정리
개념 설명
| Softmax | 예측값을 확률로 변환, 합이 항상 1 |
| One-Hot Encoding | 가장 높은 확률 클래스를 1, 나머지를 0으로 표현 |
| Cross-Entropy | 예측이 맞으면 cost = 0, 틀리면 cost = ∞ |
| Element-wise 곱 (ο) | 같은 위치의 값끼리 곱하는 연산 |
다음 포스트에서는 Softmax Classifier를 실제 TensorFlow 코드로 구현해보겠습니다! 🚀
'AI > ML' 카테고리의 다른 글
| Softmax Classifier : 실제 데이터로 동물 분류하기 (TensorFlow) (0) | 2026.03.11 |
|---|---|
| Softmax Classifier 코드로 구현해보기 (TensorFlow) (0) | 2026.03.11 |
| Logistic Regression 코드로 구현해보기 (TensorFlow) (0) | 2026.03.09 |
| AI 공부를 위한 파이썬 개발 환경 구축하기 (Windows) (0) | 2026.03.08 |
| Logistic Regression : 0과 1로 분류하기 (0) | 2026.03.08 |