386회는 테스트를 보고 찾은 숫자다 — 그래서 실제로는 조기 종료를 쓴다
5절에서 은닉 3개의 테스트 손실이 386회에서 바닥을 친다는 것을 찾고, “여기서 멈췄어야 했다”고 했습니다. 그런데 그 자리를 테스트 데이터를 보며 찾았다는 점을 짚어 둬야 합니다. 테스트 점수를 보고 멈출 곳을 고르는 것은 11차시의 ‘테스트를 보고 고른 k’와 같은 일이에요. 테스트가 설정을 고르는 데 한 번 쓰이면, 그 점수는 더 이상 처음 보는 문제에 대한 점수가 아닙니다.
그래서 실제로는 훈련 데이터에서 검증 몫을 따로 떼어 두고, 한 바퀴 돌 때마다 검증 손실을 잽니다. 검증 손실이 가장 낮았던 때의 가중치를 저장해 두고, 정해 둔 횟수(인내, patience)만큼 더 돌아도 나아지지 않으면 학습을 멈추고 저장본으로 되돌립니다. 이것을 조기 종료(early stopping)라고 하며, 케라스(Keras) 같은 딥러닝 도구에는 기본 기능으로 들어 있습니다.
조기 종료는 과적합을 막는 가장 값싼 방법입니다. 모델도, 데이터도 바꾸지 않고 언제 그만둘지만 정하니까요. 다만 손실 곡선은 대개 매끄럽지 않아서, 인내를 너무 짧게 잡으면 잠깐 올랐다 다시 내려가는 흔들림에 속아 일찍 멈춥니다. 인내의 길이 역시 검증 데이터로 정할 설정값입니다.