어떻게 외우기와 진짜 이해, 과적합
시험 전날 문제집의 답을 통째로 외운 친구가 있다고 하자. 똑같은 문제가 나오면 다 맞힌다. 그런데 숫자만 살짝 바꾼 문제가 나오면 와르르 무너진다. 답을 외웠을 뿐 원리를 이해하지 못했기 때문이다. 기계 학습에도 똑같은 함정이 있다. 모델이 훈련 데이터를 통째로 외우면 본 문제는 100점인데 처음 보는 문제는 틀려요. 이것을 과적합이라고 한다.
통째로 외우면 훈련 점수는 만점
점들이 흩어져 있다. 모델이 할 일은 이 점들 밑에 깔린 흐름을 나타내는 매끈한 곡선을 찾는 것이다. 그런데 욕심을 부리면 점 하나하나를 빠짐없이 지나도록 곡선을 구불구불 휘게 만들 수도 있어요.
그러면 훈련 점은 전부 곡선 위에 놓이고, 훈련 점수는 그야말로 100점이 된다. 완벽해 보이지만 사실은 점의 자리를 외운 것이다.
버튼을 눌러 점들을 통째로 외우는 구불구불한 곡선을 켜 보자. 모든 점을 지나니 훈련 정확도가 100퍼센트가 돼요.
곡선이 모든 점을 정확히 지났고, 훈련 점수가 100점이 됐다. 기분은 좋지만 여기서 멈추면 안 된다. 실제 데이터에는 측정할 때 섞여 든 우연한 흔들림, 곧 잡음이 들어 있기 마련이에요.
점을 모두 지나는 곡선은 진짜 흐름뿐 아니라 이 잡음까지 그대로 따라간 것이다. 외운 것이 왜 문제인지는 새 점을 넣어 보면 바로 드러난다.
새 데이터가 오면 와르르
외운 곡선의 진짜 시험은 한 번도 본 적 없는 새 점이다. 새 점도 훈련 점들과 같은 흐름에서 나왔으니, 흐름을 잘 잡은 곡선이라면 새 점 근처도 그럭저럭 맞혀야 한다.
그런데 외운 곡선은 훈련 점 사이에서 마구 출렁여서, 새 점 근처에서는 엉뚱한 높이를 가리켜요. 본 문제는 100점인데 새 문제에서는 크게 빗나가는 것이다.
빈 동그라미를 눌러 새 점을 넣어 보자. 외운 곡선은 그 자리에서 크게 빗나가, 처음 보는 데이터에 약하다는 것이 드러나요.
새 점에서 곡선이 한참 빗나갔다. 훈련 점에서는 그렇게 완벽하더니 처음 보는 점 앞에서는 맥을 못 춘다. 이것이 과적합의 정체다.
답만 외운 친구가 숫자 바뀐 문제에 무너지는 것과 같아요. 그래서 우리가 정말 알고 싶은 것은 훈련 점수가 아니라 처음 보는 데이터에서의 점수다. 처음 보는 데이터에서도 잘 맞히는 힘을 일반화라고 부른다.
훈련, 검증, 테스트로 나눠요
처음 보는 데이터로 실력을 재려면 데이터 일부를 미리 떼어 숨겨 둬야 한다. 그래서 가진 데이터를 셋으로 나눈다. 대부분은 훈련 데이터로 써서 모델을 배우게 하고, 일부는 검증 데이터로 남겨 배우는 도중에 잘 가고 있는지 점검해요.
나머지 테스트 데이터는 끝까지 손대지 않고 맨 마지막에 한 번만 본다. 그래야 진짜 새 문제를 흉내 낸 채점이 된다.
점을 눌러 훈련, 검증, 테스트 통에 나눠 담아 보자. 세 통이 모두 차면 처음 보는 테스트 데이터로 평가할 준비가 끝나요.
데이터를 세 무리로 나눴다. 핵심은 테스트 데이터를 학습하는 동안 절대 보여 주지 않는 것이다. 시험 문제를 미리 풀어 보면 그것은 더 이상 시험이 아니기 때문이다.
검증 데이터는 학습을 언제 멈출지 정할 때도 쓴다. 훈련 손실은 계속 줄어드는데 검증 손실이 다시 오르기 시작하면 그때부터 외우기가 시작된 것이니 학습을 멈춘다. 이것을 조기 종료라고 해요.
너무 단순하지도 복잡하지도 않게
이제 모델 셋을 견줘 보자. 너무 단순한 모델은 곧은 직선 하나로 끝내려 해서 점들이 그리는 곡선을 따라가지 못한다. 이것은 과소적합, 덜 배운 상태다.
너무 복잡한 모델은 점을 다 외워서 새 데이터에 약하다. 그 사이의 알맞은 모델은 점 하나하나가 아니라 전체에 흐르는 패턴을 부드럽게 잡아요.
모델 셋을 차례로 눌러 비교해 보자. 너무 단순한 모델은 덜 맞고, 너무 복잡한 모델은 외워서 출렁이며, 알맞은 모델만 새 데이터에서도 잘해요.
세 모델의 차이가 한눈에 보였다. 너무 단순하면 패턴을 놓치고, 너무 복잡하면 외워서 흔들린다. 알맞은 모델만이 훈련 데이터에서도 처음 보는 데이터에서도 고르게 잘했어요.
좋은 학습은 훈련 점수를 100점으로 끌어올리는 것이 아니라, 처음 보는 데이터에서 안정적으로 잘하는 것이다. 과적합을 막으려면 데이터를 더 모으거나, 가중치가 지나치게 커지지 않도록 벌점을 주는 방법도 쓴다.
정리
정리하면 이렇다. 점을 다 외운 구불구불한 곡선은 훈련 점수만 100점이고 새 점에는 약하다. 이것이 과적합이다. 진짜 이해는 전체에 흐르는 패턴을 잡는 것이에요.
그래서 데이터를 훈련, 검증, 테스트로 나눠 처음 보는 데이터로 실력을 잰다. 너무 단순하지도 너무 복잡하지도 않은 알맞은 모델이 가장 잘 일반화한다.
핵심을 차례로 눌러 되짚어 보자. (통째로 외우면 훈련만 100점 → 새 데이터에는 약함 → 훈련 · 검증 · 테스트로 나눔 → 처음 보는 데이터로 진짜 실력을 잼)
이제 외우기와 진짜 이해의 차이를 알았다. 훈련 점수가 높다고 좋은 모델은 아니고, 처음 보는 데이터 앞에서도 흔들리지 않는 것이 중요해요.
그런데 패턴을 잘 잡으려면 무엇보다 모델에 넣는 데이터가 좋아야 한다. 어떤 데이터를 모으고, 그 안에서 어떤 특징을 골라 넣느냐가 결과를 크게 바꾼다. 이 이야기를 다음 레슨 데이터와 특징에서 다룬다.