본문 바로가기
Domain Knowledge/Reinforcement Learning

[11] TRPO, PPO, GRPO

by hleej 2026. 5. 7.

[강화학습] 수업 요약
created: 2026-05-07
last modified: 2026-05-07

 Policy-based 방법을 포함하는 REINFORCE부터, Actor Critic, TD Actor Critic까를 지나고 나서, 성능이 정체되기 시작했다.

policy network를 update하는 방식을 다시 살펴보자. (그림)

$\theta \leftarrow \theta + \alpha \nabla_\theta J(\theta)$

 

 이들은 학습이 별로 효율적이지 못했다. 이들은 on-policy, 즉 현재의 policy와 target의 policy가 $\pi_{now}$로 동일해야 했기 때문이다. TRPO와 PPO도 대표적인 on-policy algorithm이긴 하다.

 왜 과거의 policy로부터 얻어진 transition을, 현재의 policy network를 update하는 데 함부로 사용하지 못했을까?

만약 과거의 transition을 얻은 policy가 현재의 policy network와 비슷하다면, 대체로 학습이 잘 될 것이다. 하지만 두 policy가 서로 너무 다르다면, gradient update 시에 현재의 network와 완전히 동떨어진 gradient가 학습되어, 오히려 network를 망가뜨릴 것이다.

 결국 현재의 policy로 얻어진 transition만으로 현재의 policy network를 update할 수밖에 없었고, 따라서 transition을 한 번 학습하면 재사용이 안 되므로 데이터 낭비가 심하다는 단점이 있었다.

(이걸 해결하기 위해 value based에서는 replay buffer를, actor critic에서는 A3C에서 병렬로 학습시킨 뒤 gradient만 가져오는 방법을 쓰기도 했다.) 

 

기존에는 이를 다룰 명확한 방법이 없었다면,

TRPO는 과거의 policy와 현재의 policy의 유사도(KL Divergence)를 기반으로, 과거의 policy를 현재의 policy network에 update할 때 constraint를 걸어 성능을 유지할 수 있다는 수학적 증명을 해냈고,

PPO는 여기에 간단한 아이디어를 더 추가한 뒤, 알고리즘으로 정립했다?.

 

1. TRPO (Trust Region Policy Optimization) 

"현재와 과거 policy의 차이가 충분히 작아서 Trust Region범위 안에 있을 때만 policy를 update함으로써 network를 optimization하겠다."

 TRPO 논문의 핵심 문제정의는 policy network를 update할 때 policy를 너무 크게 바꿔서 성능이 갑자기 무너지는 문제 였다.

그리고 결과적으로, TRPO는 policy network를 update할 때 성능이 떨어지지 않도록 ($J(\theta_{now}) \geq J(\theta_{old}) $) 만들었다.

 

 

1.1. Objective Function $J(\theta)$ 바꾸기

과거의 $\pi_{\theta_{old}}$로부터 얻어진 data로 $\pi_{\theta_{new}}$를 평가할 수 있도록 식을 바꾼다.

기존(A2C)

$\displaystyle J(\theta_{now})=\mathbb{E}\left[A(s, a)\right]$


         TRPO(중간과정)
  $\displaystyle J(\theta_{now})\approx \mathbb{E}\left[\frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }A(s, a)\right]$

 

 왜 이렇게 바꿨냐면, 기존에 현재로부터 sampling된 Expectation $\mathbb{E}_{\pi_{\theta_{new}}}$ 대신에, 과거로부터 sampling한 data를 활용하기 위해 Expectation $\mathbb{E}_{\pi_{\theta_{old}}}$ 으로 바꾼 것이다.

 

 자세히 설명해 보자면 일종의 통계적 trick이다. 그 아이디어를 설명해 보자면,

현재의 policy로부터 sampling되는 확률분포를 P, 과거의 policy로부터 sampling되는 확률분포를 Q 라고 하자.
기댓값(E[])은 확률 × 값 으로 구성된다.
분모와 분자에 똑같이 Q를 곱하면, P였던 기댓값의 확률을 Q로 만들 수 있게 되고, 결과적으로 P 대신에 Q 분포에서 sampling해서 P 분포의 기댓값을 구할 수 있게 된다.

이를 적용해서 기존의 Objective Function을 변형한 것이다.

증명은 생략.

 

그런데 위에서 Approximation이 성립하려면, $\frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} } \approx 1$이 성립해야 한다. 다시 말해, 두 policy가 가능한 한 비슷해야 한다.

 

1.2. KL Divergence로 Trust Region 설정.

두 policy가 최대한 비슷한 상태를 보장하기 위해, 두 policy의 차이가 충분히 작을 때만 gradient를 구해서 update하도록 constraint를 걸어준다. 이를 통해 policy의 변화량을 제한할 수 있다.

