qcoding

[AI논문리뷰-강화학습] PPO - TRPO의 복잡함을 버리고 Clip으로 안전한 정책 업데이트를 실현한 OpenAI 실용 강화학습 본문

AI논문리뷰-강화학습

[AI논문리뷰-강화학습] PPO - TRPO의 복잡함을 버리고 Clip으로 안전한 정책 업데이트를 실현한 OpenAI 실용 강화학습

Qcoding 2026. 5. 1. 14:47
반응형
논문  Proximal Policy Optimization Algorithms 저자  Schulman et al. (OpenAI) 학회/연도  arXiv preprint, 2017 arXiv  1707.06347

📄 한 문단 요약

PPO(Proximal Policy Optimization)는 OpenAI가 2017년 제안한 정책 경사 알고리즘으로, TRPO의 수학적 복잡성(2차 미분, conjugate gradient)을 제거하면서 동일한 "안전한 업데이트 보장"을 단순한 Clip 연산 하나로 대체한다. 정책 비율 r_t = π/π_old를 [1−ε, 1+ε] 범위로 자르는 것만으로 정책이 급격히 변하는 것을 막고, MuJoCo 연속 제어 7개 환경에서 TRPO·A2C·ACKTR를 대부분 능가했다. 구현이 간단하고 GPU 병렬 수집에 친화적이어서 이후 InstructGPT/ChatGPT RLHF의 핵심 RL 알고리즘으로 채택된다.

이 논문은 무엇을 해결하려고 했나?

딥강화학습의 정책 경사 계열 알고리즘은 오랫동안 두 가지 딜레마 사이에서 고민해왔다. 한쪽에는 REINFORCE·Vanilla PG 같은 단순한 방법이 있다. 구현은 쉽지만 업데이트 폭을 제어하지 못해 한 번의 나쁜 업데이트가 정책을 무너뜨리고, 이후 복구가 불가능하다. 샘플 효율도 낮아 수백만 번의 환경 상호작용이 필요하다.

반대쪽에는 **TRPO(Trust Region Policy Optimization)**가 있다. 정책 업데이트를 KL-divergence 제약 내에서만 허용해 안전한 학습을 보장하지만, 2차 미분(Hessian)과 conjugate gradient 계산이 필요해 구현이 복잡하다. 특히 네트워크가 dropout이나 parameter sharing을 포함하면 이론적 보장이 흔들리고, 코드 라인 수도 수배 늘어난다.

PPO는 이 간극을 채우려 한다. 핵심 질문은 단 하나다: TRPO의 복잡한 수학을 버리고, 같은 안전성을 더 단순한 방법으로 달성할 수 있는가? 답은 "Clip"이었다.

배경지식과 핵심 키워드

배경지식과 핵심 키워드

