이런 간단한 알고리즘이 과대적합을 해결하는 가장 효과적인 방법 중 하나라는 점이 이상하게 보일 수 있습니다. 왜 이 방식이 효과가 있을까요? 드롭아웃 알고리즘을 발명한 제프리 힌튼(Geoffrey Hinton)은 행원의 부정 행위를 방지하기 위해 은행이 사용하는 메커니즘에서 영감을 얻었다고 합니다(드롭아웃은 그가 신경망에 대해 발명한 여러 가지 중 하나입니다). 그의 말을 직접 들어 보죠.
은행에 갔을 때 행원이 계속 바뀌어서 왜 그런지를 물었습니다. 자신들도 이유는 모르지만 이동이 잦다고 말했습니다. 나는 은행에서 부정 행위를 하려면 직원들 사이에 협조가 필요하기 때문이라고 판단했습니다. 이를 통해 샘플마다 뉴런의 일부를 랜덤하게 제거하면 뉴런의 부정한 행위를 방지하고 결국 과대적합을 감소시킨다는 것을 깨달았습니다.
이를 딥러닝 언어로 바꾸어 말하면, 층의 출력 값에 잡음을 추가하면 데이터에 있는 진짜 패턴 관점에서 중요하지 않은 우연한 패턴(힌튼이 이야기한 부정한 행위)이 중단됩니다. 이 장의 끝에 있는 연습 문제 3에서 model.js에 있는 노드 기반 합성곱 신경망에서 두 개의 드롭아웃 층을 제거하고 모델을 다시 훈련해 보세요. 그다음에는 이로 인해 훈련, 검증, 평가 정확도가 어떻게 바뀌는지 확인해 보세요.
코드 4-6은 고성능 합성곱 신경망을 훈련하고 평가하기 위해 사용한 핵심 코드를 보여 줍니다. 코드 4-2와 비교해 보면 두 코드가 비슷하다는 것을 알 수 있습니다. 둘 다 Model.fit()과 Model.evaluate() 메서드가 중심에 있습니다. 손실 값, 정확도 값, 훈련 과정을 다른 사용자 인터페이스(터미널과 브라우저)에 출력하는 것을 제외하고 문법과 스타일이 동일합니다.