과적합 — 왜 데이터를 학습 · 검증 · 테스트로 나누나
Article
2강에서 트랩 하나를 걸어뒀다. "손잡이를 돌려 예시를 맞힌다면, 예시를 통째로 외워버리면 되는 것 아닌가?" 그리고 답도 짧게 던졌다 — 외운 건 배운 게 아니다. 처음 보는 데이터에도 통해야 진짜 학습이라고.
이번 강은 그 문장을 정면으로 판다. 외워버리는 현상에는 이름이 있다. **과적합(overfitting)**이다. 그리고 이걸 막기 위해 데이터를 왜 셋으로 쪼개는지까지 본다.
배운 것과 외운 것은 성적표가 다르다
과적합을 눈으로 보는 가장 쉬운 방법은, 본 문제 성적과 처음 보는 문제 성적을 나란히 놓는 것이다.
본 문제에서는 98점인데 처음 보는 문제에서는 55점. 이게 바로 답안지를 외운 학생의 성적표다. 손잡이가 정답을 "이해"한 게 아니라, 학습 데이터의 사소한 특징까지, 심지어 노이즈까지 통째로 외워버린 상태다.
과소적합
너무 대충 배웠다
- 학습 데이터에서도 성적이 낮다
- 패턴을 제대로 못 잡았다
- 손잡이가 아직 정답 근처에도 못 갔다
적당히 배웠다
노리는 상태
- 학습 데이터와 새 데이터 성적이 비슷하다
- 공통된 패턴을 잡았다
- 처음 보는 데이터에도 감이 통한다
과적합
너무 세세히 외웠다
- 학습 데이터 성적만 비정상적으로 높다
- 노이즈까지 규칙으로 착각했다
- 새 데이터 앞에서 무너진다
왜 세 조각으로 나누나
문제는 여기서 생긴다. 학습에 쓴 데이터로 성적을 매기면, 외운 건지 배운 건지 구분이 안 된다. 답안지를 외운 학생도 그 답안지로 시험 보면 100점을 받으니까. 그래서 데이터를 애초에 세 조각으로 나눠둔다.
- 01
학습 데이터 (train)
손잡이를 실제로 돌리는 데 쓴다. 2강의 그 예측-채점-조정 고리를 여기서 돌린다.
- 02
검증 데이터 (validation)
학습 도중 중간 점검용. 아직 안 보여준 데이터로 "지금 잘 배우고 있나"를 확인하며 설정을 조정한다.
- 03
테스트 데이터 (test)
모든 조정이 끝난 뒤, 맨 마지막에 딱 한 번만 연다. 진짜 성적표다.
세 조각의 역할이 겹치지 않는 게 핵심이다. 학습 데이터는 손잡이를 돌리는 재료, 검증 데이터는 "이 정도면 됐나"를 판단하는 잣대, 테스트 데이터는 아무도 손대지 않고 아껴뒀다가 진짜 실력을 재는 최종 시험이다.
정리하면
과적합은 학습 데이터를 답으로 외워버려 새 데이터에 못 통하는 상태다. 데이터를 학습·검증·테스트로 나눠 막는다.
- 01
과적합은 외운 상태다
학습 데이터 성적은 높은데 새 데이터 성적이 낮으면 과적합을 의심한다.
- 02
과소적합 · 적당함 · 과적합, 셋 사이의 균형이 목표다
너무 못 배워도, 너무 세세히 외워도 실전에선 못 쓴다.
- 03
학습 데이터로는 외운 건지 배운 건지 알 수 없다
그래서 처음부터 데이터를 세 조각으로 나눠둔다.
- 04
테스트 데이터는 맨 마지막에 딱 한 번
자주 열어보면 검증 데이터처럼 오염돼, 진짜 성적표 역할을 못 한다.
Part 2가 끝났다. 정답을 보여주며 가르치는 지도학습(5강), 정답 없이 무리를 짓는 비지도학습(6강), 모델이 실제로 먹는 재료인 특징과 라벨(7강), 그리고 배운 척 외워버리는 걸 막는 과적합과 데이터 분리(8강)까지 봤다.
다음 강의부터는 지도의 셋째 땅으로 들어간다. 2강에서 "손잡이가 수백만 개인 기계"라 불렀던 딥러닝, 그 손잡이들이 실제로 어떻게 생겼는지 — 신경망을 뉴런과 층과 가중치라는 비유로 그림으로 뜯어본다.