정책 경사(Policy Gradient)
파라미터 θ를 직접 최적화해 기대 누적 보상 J(θ) = E[Σ r_t]를 최대화하는 방법. 그래디언트 ∇J(θ) = E[∇log π(a|s) · A]를 추정해 SGD로 업데이트한다.
PPO는 이 정책 경사 기반이지만 old policy의 데이터를 재사용(off-policy 스타일 미니배치)하는 것이 핵심 차별점이다.
갱신 보폭을 제한하지 않으면 정책이 한 스텝에 크게 변해 성능이 급락하는 문제가 있다 — 이를 막는 것이 Clip의 목적이다.
TRPO (Trust Region Policy Optimization)
Schulman et al. 2015이 제안. KL-divergence 제약 E[KL[π_old, π]] ≤ δ 하에 surrogate objective를 최대화. 이론적으로 단조 개선을 보장한다.
PPO는 TRPO의 직접적인 후속으로, 동일 저자 그룹이 작성했다. TRPO의 보장을 유지하면서 1차 최적화만 사용하도록 단순화하는 것이 목표다.
TRPO 제거로 conjugate gradient, Fisher-vector product 계산이 필요 없어지고 코드가 대폭 단순해진다.
Importance Sampling 비율 r_t(θ)
r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t). old policy로 수집한 데이터를 new policy에 대한 gradient 추정에 재사용하기 위한 보정 가중치다.
r_t = 1이면 두 정책이 동일한 것이고, r_t > 1이면 new policy가 해당 행동을 더 선호한다는 의미다.
PPO-Clip은 r_t를 [1−ε, 1+ε] 범위로 제한(ε=0.2)해, 데이터 재사용 범위를 안전하게 통제한다.
Surrogate Objective L^CPI
Conservative Policy Iteration(CPI) 목적함수: L^CPI(θ) = E[r_t(θ) · Â_t]. r_t · A를 최대화하면 좋은 행동을 강화한다.
PPO 이전에는 이 목적함수를 제약 없이 극대화하면 정책이 과도하게 변하는 문제가 있었다.
PPO-Clip은 L^CPI를 Clip 함수로 감싸서 r_t가 [1−ε, 1+ε]을 넘어선 이후 gradient 기여를 차단한다.
GAE (Generalized Advantage Estimation)
Â_t = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}, δ_t = r_t + γV(s_{t+1}) − V(s_t). γ=0.99, λ=0.95를 사용.
TD(0)(λ=0)은 분산이 낮지만 편향이 크고, Monte Carlo(λ=1)는 편향이 없지만 분산이 크다. GAE는 λ로 이 트레이드오프를 제어한다.
PPO는 GAE를 어드밴티지 추정기로 사용해 더 안정적인 학습을 달성한다. λ=0.95에서 MuJoCo 실험 최적 성능이 나왔다.
Actor-Critic 구조
Policy network(Actor)와 Value network(Critic)를 동시에 학습. PPO는 파라미터를 공유하는 단일 네트워크에 두 출력 헤드를 달거나 별도 네트워크를 쓴다.
Critic의 value loss: L^VF = (V_θ(s_t) − V_t^target)^2. 전체 손실: L = L^CLIP − c1·L^VF + c2·S[π_θ](s_t).
c1=1.0, c2=0.01. 엔트로피 보너스 S는 탐색을 유지하는 역할이며 에이전트가 지나치게 결정론적이 되는 것을 방지한다.
KL Penalty 방식 (PPO-KL)
L^KLPEN = E[r_t(θ) · Â_t − β · KL[π_θ_old(·|s_t), π_θ(·|s_t)]]. KL이 목표 δ보다 크면 β를 2배, 작으면 0.5배로 적응적 조정한다.
이론적으로 TRPO와 더 가깝지만 실험에서 Clip 방식이 더 좋은 성능을 보였다.
β 적응 규칙: KL > 1.5δ → β ← 2β; KL < δ/1.5 → β ← β/2. 목표 δ는 보통 0.01.
미니배치 SGD (on-policy 재사용)
T 스텝 샘플을 수집한 후, 같은 데이터로 K번(K=10) 미니배치 SGD를 반복한다. 미니배치 크기 M (MuJoCo: 32, Atari: 256).
On-policy 알고리즘(A2C 등)은 데이터를 한 번만 쓰고 버리지만, PPO는 Importance Sampling으로 보정해 재사용한다.
이 덕분에 동일 환경 상호작용 수 대비 더 많은 gradient 업데이트가 가능해 샘플 효율이 올라간다.
병렬 환경 수집 (N workers)
N개의 환경에서 동시에 T 스텝씩 수집해 NT개의 경험을 미니배치로 나눈다. MuJoCo: N=1(단일), Atari: N=8 병렬 환경.
A3C처럼 비동기 멀티스레드가 아니라 동기 수집이라 재현성이 높고 GPU 활용이 쉽다.
Atari에서 T=128, 8 workers → 미니배치 NT=1024, 4 미니배치(M=256)로 나눔. 3 epoch(K=3) 반복.
MuJoCo / Roboschool (연속 제어)
연속 행동 공간(관절 토크 등)을 제어하는 물리 시뮬레이션. PPO는 HalfCheetah, Hopper, Walker2d, Ant 등 7개 MuJoCo 환경에서 실험.
비교 대상: TRPO, A2C, CEM(Cross-Entropy Method), ACKTR. PPO는 3×10^6 스텝 기준 대부분 환경에서 1위 또는 2위.
네트워크: 2층 64 유닛 tanh MLP. Roboschool Humanoid(17관절, 376 obs)에서는 TRPO 대비 약 3배 빠른 수렴을 보인다.

핵심 인사이트

PPO의 핵심은 "Importance Sampling으로 데이터를 재사용하되, r_t를 Clip해서 재사용 범위를 제한"하는 것이다. GAE가 어드밴티지 추정의 분산을 잡아주고, 미니배치 K회 반복이 샘플 효율을 높이며, Clip이 정책 붕괴를 막는다 — 이 세 요소가 조합되어 TRPO보다 단순하면서 동등하거나 더 나은 성능을 낸다.

