
v1 log-softmax 의 forward 는 . 이제 역전파 공식:
upstream gradient 가 주어지면:
axis 로 지정된 축을 기준으로 softmax 를 구한 뒤:
s = softmax(x, axis=axis) # (..., K)
grad_in = g - s * g.sum(axis=axis, keepdims=True)
g = -e_y (one-hot) 를 대입하면 (softmax-CE gradient) 로 정확히 환원됨.임의의 g 에 대해 . 로짓 전체를 상수만큼 올려도 log-softmax 가 shift-invariant 라는 사실의 쌍대.
함수 log_softmax_backward(x, grad_output, axis=-1) 를 완성하세요.
x, grad_output: 같은 shape.grad_input, 같은 shape.| # | 이름 | 검증 |
|---|---|---|
| 1 | shape 일치 | |
| 2 | 1D 수치 Jacobian 일치 | 유한차분 |
| 3 | 2D (batch) 수치 일치 | |
| 4 | NLL 패턴: g=-e_y → dx=s-e_y | softmax-CE grad |
| 5 | axis 합 = 0 (보존) | |
| 6 | 큰 로짓 안정성 | finite |
| 7 | shift 불변 dx(x+c) = dx(x) |
A(m×n) @ B(n×p) — 안쪽 차원이 같아야 함.코드를 작성하고 실행하면 5개의 테스트가 각각 표시됩니다.