ai papers
Deepseek-R1에 대한 고찰과 PPO, GRPO
Junyoung Park · 2025-02-02 · 23 min
Preliminary
강화학습에 대한 고찰
우리는 로봇에게 어떤 일을 수행하게 시키고 싶다.
지금은 딥시크, 즉 LLM 모델에 대해 이야기하고 있으니 LLM 모델을 기준으로 말하면 ‘대답을 잘하게 만들기’쯤 되겠다. 옛말에 미운 놈 떡 하나 더 준다는 말이 있지만, 인공지능의 세상은 그리 호락호락하지 않다.
앞으로 우리는 예쁜 놈한테 떡 하나를 더 줄 것이다. 이러한 개념을 Reward, 즉 보상이라고 한다. 적절히 학습된 모델을 여러 질의응답 Environment에서 동작시키고, 대답을 잘했을 때 칭찬해주는 프로세스를 반복하여 더욱 대답을 잘하는 모델을 만들고자 하는 것이다.
Policy-based method의 발전
기존 강화학습 방식 중 하나인 Value-based method는 인공지능 모델이 취할 수 있는 각 행동의 가치를 평가하는 모델을 학습시킨다. 인공지능 모델은 현재 상태에서 특정 Action을 취했을 때의 Value를 판단하고, 그 가치에 따라 다음 행동을 결정한다.
이때 각 상황에서 어떤 행동을 취할지 결정하는 기준이 바로 Policy, 즉 정책이다. 그리고 행동의 가치를 판단하는 함수를 딥러닝으로 학습하자는 관점에서 등장한 대표적인 방법이 DQN(Deep Q-Network)이다.
Q-Network는 각 상태에서 수행 가능한 여러 행동의 기대 누적 보상을 추정한다. 즉, 즉각적인 Reward만 보고 행동을 선택하는 것이 아니라, 현재 행동이 미래에 가져올 가치까지 포함하는 Action-value function 를 학습함으로써 보상의 불안정성을 어느 정도 완화하고자 한다.
그러나 생각해보면 가치 판단 모델을 학습하는 최종 목적은 ‘각 행동의 가치를 정확히 판단하는 것’ 자체가 아니라, 궁극적으로 ‘가장 높은 가치를 가지는 행동을 선택하게 하는 것’이다.
그렇다면 모델이 취할 수 있는 모든 행동의 가치를 하나씩 평가하는 대신, 현재 상태에서 바람직한 다음 행동을 직접 예측하는 Policy 자체를 학습하는 것이 더 낫지 않겠는가라는 의문이 생긴다.
이 경우 행동 공간을 반드시 Discrete하게 정의할 필요도 없다. 정책 모델이 출력한 확률 분포를 바탕으로 다음 행동을 샘플링하고, 이러한 행동의 흐름이 좋은 결과를 가져왔을 때 보상을 주어 Policy 모델을 업데이트할 수 있다. 이러한 학습법이 바로 Policy Gradient이다.
강화학습에서는 에이전트가 환경과 상호작용하는 다양한 시뮬레이션을 가정한다. 하나의 시작 상태에서 행동을 반복하여 종료 상태에 도달하기까지의 과정을 Episode라고 부르며, Episode 내부에서 시간의 흐름에 따라 상태, 행동, 보상 등의 값이 순차적으로 발생한다.
결국 강화학습의 목적은 여러 Episode로부터 다양한 의사결정 과정을 수집하고, 모델이 가장 이상적인 의사결정 방식을 취했을 때 얻는 누적 Reward의 기댓값을 최대화하는 것이다.
정책은 미리 결정된 Rule-based 방식으로 구성할 수도 있지만, 딥러닝 기반 강화학습에서 정책은 일반적으로 신경망과 같이 Parameterized된다. 이때 정책은 라는 매개변수를 가지는 함수 로 표현하며, 각 State 에서 수행할 수 있는 Action 에 대한 확률 분포를 출력한다.
우리가 학습하려는 것은 특정 파라미터를 가진 Policy 모델이 행동했을 때 얻는 Reward의 기댓값이다. 이 목적 함수를 키우는 파라미터의 변화 방향이 바로 Policy Gradient이다.
사실 Policy의 Gradient를 직접 계산하는 과정은 순탄하지 않다. Reward의 기댓값은 정책 함수 가 어떤 행동을 선택했는지뿐만 아니라, 해당 정책에 의해 변화한 State의 방문 확률 분포에도 영향을 받기 때문이다.
정책이 바뀌면 행동 분포가 달라지고, 그에 따라 이후 방문하는 상태의 분포도 달라진다. 목적 함수에는 정책의 직접적인 영향과 State distribution을 거친 간접적인 영향이 함께 들어간다.
Policy Gradient Theorem은 이러한 복잡한 상태 분포의 미분을 명시적으로 계산하지 않고도 정책의 Gradient를 구할 수 있음을 보여준다. 이를 한 문장으로 단순화하면 다음과 같이 정리할 수 있다.
엄밀한 전개를 간단하게 살펴보자.
Policy Gradient Theorem에 따르면 위 Gradient는 다음과 같은 형태로 정리할 수 있다.
보상 함수는 각 State를 방문할 확률과, 해당 State에서 수행하는 행동의 기대 가치를 합한 형태로 표현된다. 이를 이해하기 위해 State value function의 Gradient를 전개하면 다음과 같다.
전체 식의 Gradient는 Product Rule에 따라 분배된다. 이때 는 현재 Reward와 미래 State value의 합으로 표현할 수 있다.
여기서 는 환경의 State transition probability이다. 환경의 전이 확률 자체가 정책 파라미터 에 직접 의존하지 않는다고 가정하면, Gradient는 다음 State의 Value 함수에만 적용된다.
이 수식에서는 다음 State value function의 Gradient가 현재 State value function의 Gradient 안에 재귀적으로 들어간다.
뒤에 포함된 를 다시 전개하면 그 안에는 가 포함된다. 이 과정을 미래 State 방향으로 계속 Unrolling할 수 있다.
아래 식에서 는 정책 를 따라 번의 Step 이후 State 에 도달할 확률을 간단히 표현한 것이다.
라고 정의하면 다음과 같이 전개할 수 있다.
현재 State에서 미래의 모든 State로 이동하는 경로를 전개한 것이다. 여기에 초기 상태 를 대입하면 다음과 같다.
여기까지 전개하면 정책 함수의 Gradient로 기대 누적 보상을 늘리는 방향을 계산할 수 있다.
실제로는 다음과 같은 Log-derivative trick을 이용하여 더 익숙한 형태로 표현한다.
Policy Gradient는 다음과 같다.
높은 가치를 얻은 행동은 Log probability를 높이고, 낮은 가치를 얻은 행동은 확률을 낮추는 방향으로 정책을 학습한다.
TRPO to PPO
앞서 본 내용은 Policy Gradient에 대한 기본적인 내용이었다. 그러나 Policy Gradient가 실제 LLM 강화학습에 적용되기까지는 학습 안정성을 높이기 위한 다양한 접근법이 제안 되었다.
지금부터 살펴볼 TRPO, PPO, GAE, GRPO가 이러한 발전 과정에 해당한다.
TRPO와 PPO 중 PPO가 현재 더 널리 활용되지만, PPO가 어떤 문제를 해결하고자 했는지 이해하려면 그 기반이 되는 TRPO를 먼저 살펴볼 필요가 있다.
TRPO에는 수학적으로 다소 어려운 내용이 포함된다. 가장 간단하게 설명하면 TRPO는 정책 모델을 학습할 때 다음과 같은 원칙을 적용하는 방법이다.
정책을 개선하되, 기존 정책으로부터 지나치게 멀어지지 않는 신뢰 가능한 구간 안에서만 업데이트하자.
그렇다면 대체 왜 신뢰 가능한 구간이 중요한 것일까?
Policy Gradient는 현재 정책으로부터 Trajectory를 수집하고, 각 행동이 가져온 보상을 바탕으로 정책을 업데이트한다.
예를 들어 우리가 걷기 시작하거나 뛰기 시작할 때 항상 같은 자세에서 시작하지는 않는 것과 같다. 에이전트는 시시각각 현재 상태에 따라 다음 행동을 결정하고, 그 행동을 수행한 결과로 다음 상태에 도달한다.
로봇이 어떤 행동을 수행했을 때 그 행동이 가져온 가치와 Reward를 수치화하고, 좋은 결과를 만든 행동의 확률을 높이는 방향으로 Policy를 업데이트한다. 이론적으로 이러한 과정이 안정적으로 반복된다면 정책에 따른 누적 Reward는 계속 증가해야 한다.
하지만 Policy Gradient가 알려주는 것은 기본적으로 현재 지점에서 Reward를 증가시키는 국소적인 방향이다. 그 방향으로 얼마나 크게 이동해야 하는지는 직접 알려주지 않는다.
Gradient 방향이 올바르더라도 한 번의 업데이트 크기, 즉 Step size가 지나치게 크면 Policy의 행동 확률 분포 자체가 크게 변할 수 있다.
그렇게 되면 이전 정책에서 수집한 Trajectory를 바탕으로 계산한 Advantage와, 업데이트된 정책이 실제로 방문하는 State distribution 사이에 큰 차이가 발생한다.
문제는 두 가지다.
- 어느 정도로 정책을 업데이트해야 기존의 좋은 행동을 파괴하지 않고 안정적으로 학습할 수 있는가?
- 기존 정책에서 수집한 데이터를 이용해 새로운 정책의 성능을 얼마나 정확히 예측할 수 있는가?
기존 정책을 , 새로운 정책을 라고 하자. 새로운 정책의 실제 성능은 다음과 같은 형태로 표현할 수 있다.
여기서 는 새로운 정책이 State 를 방문할 확률이고, 는 기존 정책을 기준으로 행동 가 평균적인 행동보다 얼마나 좋은지를 나타낸다.
문제는 새로운 정책의 State visitation distribution 를 정책 업데이트마다 정확하게 계산하기 어렵다는 점이다.
그래서 State visitation distribution을 기존 정책의 분포 로 대체한 Surrogate objective를 사용한다.
기존 정책과 새로운 정책이 같은 지점에서는 실제 목적 함수와 Surrogate objective의 값과 Gradient가 동일하다. 따라서 새로운 정책이 기존 정책에서 아주 조금만 변한다면, 를 증가시키는 것이 실제 성능 도 증가시키는 방향이라고 기대할 수 있다.
하지만 정책이 너무 크게 업데이트되면 State visitation distribution도 크게 달라지므로 이러한 근사는 정확하지 않게 된다.
TRPO는 이 문제를 해결하기 위해 새로운 정책이 기존 정책에서 일정 거리 이상 벗어나지 못하도록 KL divergence 제약을 적용한다.
목적 함수에서는 새로운 정책이 Advantage가 높은 행동의 확률을 높이도록 학습한다. 동시에 KL divergence가 일정 값 를 넘지 않도록 제한하여 정책이 한 번에 지나치게 크게 변하는 것을 방지한다.
엄밀히 말해 KL divergence는 대칭성을 만족하지 않으므로 수학적인 거리 Metric은 아니다. 다만 두 확률 분포의 차이를 나타내는 기준으로 사용할 수 있기 때문에 Trust region을 정의하는 데 활용된다.
TRPO의 가장 큰 어려움은 이러한 Constraint optimization을 일반적인 Gradient descent만으로 간단히 해결하기 어렵다는 점이다.
TRPO에서는 목적 함수를 1차 Taylor expansion으로 근사하고, KL divergence 제약을 2차 Taylor expansion으로 근사한다.
여기서 는 Surrogate objective의 Gradient이고, 는 KL divergence의 Hessian에 해당하는 Fisher Information Matrix이다.
최적화 문제는 대략 다음 형태가 된다.
이 문제의 해는 Natural Gradient 방향과 관련된 다음 형태를 가진다.
하지만 실제 대규모 신경망에서 행렬 전체를 계산하고 역행렬을 구하는 것은 현실적으로 불가능하다.
TRPO에서는 Fisher-vector product와 Conjugate Gradient를 이용하여 를 근사한다. 또한 최종 업데이트가 실제 KL constraint를 만족하는지 확인하기 위해 Line search를 적용한다.
TRPO가 Hessian 전체를 직접 계산하지는 않지만, 아래 절차는 여전히 필요하다.
- KL divergence의 2차 근사
- Fisher Information Matrix
- Fisher-vector product
- Conjugate Gradient
- Backtracking line search
이러한 방법은 Policy Gradient의 학습 안정성을 크게 개선했지만, 구현과 연산이 복잡하다는 문제가 있었다.
PPO에서는 TRPO의 이러한 복잡성을 줄이면서도 정책이 한 번에 지나치게 변하지 않도록 하는 방법을 제안한다.
PPO의 핵심은 기존 정책과 새로운 정책의 행동 확률 비율을 사용하는 것이다.
이 비율은 새로운 정책이 기존 정책에 비해 특정 행동의 확률을 얼마나 변화시켰는지를 나타낸다.
- : 새로운 정책이 해당 행동의 확률을 높였다.
- : 새로운 정책이 해당 행동의 확률을 낮췄다.
- : 기존 정책과 새로운 정책의 확률이 같다.
일반적인 Importance sampling 기반 Surrogate objective는 다음과 같다.
Advantage가 양수인 행동은 확률을 높이고, Advantage가 음수인 행동은 확률을 낮추게 된다.
하지만 가 지나치게 커지거나 작아지면 정책이 한 번에 크게 변화할 수 있다. PPO는 이를 방지하기 위해 비율을 과 사이로 Clipping한다.
예를 들어 Advantage가 양수라면 해당 행동의 확률을 높이는 것이 좋다. 하지만 비율이 보다 커진 이후에는 더 이상 추가적인 이득을 주지 않는다.
반대로 Advantage가 음수라면 해당 행동의 확률을 낮춰야 하지만, 비율이 아래로 내려가더라도 더 큰 이득을 주지 않는다.
정책 변화가 일정 범위를 벗어나면 Objective의 개선을 제한해 과도한 업데이트를 억제한다.
PPO의 Clipping은 TRPO의 KL trust region을 수학적으로 동일하게 보장하는 것은 아니다. 하지만 2차 미분, Fisher Information Matrix, Conjugate Gradient, Line search 없이도 일반적인 1차 Gradient optimization만으로 정책의 급격한 변화를 억제할 수 있다.
PPO는 TRPO의 목적을 다음처럼 더 단순한 방식으로 근사한다.
새로운 정책이 기존 정책에서 지나치게 멀어지지 않도록 하면서, Advantage가 높은 행동의 확률을 증가시키자.
Advantage Function
앞서 TRPO와 PPO의 수식에서는 대신 Advantage function 가 사용되었다.
Action-value function은 특정 State에서 특정 Action을 선택했을 때 얻을 수 있는 기대 누적 Reward를 의미한다.
State-value function은 현재 State에서 정책 를 따랐을 때 얻을 수 있는 평균적인 기대 누적 Reward이다.
Advantage function은 특정 행동의 가치가 해당 State에서의 평균적인 가치보다 얼마나 높은지를 나타낸다.
예를 들어 가 크더라도 해당 State에서 대부분의 행동이 모두 높은 가치를 가진다면 그 행동이 특별히 좋은 행동이라고 보기는 어렵다.
반대로 절대적인 Reward는 크지 않더라도 다른 행동보다 상대적으로 더 좋은 행동이라면 Advantage는 양수가 된다.
Advantage를 사용하는 또 다른 이유는 Policy Gradient의 분산을 줄일 수 있기 때문이다.
Policy Gradient는 다음과 같은 형태를 가진다.
여기서 State에만 의존하고 Action에는 의존하지 않는 Baseline 를 빼더라도 Gradient의 기댓값은 변하지 않는다.
를 사용하면 다음과 같다.
Value function을 Baseline으로 사용하면 Policy Gradient의 기댓값은 유지하면서도 분산을 감소시킬 수 있다.
그러나 실제 환경에서는 , , 를 정확하게 알 수 없기 때문에 데이터를 이용해 추정해야 한다.
이 추정 과정에서 등장하는 방법이 Generalized Advantage Estimation, 즉 GAE이다.
Generalized Advantage Estimation
PPO는 일반적으로 Policy model과 Value model을 함께 사용하는 Actor-Critic 구조로 구현된다.
Policy model은 행동을 선택하는 Actor 역할을 하고, Value model은 현재 State의 기대 누적 Reward를 추정하는 Critic 역할을 한다.
Critic이 추정한 Value function을 이용하면 Advantage를 계산할 수 있다. 가장 단순한 1-step Temporal Difference residual은 다음과 같다.
이는 현재 얻은 Reward와 다음 State의 추정 Value를 합한 값이 현재 State의 추정 Value보다 얼마나 큰지를 나타낸다.
이 값을 이용한 1-step Advantage estimator는 다음과 같다.
좀 더 먼 미래의 Reward까지 사용하면 -step Advantage estimator를 정의할 수 있다.
여기에는 Bias-Variance trade-off가 존재한다.
작은 를 사용하는 추정량은 미래 Reward를 Value model의 예측에 더 많이 의존한다. Value model이 부정확하면 편향이 발생할 수 있지만, 실제로 합산하는 Reward의 수가 적기 때문에 분산은 상대적으로 작다.
반대로 큰 를 사용하는 추정량은 실제로 관측한 Reward를 더 많이 활용하므로 Value model의 편향에는 덜 의존한다. 하지만 많은 미래 Reward와 Action sampling 결과가 포함되기 때문에 분산이 커진다.
두 경우의 차이는 아래처럼 볼 수 있다.
- 작은 : 높은 Bias, 낮은 Variance
- 큰 : 낮은 Bias, 높은 Variance
Generalized Advantage Estimation은 하나의 -step estimator만 선택하는 대신 여러 길이의 Advantage estimator를 가중 평균한다.
여기서 는 짧은 Horizon과 긴 Horizon의 비중을 조절한다.
각 -step Advantage를 TD residual로 표현하면 다음과 같다.
이를 GAE 수식에 대입하면 다음과 같다.
GAE는 미래의 TD residual에 에 따라 작아지는 가중치를 붙여 합산한다.
값에 따른 특성은 다음과 같다.
- : 1-step TD estimator와 동일하다. 분산은 작지만 Value model의 오차에 더 민감하다.
- : Monte Carlo return에 가까워진다. 편향은 줄어들지만 분산이 커진다.
- : Bias와 Variance 사이를 조절한다.
PPO에서는 일반적으로 GAE로 Advantage를 계산한 뒤, 이를 PPO clipped objective에 사용한다.
PPO가 정책의 업데이트 크기를 Clipping으로 제어한다면, GAE는 정책 업데이트에 사용되는 Advantage의 Bias와 Variance를 조절하는 역할을 한다.
두 방법은 서로 다른 문제를 해결한다.
- PPO clipping: Policy update의 안정성
- GAE: Advantage estimation의 안정성
PPO를 LLM에 적용하는 방법
LLM에 PPO를 적용하면 Policy는 다음 Token의 확률 분포를 출력하는 언어 모델이 된다.
Question 가 주어졌을 때, Policy model은 여러 Token으로 구성된 Output 를 생성한다.
각 시점 에서 State는 질문과 이전까지 생성한 Token이다.
Action은 다음에 생성할 Token 이다.
LLM에 적용된 PPO objective는 다음과 같이 표현할 수 있다.
여기서 Token 단위의 Policy ratio는 다음과 같다.
업데이트되기 전 파라미터가 이고, 업데이트되는 파라미터가 이다. 는 Dataset에서 Sampling된 질문이며, 는 Old policy가 생성한 답변이다.
LLM을 RLHF로 학습할 때는 일반적으로 다음과 같은 모델들이 필요하다.
- Policy model
- Value model
- Reward model
- Reference model
Policy model은 실제로 학습되는 언어 모델이다. Reward model은 질문과 전체 답변을 입력받아 답변의 선호도나 품질을 점수로 평가한다.
Value model은 각 생성 단계에서 앞으로 얻을 것으로 예상되는 Reward를 추정하며, GAE를 계산하는 데 사용된다.
Reference model은 일반적으로 초기 SFT 모델을 고정한 것이다. Policy가 Reward model을 속이거나 기존 언어 능력에서 지나치게 벗어나는 것을 방지하기 위해 Policy와 Reference model 사이에 KL penalty를 적용한다.
LLM RLHF에서 Token-level Reward는 개념적으로 다음과 같이 구성할 수 있다.
보통 Reward model이 출력하는 최종 Scalar reward는 답변의 마지막 Token에 부여하고, 중간 Token에는 KL penalty를 적용하는 방식으로 구현할 수 있다.
KL penalty는 Policy가 Reference model의 Token distribution에서 지나치게 멀어지는 것을 억제한다.
하지만 PPO 기반 LLM 학습에는 상당한 메모리가 필요하다. Policy model뿐 아니라 Value model, Reference model, Reward model의 Forward 연산이 함께 필요하기 때문이다.
특히 Policy와 비슷한 크기의 Value model을 따로 유지해야 한다는 점은 대규모 LLM 학습에서 큰 부담이 된다.
이 지점에서 DeepSeekMath가 제안한 GRPO의 아이디어가 등장한다.
GRPO
이전에 올렸던 글 중 챗지피티가 어떤 식으로 학습되었는지 설명하며 RLHF와 PPO를 간단하게 언급한 적이 있다.
DeepSeek는 일부 추론 모델 학습에서 PPO 대신 GRPO라는 자체적인 방법을 활용하였다. GRPO는 “DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models”에서 제안된 강화학습 방법이다.
GRPO는 Group Relative Policy Optimization의 약자다. 이름 그대로 하나의 질문에 대해 여러 답변을 생성하고, 답변 그룹 안에서 상대적인 Reward를 비교하여 Policy를 학습한다.
GRPO도 PPO와 마찬가지로 Old policy와 New policy 사이의 확률 비율을 사용하며, PPO-style clipping을 적용한다.
그러나 PPO와 가장 큰 차이는 별도의 Value model을 사용하지 않는다는 점이다.
PPO에서는 Value model이 각 Token State의 기대 누적 Reward를 추정하고, GAE를 이용해 Token별 Advantage를 계산한다.
반면 GRPO에서는 동일한 질문에 대해 여러 개의 답변을 생성하고, 각 답변이 그룹 평균보다 얼마나 좋은지를 기준으로 Advantage를 구성한다.
하나의 질문 에 대해 Old policy로부터 개의 답변을 Sampling한다고 하자.
각 답변을 Reward model 또는 Rule-based reward로 평가하여 다음 Reward를 얻는다.
이 Reward를 그룹 내에서 정규화하면 다음과 같은 Relative Advantage를 얻는다.
Reward가 그룹 평균보다 높으면 이고, 그룹 평균보다 낮으면 이 된다.
절대적인 Reward 크기 대신 같은 질문에서 생성된 다른 답변보다 얼마나 좋은지를 이용해 정책을 학습한다.
GRPO의 핵심적인 변화는 다음과 같다.
- PPO와 달리 별도의 Value model을 사용하지 않는다.
- Value model이 없기 때문에 GAE를 사용하지 않는다.
- 동일한 질문에 대해 여러 개의 답변 을 생성한다.
- 각 답변의 Reward를 그룹 평균과 표준편차를 이용해 정규화한다.
- 그룹 내 상대적인 Reward를 Advantage로 사용한다.
- PPO와 유사한 Policy ratio clipping을 적용한다.
- Reference model과의 KL penalty를 유지한다.
GRPO의 Group normalization과 GAE는 같은 방법이 아니다. Group normalization은 GAE의 Bias-Variance trade-off를 직접 해결하지 않는다.
GAE는 시간축상의 여러 -step return을 조합하여 Token trajectory에서 Advantage를 추정한다.
반면 GRPO는 동일 질문에 대해 생성된 여러 개의 완성 답변을 비교하여 별도의 Critic 없이 상대적인 Advantage를 구성한다.
두 방법은 서로 다른 축을 다룬다.
- GAE: 하나의 Trajectory 내부에서 시간축 방향의 Advantage 추정
- GRPO: 동일한 Prompt에서 생성된 여러 Response 사이의 상대적인 Reward 비교
GRPO의 목적 함수는 다음과 같이 표현할 수 있다.
여기서 Token 단위 Policy ratio는 다음과 같다.
답변 에 대해 계산된 하나의 Group-relative Advantage 는 일반적으로 해당 답변을 구성하는 Token들에 공통으로 적용된다.
GRPO에서 사용하는 KL term의 Sample estimator는 다음 형태로 표현된다.
은 에서 항상 0 이상이며 일 때 0이 된다. 따라서 Policy와 Reference distribution의 차이가 커질수록 Penalty가 증가한다.
GRPO의 가장 큰 장점은 Critic model을 제거함으로써 메모리 사용량을 줄일 수 있다는 점이다.
PPO에서는 Policy와 유사한 크기의 Value model을 학습해야 하고, Value loss와 GAE 계산도 필요하다. 반면 GRPO는 여러 Response의 상대적인 Reward를 이용하여 Advantage를 계산하므로 별도의 Value model이 필요하지 않다.
다만 Value model을 제거한 대가로 하나의 Prompt에 대해 여러 개의 Response를 Sampling해야 한다. 따라서 학습 효율은 Group size, Response length, Sampling 비용 등에 영향을 받는다.
GRPO를 한 문장으로 적으면 다음과 같다.
동일한 질문에 대한 여러 답변을 서로 경쟁시키고, 평균보다 좋은 답변의 확률은 높이고 평균보다 나쁜 답변의 확률은 낮추는 PPO 계열 강화학습 방법이다.
Methods / Approaches
DeepSeek-R1-Zero의 학습법
DeepSeek-R1-Zero는 DeepSeek-V3-Base를 Base model로 활용하고, GRPO를 주요 강화학습 방법으로 적용한 모델이다.
R1-Zero의 핵심적인 주장은 대규모 Supervised Fine-tuning 단계 없이도, Base LLM에 강화학습을 직접 적용하여 강한 수학 및 코딩 추론 능력을 유도할 수 있다는 점이다.
사람이 작성한 긴 Chain-of-Thought 데이터로 추론 방식을 먼저 가르치는 대신, 정답을 검증할 수 있는 문제에서 모델이 여러 추론 과정을 탐색하게 하고 좋은 결과에 높은 Reward를 부여한다.
DeepSeek-R1 계열의 Distillation model은 Ollama와 같은 환경에서 비교적 간단하게 실행해볼 수 있다. Output을 살펴보면 실제 답변을 출력하기 전에 별도의 추론 과정이 생성되는 것을 볼 수 있다.
개인적으로 MacBook Pro M3를 사용하고 있는데, 속도 측면에서는 deepseek-r1:14b 정도의 Distillation model까지는 비교적 편하게 실행할 수 있었다.
다만 이러한 Distillation model은 R1-Zero 자체가 아니라, R1이 생성한 추론 데이터를 이용해 Qwen이나 Llama 계열 모델을 Fine-tuning한 모델이다.
DeepSeek 계열 모델의 출력에서는 추론 과정이 별도의 영역으로 나타나는 것을 볼 수 있다. 공개된 예시와 일부 배포 템플릿에서는 이를 <think>와 </think> 사이에 표현하기도 한다.
특정 Tag를 출력했다는 사실보다, 정답을 찾는 동안 중간 추론과 검토, 재시도, 자기 수정 같은 행동 패턴이 나타났다는 사실이 더 흥미롭다.
R1-Zero에서는 결과 기반 또는 과정 기반 Neural reward model을 주요 Reward로 사용하기보다, 정답 여부를 검증할 수 있는 Rule-based reward를 활용하였다.
주요 Reward는 다음 두 종류로 구성된다.
- 정확성 보상은 응답의 최종 결과가 올바른지 평가한다. 수학 문제는 특정 형식으로 제시된 정답을 검증할 수 있으며, 코딩 문제는 Compiler와 Test case를 이용해 정답 여부를 평가할 수 있다.
- 형식 보상은 모델이 요구된 출력 형식을 준수했는지 평가한다. 예를 들어 추론 과정과 최종 답변을 지정된 구분 형식에 맞춰 출력했는지를 확인한다.
Rule-based reward는 학습된 Reward model과 달리 평가 기준이 명확하고 검증 가능하다는 장점이 있다.
특히 수학과 코딩 문제처럼 정답을 자동으로 확인할 수 있는 Task에서는 Reward hacking이나 Reward model의 오판 가능성을 상대적으로 줄일 수 있다.
흥미로운 점
학습 도중 발견된 흥미로운 현상으로 ‘Aha moment’가 언급된다. 처음에는 잘못 읽은 줄 알았지만 논문에서도 실제로 Aha moment라는 표현을 사용한다.
학습 중간 단계의 Policy model이 문제를 풀다가 기존 접근법의 오류를 스스로 인식하고, 다른 방법으로 다시 계산하거나 검증하는 패턴을 보였다는 것이다.
학습 중에는 답변 길이만 늘어난 것이 아니라 아래와 같은 패턴도 자연스럽게 나타났다.
- 기존 풀이 방식에 대한 재검토
- 오류 가능성 인식
- 다른 접근법 시도
- 계산 결과의 자체 검증
- 추론 시간의 자발적인 확장
답변을 생성하는 LLM은 Token 단위의 의사결정을 수행하는 하나의 Policy model이다.
이 Policy model에 대해 검증 가능한 Reward를 정의하고, 다양한 추론 경로를 탐색할 수 있도록 학습했더니 사람이 직접 추론 과정을 일일이 작성하지 않아도 자기 검토와 수정 패턴이 나타난 것이다.
다만 이를 인간과 동일한 의미의 자각이나 이해로 해석할 필요는 없다. 강화학습 과정에서 높은 Reward와 연결된 Token 생성 패턴이 강화된 것으로 보는 것이 더 적절하다.
DeepSeek-R1의 학습법
여기까지의 R1-Zero는 주로 수학과 코딩처럼 정답을 자동으로 검증할 수 있는 Task를 대상으로 한다.
하지만 실제 LLM은 더 다양한 Task에 적용되어야 한다. R1-Zero의 출력에도 다음과 같은 한계가 있었다.
- 가독성이 낮은 추론 과정
- 언어가 혼합되는 문제
- 일반적인 대화 및 지시 수행 능력의 부족
- 지나치게 길거나 정돈되지 않은 응답
DeepSeek-R1-Zero를 통해 확인한 결과는, Template과 강화학습의 조합만으로도 상당한 추론 능력을 유도할 수 있다는 점이었다.
그렇다면 다음과 같은 의문이 생긴다.
- 강화학습 초기 단계의 불안정성을 줄이기 위해 소량의 High-quality reasoning data를 먼저 학습하면 수렴 속도와 출력 품질을 개선할 수 있는가?
- 수학과 코딩뿐 아니라 일반적인 Task 성능을 강화하면서, Chain-of-Thought를 보다 일관되고 읽기 쉬운 형태로 만들 수 있는가?
이를 해결하기 위해 DeepSeek-R1은 Cold Start 방식을 사용하였다.
DeepSeek-V3-Base에 처음부터 곧바로 대규모 RL을 적용하는 대신, 수천 개 수준의 High-quality long Chain-of-Thought sample을 이용해 먼저 Supervised Fine-tuning을 수행한다.
Cold Start 데이터는 다음과 같은 방식으로 구성되었다.
- Few-shot prompting을 이용한 Long CoT 생성
- 모델이 생성한 답변에 대한 Reflection 및 Verification
- 사람이 작성한 답변
- R1-Zero의 읽기 어려운 답변을 정돈된 형식으로 재작성한 데이터
이 데이터는 모델에 모든 추론 능력을 직접 주입하기 위한 대규모 SFT 데이터라기보다, 이후 강화학습이 안정적으로 시작될 수 있도록 출력 형식과 기본적인 추론 패턴을 제공하는 역할을 한다.
Cold Start SFT 이후에는 R1-Zero와 유사한 Reasoning-oriented RL을 수행한다. 이 과정에서는 수학, 코딩, 과학, 논리 문제 등 검증 가능한 Task를 중심으로 학습한다.
하지만 Reasoning RL 과정에서 Language mixing 문제가 나타났다. 예를 들어 한 질문에 대한 추론 과정에 영어, 중국어 또는 다른 언어가 섞여 나올 수 있다.
이를 완화하기 위해 Language consistency reward를 추가하였다. 언어 일관성은 응답에서 목표 언어에 해당하는 단어가 차지하는 비율 등을 이용해 평가할 수 있다.
Language consistency reward를 추가하면 순수한 추론 Benchmark 성능이 일부 감소할 수 있지만, 실제 사용자 입장에서는 일관된 언어로 읽을 수 있는 답변이 더 중요하다고 판단한 것이다.
Reasoning RL 이후에는 약 80만 개 규모의 데이터를 구성하여 추가적인 SFT를 수행하였다.
이 데이터에는 크게 두 종류가 포함된다.
- 약 60만 개의 Reasoning 관련 Sample
- 약 20만 개의 일반적인 Non-reasoning Sample
Reasoning data에는 수학, 코딩, 과학, 논리 문제 등이 포함된다. 일부 문제에서는 모델이 생성한 여러 답변을 검증하거나, Generative reward model을 이용해 품질을 평가하였다.
Non-reasoning data에는 Writing, Factual QA, Self-cognition, Translation 등 일반적인 LLM Task가 포함된다.
이후 최종 단계에서는 모든 시나리오에 대한 추가 강화학습을 수행한다.
Reasoning Task에는 정확성 중심 Reward를 사용하고, 일반적인 대화 Task에는 Helpfulness와 Harmlessness를 평가하는 Reward model을 활용한다.
DeepSeek-R1의 전체 학습 과정을 단순화하면 다음과 같다.
- DeepSeek-V3-Base
- 소량의 High-quality CoT를 이용한 Cold Start SFT
- 수학·코딩 중심의 Reasoning RL
- Reasoning 및 일반 Task를 포함한 약 80만 개 데이터로 SFT
- Reasoning과 일반 선호도를 모두 포함하는 최종 RL
R1-Zero가 강화학습만으로 추론 능력이 출현할 수 있음을 보여준 실험에 가깝다면, R1은 이를 실제 사용 가능한 범용 LLM으로 다듬은 모델이라고 볼 수 있다.
Distilled Model
DeepSeek는 Distillation을 통해 원본 R1 모델보다 상대적으로 작은 모델들도 공개하였다.
Distilled model은 R1 자체의 파라미터를 단순히 압축한 모델이라기보다, R1이 생성한 추론 데이터를 이용하여 Qwen과 Llama 계열 Base model을 Supervised Fine-tuning한 모델이다.
DeepSeek는 R1 학습 과정에서 수집한 약 80만 개의 Sample을 Qwen 및 Llama 계열 모델의 Fine-tuning에 활용하였다.
Distillation model에는 별도의 대규모 RL을 다시 적용하지 않고, R1이 생성한 고품질 Reasoning trajectory를 SFT 방식으로 학습하였다.
큰 Teacher model이 어렵게 학습한 추론 패턴을 작은 Student model이 모방하도록 만든 셈이다.
실험 결과에서는 작은 모델에 직접 강화학습을 적용하는 것보다, 큰 R1 모델이 생성한 추론 데이터를 이용해 Distillation하는 방식이 더 높은 성능을 보이는 경우가 많았다.
이래서 금수저 집안이 좋은가 보다.
물론 작은 모델에 직접 RL을 적용한 결과가 의미 없다는 것은 아니다. 다만 제한된 모델 용량에서 탐색을 통해 추론 능력을 처음부터 발견하는 것보다, 이미 강한 Teacher가 생성한 추론 과정을 학습하는 편이 더 효율적이었던 것이다.
Distillation은 추론 능력을 작은 모델에 전달할 수 있다는 점에서 실용적이다. 하지만 Teacher가 생성한 데이터에 의존하기 때문에 Teacher의 오류, 표현 방식, 편향 역시 함께 전달될 수 있다.
Benchmark의 정량 수치가 실제 사용 경험을 모두 반영하지는 않는다. 추론 문제에서는 정답률과 함께 아래 요소도 살펴볼 필요가 있다.
- 추론 과정의 일관성
- 불필요하게 긴 답변의 빈도
- 잘못된 전제를 스스로 수정하는 능력
- 사용자의 지시를 따르는 능력
- 언어 혼용이나 형식 오류
- 실제 질문 분포에서의 안정성
내가 DeepSeek-R1에서 가장 흥미롭게 본 부분은 특정 Benchmark의 높은 점수보다 학습 방식이다.
Base model에 검증 가능한 Reward를 두고 강화학습을 적용하면, 사람이 모든 추론 과정을 직접 작성하지 않아도 장기적인 추론과 재검토, 자기 수정 같은 행동 패턴을 강화할 수 있다는 점을 큰 규모에서 보여주었다.