borch

핵심 기법 · 2

Dropout: 노이즈로 학습하기

Dropout — Srivastava et al., 2014 — 은 학습 중 활성값을 무작위로 0 으로 만들어, 망이 어느 한 유닛에 기대지 못하게 한다. 값싸고 강한 정규화다. 평가 때는 꺼져서 항등이 되는데 — 그 전환을 잊는 것이 가장 흔한 초심자 버그다. 아래 모든 것은 이 페이지에서, 양 언어로 돈다.

활성값을 무작위로 0 으로

Dropout(0.5) 층은 학습 중 각 값을 확률 1 - p 로 남기고 나머지를 0 으로 만든 뒤, 남은 것을 1 / (1 - p) 로 키운다 — 평균 크기가 바뀌지 않도록 (inverted dropout).

매번 다르다 — eval() 전까지

마스크가 무작위라, 학습 모드의 두 forward 는 서로 다르다. eval() 을 부르면 층은 항등이 된다: 같은 입력이 매번 같은 출력을 낸다. train() 은 다시 켠다.

직접: eval 모드에서 측정하기

이 블록은 같은 입력을 두 번 재고 두 run 사이의 gap 을 보고한다. 측정은 반복 가능해야 하니 gap 은 0 이어야 하는데 — 층이 아직 drop 하고 있다. eval() 로 바꿔 두 run 이 일치하게 하라.

Dropout, 그려보기

1 로 채운 격자를 학습 모드의 dropout 층에 통과시키면 — 절반쯤은 어두워지고(0) 나머지는 밝아진다(스케일업). 다시 돌리면 다른 마스크 — 그 무작위성이 정규화다.

기억할 것

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