Softmax — AI는 어떻게 선택하는가?
Softmax 함수는 임의의 숫자(logits)를 0~1 사이의 확률 분포(합=1)로 변환한다.
'오늘 날씨가' 다음에 올 단어를 AI가 고른다. '좋다' 35%, '나쁘다' 15%, '덥다' 12%... 이 확률은 어디서 올까? 모델이 출력하는 raw 점수(logits)를 확률로 바꾸는 것이 Softmax — LLM의 핵심 함수이다.
LLM의 본질은 '다음 토큰의 확률 분포를 계산하는 것'입니다
| 용어 | 설명 |
|---|---|
| 소프트맥스 | 실수 벡터를 확률 분포(합=1)로 변환하는 함수 |
| 로짓 | 소프트맥스 적용 전 모델의 원시 출력값 |
'오늘 날씨가' → {'좋다': 35%, '나쁘다': 15%, '덥다': 12%, ...}
확률을 계산하고 샘플링하는 것이 텍스트 생성의 전부
Softmax, Logits, 확률 분포(Probability Distribution)
| 확률/통계가 쓰이는 곳 | 설명 |
|---|---|
| 학습 시 | 손실 함수(Cross-Entropy), 드롭아웃 |
| 추론 시 | Softmax, Temperature, Top-k/Top-p |
| 평가 시 | Perplexity, BLEU, ROUGE |
임의의 숫자를 확률 분포로 바꾸는 마법의 함수
softmax(xᵢ) = eˣⁱ / Σⱼ eˣʲ 각 값에 자연지수(e)를 씌운 뒤, 전체 합으로 나누어 모든 출력이 0~1 사이가 되고 합이 1이 되도록 합니다.
Softmax의 핵심 성질: 1. 모든 출력값이 0~1 사이 2. 모든 출력값의 합이 1 (확률 분포) 3. 가장 큰 입력값이 가장 높은 확률을 받음 4. 수치 안정성을 위해 max(x)를 빼줌
직접 Softmax를 구현해봅시다
np.exp(logits - np.max(logits))으로 수치 안정성을 확보하고, 전체 합으로 나누어 확률 분포를 만든다.
logits 값을 바꿔가며 Softmax 출력이 어떻게 변하는지 직접 확인합니다
logits 값이 균등하면 확률도 균등, 하나가 압도적이면 해당 토큰의 확률이 거의 1에 수렴한다.
| Softmax 핵심 성질 | 설명 |
|---|---|
| 공식 | softmax(xᵢ) = eˣⁱ / Σeˣʲ — 자연지수 후 전체 합으로 나눔 |
| 출력 범위 | 모든 값이 0~1 사이, 합이 반드시 1 (확률 분포) |
| 수치 안정성 | 오버플로 방지를 위해 max(x)를 먼저 빼줌 (결과 동일) |
| LLM에서의 역할 | 설명 |
|---|---|
| 로짓(Logits) | Softmax 적용 전 모델의 원시 출력값 (임의의 실수) |
| 확률 분포 | 로짓 → Softmax → 다음 토큰 확률 (합=1) |
| 텍스트 생성 | 확률 분포에서 샘플링하여 다음 토큰을 선택 |
LLM의 본질은 '다음 토큰의 확률 분포를 계산하는 것' — Softmax가 그 마지막 관문입니다!
Softmax 함수의 출력값을 모두 더하면 얼마인가요?
Softmax에서 입력값(logits)이 가장 큰 항목이 항상 가장 높은 확률을 받는다.
Softmax 함수에서 수치 안정성을 위해 입력값에 어떤 처리를 하나요?
Softmax에서 e.sum()은 무엇을 계산하나요?
Softmax의 출력값 중 하나가 음수가 될 수 있다.