여기서 차이인 $D$가 충분히 작을 때를 Trust Region두 policy의 차이가 신뢰할 만하다이라 하고, 차이가 크다면 Untrust Region이라 한다. 

TRPO (최종)

$\displaystyle J(\theta_{now})\approx \mathbb{E}\left[\frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }A_{\theta_{old}}(s, a)\right]\quad\text{subject to}\quad D_{KL}(\pi_{\theta_{now}} || \pi_{\theta_{old}}) \leq \delta$

 

1.3. 위의 TRPO Objective Function을 미분 가능하게 만들기

constraint가 걸려 있는 식을 미분해서 gradient를 구하기 위해, 식를 변형해야 한다.

가장 간단하게 떠올릴 수 있는 방식은, Lagrangian Form을 이용하는 것이다.

 

Lagrangian Form

$\displaystyle \max_\theta \mathbb{E}\left[\frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }A_{\theta_{old}}(s, a) - \beta D_{KL}[\pi_{\theta_{old}}(\cdot | s),\pi_{\theta_{now}}(\cdot | s) ]\right]$

하지만 이를 실제로 해보니 β에서 문제가 생긴다.

environment나 episode가 달라짐에 따라 학습이 잘 되는 β가 계속 달라지는데, hyperparameter라서 고정해서 쓰자니 학습이 잘 안되는 것이다.

 

따라서 다른 방법을 사용한다.

너무 어려운 데다가, 이미 TRPO의 핵심 아이디어는 다 설명한 것 같아서 아래 세부 과정은 생략한다.

 

Tayler 전개로 선형/이차 근사

 

Natural Gradient로 update방향 계산

$\Delta\theta = \frac{\sqrt{2\delta}}{(g^TF^{-1}g) ^{\frac{1}{2}} }F^{-1}g$

 

Conjugate Gradient로 $F^{-1}g$ 근사

 

하지만 위에서 C를 구할 때, 만약 γ가 1에 근사하면, C가 아주 커져 gradient explosion이 발생할 우려가 있다.

 

 

 

 

2. PPO (Proximal Policy Optimization

위에서 봤듯이, TRPO는 너무 계산이 복잡하다. Fisher Matrix F를 계산하려면 2차 미분을 계산해야 하는 등..

PPO는 TRPO의 아이디어를 그대로 유지하면서, 식의 구조를 훨씬 간단하게 바꿨다.

TRPO의 아이디어
$\mathbb{E}\left[\frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }A_{\theta_{old}}(s, a)\right]$
$A>0$이면(해당 state의 value들의 평균보다 좋으면), 그 policy를 '더' 높이고,
$A<0$이면, 그 policy를 '더' 줄이겠다.
단, policy가 너무 급격하게 바뀌면, 다른 state에 대한 policy도 망가져 버릴 수 있으므로, 제한한다.

PPO는 $r(\theta) = \frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }$ 로 둔다.

 

그리고 $r(\theta)$가 너무 커지거나 작아지지 않도록 clipping한다. 이러면 위의 TRPO처럼 constraint를 걸어줄 필요가 없다.

$clip(r(\theta), 1-\epsilon, 1+\epsilon)$

이제 $r(\theta)$는 최소 1-ε, 최대 1+ε의 값만을 가진다.

이때 실험적으로 $\epsilon = 0.2$에서 가장 높은 성능을 얻었다.

 

하지만 이렇게만 해서는, $J(\theta)$ 자체가 너무 급격한 값을 가지는 것까지는 막지 못한다.

따라서 $clip(r(\theta), 1-\epsilon, 1+\epsilon)A_{\theta_{old}}$ $r(\theta)A_{\theta_{old}}$ 간에 더 작은 값을 고를 필요가 있다.

PPO

$\displaystyle J(\theta_{now} )= \mathbb{E}\left[ \min \left( r(\theta)A_{\theta_{old}}(s, a),clip(r(\theta), 1-\epsilon, 1+\epsilon) A_{\theta_{old}}(s, a) \right) \right]$

무조건 min을 쓰는 이유는, 아래와 같이 A를 기울기로 생각할 수 있기 때문이다.

      $A > 0$인 경우
       $A<0$인 경우

 

2.1. PPO 의 장단점

장점:

simple

robust

efficient

 

단점:

on-policy: buffer를 사용하는 off-policy보다 sample 효율성이 좋지 않다.

 

3. GRPO (Group Relative Policy Optimization)

초기 RLHF(LLM 훈련의 최종 단계에서 Human Feedback으로 alignment하는 것)에서는 PPO를 많이 썼다.

그러나 LLM RL에서는

value network 학습이 불안정하고,

policy network와 value network를 모두 쓰기에는 너무 model이 무거웠다.

결국 2017년 deepseek 연구소에서 LLM RL에 쓰기 위해 PPO를 변형한 것이 GRPO이다.  

 

결론부터 말하면 GRPO에서는 value network를 없애 버렸다. 결과적으로 memory 사용량이 크게 줄었다.

