강화학습 - PPO 알고리즘

안유민·2025년 6월 1일

딥러닝

목록 보기
3/3

1. PPO란?

PPO는 Proximal Policy Optimization의 약자로, 정책 기반(policy-based) 강화학습 알고리즘이다.

이는 기존의 TRPO(Trust Region Policy Optimization) 알고리즘의 안정성과 DQN(Deep Q-Network)의 단순함을 절충한 방식이다.
기존 정책에서 크게 벗어나지 않는 선에서 새로운 정책을 학습하도록 유도하여 안정적인 학습을 가능하게 한다.

이를 위해 PPO는 Clipping 기법을 도입하여 정책이 급격하게 바뀌는 것을 방지한다.
복잡한 수학적 제약 조건 없이도 높은 성능을 보여주며, 다양한 환경에 쉽게 적용할 수 있다는 장점을 가진다.


2. 배경 개념

2-1. 정책 기반 강화학습

정책 기반 강화학습에서는 에이전트가 환경으로부터 상태(state)를 관찰하고, 그에 따라 행동(action)을 선택하며, 이에 대한 보상(reward)을 받아 학습을 진행한다.
이때, 학습의 핵심은 정책(policy)을 학습하는 것이다.
정책 π(as)\pi(a|s)는 주어진 상태 ss에서 행동 aa를 선택할 확률을 의미한다.

정책은 확률적 정책(stochastic policy)일 수도 있고 결정적 정책(deterministic policy)일 수도 있으나, PPO는 확률적 정책을 기반으로 동작한다.
정책은 신경망으로 근사되며, 이 신경망을 학습함으로써 더 나은 행동 선택 전략을 개발한다.

2-2. TRPO vs PPO

항목TRPOPPO
방식KL Divergence 제약 조건을 사용한다.Clipping 기법을 적용하여 업데이트를 제한한다.
장점수학적으로 안정적인 정책 업데이트를 보장한다.구현이 단순하고 계산이 비교적 빠르다.
단점이차 계획(quadratic programming)을 요구하여 계산량이 많고 구현이 어렵다.이론적인 안정성은 TRPO보다 떨어진다.

➡️ TRPO는 정책 업데이트의 신뢰 영역(trust region)을 수학적으로 엄격히 제한하여 안정성을 확보하였으나, 계산 비용이 크고 복잡하다.
PPO는 이러한 제약을 완화하면서도 비슷한 수준의 성능과 안정성을 제공하는 데 초점을 맞춘 알고리즘이다.


3. 핵심 아이디어

PPO는 기존 정책 대비 얼마나 바뀌었는지를 나타내는 확률비(probability ratio) 개념을 중심으로 동작한다.

r(θ)=πθ(as)πold(as)r(\theta) = \frac{\pi_{\theta}(a|s)}{\pi_{\text{old}}(a|s)}

이 확률비 r(θ)r(\theta)는 현재 정책이 과거 정책에 비해 어떤 행동을 얼마나 더 선호하게 되었는지를 나타낸다.
이 값을 그대로 사용하면 정책이 급격하게 바뀔 수 있으므로, PPO는 Clipping 기법을 도입하여 이를 제한한다.

LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]L^{\text{CLIP}}(\theta) = \mathbb{E}_t\left[ \min\left( r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon)\hat{A}_t \right) \right]
  • A^t\hat{A}_t는 시간 tt에서의 Advantage 값이다.
  • ϵ\epsilon은 클리핑 한계값으로 보통 0.1~0.3 사이의 값을 사용한다.

이 목적 함수는 정책이 지나치게 급격하게 변하지 않도록 제한함으로써, 안정적인 성능 향상을 도모한다.


4. 알고리즘 전체 흐름

PPO는 다음과 같은 순서로 학습을 진행한다.

  1. 현재의 정책에 따라 환경에서 데이터를 수집한다.
  2. 수집한 데이터를 바탕으로 Advantage 값을 계산한다 (예: GAE 사용).
  3. Clipped Objective를 이용하여 정책을 업데이트한다.
  4. Value function도 함께 업데이트한다.
  5. 위 과정을 반복하며 학습을 진행한다.

PPO는 일반적으로 미니배치 SGD 방식으로 여러 번 정책을 업데이트하며, 하나의 수집된 데이터로 여러 에폭(epoch)을 학습하는 것이 특징이다.
이러한 반복적인 업데이트 구조는 샘플 효율을 높이며, 정책을 더욱 정교하게 학습하는 데 기여한다.


5. 코드 예시

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))

6. 장점

장점설명
구현 단순성정책이 너무 바뀌는 것을 방지하여 수렴 안정성을 높인다.
안정적인 업데이트정책이 너무 바뀌는 것을 방지하여 수렴 안정성을 높인다.
높은 샘플 효율수집된 데이터를 여러 번 사용할 수 있다.
범용성다양한 환경에서 좋은 성능을 보인다.

➡️ PPO는 안정성과 성능 사이의 균형을 잘 맞춘 알고리즘으로, 실제 연구와 산업 현장에서 널리 활용되고 있다.


7. 활용 사례

  • 게임: OpenAI Five(Dota2), Unity ML-Agents에서 사용된다.
  • 로봇 제어: 2족 보행, 로봇 팔 제어 등 실제 하드웨어에도 적용된다.
  • 자율주행: 시뮬레이션 기반 자율주행 훈련에 사용된다.
  • 금융: 주식/포트폴리오 관리 등 강화학습 기반 금융 모델링에 활용된다.
  • 시뮬레이션 최적화: 제조 공정 시뮬레이션, 트래픽 시뮬레이션 등 다양한 환경에서 적용된다.

➡️ 이처럼 PPO는 복잡하고 불확실한 환경에서도 높은 성능을 보이며, 범용 강화학습 알고리즘으로 자리잡았다.


8. 참고 문헌

0개의 댓글