
v1 Softmax CE 손실 은 forward 만. 학습에는 gradient 가 필수. 놀라운 사실: softmax 와 cross-entropy 를 연쇄적으로 미분 하면 극단적으로 간결한 식이 나옴:
즉 grad = (softmax(z) - one_hot(y)) / N — 둘을 따로 미분해서 곱하는 것보다 훨씬 수치적으로 안정적 이고 빠름. PyTorch CrossEntropyLoss.backward(), TF softmax_cross_entropy_with_logits_v2 내부가 바로 이 식.
정답 위치는 , 나머지는 . 정리:
= one-hot of . 배치 평균이면 .
함수 softmax_ce_loss_grad(logits, y_true) 를 완성하세요.
logits shape (N, K), y_true shape (N,) 정수.(loss, grad)
loss: Python float — 평균 CE (nats).grad: shape (N, K) — ∂L/∂z.| # | 이름 | 검증 |
|---|---|---|
| 1 | 반환 (float, (N, K)) | |
| 2 | forward: v1 loss 와 일치 | |
| 3 | grad 합 = 0 (확률 분포 속성) | 각 샘플 행 합 |
| 4 | 정답 위치 grad = (p_y - 1)/N < 0 | |
| 5 | 오답 위치 grad = p_j/N > 0 | |
| 6 | 수치 미분과 일치 | |
| 7 | 완벽 예측 (큰 정답 logit) → grad ≈ 0 |
코드를 작성하고 Run 을 눌러보세요.