모든 이야기

과적합 뒤에 일반화가 시작된다: Grokking의 이상한 학습 곡선

학습 정확도가 거의 완벽한데 검증 정확도는 우연 수준에 머문다. 보통은 과적합이라고 판단하고 멈춘다. 그런데 그 상태에서 오래 학습한 뒤, 검증 정확도가 갑자기 크게 좋아진다면 어떻게 해석해야 할까.

Grokking 논문은 바로 이 불편한 곡선을 실험의 중심에 놓는다. 작은 알고리즘 데이터에서 모델은 학습 예제를 맞히는 능력을 먼저 얻고, 훨씬 뒤에 보지 못한 조합까지 맞히는 능력을 얻기도 한다. 저자들은 이렇게 늦게 나타나는 일반화를 grokking이라 부른다. 현상의 이름보다 인상적인 것은, 학습 성과와 일반화 성과가 서로 다른 시간표로 움직인다는 관찰이다. Grokking 원문

정답 표의 빈칸을 채우게 해 보자

실험은 이항 연산의 표를 사용한다. 입력 a와 b가 있고, 연산 결과 c를 예측한다. 가능한 조합 중 일부를 학습에 쓰고 나머지를 검증에 남긴다. 모듈러 연산, 순열의 합성 같은 문제를 사용하면 정답 생성 규칙이 명확하므로, 틀린 라벨이나 애매한 평가 기준을 줄일 수 있다.

중요한 조건은 각 원소를 별도 기호로 표현한다는 점이다. 모델에 숫자의 십진 표기나 순열의 구조를 그대로 보여 주는 방식이 아니다. 입력 기호들 사이의 관계를 예제에서 배워야 한다. 이 장치 덕분에 “원래 숫자 표현에 답이 숨어 있었다”는 설명을 피하고, 관계를 배운다는 문제를 더 선명하게 볼 수 있다. 데이터와 학습 설정

작은 사고실험으로 0부터 6까지의 원소와 a + b mod 7을 생각해 보자. 가능한 입력 쌍은 49개다. 그중 일부의 정답만 보여 주면 모델은 본 적 있는 쌍의 답을 외워도 학습 정확도를 높일 수 있다. 하지만 보지 않은 쌍을 풀려면 합의 순환 구조를 활용하는 표현이 필요하다. 예컨대 6과 3의 합이 2가 되는 관계를 새로운 조합에서도 일관되게 처리해야 한다.

이는 논문의 특정 실험을 재현한 숫자가 아니라, 표의 일부를 외우는 것과 연산의 구조를 사용하는 것 사이를 구분하기 위한 예다. 두 방식은 학습 데이터에서는 같은 답을 낼 수 있다. 검증용 빈칸에 도달해야 차이가 드러난다.

정확도 100%가 학습의 끝은 아니다

분류 정확도는 정답 클래스가 가장 높은 점수를 받는지만 본다. 정답의 확률이 0.6이든 0.99든 예측이 맞으면 같은 한 건이다. cross-entropy는 둘을 구분한다. 이미 모든 학습 예제를 맞히더라도 정답에 더 높은 확률을 주도록 손실을 낮출 수 있고, regularization이 있다면 그 영향도 이어진다.

따라서 학습 정확도가 포화되었다는 사실만으로 가중치와 표현이 멈췄다고 볼 수 없다. 이 점은 늦은 일반화를 설명할 때 최소한의 출발점이다. 모델이 이미 정답 표를 외웠다면 더 학습할 신호가 전혀 없을 것이라는 직관부터 수정해야 한다.

내가 떠올리는 그림은 같은 학습 답안을 설명하는 여러 내부 해법 사이의 이동이다. 하나는 개별 쌍을 많이 기억하는 해법이고, 다른 하나는 여러 쌍에서 재사용할 관계를 표현하는 해법이다. 학습 정확도만 보면 둘을 구분하기 어렵지만, 최적화 과정은 그 뒤에도 계속 움직일 수 있다.

다만 이 그림을 원 논문이 증명한 완전한 메커니즘으로 소개하면 안 된다. 원문은 현상, 학습 조건, 데이터 크기의 효과, embedding 시각화 등을 제시하는 실험적 연구다. “먼저 암기 회로가 생기고 규칙 회로가 나중에 그것을 대체한다” 같은 정밀한 설명은 추가 분석을 요구한다. 내가 위에서 말한 해법의 이동은 관찰을 이해하기 위한 해석이다.

데이터가 적으면 필요한 시간이 달라진다

원문에서 재미있는 관찰 하나는 학습 데이터 비율을 줄였을 때 일반화에 필요한 최적화 시간이 크게 늘 수 있다는 것이다. 어떤 구간에서는 최종적으로 비슷한 일반화에 도달하면서도 도달 시점이 크게 달라진다. 데이터 부족이 항상 최종 정확도 하락으로만 나타나는 것은 아니라는 이야기다. 데이터 효율과 학습 시간 실험

