본문으로 건너뛰기

© 2026 Molayo

r/LocalLLaMA분석2026. 05. 15. 21:06

소형 모델이 자신의 실수를 바탕으로 학습하게 해보았습니다. HumanEval에서 80%에 도달했고 수학에서 GPT-3.5를 이겼습니다.

요약

글쓴이는 베이스 모델이 인간의 개입 없이 자신의 실수와 교정 과정을 통해 코딩 능력을 향상시키는 독창적인 방법을 개발했습니다. 이 방법은 모델에게 코딩 문제 생성 및 풀이를 시키고, (실패한 시도, 성공한 시도) 쌍을 저장하여 파인튜닝하는 방식입니다. 초기에는 Qwen 2.5 7B base에서 HumanEval 점수가 크게 상승했으며, 이후 Llama 3.2 3B와 Qwen 3 4B 등 다양한 모델 제품군에서도 성능 향상이 관찰되어 이 방법이 범용적임을 입증했습니다. 특히, 모델의 학습 신호가 단순히 데이터 형식에 의존하는 것이 아니라 '실수와 교정'이라는 구체적인 피드백 과정에서 온다는 것을 확인했으며, 이는 RLHF(Reinforcement Learning from Human Feedback) 버전과 근접한 성능을 달성하게 했습니다.

핵심 포인트

  • 모델이 인간의 개입 없이 스스로 코딩 문제를 만들고 풀면서 학습할 수 있다.
  • 학습 데이터는 (실패한 시도, 성공한 시도) 쌍으로 구성되어야 하며, 이 과정에서 모델은 자신의 실수와 교정 과정을 통해 지식을 습득한다.
  • 이 '셀프 마이닝(Self-mining)' 레시피는 Qwen뿐만 아니라 Llama 3.2 등 다양한 아키텍처와 제품군에 걸쳐 전이 가능하다.
  • 모델의 성능 향상은 단순히 데이터 양이나 형식 때문이 아니라, 구체적인 오류 수정 과정(Correction)을 학습했기 때문에 발생한다.

몇 달 전, 저는 DeepSeek-R1 논문의 한 줄에서 막혔습니다. 모델이 검증 가능한 보상 (verifiable rewards)을 통해 개선될 수 있다고 적혀 있었습니다.

그것은 저에게 거의 마법처럼 들렸습니다. 불가능해서가 아니라, 아주 단순한 의문이 생겼기 때문입니다:

만약 모델이 인간이 학습 데이터를 작성하지 않고도 스스로 코딩을 배우도록 할 수 있다면 어떨까?

저에게는 연구실도 없었습니다. 연구비도 없었습니다. 저에게 있는 것이라고는 24GB MacBook, 약간의 크레딧이 있는 RunPod 계정, 그리고 Python 인터프리터뿐이었습니다.

그래서 시도해 보았습니다.

계획

쉬운 말로 설명하자면 이렇습니다. 베이스 모델 (base model)에게 코딩 문제를 만들고 그것을 위한 몇 가지 작은 테스트를 작성하도록 요청합니다. 그런 다음 동일한 모델에게 자신이 만든 문제를 여러 번 풀도록 요청합니다. 때로는 정답을 맞히고, 때로는 틀립니다. 저는 (실패한 시도, 성공한 시도)의 쌍을 저장하고, 모델이 스스로 수정한 내용을 바탕으로 파인튜닝 (fine-tune)을 진행했습니다. 인간이 작성한 것은 아무것도 없습니다. Python 인터프리터가 루프 내의 유일한 심판입니다.

계획에 없었던 부분

저는 Qwen 2.5 7B base로 시작했습니다. 스스로 채굴한 쌍(mined pairs)으로 학습시켰습니다. HumanEval (164개의 코딩 문제로 구성된 표준 세트)을 실행했습니다. 베이스 모델은 25개를 맞혔습니다. 학습 후에는 2개였습니다.

모델을 더 나쁘게 만든 것이었습니다.

저는 다음 날을 Claude Code 및 Codex와 함께 쌍 디버깅 (pair-debugging)을 하며 보냈습니다. 모델은 로그상으로 올바른 코드처럼 보이는 것을 생성하고 있었습니다. 하지만 채점기 (grader)는 계속해서 그것을 거부했습니다. 우리는 새벽 2시쯤 버그를 찾아냈습니다. 채점기가 너무 일찍 멈춰서, 모델의 함수를 점수를 매기기도 전에 절반으로 잘라버리고 있었습니다. 모델은 완전하고 정확한 함수를 작성하고 있었습니다. 채점기는 잘려 나간 절반만을 채점하고 있었던 것입니다.