기존 방법의 한계

**Vanilla Policy Gradient (REINFORCE)**는 구현이 단순하지만 업데이트 보폭을 제어하지 않아 학습이 불안정하다. 한 번의 큰 스텝으로 정책이 완전히 다른 분포로 이동하면, 그 이후 수집하는 데이터 자체가 나빠져 복구가 어렵다.

TRPO는 이 문제를 KL 제약으로 해결했지만 대가가 크다. Hessian-vector product와 conjugate gradient 반복이 필요해 backward pass가 일반 SGD보다 훨씬 복잡하다. Batch normalization, dropout, parameter sharing 같은 아키텍처에 적용하기도 어렵다. 분산 학습에서 Fisher matrix 근사가 부정확해지는 문제도 있다.

A3C/A2C는 구현이 쉽고 빠르지만, 수집한 on-policy 데이터를 단 한 번만 사용하고 버리기 때문에 샘플 효율이 낮다. MuJoCo 같은 시뮬레이션 비용이 높은 환경에서는 치명적 약점이다.

PPO는 이 세 방법의 약점을 동시에 보완한다. REINFORCE의 불안정성 → Clip으로 해결. TRPO의 복잡성 → 1차 최적화만으로 해결. A3C의 샘플 비효율 → K회 미니배치 재사용으로 해결.

제안 방법의 핵심 아이디어

PPO의 핵심은 Clipped Surrogate Objective다.

L^CLIP(θ) = E_t [ min( r_t(θ)·Â_t,  clip(r_t(θ), 1−ε, 1+ε)·Â_t ) ]

여기서 r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t), ε = 0.2.

작동 원리를 두 경우로 나눠 보면 명확하다:

어드밴티지가 양수(Â_t > 0)일 때: 그 행동은 좋은 행동이므로 더 자주 선택하도록 r_t를 높이고 싶다. 하지만 r_t가 1+ε을 넘어서면 min 함수가 clip된 값을 선택하므로, gradient가 0이 된다. 즉, 아무리 좋은 행동이어도 정책 비율이 1.2를 넘으면 더 이상 강화하지 않는다.

어드밴티지가 음수(Â_t < 0)일 때: 나쁜 행동이므로 r_t를 낮추고 싶다. r_t가 1−ε 아래로 내려가면 clip이 작동해 gradient가 0이 된다. 나쁜 행동을 지나치게 억제하는 것도 막는다.

결과적으로 pessimistic bound(하한선)를 목적함수로 쓰는 것과 같다. 정책이 너무 많이 바뀌어 Importance Sampling 보정이 의미 없어지는 영역에서는 gradient 기여를 차단한다.

전체 목적함수(공유 파라미터 버전):

L = L^CLIP − c₁·L^VF + c₂·S[π_θ]

L^VF = (V_θ(s_t) − V_t^target)²
S[π_θ] = −Σ π(a|s) log π(a|s)   (엔트로피)

c₁ = 1.0,  c₂ = 0.01

모델 구조/알고리즘 흐름

PPO-Clip 알고리즘 (의사 코드 요약):

초기화: 정책 π_θ, 가치 함수 V_φ

for iteration = 1, 2, ... do:
  // 1. 데이터 수집 (N 병렬 환경 × T 스텝)
  for actor = 1..N do:
    π_θ_old 로 T 스텝 실행
    (s_t, a_t, r_t, s_{t+1}) 저장

  // 2. 어드밴티지 추정 (GAE, λ=0.95, γ=0.99)
  Â_t = GAE(r, V; γ, λ)

  // 3. 미니배치 K회 SGD
  for k = 1..K do:
    NT개 경험을 M 크기 미니배치로 무작위 분할
    각 미니배치에서 L^CLIP + Value Loss + Entropy Loss 계산
    Adam으로 θ 업데이트

  θ_old ← θ

MuJoCo 하이퍼파라미터:

  • 수집 스텝 T = 2048, 에포크 K = 10, 미니배치 M = 64 (NT/M ≈ 32 미니배치)
  • ε = 0.2, learning rate = 3×10⁻⁴ (Adam), 네트워크: 2층 64 tanh MLP

