
DAPO 완전 해부: DeepSeek-R1의 비밀을 풀어낸 오픈소스 강화학습의 모든 것
DeepSeek-R1이 강화학습만으로 AI에게 '생각하는 법'을 가르쳤다고 했지만, 핵심 레시피는 비밀이었다. DAPO는 그 비밀을 4가지 기법으로 풀어내고, 절반의 훈련 스텝으로 더 높은 성능을 달성한 뒤 모든 코드를 공개했다. 엔트로피 붕괴부터 동적 샘플링까지, 대규모 RL의 진짜 난관과 해법을 논문 기반으로 풀어본다.

DeepSeek-R1이 강화학습만으로 AI에게 '생각하는 법'을 가르쳤다고 했지만, 핵심 레시피는 비밀이었다. DAPO는 그 비밀을 4가지 기법으로 풀어내고, 절반의 훈련 스텝으로 더 높은 성능을 달성한 뒤 모든 코드를 공개했다. 엔트로피 붕괴부터 동적 샘플링까지, 대규모 RL의 진짜 난관과 해법을 논문 기반으로 풀어본다.
2025년 1월, DeepSeek-R1이 공개되었을 때 AI 커뮤니티는 열광했다. 별도의 지도 학습(SFT) 없이 강화학습(RL)만으로 AI가 "생각하는 법"을 스스로 터득했다는 것이다. 수학 문제를 풀 때 "잠깐, 다시 생각해보자..."라며 자기 답을 되돌아보는 행동이 훈련 도중 자연 발생했다고 보고했다.
하지만 한 가지 치명적인 문제가 있었다. 핵심 레시피를 공개하지 않았다.
DeepSeek 기술 보고서는 GRPO라는 알고리즘을 사용했다고 밝혔지만, 구체적으로 어떤 하이퍼파라미터를 썼는지, 훈련 중 어떤 문제를 만났고 어떻게 해결했는지는 거의 언급하지 않았다. OpenAI의 o1도 마찬가지였다. 이것은 마치 "이 식당의 시그니처 요리를 만들었습니다"라고만 하고, 레시피는 알려주지 않는 것과 같았다.
전 세계 연구자들이 공개된 정보만으로 재현을 시도했지만, 결과는 참담했다. 같은 Qwen2.5-32B 모델에 GRPO를 적용해봤더니 AIME 2024(미국 고등학생 수학 경시대회 문제)에서 겨우 30점 — DeepSeek-R1-Zero의 47점에 한참 못 미쳤다. 무엇이 빠진 걸까?
2025년 3월, 35명의 연구자로 구성된 팀이 이 수수께끼를 풀어냈다. 그들은 DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization)라는 알고리즘을 발표하며, 대규모 LLM 강화학습의 네 가지 핵심 난관과 그 해법을 남김없이 공개했다. 결과는 놀라웠다: 같은 모델로 50점 — DeepSeek-R1-Zero를 넘어서면서, 훈련 스텝은 절반밖에 쓰지 않았다.
이 글에서는 DAPO가 발견한 네 가지 비밀이 무엇인지, 왜 각각이 필요했는지를 역사적 맥락부터 깊이 있게 풀어본다.
강화학습이 LLM에 처음 적용된 것은 2022년 ChatGPT의 등장과 함께였다. RLHF(Reinforcement Learning from Human Feedback)는 AI의 답변을 사람이 평가하고, 그 선호에 맞게 모델을 조정하는 기법이다.
RLHF의 핵심 엔진은 PPO(Proximal Policy Optimization)였다. OpenAI가 2017년 제안한 이 알고리즘의 핵심 아이디어는 "모델을 업데이트하되, 한 번에 너무 많이 바꾸지 말자"는 것이다.
모델이 업데이트될 때, 각 토큰의 확률이 변하는 비율을 [1-ε, 1+ε] 범위로 제한한다.
예: ε=0.2이면, 확률이 최대 20%만 오르거나 내릴 수 있다.
이 "안전벨트" 덕분에 모델이 한 번의 업데이트로 완전히 망가지는 것을 방지한다.
하지만 PPO에는 한 가지 비싼 구성 요소가 있었다: 가치 함수(Value Function). 각 상태의 "예상 보상"을 추정하는 별도의 신경망이 필요했고, 이것은 훈련 비용을 크게 높였다.
DeepSeek 팀은 2024년 GRPO(Group Relative Policy Optimization)를 제안해 이 문제를 해결했다. 핵심 아이디어는 "비싼 가치 함수 대신, 같은 질문에 대한 여러 답변의 상대적 점수를 비교하자"는 것이다.
GRPO는 PPO의 가치 함수를 제거해 훈련 비용을 크게 낮추면서도, DeepSeek-R1에서 대규모 검증에 성공했다. AI가 강화학습만으로 "잠깐, 다시 생각해보자"라는 반성적 사고를 자발적으로 학습한 것이다.
문제는 다른 팀이 GRPO를 그대로 따라 해도 비슷한 결과를 얻지 못했다는 것이다. DAPO 저자들도 처음에 같은 경험을 했다:
"Qwen2.5-32B에 GRPO를 적용했더니 AIME 2024에서 겨우 30점이었다. DeepSeek-R1-Zero의 47점과는 17점 차이."
이 17점의 격차 뒤에는 GRPO 논문이 언급하지 않은 네 가지 핵심 문제가 숨어 있었다. DAPO는 이 문제들을 하나씩 발견하고 해결해 나갔다.
엔트로피(entropy)는 모델의 "다양성 지수"라고 생각하면 된다. 엔트로피가 높으면 모델이 다양한 답변을 생성하고, 낮으면 거의 같은 답변만 반복한다.
사람으로 치면 이렇다:
강화학습에서 엔트로피가 붕괴(collapse)하면, 모델은 한두 가지 패턴에만 매달리게 되고, 새로운 풀이법을 탐색하지 않는다. 이것은 치명적이다. 강화학습의 핵심은 탐색(exploration)과 활용(exploitation)의 균형인데, 엔트로피 붕괴는 탐색을 완전히 죽여버린다.
DAPO 팀이 발견한 원인은 PPO의 대칭 클리핑이었다. 표준 PPO는 확률 변화를 [1-ε, 1+ε] 범위로 제한한다. ε=0.2라면 [0.8, 1.2].
이 제한은 합리적으로 보이지만, 확률의 비대칭성을 간과하고 있다:
확률이 0.01인 토큰(새로운 시도를 나타내는 토큰)은 한 번의 업데이트로 0.002밖에 올릴 수 없다. 반면 확률이 0.90인 토큰(기존에 자주 쓰던 토큰)은 0.18이나 올릴 수 있다. 결과적으로 기존에 잘 쓰던 토큰은 더 강해지고, 새로운 시도는 더 어려워진다. 이것이 엔트로피 붕괴의 메커니즘이다.
DAPO의 첫 번째 기법 Clip-Higher**는 놀라울 정도로 간단한 해법이다: **상한과 하한의 클리핑 범위를 분리(decouple)한다.
클리핑 범위: [1-ε, 1+ε]
ε = 0.2 → [0.8, 1.2]
상하한 대칭클리핑 범위: [1-ε_low, 1+ε_high]
ε_low=0.2, ε_high=0.28 → [0.8, 1.28]
올릴 때 더 넓은 범위 허용하한(ε_low=0.2)은 그대로 유지한다. 확률이 0으로 추락하는 것은 여전히 위험하기 때문이다. 하지만 상한(ε_high=0.28)은 40% 더 넓게 열어준다. 이렇게 하면 낮은 확률의 토큰(새로운 시도)도 기존보다 더 빠르게 확률을 올릴 수 있어서, 탐색이 살아남는다.
수치가 작아 보이지만 효과는 극적이다:
8점 향상. 하이퍼파라미터 하나만 바꿨을 뿐인데, 엔트로피가 유지되면서 모델이 다양한 풀이법을 계속 시도하게 된 결과다.
대규모 LLM RL의 핵심 시나리오는 Long-CoT(긴 연쇄 사고)다. 복잡한 수학 문제를 풀 때 AI가 수천 토큰에 걸쳐 단계별로 사고하는 것이다.
하지만 실용적인 이유로 최대 생성 길이(L_max)를 정해야 한다. DAPO에서는 20,480 토큰이다. 문제는 AI가 이 한도를 초과하면 응답이 잘리고(truncated), 정답을 내놓지 못하게 된다.
기존 방식은 잘린 응답에 -1(오답과 동일한 벌점)을 주었다. 하지만 이것이 심각한 노이즈를 만든다:
사례: 억울한 벌점
AI가 매우 어려운 기하학 문제를 풀고 있다. 19,000 토큰까지 완벽하게 추론했고, 마지막 계산 단계만 남았다. 하지만 응답이 20,480 토큰에서 잘렸다. 이 AI는 올바른 추론 과정을 밟았음에도 -1을 받는다. 한편, 첫 줄부터 완전히 잘못된 풀이를 쓴 짧은 응답도 역시 -1을 받는다.
강화학습 입장에서 두 응답은 동일하게 나쁜 것으로 학습된다. 이것은 명백한 노이즈다. 올바른 추론 패턴을 벌하고 있기 때문이다.
DAPO는 두 단계로 이 문제를 해결한다.
1단계: Overlong Filtering — 잘린 응답의 손실(loss)을 아예 마스킹한다. 즉, 학습에서 제외한다.
"이 접근법만으로도 훈련이 현저하게 안정화되고 성능이 향상되었다."
2단계: Soft Overlong Punishment — 완전 제외 대신, 길이에 비례하는 부드러운 벌점을 준다.
16,384 토큰(L_max - L_cache)까지는 자유롭게 추론하게 하고, 그 이후부터 20,480 토큰까지는 선형적으로 벌점이 증가한다. 이 "완충 구간(cache window)"이 4,096 토큰이다.
비유하자면, 시험에서 답안지가 3페이지까지인데 2.5페이지를 넘기면 "곧 끝내세요"라는 경고를, 3페이지를 넘으면 "감점"을 받는 것이다. 갑자기 0점이 되는 게 아니라, 점진적으로 불이익을 받으니 훨씬 합리적이다.
효과:
GRPO의 기본 손실 함수는 샘플 수준(sample-level)이다. 각 응답에 동일한 가중치를 부여하고, 응답 내에서는 토큰 수로 나눈다.
이것이 왜 문제일까? 구체적 예를 보자:
사례 1: 뛰어난 긴 풀이가 무시된다
| 응답 | 길이 | 정답 여부 | 토큰당 그래디언트 기여 |
|---|---|---|---|
| 응답 A | 100 토큰 (짧은 풀이) | 정답 | 1/100 = 0.01 |
| 응답 B | 2,000 토큰 (상세한 풀이) | 정답 | 1/2,000 = 0.0005 |
응답 B가 더 상세하고 정교한 추론 과정을 담고 있음에도, 토큰당 그래디언트 기여는 응답 A의 1/20에 불과하다. 모델은 짧은 풀이를 선호하게 되고, 복잡한 추론 패턴을 학습하지 못한다.
사례 2: 쓸데없이 긴 횡설수설에 약한 벌점
반대의 경우도 문제다. 2,000 토큰에 걸쳐 횡설수설하며 틀린 답을 낸 응답은, 길이로 나누면 토큰당 벌점이 매우 작아진다. 틀린 답변인데 벌점이 약해서 제대로 학습되지 않는다.
DAPO의 해법은 전체 토큰 수로 나누는 것이다.
Loss = (1/G) × Σ (1/|oᵢ| × Σ loss_t)
각 샘플에 동일 가중치 → 긴 답변 불이익Loss = (1/Σ|oᵢ|) × ΣΣ loss_t
전체 토큰으로 정규화 → 긴 답변 공정 반영미묘한 차이처럼 보이지만 효과는 분명하다:
논문에서도 "이 기법은 점수 자체를 크게 올리지는 않지만(41→42), 훈련의 안정성을 크게 높이고 길이 증가를 건강하게 만든다"고 강조한다.
이것은 DAPO의 네 가지 기법 중 가장 큰 성능 향상을 가져온 기법이다.
GRPO에서 어드밴티지(advantage)는 그룹 내 상대적 비교로 계산된다. 같은 질문에 대해 16개의 답변을 생성했을 때:
핵심: 모든 답변이 같은 결과(전부 정답 또는 전부 오답)면, 비교할 것이 없어서 어드밴티지가 0이 되고, 이 질문에서는 아무것도 배우지 못한다.
이것이 왜 심각한 문제일까? 훈련이 진행될수록 모델이 쉬운 문제를 맞히는 비율이 올라간다. 논문의 Figure 3(b)에 따르면, 훈련 초반에는 약 20%의 샘플이 "전부 정답"이지만, 훈련이 진행될수록 60%까지 증가한다. 즉, 훈련이 진행될수록 실질적으로 학습에 기여하는 데이터가 줄어든다.
배치(batch) 크기가 512개 프롬프트인데, 그 중 60%가 학습에 기여하지 않으면 실질 배치는 205개로 줄어든다. 그래디언트가 불안정해지고 학습 효율이 급격히 떨어진다.
DAPO의 동적 샘플링(Dynamic Sampling)은 이 문제를 직접적으로 해결한다:
제약 조건: 0 < |{정답인 응답}| < G
한 질문에 대한 G개 응답 중, 적어도 하나는 정답이고 적어도 하나는 오답이어야 한다.
이 제약을 만족하지 않는 질문(전부 정답 또는 전부 오답)은 버리고, 제약을 만족하는 질문이 배치를 채울 때까지 추가 샘플링한다.
비유하자면, 학교에서 시험 문제를 낼 때와 같다. 전교생이 다 맞는 문제(너무 쉬움)나 전교생이 다 틀리는 문제(너무 어려움)는 변별력이 없다. 일부는 맞고 일부는 틀리는 문제만이 학생들을 효과적으로 평가하고 가르칠 수 있다. 동적 샘플링은 이 "변별력 있는 문제"만 남기는 것이다.
"추가 샘플링이 비용을 높이지 않느냐?"는 의문이 있을 수 있다. 논문은 "생성 시간은 가장 긴 응답(long-tail)에 의해 좌우되므로, 짧은 응답을 추가로 생성하는 비용은 무시할 수 있다"고 설명한다.
효과는 극적이다:
8점 향상. 네 가지 기법 중 단독으로 가장 큰 효과를 보인 기법이다.
DAPO의 네 기법은 독립적으로도 효과적이지만, 순차적으로 적용할 때 누적적으로 작용한다. 논문의 핵심 실험 결과를 보자:
30점 → 50점. 67% 향상.** 그리고 이 모든 것은 DeepSeek-R1-Zero의 47점을 넘어서면서, 훈련 스텝은 **절반(약 5만 스텝 vs 10만 스텝)밖에 사용하지 않았다.
DAPO 논문에서 가장 흥미로운 부분은 훈련 중 관찰된 창발적 행동(emergent behavior)이다.
훈련 초반, 모델은 수학 문제를 "직선적으로" 풀었다. 한 단계씩 풀어나가되, 중간에 자기 풀이를 되돌아보는 일은 없었다.
하지만 훈련이 진행되자, 명시적으로 가르치지 않았는데도 반성(reflection)과 역추적(backtracking) 패턴이 자발적으로 등장했다:
이것은 DeepSeek-R1 보고서에서도 언급된 현상이다. 강화학습이 단순히 기존의 추론 패턴을 강화하는 것을 넘어, 완전히 새로운 추론 방식을 자발적으로 만들어낸다는 것을 보여준다.
왜 이런 일이 일어나는 걸까? 강화학습은 "정답을 맞히면 보상"이라는 단순한 규칙만 제공한다. 하지만 복잡한 문제에서 정답률을 높이려면, 자기 풀이를 검증하고 오류를 수정하는 전략이 효과적이다. 모델이 이것을 "발견"한 것이다. 누군가 가르치지 않아도, 보상을 최대화하는 과정에서 반성적 사고가 진화론적으로 선택된 셈이다.
DAPO 팀은 훈련 데이터도 공개했다. 17,000개의 수학 문제로 구성되며, 핵심적인 전처리가 적용되었다:
문제: 수학 답의 다양한 형식
수학 문제의 답은 분수, 무리수, 수식 등 다양한 형태를 가진다. 규칙 기반 보상 모델로 정답 여부를 판별하려면, 파싱이 정확해야 한다. 하지만 (a+√b)/c 같은 답을 문자열 비교로 검증하는 것은 매우 불안정하다.
해법: 정수 변환
모든 문제의 답을 정수(integer)로 변환했다. AIME 형식을 따라, 예를 들어:
(a+√b)/c이렇게 하면 규칙 기반 보상 모델이 단순한 정수 비교로 정확하게 정답 여부를 판별할 수 있다. 보상 해킹(reward hacking)의 위험을 원천 차단하는 것이다.
| 하이퍼파라미터 | 값 |
|---|---|
| 기본 모델 | Qwen2.5-32B |
| 옵티마이저 | AdamW, lr=1×10⁻⁶ |
| 워밍업 | 20 롤아웃 스텝 (선형) |
| 롤아웃 배치 | 512 프롬프트 |
| 프롬프트당 샘플 | G=16 |
| 미니배치 | 512 (롤아웃당 16회 그래디언트 업데이트) |
| ε_low / ε_high | 0.2 / 0.28 |
| 최대 생성 길이 | 20,480 토큰 |
| 기대 최대 길이 | 16,384 토큰 |
| 캐시 윈도우 | 4,096 토큰 |
| 평가 방법 | avg@32 (32회 반복 평균) |
| 추론 온도 | 1.0 |
| Top-p | 0.7 |
특히 avg@32(같은 문제를 32번 풀어 평균을 내는 것)이라는 평가 방법이 주목할 만하다. LLM의 추론은 확률적이므로, 한 번의 시도로 점수를 매기면 분산이 크다. 32회 평균은 모델의 실력을 정확히 측정하기 위한 것이다.
흥미로운 결정 하나: DAPO는 KL 발산 패널티를 완전히 제거했다.
기존 RLHF에서 KL 발산은 "모델이 원래 모델에서 너무 멀어지지 않게" 하는 안전장치였다. RLHF에서는 이것이 필수적이다 — 보상 해킹을 방지하기 위해.
하지만 DAPO의 Long-CoT 추론 훈련에서는 사정이 다르다. 모델이 "생각하는 방법"을 근본적으로 바꿔야 하기 때문에, 원래 모델에서 충분히 멀어져야 한다. KL 패널티는 오히려 이 과정을 방해한다. 또한 DAPO는 학습된 보상 모델 대신 규칙 기반 보상(정답이면 +1, 오답이면 -1)을 사용하므로, 보상 해킹의 위험이 낮다.
DAPO가 발표된 2025년 3월 이후, 이 논문은 대규모 LLM 강화학습의 사실상의 표준 참조점이 되었다. 왜일까?
2026년 현재, DAPO의 네 기법(Clip-Higher, Dynamic Sampling, Token-level Loss, Overlong Reward Shaping)은 대부분의 대규모 RL 시스템에 기본 구성 요소로 채택되고 있다.
DeepSeek-R1과 OpenAI o1이 보여준 "생각하는 AI"는 놀라운 능력이었지만, 그 훈련 방법은 소수의 대형 연구소에만 접근 가능했다. DAPO는 이 기술을 누구나 재현할 수 있게 만들었다.
이것의 의미는 크다. 수학, 과학, 코딩뿐 아니라 법률 추론, 의학적 진단, 비즈니스 분석 등 다양한 영역에서 도메인 특화 추론 모델을 훈련시킬 수 있는 길이 열린 것이다.
DAPO는 출발점이었다. 2025~2026년에 걸쳐 DAPO를 기반으로 한 후속 연구들이 쏟아졌다:
GRPO만으로는 대규모 Long-CoT RL이 불가능하다. 엔트로피 붕괴, 보상 노이즈, 손실 함수 불균형, 그래디언트 소멸이라는 4가지 숨겨진 문제를 해결해야 한다.
PPO 클리핑의 상한을 높여(0.2→0.28) 낮은 확률 토큰의 탐색을 허용, 엔트로피 붕괴 방지.
30 → 38점 (+8)잘린 응답에 즉사 벌점 대신 점진적 벌점 부여. 올바른 추론이 길이 때문에 억울하게 벌받는 것을 방지.
36 → 41점 (+5)샘플별이 아닌 토큰별 정규화로, 긴 고품질 답변의 학습 기여를 공정하게 반영.
41 → 42점 (+1, 안정성 대폭 향상)전부 정답/전부 오답인 그룹을 제외하고, 변별력 있는 샘플만으로 배치 구성.
42 → 50점 (+8, 최대 효과)DAPO 논문의 진정한 가치는 50점이라는 숫자가 아니다. "왜 30점밖에 안 나오는지"를 밝혀냈다는 것이다.
DeepSeek-R1이 "이 요리를 만들었다"고 보여줬다면, DAPO는 "그 요리를 만들 때 이런 실수를 하기 쉽고, 이렇게 해야 제대로 된다"를 레시피북으로 남겼다. 엔트로피가 붕괴하면 어떻게 되는지, 보상에 노이즈가 끼면 어떤 일이 벌어지는지, 긴 답변이 왜 제대로 학습되지 않는지 — 이 모든 "실패의 해부학"이 DAPO의 진짜 기여다.
AI 연구에서 성공 사례를 발표하는 것은 흔한 일이다. 하지만 "이 방법으로 해봤더니 안 됐고, 원인은 이것이었고, 이렇게 고쳤다"를 솔직하게, 그리고 재현 가능하게 공개하는 것은 드물다. DAPO는 그 드문 사례이며, 그래서 2026년 현재까지도 대규모 LLM 강화학습의 출발점으로 인용되고 있다.
참고 논문 및 자료