성공한 부분

문제를 해결하고 다시 실행하자, Qwen 2.5 7B base는 HumanEval에서 25개에서 112개로 올라갔습니다. 87문제가 증가한 것입니다. 인간이 작성한 코드가 전혀 없는 상태에서 학습된 모델로부터 얻은 결과입니다.

그래서 더 큰 모델로 시도했습니다. Qwen 2.5 14B base입니다. 스스로 채굴한 100개의 쌍을 사용했습니다. 학습을 진행했습니다. H100에서 95분간 실행되었으며, 클라우드 크레딧은 3.50달러가 들었습니다.

자신의 실수로만 학습된 베이스 모델 (Base model)은 동일한 회사의 RLHF (Reinforcement Learning from Human Feedback) 버전과 4점 차이 이내로 근접했습니다.

저는 믿기지 않았습니다. 그래서 만약 실패한다면 이 모든 것이 무의미해질 만큼 가혹한 테스트를 실행했습니다.

만약 모델이 단순히 이 형식의 어떤 데이터로든 학습하면서 똑똑해지는 것이라면 어떨까요? 저는 실제 데이터와 동일한 길이와 형태를 가졌지만, 내부에는 어떤 테스트도 통과하지 못하는 무작위 쓰레기 코드 (Garbage code)가 들어있는 가짜 학습 쌍 (Training pairs)을 만들었습니다. 그것들로 학습을 진행했습니다.

점수: 164개 중 25개. 베이스 모델과 동일했습니다. 성능 향상 (Lift)은 제로였습니다.

따라서 모델은 일반적인 학습을 통해 똑똑해지는 것이 아니었습니다. 모델은 구체적으로 자신의 실수와 교정 (Corrections)을 학습함으로써 똑똑해지고 있었습니다. 신호 (Signal)는 진짜였습니다.

이제 더 궁금해졌습니다. 이것이 Qwen 모델에만 국한된 현상일까요, 아니면 다른 모델 제품군 (Model families)에서도 작동할까요?

Meta의 Llama 3.2 3B를 시도해 보았습니다. 아키텍처 (Architecture)도 다르고, 토크나이저 (Tokenizer)도 다르고, 학습 코퍼스 (Training corpus)도 다릅니다. 32개의 쌍을 셀프 마이닝 (Self-mining)하고 학습시킨 결과, HumanEval 점수가 39에서 43으로 올랐습니다. 향상 폭은 작지만 방향은 맞습니다. 이 레시피 (Recipe)는 제품군을 가로질러 전이 (Transfers)됩니다.

이미 코드에 특화된 모델인 Qwen 2.5 Coder 7B 베이스 모델도 시도했습니다. 셀프 마이닝 후: HumanEval 83에서 87로, MBPP 122에서 124로 상승했습니다. 이미 코드에 최적화된 모델조차도 약간의 성능 향상을 보였습니다.

제가 사용하던 것보다 더 최신 세대인 Qwen 3도 시도했습니다. 구체적으로는 Qwen 3 4B 베이스 모델입니다. 레시피 적용 후: HumanEval 79에서 106으로 (+27문제), MBPP 135에서 148로 상승했습니다.

서로 다른 아키텍처, 서로 다른 세대, 서로 다른 벤더 (Vendors). 이 레시피는 Qwen만의 특이점 (Quirk)이 아닙니다.

계획에도 없었던 예상치 못한 결과

그다음 저는 이것이 수학에도 작동할지 더 궁금해졌습니다.

핵심은 판독기 (Judge)입니다. 파이썬 (Python)은 코드를 체크합니다. SymPy는 수학을 체크할 수 있습니다. 동일한 루프 (Loop)가 적용되어야 합니다.

첫 번째 시도는 실패했습니다.

제가 기본 모델에게 스스로 수학 문제를 만들도록 요청했을 때, 쉬운 산수만 만들어냈습니다. 이는 여러 추론 단계가 필요한 초등학교 수준의 단어 문제인 GSM8K에는 적용되지 않았습니다.

