
v1 교차 엔트로피 는 확률 분포 두 개 입력. 딥러닝에서는 softmax 출력을 따로 계산해서 clip 하면 두 번의 수치 오차 누적:
Standard idiom: logits 에서 바로 한 번에:
이걸 log-sum-exp trick 으로 안정화:
이러면 exp(음수) 만 써서 overflow 없음. PyTorch nn.CrossEntropyLoss, TF softmax_cross_entropy_with_logits 가 모두 이 방식.
logits shape (N, K): 각 샘플의 raw 스코어 (softmax 이전).labels shape (N,): 정수 클래스 인덱스 ∈ [0, K).(N,) 각 샘플 loss, nats 단위 (자연로그).sklearn, PyTorch 가 per-sample 배열 반환 → reduction ('mean', 'sum') 은 호출부 결정. 배치별 weighting/masking 을 다르게 줄 수 있음.
함수 softmax_ce_with_logits(logits, labels) 를 완성하세요.
(N,) 배열, dtype float, nats 단위.NaN, inf 없이 유한.m = logits.max(axis=1, keepdims=True), lse = m + log(sum(exp(logits - m), axis=1)).| # | 이름 | 검증 |
|---|---|---|
| 1 | 반환 shape (N,) | |
| 2 | 정답에 큰 logit → loss ≈ 0 | |
| 3 | 균등 logit → loss = log(K) | |
| 4 | 큰 logit (z=1000) 에서 finite | 안정성 |
| 5 | naive 구현 (softmax then log) 과 수치적 일치 (저 범위) | |
| 6 | 단조 그래디언트 검증: 오답 logit 증가 → loss 증가 | |
| 7 | PyTorch F.cross_entropy(reduction='none') 와 일치 (있으면) |
코드를 작성하고 Run 을 눌러보세요.