이 관찰은 시간 예산을 평가의 일부로 읽게 만든다. 두 설정을 같은 step까지만 학습해 비교하면 하나는 일반화했고 다른 하나는 아직 암기 상태에 있을 수 있다. 그때 “이 설정은 일반화할 수 없다”는 결론과 “이 예산 안에서는 일반화하지 못했다”는 결론은 다르다.

그렇다고 시간을 무한히 늘리면 모두 성공한다는 뜻은 아니다. 논문에서도 주어진 최적화 예산 안에 일반화를 얻지 못한 연산이 있다. 데이터 구조와 하이퍼파라미터에 따라 결과가 달라진다. 더 오래 학습해야 하는 문제인지, 현재 조건에서는 유용한 해법을 찾기 어려운 문제인지 결과 곡선 하나만으로 구분하기는 쉽지 않다.

실험을 설계한다면 데이터 비율, seed, 학습률, regularization을 함께 기록하고 시간축을 충분히 넓혀 볼 가치가 있다. 학습량을 로그 축으로 그리면 처음의 빠른 암기와 뒤의 느린 변화가 한 화면에 들어온다. 이는 논문을 따라 해 볼 때 내가 권하고 싶은 관찰 방법이다. 실제 제품 학습의 종료 기준을 곧바로 바꾸자는 뜻은 아니다.

weight decay를 다시 읽게 되는 대목

저자들은 여러 최적화 설정을 비교하고, 연구한 과제에서 weight decay가 일반화와 데이터 효율에 큰 영향을 줄 수 있음을 보고한다. 일반화가 학습 초반에만 결정되는 것이 아니라, 이미 학습 예제를 맞힌 이후의 최적화 조건에도 민감할 수 있음을 보여 주는 부분이다. regularization 비교

우리는 weight decay를 과적합을 막는 기능이라고 자주 설명한다. grokking의 곡선에서는 이 설명을 시간적으로 넓혀 보게 된다. 학습 정확도가 높아진 뒤에도 가중치 규모를 조정하는 힘이 남아 있고, 그동안 표현이 달라질 여지가 있다. 다만 작은 가중치가 항상 더 좋은 규칙을 뜻한다는 일반 법칙은 여기서 나오지 않는다.

embedding 시각화도 흥미롭다. 원문은 일부 모델에서 연산의 수학적 구조와 닮은 배치를 관찰한다. 나는 이런 그림을 “모델이 답을 맞힌 이유를 생각할 실마리”로 읽는다. 저차원 시각화는 정보의 일부만 보여 주기 때문에, 원이나 군집이 보인다는 사실만으로 내부 알고리즘을 확정할 수는 없다. 그림과 개입 실험은 다른 수준의 증거다.

이 대목에서 특히 피하고 싶은 표현은 모델이 어느 순간 “진짜 이해했다”는 단정이다. 검증 정확도의 변화는 명확하지만, 이해라는 단어의 기준은 별도로 정해야 한다. 새로운 입력 분포나 더 큰 문제 크기에서도 같은 규칙을 적용하는지 확인하면, 단순한 표 완성 이상의 주장에 가까워질 수 있다.

멈출 때와 기다릴 때를 가르는 증거

grokking을 일반 데이터셋의 early stopping을 버리라는 처방으로 읽으면 곤란하다. 원문의 과제는 작은 크기, 명확한 규칙, 제한된 조합이라는 특성을 가진다. 현실 데이터에는 잡음, 시점 변화, 라벨 오류가 섞여 있다. 과적합 이후 오래 기다리는 비용도 크다. 알고리즘 과제의 관찰을 곧바로 모든 학습의 조언으로 옮길 수는 없다.

오히려 얻을 만한 실무 교훈은 진단을 더 세밀하게 하는 것이다. 학습 정확도, 검증 정확도, 손실을 따로 보고, 작은 정형 과제라면 일반화 시점이 뒤로 밀릴 가능성을 실험적으로 확인한다. 모델 선택에 쓴 검증 결과를 최종 성능으로 다시 보고하지 않도록 별도 평가도 남겨 둔다. 오래 기다렸다는 사실이 좋은 평가 설계를 대신하지는 못한다.

이 논문이 좋은 연구 도구를 만든 이유는 큰 모델의 막연한 일반화 문제를 작은 표 위로 옮겼기 때문이다. 답을 계산하는 규칙을 우리가 알고 있고, 모델이 어떤 예제를 보았는지도 정확히 정할 수 있다. 복잡한 현상을 단순한 환경에서 선명하게 관찰하는 실험의 힘이 여기 있다.

Grokking을 읽고 나면 학습 곡선의 평평한 구간이 조금 다르게 보인다. 그것이 내부 변화가 끝났다는 뜻일 수도 있지만, 현재 지표로 드러나지 않는 변화가 진행되는 구간일 수도 있다. 둘을 구분하려면 기다리겠다는 믿음보다, 시간과 표현을 더 자세히 관찰하는 실험이 필요하다.

논문: Alethea Power, Yuri Burda, Harri Edwards, Igor Babuschkin, Vedant Misra, Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets, 2022. 원문

Dne Cna

컴퓨터공학 잘 하고 싶다

블로그 보기