Atari 하이퍼파라미터:

  • 병렬 환경 N = 8, T = 128, 에포크 K = 3, 미니배치 M = 256
  • ε = 0.1, lr = 2.5×10⁻⁴ → 0 선형 감소, c₁ = 1.0, c₂ = 0.01
  • 입력: 84×84 그레이스케일 4 프레임 스택, CNN + FC 아키텍처

논문 그림/표로 이해하기

PPO-Clip 목적함수와 기존 CPI 목적함수의 CartPole 1 스텝 업데이트 비교
원문 Figure 1: Clipped surrogate vs CPI surrogate (CartPole 1 업데이트 비교). 출처: Schulman et al., "Proximal Policy Optimization Algorithms", arXiv 2017. arXiv:1707.06347 — arXiv 라이선스 하에 인용.

Figure 1은 Clip 목적함수의 작동을 직관적으로 보여준다. 가로축이 r_t(정책 비율), 세로축이 목적함수 값이다. 어드밴티지 양수(위)와 음수(아래) 두 경우 모두, Clip(빨간 선)이 CPI(파란 선)보다 더 낮은 값(pessimistic bound)을 취한다. 정책 비율이 [0.8, 1.2] 구간을 벗어나면 목적함수가 평탄해져 gradient가 0에 수렴한다 — 이것이 Clip의 핵심이다.

MuJoCo 7개 연속 제어 환경에서 PPO와 TRPO, A2C, ACKTR, CEM 학습 곡선 비교
원문 Figure 2: MuJoCo 연속 제어 7개 환경 학습 곡선. 출처: Schulman et al., "Proximal Policy Optimization Algorithms", arXiv 2017. arXiv:1707.06347 — arXiv 라이선스 하에 인용.

MuJoCo 7개 환경(HalfCheetah, Hopper, Walker2d, Ant, InvertedDoublePendulum, InvertedPendulum, Reacher)에서 3×10⁶ 스텝 학습 결과다. PPO는 대부분 환경에서 TRPO와 동등하거나 우수하며, A2C·CEM을 상당한 격차로 앞선다. ACKTR과는 경쟁적이나 PPO가 더 단순한 구현으로 비슷한 성능을 낸다는 점이 중요하다.

PPO 6가지 변형(No clipping, Clip, KL fixed, KL adaptive, Value clip, Entropy bonus)의 연속 제어 ablation
원문 Figure 4: PPO 변형 ablation (연속 제어 9개 환경 평균). 출처: Schulman et al., "Proximal Policy Optimization Algorithms", arXiv 2017. arXiv:1707.06347 — arXiv 라이선스 하에 인용.

Ablation은 6가지 목적함수 변형을 비교한다:

  • No clipping/penalty: 성능이 가장 낮고 불안정
  • Clipping(ε=0.2): 전반적으로 가장 높은 성능
  • KL penalty (fixed β): Clip보다 낮음
  • KL penalty (adaptive β): Clip과 경쟁적이지만 약간 낮음

Clip이 KL penalty보다 일관되게 좋다는 것이 논문의 핵심 실험 결론이다.

실험 설정과 결과 해석

MuJoCo 연속 제어 비교:

알고리즘 HalfCheetah Hopper Walker2d
TRPO 1,682 2,498 2,867
A2C 1,338 1,855 1,281
ACKTR 1,612 3,157 2,761
✦ PPO (Clip) 1,795 2,164 3,144
논문 Table 1 일부 재구성 (3×10⁶ 스텝 평균 에피소드 보상). 전체 7개 환경에서 PPO가 평균 최고 순위.

Atari 결과: 49개 Atari 게임에서 PPO는 A2C를 30% 이상 환경에서 앞섰고, ACER(experience replay 사용)와 경쟁적이다. Atari에서는 MuJoCo만큼 압도적이지 않지만, 단순한 on-policy 설정에서 이 수준의 성능을 낸다는 것이 의미 있다.

Roboschool Humanoid: 17관절, 376차원 관측의 복잡한 환경. PPO가 3억 스텝에서 TRPO의 목표 성능에 도달한 반면, TRPO는 수억 스텝이 더 필요했다 — 정책 업데이트를 더 효율적으로 활용하는 PPO의 강점이 고차원 환경에서 두드러진다.

핵심 인사이트

PPO는 단일 알고리즘으로 연속 제어(MuJoCo)와 이산 행동(Atari) 모두에서 경쟁력 있는 성능을 낸다. 알고리즘 하나로 다양한 문제를 커버할 수 있다는 것은 실용성 측면에서 큰 장점이며, 이것이 PPO가 RL 기본 베이스라인으로 자리잡은 이유다.

