Hugging Face Deep RL 클래스 유닛 8: 근접 정책 최적화 (PPO) 설명
TL;DR
Hugging Face는 근접 정책 최적화(PPO)에 대한 포괄적인 튜토리얼을 공개했습니다. 여기서는 정책 업데이트를 제한하여 학습을 보다 안정적으로 만드는 클리핑된 대리 목표를 설명하고, CartPole‑v1과 LunarLander‑v2에서 평가한 전체 PyTorch 구현을 제공합니다.
PPO가 중요한 이유
PPO는 각 정책 업데이트를 ([1-\epsilon,,1+\epsilon])) 라는 작고 사전에 정의된 구간으로 제한함으로써 강화학습의 안정성을 향상시킵니다. 작은 업데이트는 경험적으로 더 빠르게 수렴하고, 큰 단계가 초래하는 재앙적인 “정책 절벽”을 방지하여 회복하기 어려운 나쁜 정책이 생성되는 것을 막습니다.
핵심 기술 아이디어: 클리핑된 대리 목표
정책 목표 요약
고전적인 REINFORCE 목표는 (\log \pi_\theta(a_t|s_t) A_t) 에 대해 그래디언트 상승을 수행하여 기대 보상을 최대화합니다. 제약이 없으면 큰 스텝 크기가 학습을 너무 느리게 만들거나(너무 작을 경우) 분산이 크게 증가(너무 클 경우)합니다.
비율 함수
PPO는 로그 확률 항을 확률 비율로 대체합니다:
[ r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} ]
- (r_t > 1)이면 현재 정책에서 해당 행동이 더 가능성이 높습니다.
- (0 < r_t < 1)이면 현재 정책에서 해당 행동이 덜 가능성이 높습니다.
이 비율은 새 정책과 이전 정책 사이의 발산 정도를 직접 측정합니다.
클리핑되지 않은 목표
클리핑되지 않은 부분은 비율에 이점 (A_t) 를 곱합니다:
[ r_t(\theta) \cdot A_t ]
제한이 없으면 큰 (r_t) 가 과도하게 큰 그래디언트를 만들어 파괴적인 업데이트를 일으킬 수 있습니다.
클리핑된 목표
PPO는 비율을 구간 ([1-\epsilon,,1+\epsilon]) (논문에서는 (\epsilon=0.2) 사용) 로 클리핑합니다. 클리핑된 대리 목표는 다음과 같습니다:
[ \min\big(r_t(\theta) A_t,; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t\big) ]
- 최소값은 보다 보수적인 추정치를 선택합니다.
- 비율이 클립 범위 안에 있으면 클리핑되지 않은 항이 사용되어 정상적인 정책 개선이 이루어집니다.
- 비율이 범위를 초과하면 클리핑된 항이 상수이므로 그래디언트가 0이 되어 과도한 공격적 업데이트를 방지합니다.
TRPO와의 비교
- TRPO는 손실 외부에 KL‑발산 제약을 적용하는데, 이는 계산 비용이 크고 구현이 복잡합니다.
- PPO는 클리핑을 통해 제약을 손실 안에 직접 포함시켜 더 간단하고 빠른 대안을 제공합니다.
목표 시각화
여섯 가지 경우가 최소 연산이 어떻게 동작하는지를 보여줍니다:
- 비율이 범위 내이고 이점이 양수 – 행동 확률을 증가시킵니다.
- 비율이 범위 내이고 이점이 음수 – 행동 확률을 감소시킵니다.
- 비율이 범위 아래이고 이점이 양수 – 확률을 증가시킵니다(그래디언트 비‑0).
- 비율이 범위 아래이고 이점이 음수 – 그래디언트가 0 (더 이상 감소하지 않음).
- 비율이 범위 위이고 이점이 양수 – 그래디언트가 0 (과도한 탐욕적 업데이트 방지).
- 비율이 범위 위이고 이점이 음수 – 확률을 감소시킵니다.
모든 경우에서 클리핑된 항이 선택되면 그래디언트가 0이 되므로 정책이 이전 정책으로부터 더 멀어지지 않게 됩니다.
Actor‑Critic용 전체 PPO 손실
최종 손실은 세 가지 구성 요소를 결합합니다:
- 클리핑된 대리 목표 (정책 손실).
- 값 손실 (예측된 반환과 실제 반환 사이의 평균 제곱 오차).
- 엔트로피 보너스 (탐험을 장려).
결합된 손실은 기사 마지막 그림에 나타나 있습니다.
이론을 코드로
Hugging Face는 단계별 PyTorch 구현을 제공합니다:
- CleanRL 단일 파일 스타일을 사용합니다 (Costa Huang).
- 13가지 구현 세부 사항에 대한 자세한 목록을 참고합니다 (ICLR 블로그 포스트).
- 두 가지 고전적인 Gym 환경에서 에이전트를 학습합니다:
- CartPole‑v1 – 간단한 균형 잡기 과제.
- LunarLander‑v2 – 보다 복잡한 2‑D 착륙 문제.
- 학습이 끝난 모델은 Hugging Face Hub에 푸시하여 평가 및 시각화가 가능합니다.
전체 튜토리얼 노트북은 다음에서 확인할 수 있습니다:
https://github.com/huggingface/deep-rl-class/blob/main/unit8/unit8.ipynb
실무자에게 주는 의미
- 안정성 – PPO의 클리핑 메커니즘은 TRPO의 무거운 계산 없이도 안정적인 정책 학습을 실현하는 실용적인 저비용 방법을 제공합니다.
- 접근성 – 기사 중심의 코드‑우선 접근 방식은 초보자도 PPO를 쉽게 이해하도록 하면서, 연구 수준의 미세 조정도 가능하도록 합니다.
- 확장성 – 학습된 모델을 Hub에 올리면 실무자들이 공유·벤치마크·반복 개선할 수 있어 커뮤니티 전체에 이점을 제공합니다.
Deep RL 코스의 다음 단계
이 튜토리얼은 총 8개 유닛 시리즈의 일부이며, 다음 내용을 다룹니다:
- Advantage Actor‑Critic (A2C) – 가치와 정책을 결합한 하이브리드 방법.
- PPO – 현재 유닛의 핵심 주제.
- 향후 유닛에서는 다중 에이전트 설정, 오프라인 RL, Decision Transformers, 그리고 논문 심층 해설 등을 탐구합니다.
계속 학습하고, 멋지게 성장하세요 🤗