PPO (강화 학습)
더 많은 작업
- Proximal Policy Optimization, PPO; PPO
- 새 정책과 이전 정책의 확률비를 잘라 한 번의 갱신이 너무 커지지 않게 하면서, 같은 데이터로 여러 번 미니배치 갱신을 하는 정책 경사 알고리즘
PPO(Proximal Policy Optimization, 근접 정책 최적화)는 2017년 OpenAI의 존 슐먼(John Schulman) 등이 발표한 강화 학습 알고리즘이다.[1] 같은 저자의 TRPO(Trust Region Policy Optimization)가 KL 발산 제약 아래 2차 최적화로 얻던 안정성을, 확률비를 자르는(clipping) 1차 목적 함수 하나로 근사했다. 일반 정책 경사 방법이 표본 하나로 한 번만 갱신하는 데 비해, PPO는 모은 데이터로 여러 에포크의 미니배치 갱신을 해 표본 효율이 좋다.
OpenAI는 2017년 7월 PPO를 공개하며 쓰기 쉽고 성능이 좋아 자사의 기본 강화 학습 알고리즘이 되었다고 밝혔고,[2] 2018년 도타 2를 하는 OpenAI Five도 규모를 키운 PPO를 GPU 256개와 CPU 코어 12만 8천 개로 돌려 자기 대국으로 학습했다.[3] 이처럼 로봇 제어, 게임, 그리고 대형 언어 모델의 인간 피드백 기반 강화 학습(RLHF)에서 기본 알고리즘으로 쓰였다. InstructGPT와 ChatGPT의 강화 학습 단계가 PPO였다.[4][5] 이 문서는 알고리즘의 수식과 구현, 그리고 언어 모델에 적용할 때 달라지는 점을 다룬다. 정책 경사와 액터-크리틱의 기초는 정책 경사, 액터-크리틱 문서를 참고한다.
정책 경사의 기본 추정량은 다. 이 식은 현재 정책으로 모은 데이터에서만 맞으므로, 같은 데이터로 여러 번 갱신하면 정책이 데이터와 동떨어지고 성능이 무너질 수 있다. 이전 정책 로 모은 데이터를 쓰려면 중요도 표본 추출(importance sampling) 비율을 곱한 대리 목적 함수(surrogate objective)를 쓴다.
를 제약 없이 최대화하면 갱신이 지나치게 커진다. TRPO는 제약을 걸고 켤레 기울기법으로 풀었는데, 구현이 복잡하고 드롭아웃이나 정책·가치 공유 구조와 맞추기 어려웠다.[6]
PPO의 핵심 식은 다음과 같다.[1]
두 항 가운데 작은 쪽을 고르므로 결과는 원래 목적의 비관적 하한이 된다. 경우를 나누면 동작이 분명해진다.
| 어드밴티지 | 확률비 범위 | 선택되는 항 | 기울기 |
|---|---|---|---|
| (좋은 행동) | 있음. 확률을 올린다 | ||
| 0. 이미 충분히 올렸으므로 멈춘다 | |||
| (나쁜 행동) | 있음. 확률을 내린다 | ||
| 0. 이미 충분히 내렸으므로 멈춘다 |
즉 정책을 개선하는 방향으로 확률비가 를 벗어나면 기울기를 끊고, 반대로 정책을 나쁘게 만드는 방향의 변화는 자르지 않아 되돌릴 수 있게 한다. 논문의 MuJoCo 실험에서 을 0.1, 0.2, 0.3으로 바꿨을 때 정규화 점수는 각각 0.76, 0.82, 0.70이었고, 자르기도 KL 벌점도 없는 경우는 -0.39였다.[1]
어드밴티지 는 보통 일반화 어드밴티지 추정(Generalized Advantage Estimation, GAE)으로 구한다.[8] 한 단계 TD 오차를 로 두면 GAE는 그 지수 가중 합이다.
이면 한 단계 TD 오차 로, 분산은 작지만 가치 함수가 틀린 만큼 편향된다. 이면 실제 할인 이득에서 를 뺀 몬테카를로 추정으로, 편향은 없지만 분산이 크다. 는 그 사이를 조절하는 손잡이로, TD(λ)와 같은 구조다. 가치 함수의 학습 목표는 로 둔다.
논문의 액터-크리틱 형태 PPO는 다음과 같다.[1]
- 액터 개가 각자 현재 정책 로 환경을 단계 진행해 궤적을 모은다.
- 각 시점의 어드밴티지 를 GAE로 계산한다.
- 모은 개 표본으로 에포크 동안 크기 의 미니배치 SGD(보통 Adam)로 대리 손실을 최적화한다.
- 로 두고 1로 돌아간다.
| 하이퍼파라미터 | MuJoCo(100만 단계) | 아타리 |
|---|---|---|
| 수집 길이 | 2048 | 128 |
| Adam 학습률 | ||
| 에포크 | 10 | 3 |
| 미니배치 크기 | 64 | 32×8 |
| 할인율 | 0.99 | 0.99 |
| GAE | 0.95 | 0.95 |
| 액터 수 | (표에 없음) | 8 |
| 클리핑 | 0.2 | |
| , | 정책과 가치 신경망 분리, 엔트로피 없음 | 1, 0.01 |
아타리의 는 학습 동안 1에서 0으로 선형 감소한다. 논문은 아타리 49개 게임에서 학습 전체 평균 보상 기준으로 A2C 1개, ACER 18개, PPO 30개 게임에서 가장 높았다고 보고했다(마지막 100에피소드 기준으로는 ACER 28개, PPO 19개).[1]
GAE와 손실 계산 부분을 PyTorch로 쓰면 다음과 같다(PyTorch 2.5에서 실행 확인).
import torch
import torch.nn.functional as F
def compute_gae(rewards, values, dones, last_value, gamma=0.99, lam=0.95):
"""rewards, values, dones: [T] 텐서. last_value: 마지막 상태의 V(s_T)."""
T = rewards.shape[0]
advantages = torch.zeros(T)
gae = 0.0
for t in reversed(range(T)):
next_value = last_value if t == T - 1 else values[t + 1]
not_done = 1.0 - dones[t]
delta = rewards[t] + gamma * next_value * not_done - values[t]
gae = delta + gamma * lam * not_done * gae
advantages[t] = gae
returns = advantages + values # 가치 함수의 학습 목표
return advantages, returns
def ppo_loss(new_logp, old_logp, adv, new_v, ret, entropy,
clip_eps=0.2, vf_coef=0.5, ent_coef=0.01):
adv = (adv - adv.mean()) / (adv.std() + 1e-8) # 어드밴티지 정규화
ratio = torch.exp(new_logp - old_logp) # rho_t
surr1 = ratio * adv
surr2 = torch.clamp(ratio, 1 - clip_eps, 1 + clip_eps) * adv
policy_loss = -torch.min(surr1, surr2).mean() # L^CLIP의 부호를 바꿔 최소화
value_loss = F.mse_loss(new_v, ret)
return policy_loss + vf_coef * value_loss - ent_coef * entropy.mean()
old_logp는 데이터를 모을 때 계산해 고정해 두고, new_logp는 갱신할 때마다 다시 계산한다. 첫 미니배치에서는 둘이 같아 확률비가 1이어야 한다. 논문에 적히지 않았지만 성능에 큰 영향을 주는 구현 세부(어드밴티지 정규화, 가치 손실 클리핑, 관측 정규화, 학습률 감소, 기울기 노름 자르기 등)가 많다는 점이 이후 재현 연구에서 지적되었다.[9]
RLHF에서는 언어 모델을 정책으로, 토큰 하나를 행동으로, 지금까지의 프롬프트와 생성 토큰을 상태로 본다. 응답이 끝나면 보상 모델이 점수 하나를 준다.
같은 재현 연구는 20개 넘는 구현 세부를 정리했다. 언어 모델 PPO에서 특히 중요한 것은 다음과 같다.[12]
- 드롭아웃 끄기: 생성 단계와 학습 단계의 로그 확률이 달라지면 첫 에포크부터 확률비가 1이 아니게 되어 클리핑이 엉뚱하게 걸린다.
- EOS 처리: 정해진 길이만큼 생성한 뒤 EOS가 없으면 보상을 정의할 수 없으므로 낮은 점수를 준다. 튈루 3는 EOS로 끝나지 않은 응답에 -10을 주었다.[13]
- 보상과 어드밴티지 정규화(whitening): 미니배치 단위로 평균과 표준편차를 맞춘다. 보상 정규화는 응답을 짧게 만드는 경향이 있었다.
- 가치 모델 초기화: 보상 모델에서 초기화한다.
PPO는 하이퍼파라미터에 민감하고 메모리를 많이 써서, 2023년 이후 공개 모델의 선호 학습에는 직접 선호 최적화(DPO) 같은 오프라인 방법이 대안으로 쓰였다. 튈루 3도 선호 학습 단계에 DPO를 썼다.[13] 그러나 2024년 ICML 논문은 PPO를 제대로 조정하면 대화와 코드 생성 시험 환경 전체에서 DPO를 앞선다고 보고했고,[14] 반대로 RLHF에서는 PPO의 여러 구성 요소가 불필요하며 더 단순한 REINFORCE 계열이 PPO와 DPO를 모두 앞선다는 연구도 나왔다.[11] 추론 모델 학습에서는 가치 모델 없는 GRPO와 그 변형이 주류가 되었고, 튈루 3는 검증 가능한 보상 강화 학습에 PPO를 썼다.[13]
허깅 페이스 TRL은 라이브러리 출발점이었던 PPOTrainer를 2026년 9월 10일 v1.13.0에서 제거했다. 유지 보수가 끊겼고 입력 형식이 다른 트레이너와 맞지 않았다는 이유였다.[15] 현재 TRL로 온라인 강화 학습을 하려면 GRPOTrainer나 RLOOTrainer를 쓰고, 가치 모델을 쓰는 PPO가 필요하면 DAPO 공개 코드가 기반으로 삼은 verl 같은 별도 RL 프레임워크를 쓴다.[16]
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov, 〈Proximal Policy Optimization Algorithms〉, 2017. arXiv:1707.06347
- ↑ Proximal Policy Optimization, OpenAI, 2017-07-20.
- ↑ OpenAI Five, OpenAI, 2018-06-25.
- ↑ 4.0 4.1 Long Ouyang 외, 〈Training language models to follow instructions with human feedback〉, NeurIPS 2022. arXiv:2203.02155
- ↑ Introducing ChatGPT, OpenAI, 2022-11-30.
- ↑ 6.0 6.1 John Schulman 외, 〈Trust Region Policy Optimization〉, ICML 2015. arXiv:1502.05477
- ↑ Daniel M. Ziegler 외, 〈Fine-Tuning Language Models from Human Preferences〉, 2019. arXiv:1909.08593
- ↑ John Schulman 외, 〈High-Dimensional Continuous Control Using Generalized Advantage Estimation〉, ICLR 2016. arXiv:1506.02438
- ↑ Logan Engstrom 외, 〈Implementation Matters in Deep Policy Gradients: A Case Study on PPO and TRPO〉, ICLR 2020. arXiv:2005.12729
- ↑ 10.0 10.1 10.2 Zhihong Shao 외, 〈DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models〉, 2024. arXiv:2402.03300
- ↑ 11.0 11.1 11.2 Arash Ahmadian 외, 〈Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs〉, 2024. arXiv:2402.14740
- ↑ 12.0 12.1 12.2 Shengyi Huang 외, 〈The N+ Implementation Details of RLHF with PPO: A Case Study on TL;DR Summarization〉, 2024. arXiv:2403.17031
- ↑ 13.0 13.1 13.2 Nathan Lambert 외, 〈Tulu 3: Pushing Frontiers in Open Language Model Post-Training〉, 2024. arXiv:2411.15124
- ↑ Shusheng Xu 외, 〈Is DPO Superior to PPO for LLM Alignment? A Comprehensive Study〉, ICML 2024. arXiv:2404.10719
- ↑ TRL v1.13.0 릴리스 노트, 허깅 페이스, 2026-09-10.
- ↑ 16.0 16.1 Qiying Yu 외, 〈DAPO: An Open-Source LLM Reinforcement Learning System at Scale〉, 2025. arXiv:2503.14476
- Proximal Policy Optimization, OpenAI Spinning Up.