
Softmax 교차엔트로피 손실
다중 클래스 분류의 표준 손실. softmax-v1(07) + cross-entropy-v1(37) 의 결합이지만, 둘을 따로 계산하면 log(0) 문제가 생겨요. 한 번에 하는 게 안정적입니다.
공식 (nats, 자연로그)
로짓 z∈RK, 정답 레이블 y∈{0,…,K−1} 에 대해:
L(z,y)=−log(∑jezjezy)=−zy+log∑jezj
배치 평균:
L=N1∑i=1N(−zi,yi+log∑jezi,j)
LogSumExp 안정화
log∑jezj 은 큰 값에서 오버플로우. max 빼기 트릭:
log∑jezj=m+log∑jezj−m,m=maxjzj
수학적으로 같지만 지수가 항상 ≤ 0 이라 안전.
과제
함수 softmax-v1_cross_entropy-v1(logits, y_true) 를 완성하세요.
logits shape (N, K), y_true shape (N,) 정수 레이블.
- 반환: Python
float (배치 평균, nats 단위).
- LogSumExp 트릭으로 안정화.
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | 완벽 예측 → 매우 작음 | 정답 클래스 로짓이 다른 것보다 훨씬 크면 0에 수렴 |
| 2 | 균등 로짓 → log(K) | K=3 일 때 log(3) ≈ 1.0986 |
| 3 | 큰 로짓도 유한 | [1000, 1001] 에서 NaN 없음 |
| 4 | sklearn log_loss 일치 | softmax-v1 적용 후 비교 |