AI기초 교과서의 과적합·일반화 단원은 모델이 복잡해질수록 시험(테스트) 오차가 커진다고 가르친다. 이 페이지는 그 명제가 깨지는 두 현상 — 더블 디센트(모델 크기 축)와 그로킹(학습 시간 축) — 을 외부 데이터 없이 브라우저 안에서 실제 수치 시뮬레이션으로 재현한다. 그래프의 모든 점은 지금 이 기기에서 계산된 값이다.
교과서의 설명은 이렇다. 모델이 단순하면 훈련 데이터의 규칙조차 담지 못해 오차가 크고(과소적합, 편향↑), 모델이 복잡하면 훈련 데이터의 잡음까지 외워 새 데이터에서 오차가 커진다(과적합, 분산↑). 그래서 테스트 오차는 복잡도에 대해 U자를 그리고, 우리는 그 골짜기의 ‘적당한 복잡도’를 골라야 한다.
이 의문에 대한 현대 기계학습의 대답이 아래 두 현상이다. 결론부터 말하면 — 교과서가 틀린 것이 아니라, 교과서의 적용 범위가 있었다.
파라미터 수 P를 데이터 수 N 너머까지 계속 키우면, 테스트 오차는 U자로 끝나지 않는다. P=N 부근에서 한 번 폭발한 뒤, 더 키우면 다시 내려간다 — 그것도 처음 U자의 골짜기보다 더 낮게. U가 두 번 나타나서 ‘이중 하강(double descent)’이다.
모델이 훈련점을 겨우 전부 통과할 수 있게 되는 순간(보간 임계점), 해는 단 하나뿐이라 잡음 한 점까지 정확히 꿰뚫는 극도로 뒤틀린 함수가 강제된다. 자유도가 0인 곡예다.
P>N이면 훈련점을 모두 통과하는 해가 무수히 많아진다. 그중 학습 알고리즘이 고르는 것은 가장 짧고 매끄러운 해 — 최소 노름(minimum-norm) 보간해다. 파라미터가 많을수록 ‘매끄럽게 통과할 여유’가 커져서 오히려 일반화가 좋아진다. 이것이 암묵적 정규화(implicit regularization)다.
두 번째 줄이 더블 디센트의 수학적 심장이다. 02번 탭의 시뮬레이션은 정확히 이 두 식을 구현한다.
작은 신경망에 a + b mod p 같은 단순 연산을 학습시키면, 훈련 정확도는 순식간에 100%가 된다 — 답을 전부 외운 것이다. 그런데 테스트 정확도는 찍기 수준에 한참 머물다가, 수천~수만 스텝 뒤 갑자기 100%로 점프한다. 암기에서 이해로 넘어가는 순간이 그래프에 그대로 찍힌다.
네트워크 안에서는 두 종류의 해가 경쟁한다. 암기 회로는 빨리 만들어지지만 가중치가 크고 복잡하다. 일반화 회로(모듈러 덧셈의 경우 푸리에 주기 구조)는 느리게 자라지만 가중치가 작고 단순하다. 가중치 감쇠(weight decay)는 매 스텝 모든 가중치에 ‘크기 세금’을 매기므로, 시간이 지날수록 비싼 암기 회로가 침식되고 값싼 일반화 회로가 살아남는다. 겉으로 보이는 정확도는 두 회로의 세력이 역전되는 순간 계단처럼 점프한다.
암기 회로를 허물 압력이 없으므로 그로킹은 영원히 오지 않는다. 03번 탭에 이 대조 실험이 원클릭 프리셋으로 들어 있다 — 직접 확인할 수 있다.
Nakkiran 등(2019)은 더블 디센트가 모델 크기 축뿐 아니라 학습 시간(epoch) 축에서도 나타남을 보였다. 모델을 키우는 대신 오래 학습시켜도 “나빠졌다가 다시 좋아지는” 같은 곡선이 나온다. 그로킹은 이 epoch축 현상의 극단적인 형태로 볼 수 있다 — 두 실험은 결국 “과잉 용량 + 정규화 압력이 단순한 해를 찾아내는 과정”이라는 하나의 이야기를 모델 크기와 학습 시간이라는 두 단면에서 자른 것이다.
02번 탭의 결과를 보면, P<N인 고전 영역 안에서는 편향–분산 트레이드오프가 정확히 성립한다. 복잡도를 올리면 훈련 오차는 줄고 테스트 오차는 결국 나빠진다 — 교과서 그대로다. 교과서의 U자는 ‘틀린 그림’이 아니라 ‘전체 그림의 왼쪽 절반’이었던 셈이다. 뉴턴 역학이 광속 근처에서 상대성이론에 자리를 내주듯, 고전 통계학의 직관은 보간 임계점이라는 경계 안에서 유효한 근사였다.
사람의 공부에 빗대면 — 시험 전날의 벼락치기 암기는 훈련 정확도 100%의 암기 회로다. 그로킹 실험이 보여주는 것은, 그 암기 상태에서도 ‘더 단순한 설명을 찾으려는 압력’이 계속 작동하면 어느 순간 원리 이해로 상전이가 일어난다는 것이다. 깨달음이 점진적이지 않고 불연속적으로 온다는 경험적 직관이, 가장 작은 신경망에서 수치로 재현된다.
데이터: x ∈ ℝD (기본 D=15)에서 y = w*·x + ε (잡음 ε ~ N(0, σ²))를 N개 생성. 모델: 랜덤 푸리에 특징 φj(x) = √(2/P)·cos(vj·x + bj) 위의 선형회귀. P<N에서는 최소제곱해, P≥N에서는 최소 노름 보간해를 푼다. 각 P마다 여러 번 시행해 중앙값을 찍는다.
▶ 실행을 누르면 P=2부터 P=8N까지 왼쪽에서 오른쪽으로 차례로 계산되며 곡선이 자라난다. 잡음 σ를 0으로 내리면 봉우리가 사라지고, 고급 변수에서 릿지 λ를 켜면 봉우리가 길들여지고, 차원 D를 2로 내리면 임계점 자체가 실종된다 — 전부 프리셋 원클릭으로 확인할 수 있다.
과제: p²개의 모든 (a,b) 쌍 중 일부만 훈련에 주고 나머지로 시험한다. 모델: 2층 MLP — 원-핫 입력 2p차원 → 은닉층(기본 96, 활성화 기본 φ(h)=h², Gromov 2023) → 출력 p차원. 학습: 전체 배치 AdamW(기본 lr 0.01) + 가중치 감쇠, MSE 손실. 20스텝마다 훈련/테스트 정확도를 기록한다.
▶ 학습 시작을 누르면 실시간으로 훈련이 진행된다. 훈련 정확도(파랑)가 100%에 닿은 뒤에도 테스트(빨강)가 바닥을 기는 긴 플래토를 그대로 지켜보라 — 그리고 점프의 순간을.