| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- TOEFL
- Cloud
- toefl writing
- 클라우드
- AWS
- 개발자
- 자동매매
- 실시간시스템
- 파이썬
- AUTOSAR
- it
- 임베디드
- 확률
- probability
- python
- 퀀트
- backtrader
- 자동차sw
- 아마존 웹 서비스
- 프로그래밍
- realtimesystem
- 토플
- 백트레이더
- 암호화폐
- 토플 라이팅
- 오토사
- can
- 비트코인
- GeorgiaTech
- 블록체인
- Today
- Total
Leo's Garage
Softmax 함수에 대하여 본문
Softmax가 뭘 하는 함수인가?
Softmax는 여러 개의 "점수(score, logit)"을 받아서, 이를 확률처럼 해석 가능한 값들의 묶음으로 바꿔주는 함수이다.
- 입력: 클래스별 점수 (예: 고양이 2.0, 개 1.0, 토끼 0.1)
- 출력: 각 클래스에 대한 값 (0 ~ 1), 전체 합이 1
즉, 결과는 "확률 분포 형태"가 되어, 한 샘플이 여러 클래스 중 '하나'일 때 "모델이 각 후보에 얼마나 무게를 두는지"를 직관적으로 볼 수 있다.
"확률로 만든다"의 의미
여기서 "확률"은 현실 세계의 진짜 확률을 보장한다는 뜻이 아니라
여러 후보의 유력함을 0 ~ 1 사이의 '몫(지분)'으로 바꾸고, 그 몫들의 합이 1이 되게 만든 것
그래서 마치 확률처럼 읽을 수 있음
비유 1: 케이크 지분
- 점수는 그냥 "선호/유력함"의 크기일 뿐이라 단위가 애매하다.
- Softmax는 그걸 "지분(share)"로 바꾼다. 즉, 전체 중에서 각 후보가 차지하는 몫
비유 2: 하나를 뽑는 상황에 맞는 표현
"고양이/ 개/ 토끼 중 딱 하나"라면
- 고양이 0.7, 개 0.2, 토끼 0.1이라면 고양이가 가장 유력하다는게 바로 읽힌다.
Softmax 출력이 항상 실제 정답확률과 동일하지는 않는다. (모델이 과신/ 과소신 할 수 있으므로)
그래서 실무에서는 "확률처럼 쓰되, 필요하면 Calibration"을 하기도 한다.
Softmax는 정규화(Normalization) 인가?
어느정도는 "정규화"라고 봐도 되긴 한데 정확히는 확률 분포로 정규화 (Probability Normalization)
왜냐면 출력이
- 각 값이 0 ~ 1
- 합이 1
을 만족하기 때문이다.
단순 정규화(합으로 나누기)와의 차이는
단순히 $ \frac{s_i}{\sum{s}} $ 같은 방식은
- 점수에 음수가 있으면 곤란
- 점수 차이를 확산도로 자연스럽게 반영하기 어렵다
Softmax는 지수(exp)를 통해
- 모든 값을 양수로 만들고
- 큰 점수의 우위를 더 강하게 반영한 뒤
- 합이 1이 되게 나눔
그래서 "그냥 스케일 맞춤"이 아니라 "확률 분포 형태로 만드는" 특수한 정규화이다
이름의 유래: 왜 Soft + Max인가?
- max: 최댓값을 고르는 연산
- soft: 하지만 Softmax는 hard하게 하나만 고르지 않고 최댓값 쪽으로 몰아주되 나머지도 0이 아닌 값으로 남김
즉,
- argmax/ one-hot 같은 hard max 선태의
- soft 버전
점수 차이가 커지면 커질수록 출력은 점점 "hard max"처럼 된다
수식과 수식 해석
기본 수식
입력이 점수 벡터 $z = [z_1, ..., z_K]$ 일때:
$$softmax(x)_i=\frac{e^{z_i}}{\sum_{j=1}^{K}{e^{z_{j}}}}$$
의미
1. $e^{z_i}$
- 점수를 항상 양수인 가중치로 변환
- 큰 점수는 더 크게 (차이를 강조)
2. $\sum_{j}{e^{z_j}}$
- 전체 가중치의 총합 (전체 가능성 총랴)
3. $\frac{e^{z_i}}{\sum_j{e^{z_j}}}$
- 전체 중에서 i가 차지하는 비중(지분)
- 그래서 합이 1이 됨
왜 지수의 밑이 꼭 $e$여야 하나?
핵심은 "밑이 e인지"가 아니라 지수 형태를 쓰는 것이다.
1. 밑을 바꿔도 본질은 같다
밑을 $a$로 쓰면:
$$\frac{a^{z_i}}{\sum_j{a^{z_j}}}=\frac{e^{(lna)z_i}}{\sum_j{e^{(lna)z_j}}}$$
즉, 밑을 바꾸는 건 점수 스케일을 바꾸는 것과 동치이고, 이는 온도 조절과 사실 상 같은 효과이다.
2. 그럼 왜 관습적으로 $e$인가?
- 미분이 너무 깔끔함: $\frac{d}{dx}e^x=e^x$
- 학습(경사하강 등)에서 수식 전개/구현이 편해 표준이 됨
3. "왜 하필 지수 형태냐"가 더 중요한 이유
- 확률 모델/통계 물리(MaxEnt, Bolzmann 형태)에서 정규화된 지수 분포는 매우 자연스럽게 등장
- "점수 -> 확률분포"로 갈 때 여러 성질(양수, 비율 강조, 정규화)을 동시에 만족
수치적으로 안전한 구현
지수를 바로 쓰면 overflow가 날 수 있어서 보통 다음을 쓴다.
$$ m = max_j{z_j}, softmax(z)_i=\frac{e^{z_i-m}}{\sum_j{e^{z_j-m}}} $$
- 모든 점수에서 같은 $m$을 빼도 결과는 동일 (분자/분모 공통 상쇄)
- 대신 지수 입력이 작아져서 안전
Sigmoid의 일반화가 Softmax인가?
다중 클래스 관점에서는 "그렇다"라고 볼 수 있다
2 Class에서 Softmax = Sigmoid와 동치
Class가 2개(0,1)일 때:
$$ P(y=1)=\frac{e^{z_1}}{e^{z_0}+e^{z_1}}=\frac{1}{1+e^{-(z_1-z_0)}}=\sigma(z_1-z_0)$$
즉 2 Class Softmax는 Sigmoid로 표현 가능
'Study > AI ML' 카테고리의 다른 글
| GloVe vs CBOW: 내적(dot product)와 PMI로 이해하는 word embedding (0) | 2026.02.18 |
|---|
