외우기와 진짜 이해, 과적합
시험 전날 문제집의 답을 통째로 외운 친구가 있어요. 똑같은 문제가 나오면 다 맞혀요. 그런데 숫자만 살짝 바뀐 새 문제가 나오면 와르르 무너져요. 외우기만 했지 원리를 이해한 게 아니거든요. 기계 학습에도 똑같은 함정이 있어요. 모델이 훈련 데이터를 통째로 외우면 본 문제는 100점인데 새 문제는 틀려요. 이걸 과적합이라고 해요. 그럼 진짜 실력은 어떻게 잴까요?
통째로 외우면 훈련 점수는 만점
여기 점들이 흩어져 있어요.
모델의 일은 이 점들을 설명하는
매끈한 곡선을 찾는 거예요.
그런데 욕심을 부려서
점 하나하나를 빠짐없이 지나도록
구불구불 곡선을 휘게 할 수도 있어요.
그러면 훈련 점들은 전부 곡선 위에 있죠.
훈련 점수는 그야말로 100점이에요.
완벽해 보이지만, 사실 외운 거예요.
버튼을 눌러 점들을 통째로 외우는 구불구불한 곡선을 켜봐요. 모든 점을 지나서 훈련 정확도는 100퍼센트가 돼요.
곡선이 모든 점을 정확히 지났죠.
훈련 점수가 100점이 됐어요.
기분은 좋지만 여기서 멈추면 안 돼요.
이 곡선은 점들의 위치를
그냥 외워버린 것에 가까워요.
흩어진 점 사이로 흐르는
진짜 패턴을 잡은 게 아니에요.
외운 게 왜 문제인지
새 문제를 던져보면 바로 드러나요.
새 데이터가 오면 와르르
외운 곡선의 진짜 시험은
한 번도 본 적 없는 새 점이에요.
새 점은 훈련 점들과 같은 패턴에서 왔어요.
그러니 매끈한 곡선이라면
새 점도 대충 맞혀야 정상이에요.
그런데 외운 곡선은
훈련 점 사이에서 마구 출렁여서,
새 점 근처에선 엉뚱한 높이를 가리켜요.
본 문제는 100점, 새 문제는 빵점인 거죠.
빈 자리를 눌러 새 점을 넣어봐요. 외운 곡선은 그 자리에서 크게 빗나가, 안 본 데이터에선 약하다는 게 드러나요.
새 점에서 곡선이 한참 빗나갔죠.
훈련 점에선 그렇게 완벽하더니
안 본 점 앞에선 맥을 못 춰요.
이게 과적합의 정체예요.
시험지의 답만 외운 친구가
숫자 바뀐 문제에 무너지는 것과 똑같아요.
그래서 우리가 정말 알고 싶은 건
훈련 점수가 아니라
안 본 데이터에서의 점수예요.
훈련, 검증, 테스트로 나눠요
안 본 데이터로 실력을 재려면
데이터 일부를 미리 숨겨둬야 해요.
그래서 가진 데이터를 셋으로 나눠요.
훈련 데이터로는 모델을 배우게 하고,
검증 데이터로는 배우는 중간에
잘 가고 있나 점검해요.
테스트 데이터는 끝까지 손도 안 대고
맨 마지막에 딱 한 번만 봐요.
이렇게 해야 진짜 새 문제를
흉내 낸 채점이 가능해요.
점을 눌러 훈련, 검증, 테스트로 나눠봐요. 세 칸이 골고루 차면, 안 본 테스트 데이터로 평가할 준비가 끝나요.
데이터를 세 무리로 나눴죠.
핵심은 테스트 데이터를
학습 동안 절대 보여주지 않는 거예요.
시험 문제를 미리 풀어보면
그건 더 이상 시험이 아니니까요.
훈련으로 배우고,
검증으로 중간에 방향을 잡고,
마지막에 테스트로 진짜 점수를 매겨요.
이 점수가 모델의 진짜 실력이에요.
너무 단순도 너무 복잡도 아닌, 딱 맞게
이제 모델을 세 가지로 비교해봐요.
너무 단순한 모델은
곧은 직선 하나로 끝내려 해서
점들이 그리는 곡선을 따라가지 못해요.
이건 과소적합, 아예 덜 배운 거예요.
너무 복잡한 모델은
점을 다 외워서 새 데이터에 약하죠.
그 사이 딱 맞는 모델은
점 하나하나가 아니라
전체에 흐르는 패턴을 부드럽게 잡아요.
세 모델을 차례로 눌러 비교해봐요. 과소는 직선으로 덜 맞고, 과적합은 외워서 출렁이고, 딱 맞는 모델만 새 데이터에서도 잘해요.
세 모델의 차이가 한눈에 보였죠.
너무 단순하면 패턴을 놓치고,
너무 복잡하면 외워서 흔들려요.
딱 맞는 모델만이
훈련에서도 안 본 데이터에서도
고르게 잘했어요.
좋은 학습이란 점수를 100점으로
끌어올리는 게 아니라,
안 본 데이터에서 안정적으로 잘하는 거예요.
정리해볼까요
한 줄로 모으면 이래요.
점을 다 외운 구불구불한 곡선은
훈련 점수만 100점이고 새 점엔 약해요.
이게 과적합이에요.
진짜 이해는 전체에 흐르는 패턴을 잡는 거예요.
그래서 데이터를 훈련, 검증, 테스트로 나눠
안 본 데이터로 실력을 재요.
너무 단순도 너무 복잡도 아닌
딱 맞는 정도가 가장 잘 일반화해요.
핵심을 차례로 눌러 되짚어봐요. (통째로 외우면 훈련만 100점 -> 새 데이터엔 실패 -> 훈련/검증/테스트로 나눔 -> 안 본 데이터로 진짜 실력을 잼)
이제 외우기와 진짜 이해의 차이를 알게 됐어요.
훈련 점수가 높다고 좋은 게 아니에요.
중요한 건 한 번도 본 적 없는
새 데이터 앞에서도 흔들리지 않는 거예요.
그래서 우리는 데이터를 나누고,
안 본 데이터로 정직하게 채점해요.
외우지 말고 패턴을 잡기,
이 한 가지가 똑똑한 기계를 만드는
가장 중요한 마음가짐이에요.