borch

핵심 기법 · 3

배치 정규화

배치 정규화 — Ioffe & Szegedy, 2015 — 는 각 feature 를 배치 전체에 걸쳐 평균 0, 분산 1 로 정규화한다. 덕분에 더 깊은 망을 더 큰 학습률로 학습할 수 있다. dropout 처럼 train 과 eval 모드에서 다르게 동작한다: eval 에서는 눈앞의 배치가 아니라 누적된 고정 running 통계를 쓴다 — 그걸 헷갈리는 게 고전적 버그다. 아래 모든 것은 이 페이지에서, 양 언어로 돈다.

배치를 평균 0, 분산 1 로

feature 마다 큰 평균과 퍼짐을 가진 배치를 준다. 학습 모드에서는 각 feature 의 배치 평균을 빼고 배치 표준편차로 나누므로, 출력의 모든 열이 중심화되고 스케일된다.

train 은 배치를, eval 은 running 통계를

학습 모드에서 한 행의 출력은 같은 배치의 다른 행들에 의존한다 — 같은 query 를 다른 배치에 대해 정규화하면 다른 답이 나온다. eval 모드에서는 누적한 running 통계(여기서는 아직 기본값, 평균 0·분산 1)를 쓰므로, 어느 배치에 들어 있는지가 더는 상관없다.

직접: 안정된 답에는 eval() 이 필요하다

이 블록은 같은 query 행을 두 다른 배치에 통과시키고 답이 얼마나 움직이는지 보고한다. 추론에서는 그 값이 0 이어야 한다 — 어떤 배치에 우연히 끼었는지가 예측을 바꾸면 안 된다. 층을 eval() 로 바꿔라.

전과 후, 그려보기

크고 들쭉날쭉한 열 평균을 가진 배치가 들어가(위) 중심화·스케일되어 나온다(아래). 배치 정규화가 열을 고르게 만들어 다음 층이 얌전한 분포를 보게 한다.

기억할 것

위 블록이 에러를 내면, 그것도 알아둘 값이다. 이 페이지의 모든 예제는 테스트가 도는 그 라이브러리를 상대로 돈다 — 스크린샷이 아니다. 되돌리려면 Reset 을 누른다.