전문가가 쓴 사고 과정(chain-of-thought)의 앞부분만 프롬프트에 넣고 나머지는 모델이 이어 쓰게 하는 강화 학습 방법 MOER가 arXiv에 공개됐다. 논문은 2026년 10월 22일자로 올라왔다. 연구진은 MOER가 수학과 일반 영역 추론 과제에서 평균 점수 최고를 기록했고, 모든 기본(basic) 기준선과 혼합 정책 기준선을 앞섰다고 밝혔다.1
구현 코드는 GitHub 저장소 CityU-MLO/MOER에 있다. 이 저장소는 논문 구현체이며, 저장소 설명에는 채택된 학회와 공개 MOER 체크포인트, 공개 논문 주소가 따로 적혀 있지 않다. 저장소의 결과표는 논문이 보고한 수치이고, 저장소를 정리하면서 다시 측정한 값이 아니다. 학습과 추론에는 Linux, NVIDIA GPU, 호환되는 CUDA 환경이 필요하다.2
전문가 앞부분 안내와 선택적 되돌리기
혼합 정책 최적화는 모델 자신이 만든 데이터만으로는 넘기 어려운 능력 한계를 넘으려고, 모델 밖에서 만든 전문가 데이터를 강화 학습 과정에 섞는다. 논문은 기존 방법이 두 갈래로 한계를 보인다고 지적했다. 전문가의 전체 풀이를 고정해 주는 방식은 모델의 자체 탐색을 억누르고, 전문가 앞부분만 쓰는 방식은 정답을 보장하지 못해 성능이 낮아지거나 학습이 무너지기도 한다는 것이다.1
MOER는 전문가의 풀이 앞부분을 프롬프트에 넣고, 나머지 추론은 모델이 완성하게 한다. 앞부분의 길이는 학습이 진행되면서 점차 줄어 모델의 자체 탐색을 유도한다. 저장소가 정리한 논문 원고의 주요 설정에서는 전문가 프리픽스 비율이 1.0에서 0.1로 낮아진다.
선택적 롤백은 안내를 받고도 실패한 완성 결과를 이미 확보한 전문가의 전체 풀이로 바꾸는 장치다. 논문은 이 롤백으로 모든 정책 밖(off-policy) 궤적의 정답이 보장된다고 설명한다. 저장소는 모델 생성을 다시 호출하지 않고 교체한다고 설명한다. 다만 정답 여부는 기준 풀이와 선택한 검증기에 의존하며, 롤백이 정답을 독립적으로 증명하는 것은 아니라고 적었다.1,2
목적 함수도 둘로 나뉜다. 모델이 스스로 만든 토큰은 GRPO 손실로 최적화하고, 전문가 앞부분과 완성 토큰은 신뢰 영역 지도 미세 조정 손실로 지도한다. 연구진은 이 조합이 학습을 크게 안정시킨다고 밝혔다.1
프리픽스 후보가 여럿이면 현재 롤백 구현은 같은 프롬프트 묶음의 후보가 모두 실패할 때만 첫 후보를 교체한다. 논문의 주 설정은 후보를 하나만 쓰며, 순수 자체 정책 결과의 정답 여부는 롤백 조건에 들어가지 않는다.2
실험 설정과 보고된 범위
연구진은 MOER가 다양한 과제, 모델 크기, 기반 모델 종류에서 일관되게 일반화한다고 밝혔다. 수학 학습에는 OpenR1-Math-46k-8192 데이터셋을 쓰며, 전문가 풀이는 DeepSeek-R1이 만들었다.1,2
평가 수학 묶음은 AIME 2024, AIME 2025, AMC, MATH-500, Minerva, OlympiadBench다. 논문은 AIME 2024·2025와 AMC에서 avg@32를, 나머지 수학과 일반 영역 벤치마크에서 pass@1을 보고했다. 저장소의 평가 스크립트에는 AIME에서 문제당 256개를 뽑는 Pass@k 실험도 들어 있다.
코드 생성 실험은 CodeForces-CoTs에서 프롬프트 1,024토큰, 응답 8,192토큰을 넘는 예시를 걸러 학습 13,000개와 검증 1,402개를 쓴다고 논문 원고에 적혀 있다. 그러나 저장소는 변환 도구가 이 분할을 그대로 재현하지 못한다고 밝혔고, 원고의 코딩 결과표가 비어 있어 코딩 정확도 수치는 싣지 않았다. 로컬 LiveCodeBench 변환기는 공개 stdin/stdout C++ 테스트 케이스로 채점하며, 지원하지 않는 빈 테스트 케이스와 stdin이 아닌 테스트 케이스는 제외한다. 따라서 저장소는 이 점수가 공식 숨은 테스트 점수와 같다고 주장하지 않는다.2
| 항목 | 값 |
|---|---|
| 롤아웃·업데이트 배치 크기 | 128 / 64 |
| 그룹 크기 | 8 |
| 프리픽스 후보 수 | 1 |
| 클리핑 비율 | 0.2 / 0.24, 상한 1.24 |
| 엔트로피 계수(논문) | 0.01 |
| 엔트로피 계수(원본 실행 스크립트) | 0.001 |
재현할 때 주의할 점
핵심 환경은 Python 3.11, PyTorch 2.4.0, vLLM 0.6.3, Transformers 4.47.1, Ray 2.38.0이다. FlashAttention 2.7.3은 Python, PyTorch, CUDA, C++ ABI와 맞아야 한다. 의존성 목록은 전체 잠금 파일이 아니므로 깨끗한 Linux·GPU 환경의 설치는 따로 검증해야 하고, vLLM만 따로 올려서는 안 된다고 저장소는 경고한다.
실행 스크립트 열 개는 환경 변수로 설정을 받는다. 논문의 엔트로피 계수는 0.01이지만 원래 스크립트는 0.001이어서, 저장소는 이를 조용히 바꾸지 않고 사용자가 덮어쓰게 했다. 일부 스크립트는 save_freq가 -1이라 체크포인트가 저장되지 않으니 모델을 남기려면 값을 바꿔야 한다.
코드 평가는 생성된 C++를 로컬에서 실행하는데, CPU·메모리 제한과 임시 작업 폴더는 보안 샌드박스가 아니다. 저장소는 권한이 없고 비밀 정보가 없으며 네트워크가 격리된 전용 환경에서만 돌리라고 안내한다.
이 구현은 LUFFY, verl, DeepScaler, vLLM, Math-Verify를 바탕으로 만들었다.2