그래서 저는 변형을 추가했습니다. 모델이 시도할 때마다 자신이 만든 문제를 풀게 하고, 다음 문제는 더 어려워져야 했습니다. 실패를 계속하면, 다음 문제는 더 쉬워져야 했습니다. 모델은 점차 자신의 능력의 경계에 있는 문제들로 이동했습니다.

스스로 작성한 13개의 수학 문제로 학습된 3B 모델이 2022년에 인터넷을 마비시켰던 ChatGPT 버전보다 뛰어났습니다.

그리고 제가 가장 자랑스러워하는 발견입니다.

모델을 개선하는 방법은 두 가지가 있습니다.

하나는 학습(training)입니다. 즉, 모델 자체를 변경하는 것입니다.

다른 하나는 테스트 시간 샘플링(test-time sampling)입니다. 모델을 바꾸지 않고 여러 번 질문하여 테스트를 통과하는 답변을 유지하는 방식입니다.

저는 이 둘이 합쳐질 것이라고 예상했습니다.

학습은 모델을 더 좋게 만들 것입니다. 샘플링은 더 좋은 모델에게 더 많은 기회를 줄 것입니다. 따라서 학습 + 샘플링이 샘플링 단독보다 뛰어날 것이라고 생각했습니다.

하지만 항상 그런 것은 아니었습니다.

100쌍의 채굴된(mined) 쌍에서는 학습과 샘플링이 시너지를 냈습니다. 하지만 36쌍에서는 서로 충돌했습니다. 학습은 모델의 출력 다양성을 너무 많이 좁혀서, 샘플링이 유용하게 만들었던 다양성을 잃게 만듭니다.

여기에는 임계점(threshold)이 있습니다. 저는 이 내용이 어디에도 적힌 것을 본 적이 없습니다. 데이터셋이 작다면, 미세 조정(fine-tuning)을 하지 않고 기본 모델에서 샘플링하는 것이 더 나을 수 있습니다.

  • 수학 문제에 대해 (오답, 그 후 정답) 패턴으로 학습시키는 것은 모델을 망가뜨렸습니다. Qwen 3 4B 모델은 MATH-500에서 60%에서 14%로 하락했습니다. 오직 정답 수정(corrections) 데이터로만 학습시키면, 모델이 정답을 맞혔을 때조차 항상 스스로를 의심하도록 학습됩니다. 해결책: 정답이 그대로 정답으로 유지되는 예시들을 섞어주어야 합니다.
  • 코드 데이터로 학습된 레시피(Recipe)는 수학에서 거의 아무런 효과가 없었습니다. GSM8K에서 단 2문제 증가에 그쳤습니다. 신호(signal)가 도메인 간에 전달되지 않습니다.
  • 반복(Iterating, 학습된 모델을 사용하여 더 많은 데이터를 채굴하고 재학습하는 과정)은 2라운드 만에 정체기에 도달합니다.
  • 이 레시피는 이미 강력한 모델에는 작동하지 않습니다. Qwen 3 8B, Qwen 3 14B, Qwen 2.5 72B 모두 성능이 약간 저하되었습니다. 채굴할 만큼의 충분한 오답 시도가 부족하기 때문입니다.
  • 이 레시피는 너무 약한 모델에도 작동하지 않습니다. HumanEval에서 3%를 기록한 OLMo 2 7B는 채굴할 만큼의 충분한 정답을 생성하지 못합니다.
  • HumanEval 스타일의 문제들은 pandas와 같은 라이브러리를 사용하는 실제 세계의 Python 환경으로 전이(transfer)되지 않습니다. 서로 다른 세계입니다.

THE HARDEST PART BY COLDPLAY

이 모든 과정에서 가장 힘들었던 점은 수학이나 코드가 아니었습니다. 그것은 결과를 축하하기 전에 내 결과 자체를 의심하는 법을 배우는 것이었습니다. 첫날에 발생한 중지 토큰(stop-token) 버그는 프로젝트를 거의 끝낼 뻔했습니다. 나를 잡아줄 지도 교수님이 없는 상황에서, 나는 스스로를 잡아낼 수 있는 사람이 되는 법을 배워야 했습니다.

모든 것은 공개되어 있습니다:

AI 자동 생성 콘텐츠

본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0