한계와 비판적 관점

1. Clip ε의 민감성: ε=0.2는 논문의 기본값이지만 환경에 따라 최적값이 다르다. 보상 스케일이 큰 환경이나 연속 행동 차원이 높을수록 적절한 ε을 찾기 어렵고, 잘못 설정하면 오히려 TRPO보다 불안정해진다.

2. 이론적 보장의 부재: TRPO는 단조 개선(monotonic improvement)을 수학적으로 증명한다. PPO-Clip은 경험적으로 좋은 성능을 보이지만, Clip이 실제로 TRPO의 KL 제약과 동등하다는 이론적 증명은 없다. 단지 "실험적으로 잘 동작한다"는 것이다.

3. 하이퍼파라미터 수: 겉보기엔 단순하지만 ε, K(에포크), T(수집 스텝), λ(GAE), c₁, c₂, 학습률, 미니배치 크기까지 튜닝해야 할 파라미터가 여전히 많다. 이 조합을 잘못 설정하면 기대 성능이 나오지 않는다.

4. 샘플 효율의 한계: Off-policy 알고리즘(SAC, TD3)에 비해 여전히 샘플 효율이 낮다. 실제 로봇처럼 시뮬레이션을 실행하기 어려운 환경에서는 SAC 계열이 PPO보다 훨씬 적은 상호작용으로 학습한다.

5. 재현성 문제: Henderson et al. 2018의 연구에 따르면 같은 PPO 논문 설정이어도 구현 상의 사소한 차이(어드밴티지 정규화 여부, gradient clipping 등)가 성능에 큰 차이를 낸다. 논문의 수치 재현이 쉽지 않다.

구현하거나 응용한다면 무엇을 봐야 하나?

핵심 구현 포인트:

  1. 어드밴티지 정규화: 각 미니배치에서 Â를 평균 0, 분산 1로 정규화해야 한다. 안 하면 학습이 불안정해지는 경우가 많다.
  2. Gradient clipping: max_grad_norm = 0.5로 gradient norm을 clip하는 것이 권장된다. 논문에는 명시적으로 없지만 대부분의 검증된 구현이 포함한다.
  3. Value function clipping: Value loss를 clip하는 변형도 있다: L^VF = max((V - V_t)², (clip(V, V_old-ε, V_old+ε) - V_t)²). 일부 구현에서 안정성을 높인다.
  4. Learning rate schedule: Atari에서 lr을 선형 감소(3×10⁻⁴ → 0)하는 것이 중요하다. 선형 감소 없으면 Atari 성능이 눈에 띄게 낮아진다.
  5. 공유 vs 분리 네트워크: 단순 환경(MuJoCo)은 분리 네트워크도 잘 동작하지만, Atari처럼 시각 입력이 있으면 CNN 부분을 공유하고 헤드만 분리하는 것이 표준이다.

실용적 참고 구현:

  • OpenAI Baselines/Stable-Baselines3의 PPO 구현이 가장 검증이 잘 됐다.
  • CleanRL의 ppo.py는 단일 파일 250줄로 핵심만 담아 학습용으로 좋다.

현재 응용: PPO는 InstructGPT(ChatGPT)의 RLHF 단계에서 핵심 RL 알고리즘으로 사용된다. LLM을 reward model 피드백으로 파인튜닝할 때 정책이 과도하게 변하는 것을 Clip으로 막는 방식이 그대로 적용된다.

한 줄 결론과 다음에 읽을 논문

한 줄 결론: PPO는 TRPO의 수학적 복잡성을 ε-clip 하나로 대체해, 이론적 보장은 조금 느슨하지만 실용적으로는 더 강력하고 폭넓게 적용 가능한 정책 경사 알고리즘을 만들었다.

다음에 읽을 논문:

  • SAC (Soft Actor-Critic, 2018): 엔트로피 최대화를 목적함수에 직접 통합한 off-policy 방법. 연속 제어에서 PPO보다 샘플 효율이 높다.
  • PPG (Phasic Policy Gradient, 2021): OpenAI가 PPO를 개선한 후속. Policy와 Value 업데이트를 분리해 간섭을 줄인다.
  • InstructGPT (2022): PPO를 RLHF에 적용해 LLM을 인간 피드백으로 정렬시킨 OpenAI의 연구.

참고 자료:

반응형
Comments