그러면 value network 없이 Advantage는 어떻게 얻었나?

어떤 State에서 상대적인 성능을 의미했던 $Advatange=R+\gamma V_{t+1}-V_t$ 대신에, 전체 reward 중에서 이번에 받은 reward가 얼마나 상대적으로 좋은지를 z-score의 개념을 이용해서 나타냈다.

 

$\displaystyle A_i = \frac{r_i-mean(\{r_1, ..., r_G\})}{std(\{r_1, ..., r_G\})}$

나머지는 PPO와 식이 같지만, 뒤에 constriant를 하나 추가했다.

이 constraint는, $\pi_{now}$가 $\pi_{ref}$(학습 초기의 Policy)와 너무 다르면 안 된다는 뜻인데, 이는 강화학습 전의 pretrained model과 너무 달라져서 일반화 성능을 잃으면 안 된다는 의미이다.

GPRO

$\displaystyle J(\theta_{now} )= \mathbb{E}\left[ \min \left( \rho(\theta)A_{\theta_{old}}(s, a),clip(\rho(\theta), 1-\epsilon, 1+\epsilon) A_{\theta_{old}}(s, a) \right) \right]\quad \text{subject to}\quad D_{KL}\left[\pi_{\theta_{now}}||\pi_{\theta_{ref}}\right]\leq \delta$

그거 말고는 reward의 r이랑 문자가 겹친다고 r을 ρ로 바꾼게 전부다.

위를 계산하기 위해 Lagrangian Form으로 식을 변형할 수 있다.

$\displaystyle J(\theta_{now} )= \mathbb{E}\left[ \min \left( \rho(\theta)A_{\theta_{old}}(s, a),clip(\rho(\theta), 1-\epsilon, 1+\epsilon) A_{\theta_{old}}(s, a) \right) - \beta D_{KL}\left[\pi_{\theta_{now}}||\pi_{\theta_{ref}}\right]\right]$

 

 

또한 TRPO와 다르게 KL Divergence 식을 약간 바꿨다.

원래 KLD는 $D_{KL}\geq 0$이다. 하지만 sampling 시 variance에 의해 KLD가 음수 값이 나오는 문제가 발생할 수 있다. 

이를 해결하기 위해 식을 $D_{KL}=-\log \frac{\pi_{\theta_{now}}}{ \pi_{\theta_{old}} }$에서 아래와 같이 바꿨다.

$D_{KL}=\frac{\pi_{\theta_{now}}(x)}{ \pi_{\theta_{old}}(x)} -\log \frac{\pi_{\theta_{now}}(x)}{ \pi_{\theta_{old}}(x)}-1$

이는 $\frac{\pi_{\theta_{now}}(x)}{ \pi_{\theta_{old}}(x)} \approx 1$이므로 원래 식과 수학적으로 동등하지만, sampling 시 variance에 의해 KLD 값이 음수가 되는 것을 방지해준다.

 

3.1. GPRO의 조건 및 장단점

GPRO가 잘 동작하기 위한 조건

- replay buffer가 없는 on-policy방식이다 보니, sample을 쉽게 많이 생성해낼 수 있는 환경이어야 한다.

     → LLM은 transformer 기반이어서 batch로 output을 만들 수 있다.

- Reward가 action마다 나오는게 아니라 trajectory의 끝에서 나와야 한다. 그래야 Advantage를 계산할수있다. 

- 같은 prompt로부터 나온 output이 명확히 구분되야 한다.

    → LLM이 수학문제를 푼다고 하면 맞다/틀리다로 명백이 구분된다.  반면 로봇의 움직임은 쉽지 않다.

- value network가 제거하고싶을 만큼 무거워야 한다.

    → 반대로 value network의 크기가 얼마 안 된다면 그냥 PPO를 써도 된다.

 

장단점

Value Network를 없애 버렸으니,

      전체 parameter가 절반 정도 줄어든다.  

      value network 설계 안해도 되서 편하다.

      value network는 TD-based였으므로, bootstrapping에 의해 생기던 bias가 없어진다.

 

이분법적으로 output을 좋다/나쁘다 할 수 있는 문제에 유리하다. 

반대로 연속적인 단계가 있으면 PPO를 쓰는게 낫다.

 

 

 

 

결론적으로 말하자면,

일반적으로는 PPO가 낫지만, 특수한 상황에서는 GPRO가 더 좋을 수 있다.

 

'Domain Knowledge > Reinforcement Learning' 카테고리의 다른 글

[13] SAC  (0) 2026.05.21
[10] DQN의 변종들 (Value Based) : DDQN / Dueling DQN / PER  (0) 2026.05.02
[9] Actor Critic / A2C, A3C  (0) 2026.05.01
[8] DQN (Deep Q Network)  (0) 2026.04.23
[7] Policy gradient : REINFORCE  (0) 2026.04.14