작은 모델을 스스로의 실수로 학습시켜 봤더니, HumanEval 80% 달성하고 GPT-3.5를 수학에서 이겼다
I Let a Small Model Train on Its Own Mistakes. It Reached 80% on HumanEval and Beat GPT-3.5 on Math
핵심 요약
인간의 데이터 없이 모델이 스스로 문제를 만들고 실수하며 학습하는 방식으로 성능을 비약적으로 향상시킨 실험기.
- 자기 학습 방식 — 모델이 스스로 문제를 생성하고 틀린 답을 수정하며 학습하는 데이터셋 구축
- 성능 비약적 향상 — Qwen 2.5 7B 모델이 HumanEval 점수를 25점에서 112점으로 크게 개선
- 범용성 검증 — Llama 3.2, Qwen 3 등 다양한 아키텍처와 모델군에서도 동일한 학습 효과 확인
- 수학적 추론 강화 — 난이도 조절 루프를 통해 GSM8K 등 수학 문제 해결 능력까지 확보
몇 달 전, DeepSeek-R1 논문의 한 줄에 꽂혔다. 모델이 검증 가능한 보상을 통해 개선될 수 있다는 내용이었다.
그건 거의 마법처럼 들렸다. 불가능해서가 아니라, 아주 단순한 의문이 들었기 때문이다.
인간이 학습 데이터를 작성하지 않고도 모델이 스스로 코딩을 배울 수 있지 않을까?
나에게는 연구실도, 지원금도 없었다. 24GB 맥북, 약간의 크레딧이 있는 RunPod 계정, 그리고 파이썬 인터프리터가 전부였다.
그래서 시도해 봤다.
계획
쉽게 말해서, 베이스 모델에게 코딩 문제를 만들고 그에 대한 작은 테스트를 몇 개 작성하라고 시킬 것이다. 그런 다음 같은 모델에게 자신의 문제를 여러 번 풀게 한다. 때로는 정답을 맞히고, 때로는 틀릴 것이다. 나는 (틀린 시도, 성공한 시도) 쌍을 저장하고, 모델이 스스로 수정한 내용을 바탕으로 파인튜닝을 진행할 것이다. 인간이 작성한 데이터는 전혀 없다. 파이썬 인터프리터만이 유일한 심판이다.
계획에 없던 부분
Qwen 2.5 7B 베이스 모델로 시작했다. 스스로 채굴한 쌍으로 학습시켰다. HumanEval(164개의 표준 코딩 문제 세트)을 실행했다. 베이스 모델은 25개를 맞혔다. 학습 후에는 2개였다.
모델을 더 나쁘게 만든 것이다.
다음 날 하루 종일 Claude Code와 Codex로 디버깅을 했다. 로그상으로는 모델이 올바른 코드를 생성하는 것처럼 보였다. 채점기는 계속 거부했다. 새벽 2시쯤 버그를 발견했다. 채점기가 너무 일찍 멈춰서, 모델의 함수를 채점하기도 전에 절반으로 잘라버리고 있었던 것이다. 모델은 완벽하고 올바른 함수를 작성하고 있었는데, 채점기는 잘려 나간 절반을 채점하고 있었다.
성공한 부분
수정 후 다시 실행하니, Qwen 2.5 7B 베이스 모델은 HumanEval에서 25점에서 112점으로 올랐다. 87문제를 더 맞힌 것이다. 인간이 작성한 코드가 전혀 없는 모델로 학습시킨 결과다.
그래서 더 큰 모델로 시도했다. Qwen 2.5 14B 베이스 모델이다. 스스로 100개의 쌍을 채굴했다. 학습시켰다. 95분간 H100을 돌렸고, 클라우드 크레딧 3.5달러가 들었다.
