DAPO: 신호 없는 프롬프트를 버리고, 탐색을 살린다
DAPO: An Open-Source LLM Reinforcement Learning System at Scale (Yu et al., ByteDance Seed·Tsinghua AIR, arXiv 2025)
Introduction
#21에서 다룬 GRPO는 알고리즘으로는 깔끔하다. critic 없이 그룹 내 상대 보상만으로 advantage를 계산하고, PPO 스타일의 clipped surrogate objective로 업데이트한다. 그런데 이 알고리즘을 그대로 long-CoT 대규모 RL에 얹으면 학습 곡선이 곧 무너진다. 정책의 엔트로피가 급격히 떨어져 몇 가지 패턴만 반복하는 entropy collapse가 오고, 배치의 상당수가 아무 학습 신호도 주지 못한 채 낭비되고, 응답 길이가 통제 불가능하게 늘어나거나 반대로 아무 의미 없는 문자열로 채워진다.
DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization)는 이 문제들을 하나씩 겨냥한 네 가지 장치의 묶음이다. 이름에 담긴 앞의 두 가지, Clip-Higher와 Dynamic Sampling이 핵심이고, Token-Level Policy Gradient Loss와 Overlong Reward Shaping이 이를 보조한다. 어느 하나도 새로운 이론이 아니다. 전부 “왜 배치의 절반이 죽은 그래디언트인가”, “왜 탐색이 조기에 멈추는가” 같은 실전 관찰에서 출발한 엔지니어링이다.
결과만 먼저 보면, Qwen2.5-32B base 모델에 DAPO를 적용해 AIME 2024에서 50점을 찍었다. 이는 기존 SoTA였던 DeepSeek-R1-Zero-Qwen-32B의 47점을, 학습 스텝은 절반만 쓰고 넘어선 수치다. 이 글은 그 절반의 스텝 안에 무엇이 들어갔는지를 뜯어본다.
Background
GRPO의 objective는 #19 PPO의 clipped surrogate를 그대로 물려받는다.
\[\mathcal{L}_{clip}(\theta) = \mathbb{E}\Big[\min\big(r_t(\theta) A_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t\big)\Big]\]- \(r_t(\theta) = \pi_\theta(a_t \mid s_t) / \pi_{\theta_{old}}(a_t \mid s_t)\): importance sampling ratio
- \(A_t\): advantage
- \(\epsilon\): 클립 범위. PPO 원형에서는 상하 대칭으로 하나만 쓴다 (보통 0.2)
GRPO는 critic 없이 advantage를 그룹 내 상대 보상으로 대체한다. 같은 프롬프트에 대해 \(G\)개의 응답을 샘플링하고, 각 응답의 reward \(r_i\)를 그룹 평균·표준편차로 정규화한다.
\[A_i = \frac{r_i - \text{mean}(r_1, \ldots, r_G)}{\text{std}(r_1, \ldots, r_G)}\]이 정규화 방식이 DAPO가 손대는 문제들의 근원이다. 대칭 클리핑은 탐색의 방향을 비대칭적으로 제약하고, 그룹 상대 정규화는 그룹 안의 보상이 전부 같아지는 순간 신호를 잃는다. 이 둘을 먼저 이해해야 Clip-Higher와 Dynamic Sampling이 왜 필요한지가 보인다.
Method
한눈에 보는 네 가지 장치
| 기법 | 문제 | 해결 |
|---|---|---|
| Clip-Higher | 대칭 클리핑이 낮은 확률 토큰의 상승 여지를 막아 entropy collapse 유발 | 상한만 완화 (\(\epsilon_{low}=0.2\), \(\epsilon_{high}=0.28\)) |
| Dynamic Sampling | 그룹 전원 정답 또는 전원 오답이면 advantage가 0이 되어 그래디언트도 0 | 오버샘플링 후 정답률이 정확히 1 또는 0인 프롬프트 제거 |
| Token-Level Policy Gradient Loss | sample-level 평균이 긴 응답 안 토큰의 기여도를 희석, gibberish가 처벌을 피함 | 토큰 단위로 직접 평균 |
| Overlong Reward Shaping | 길이 초과 시 가혹한 페널티가 reward 노이즈를 만듦 | 허용 구간에서 soft 페널티 적용 |
1. Clip-Higher
PPO의 대칭 클리핑 \(\epsilon = 0.2\)는 확률이 이미 낮은 토큰의 성장 여지를 사실상 없애버린다. 논문이 드는 예시를 그대로 가져오면 이렇다. 확률 0.01인 토큰은 클리핑 상한 때문에 최대 \(0.01 \times 1.2 = 0.012\)까지밖에 오르지 못한다. 반면 확률 0.9인 토큰은 \(0.9 \times 1.2 = 1.08\)까지 오를 여지가 있다. 절대량으로 보면 저확률 토큰은 0.002만큼, 고확률 토큰은 0.18만큼 커질 수 있다는 뜻이다.
문제는 이 저확률 토큰들이 대개 탐색적인, 즉 아직 정책이 자신 없어 하지만 정답으로 이어질 수 있는 토큰이라는 데 있다. 상승 여지가 막히면 정책은 이미 확신하는 토큰으로만 확률을 몰아준다. 이게 반복되면 분포가 점점 뾰족해지는 entropy collapse로 이어진다.
DAPO는 클립 범위를 상하로 분리해 \(\epsilon_{low} = 0.2\), \(\epsilon_{high} = 0.28\)을 쓴다.
\[\mathcal{L}_{clip}(\theta) = \min\Big(r_t(\theta) A_t,\ \text{clip}\big(r_t(\theta),\ 1-\epsilon_{low},\ 1+\epsilon_{high}\big) A_t\Big)\]하한은 그대로 두고 상한만 키운 이유는 명확하다. 확률을 깎는 쪽은 이미 충분한 여지가 있고, 문제는 오직 낮은 확률 토큰이 올라갈 여지였기 때문이다. 상한을 0.28로 넓히면 저확률 토큰의 성장 폭이 커져 정책이 새로운 토큰을 계속 시도할 수 있고, 결과적으로 entropy collapse를 늦춘다.
2. Dynamic Sampling
GRPO의 advantage는 그룹 내 보상의 평균과 표준편차로 정규화된다. 이 정규화가 그룹 전체의 정답률이 극단으로 쏠리는 순간 정확히 0이 되어버린다.
토이 예제로 확인해보자. 그룹 크기 \(G=4\), 한 프롬프트에 네 번 샘플링했더니 전부 정답이라 reward가 \([1, 1, 1, 1]\)이라 하자. 평균은 1, 편차는 \([0,0,0,0]\), 표준편차는 0이다. 분자인 \(r_i - \text{mean}(r)\)이 애초에 전부 0이므로 표준편차가 0이든 아니든 advantage는 네 응답 모두 \(A_i = 0\)이다.
이제 같은 그룹 크기에서 정답과 오답이 섞인 경우, reward가 \([1, 1, 0, 0]\)이라 하자. 평균은 0.5, 표준편차는 0.5로 계산된다. 이때 advantage는 정답 응답에 \(A_i = (1-0.5)/0.5 = 1\), 오답 응답에 \(A_i = (0-0.5)/0.5 = -1\)이 된다. 정답 쪽은 확률을 밀어올리고 오답 쪽은 눌러내리는 뚜렷한 신호가 생긴다.
advantage가 0이면 policy gradient도 0이다. 두 항 모두 \(A_t\)에 곱해지는 clipped surrogate objective 구조상, \(A_t = 0\)인 샘플은 importance ratio가 무엇이든 그래디언트에 아무것도 기여하지 못한다. 즉 배치에 “전원 정답” 또는 “전원 오답” 프롬프트가 많이 섞일수록 실질 배치 크기가 줄고, 남은 소수 샘플의 노이즈에 학습이 더 민감해진다.
DAPO의 해법은 단순하다. 목표 배치 크기보다 더 많은 프롬프트를 오버샘플링한 뒤, 그룹 정답률이 정확히 1이거나 0인 프롬프트를 걸러내고, 정답과 오답이 섞인 “marginal” 프롬프트만으로 배치를 채운다. 매 배치가 학습 신호를 실제로 담고 있도록 강제하는 셈이다.
3. Token-Level Policy Gradient Loss
GRPO 원형의 손실은 각 응답 안에서 토큰 손실을 먼저 평균낸 뒤, 그 결과를 응답들끼리 다시 평균낸다.
\[\mathcal{L}_{GRPO}(\theta) = \frac{1}{G}\sum_{i=1}^{G} \frac{1}{\lvert y_i \rvert}\sum_{t=1}^{\lvert y_i \rvert} \ell_{i,t}(\theta)\]이 sample-level 평균에서는 길이와 무관하게 모든 응답이 동일한 가중치 \(1/G\)를 받는다. 토이 예제로 보면 왜 문제인지 바로 드러난다. \(G=2\), 한 응답은 길이 10, 다른 응답은 길이 100이라 하자. sample-level에서 짧은 응답의 토큰 하나는 \((1/2)\times(1/10) = 0.05\)의 가중치를, 긴 응답의 토큰 하나는 \((1/2)\times(1/100) = 0.005\)의 가중치를 받는다. 긴 응답 안의 토큰 하나하나는 짧은 응답의 토큰보다 10배 덜 중요하게 취급된다.
문제는 긴 응답 안에 섞인 무의미한 문자열(gibberish)도 이 희석된 가중치 아래 처벌을 피해간다는 데 있다. 긴 응답 안의 토큰들이 전체 손실에 불균형하게 적게 기여하는 구조이기 때문이다. #11 Length Correlations에서 다룬, reward 모델이 길이를 품질의 대리 신호로 오인하는 문제와 결이 같다.
DAPO는 토큰 단위로 직접 평균한다.
\[\mathcal{L}_{DAPO}(\theta) = \frac{1}{\sum_{i=1}^{G}\lvert y_i \rvert} \sum_{i=1}^{G}\sum_{t=1}^{\lvert y_i \rvert} \ell_{i,t}(\theta)\]같은 토이 예제에 적용하면 모든 토큰이 \(1/(10+100) \approx 0.0091\)의 균일한 가중치를 받는다. 짧은 응답의 토큰은 가중치가 줄고(0.05 → 0.0091) 긴 응답의 토큰은 가중치가 늘어난다(0.005 → 0.0091). 긴 시퀀스가 길이에 비례하는 그래디언트를 받게 되면서, 길이만 늘려 손실을 희석시키는 비정상적인 팽창을 억제한다.
4. Overlong Reward Shaping
길이 상한 \(L_{max}\)에 걸려 강제로 잘린 응답에 무조건 가혹한 페널티를 주면, 추론 과정 자체는 멀쩡한데 단지 길이 제한을 넘겼다는 이유만으로 벌을 받는 응답이 섞인다. 이는 reward에 노이즈를 얹는 것과 같다. 정책 입장에서는 “내용이 틀려서” 벌을 받았는지 “길어서” 벌을 받았는지 구분할 신호가 없다.
DAPO는 잘림 여부를 이분법으로 다루지 않고, 캐시 구간 \(L_{max} - L_{cache} < \lvert y \rvert \le L_{max}\) 안에서 soft 페널티를 적용한다.
\[R_{length}(y) = \begin{cases} 0, & \lvert y \rvert \le L_{max} - L_{cache} \\ \dfrac{(L_{max}-L_{cache}) - \lvert y \rvert}{L_{cache}}, & L_{max}-L_{cache} < \lvert y \rvert \le L_{max} \\ -1, & \lvert y \rvert > L_{max} \end{cases}\]허용 길이 안에서는 페널티가 없고, 캐시 구간에서는 길어질수록 페널티가 선형으로 커지며, 완전히 상한을 넘기면 최대 페널티를 받는다. 급격한 계단 함수 대신 완만한 경사를 주는 것만으로 reward 노이즈가 줄고, 그만큼 학습이 안정된다.
Experiments
| 모델 | 방법 | AIME 2024 | 학습 스텝 |
|---|---|---|---|
| DeepSeek-R1-Zero-Qwen-32B | (기존 SoTA) | 47점 | 100% (기준) |
| Qwen2.5-32B base | DAPO | 50점 | 50% |
숫자 자체보다 스텝 비율이 흥미롭다. 절반의 스텝으로 더 높은 점수를 냈다는 건 네 장치가 각자 다른 층위에서 낭비를 줄였다는 뜻이다. Dynamic Sampling은 배치마다 그래디언트가 실제로 흐르도록 만들어 스텝당 효율을 올리고, Clip-Higher는 탐색을 오래 유지시켜 정책이 조기에 국소해에 갇히지 않게 하며, Token-Level Loss와 Overlong Reward Shaping은 길이가 통제 불능으로 팽창하거나 reward가 노이즈에 잠식되는 것을 막아 학습 곡선 자체를 안정시킨다. 넷 중 하나만 있었다면 나머지 실패 모드가 그대로 남았을 것이다.
Conclusion
DAPO가 보여주는 메시지는, 대규모 RL에서 알고리즘의 이론적 순수성보다 “이 배치에 실제로 학습 신호가 들어 있는가”를 지키는 엔지니어링이 학습 곡선을 가른다는 것이다. Dynamic Sampling은 프롬프트 큐레이션의 대표 사례로 자리 잡았고, #42 reward를 어떻게 설계할 것인가에서도 같은 원리로 다시 인용된다. Clip-Higher와 advantage 0 그룹 필터링 아이디어는 DAPO 밖으로도 퍼져, #41 프론티어 모델의 reward 설계에서 다루는 Magistral도 같은 두 장치를 채택한다.
다만 이 모든 장치는 검증 가능한(rule-based) reward가 있는 도메인, 즉 수학·코드처럼 정답이 명확히 채점되는 상황을 전제로 한다. Dynamic Sampling도 오버샘플링만큼 추론 비용이 늘어난다는 대가를 치른다. DAPO는 GRPO라는 근본 골격을 바꾼 게 아니라, 그 골격이 대규모에서 실제로 굴러가게 만드는 네 개의 버팀목을 세운 작업에 가깝다.
RLHF Reward 설계 시리즈
이 글은 RLHF Reward 설계 시리즈의 스물일곱 번째 글이다.
1부. 지형도
- Deep RL from Human Preferences (Christiano 2017) — 선호로 보상을 배우는 원형
- InstructGPT (Ouyang 2022) — RLHF 3단계 표준 레시피
- HH-RLHF (Bai 2022) — helpful·harmless preference model
2부. 스칼라 RM 해부
- Rethinking Bradley-Terry (2024) — reward 변환의 수학적 기반
- Secrets of RLHF II (2024) — 선호 데이터 노이즈와 RM 일반화
- Skywork-Reward (2024) — 데이터 큐레이션이 아키텍처를 이긴다
- ArmoRM (2024) — 다목적 분해와 MoE 게이팅
- Llama 2 (2023) — helpfulness·safety RM 분리 프로덕션 레시피
- RewardBench 2 (2025) — RM을 어떻게 평가할 것인가
3부. Reward Hacking
- Overoptimization Scaling Laws (2022) — Goodhart의 법칙 정량화
- Length Correlations in RLHF (2023) — 성능 향상의 얼마가 길이인가
- ODIN (2024) — 길이를 reward에서 분리
- WARM (2024) — weight averaging으로 hacking 방어
4부. 안전성 정렬
- Safe RLHF (2023) — 안전성을 reward가 아니라 제약으로
- Rule-Based Rewards (2024) — 안전 규칙을 reward로 직접 번역
- Deliberative Alignment (2024) — 안전 명세를 모델의 추론 안으로
- Shallow Safety Alignment (2024) — 정렬은 첫 몇 토큰에만 얹혀 있다
- OR-Bench (2024) — 과잉 거절을 어떻게 측정할 것인가
5부. reward를 정책으로
- PPO (2017) — clipped surrogate objective
- Secrets of RLHF I (2023) — PPO 학습 안정화 트릭
- GRPO / DeepSeekMath (2024) — value network를 버리다
- RLOO (2024) — REINFORCE로 충분한가
- DPO (2023) — reward를 없애면 어떻게 되는가
- SimPO (2024) — reference-free + 길이 정규화
- KTO (2024) — 선호 쌍 없이 이진 신호만으로
- GSPO (2025) — importance ratio를 시퀀스 단위로
- (현재 글) DAPO (2025) — 신호 없는 프롬프트를 버린다
6부. Process & Verifiable Reward
- Let's Verify Step by Step (2023) — 과정 감독이 결과 감독을 이긴다
- Math-Shepherd (2023) — 사람 라벨 없는 PRM
- DeepSeek-R1 (2025) — RLVR, 규칙이 reward가 될 때
7부. Generative Reward Model
- Prometheus 2 (2024) — 오픈 평가자 모델과 rubric 조건부 평가
- Generative Verifiers (2024) — reward를 next-token prediction으로
- Generative Reward Models (2024) — GenRM과 선호 학습의 결합
- Self-Taught Evaluators (2024) — 사람 라벨 없이 judge를 키우다
- DeepSeek-GRM / SPCT (2025) — inference-time scaling
8부. 생각하는 Judge, 그리고 그 신뢰
- ReasonGRM (2025) — reasoning 능력을 judge에 이식
- J1 (2025) — RL로 judge를 생각하게 만들기
- Rubrics as Rewards (2025) — 비검증 도메인으로
- CriticEval (2024) — judge 자체를 어떻게 평가하나
- One Token to Fool LLM-as-a-Judge (2025) — GenRM도 뚫린다
9부. 실전 종합
- 프론티어 모델의 reward 설계 (2025~2026) — 열 개 모델이 실제로 택한 것
- reward를 어떻게 설계할 것인가 — 시리즈를 관통한 RM 설계 원칙 한 장
본 시리즈는 42편으로 구성된다.
참고 문헌
- Yu et al., 2025. DAPO: An Open-Source LLM Reinforcement Learning System at Scale.
- Shao et al., 2024. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models.
- Schulman et al., 2017. Proximal Policy Optimization Algorithms.
- DeepSeek-AI, 2025. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning.
Enjoy Reading This Article?
Here are some more articles you might like to read next: