실습 · 연습문제 1개
BatchNorm의 train/eval 동작 구현하기 batchnorm-train-eval
BatchNorm은 train 모드와 eval 모드에서 다른 통계를 쓴다. 함수 batchnorm_forward를 완성한다.
y, new_mean, new_var = batchnorm_forward(x, gamma, beta, running_mean, running_var,
training, momentum=0.1, eps=1e-5)
| 인자 | shape | 의미 |
|---|---|---|
x |
(B, D) |
입력 batch |
gamma, beta |
(D,) |
학습되는 scale과 shift |
running_mean, running_var |
(D,) |
지금까지 누적한 이동 평균 통계(buffer) |
training |
bool | train 모드 여부 |
train 모드 (training=True)
- 특성(열)마다 batch 평균 와 편향 분산 을 구한다.
- , 로 정규화한다.
- 이동 평균을 갱신한다. 평균은 로, 분산은 불편 분산 으로 갱신한다(PyTorch의
BatchNorm1d와 같은 규칙).
B == 1이면 분산을 추정할 수 없으므로ValueError를 낸다.
eval 모드 (training=False)
- batch 통계 대신
running_mean,running_var로 정규화하고, 통계는 갱신하지 않는다(받은 값을 그대로 반환한다). - 표본이 하나여도 동작해야 한다.
입력 배열을 제자리에서 바꾸지 않는다. 테스트는 수식, 이동 평균 갱신 규칙, eval 출력이 batch 구성과 무관한지, 입력을 바꾸지 않는지 확인한다.