PPO는 Proximal Policy Optimization의 약자로, 정책 기반(policy-based) 강화학습 알고리즘이다.
이는 기존의 TRPO(Trust Region Policy Optimization) 알고리즘의 안정성과 DQN(Deep Q-Network)의 단순함을 절충한 방식이다.
기존 정책에서 크게 벗어나지 않는 선에서 새로운 정책을 학습하도록 유도하여 안정적인 학습을 가능하게 한다.
이를 위해 PPO는 Clipping 기법을 도입하여 정책이 급격하게 바뀌는 것을 방지한다.
복잡한 수학적 제약 조건 없이도 높은 성능을 보여주며, 다양한 환경에 쉽게 적용할 수 있다는 장점을 가진다.

정책 기반 강화학습에서는 에이전트가 환경으로부터 상태(state)를 관찰하고, 그에 따라 행동(action)을 선택하며, 이에 대한 보상(reward)을 받아 학습을 진행한다.
이때, 학습의 핵심은 정책(policy)을 학습하는 것이다.
정책 는 주어진 상태 에서 행동 를 선택할 확률을 의미한다.
정책은 확률적 정책(stochastic policy)일 수도 있고 결정적 정책(deterministic policy)일 수도 있으나, PPO는 확률적 정책을 기반으로 동작한다.
정책은 신경망으로 근사되며, 이 신경망을 학습함으로써 더 나은 행동 선택 전략을 개발한다.
| 항목 | TRPO | PPO |
|---|---|---|
| 방식 | KL Divergence 제약 조건을 사용한다. | Clipping 기법을 적용하여 업데이트를 제한한다. |
| 장점 | 수학적으로 안정적인 정책 업데이트를 보장한다. | 구현이 단순하고 계산이 비교적 빠르다. |
| 단점 | 이차 계획(quadratic programming)을 요구하여 계산량이 많고 구현이 어렵다. | 이론적인 안정성은 TRPO보다 떨어진다. |
➡️ TRPO는 정책 업데이트의 신뢰 영역(trust region)을 수학적으로 엄격히 제한하여 안정성을 확보하였으나, 계산 비용이 크고 복잡하다.
PPO는 이러한 제약을 완화하면서도 비슷한 수준의 성능과 안정성을 제공하는 데 초점을 맞춘 알고리즘이다.
PPO는 기존 정책 대비 얼마나 바뀌었는지를 나타내는 확률비(probability ratio) 개념을 중심으로 동작한다.
이 확률비 는 현재 정책이 과거 정책에 비해 어떤 행동을 얼마나 더 선호하게 되었는지를 나타낸다.
이 값을 그대로 사용하면 정책이 급격하게 바뀔 수 있으므로, PPO는 Clipping 기법을 도입하여 이를 제한한다.
이 목적 함수는 정책이 지나치게 급격하게 변하지 않도록 제한함으로써, 안정적인 성능 향상을 도모한다.
PPO는 다음과 같은 순서로 학습을 진행한다.
PPO는 일반적으로 미니배치 SGD 방식으로 여러 번 정책을 업데이트하며, 하나의 수집된 데이터로 여러 에폭(epoch)을 학습하는 것이 특징이다.
이러한 반복적인 업데이트 구조는 샘플 효율을 높이며, 정책을 더욱 정교하게 학습하는 데 기여한다.
import torch
import torch.nn as nn
class PolicyNet(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.fc = nn.Sequential(
nn.Linear(state_dim, 64),
nn.ReLU(),
nn.Linear(64, action_dim),
nn.Softmax(dim=-1)
)
def forward(self, x):
return self.fc(x)
def ppo_loss(old_probs, new_probs, advantages, epsilon=0.2):
ratio = new_probs / (old_probs + 1e-10)
clipped = torch.clamp(ratio, 1 - epsilon, 1 + epsilon)
return -torch.mean(torch.min(ratio * advantages, clipped * advantages))
| 장점 | 설명 |
|---|---|
| 구현 단순성 | 정책이 너무 바뀌는 것을 방지하여 수렴 안정성을 높인다. |
| 안정적인 업데이트 | 정책이 너무 바뀌는 것을 방지하여 수렴 안정성을 높인다. |
| 높은 샘플 효율 | 수집된 데이터를 여러 번 사용할 수 있다. |
| 범용성 | 다양한 환경에서 좋은 성능을 보인다. |
➡️ PPO는 안정성과 성능 사이의 균형을 잘 맞춘 알고리즘으로, 실제 연구와 산업 현장에서 널리 활용되고 있다.
➡️ 이처럼 PPO는 복잡하고 불확실한 환경에서도 높은 성능을 보이며, 범용 강화학습 알고리즘으로 자리잡았다.