Proximal Policy Optimization (PPO ([1]))는 OpenAI에서 작성한 논문으로 현재(2023년 12월)까지도 많이 사용되는 안정적인 알고리즘이다.
앞서 리뷰했던 TD3([2]) 글에서 말했던 것처럼 actor-critic 방법은 GAN과 같이 network 2개를 한 번에 학습시키는 방법이라 상당히 어려운 방법이다. 특히 가치함수의 불안정성이 학습에 영향을 미쳐 TD3에서도 이를 해결하기 위해 가치함수를 더 많이 학습하는 방법을 사용한다. PPO는 on-policy로 정책을 업데이트하면서 안정적으로 actor-critic을 학습할 수 있는 방법을 제안한다.
PPO는 TRPO(Trust Region Policy Optimization ([3])) 방법을 근사하여 푼 방법이라고 볼 수 있다. TRPO에서 제안한 방법을 수식으로 쓰면 아래와 같다.
$$ max_{\theta} \hat{\mathbb{E}}_{t} [ \frac{\pi_{\theta} (a_{t}|s_{t})} {\pi_{\theta_{old}} (a_{t}|s_{t}) } \hat{A_{t}}] $$
$$ \textit{s.t.} \quad \hat{\mathbb{E}}_{t} [KL[\pi_{\theta_{old}}(\cdot|s_{t}), \pi_{\theta}(\cdot|s_{t})] ] \leq \delta $$
정책의 변화량을 제한하는 제약 조건을 만족하면서 목적함수를 최적화하는 방법이다. 보통의 경우 이런 제약조건이 걸려있으면 풀기가 매우 어렵다(구현도 어렵고 최적화도 어려움). 그래서 TRPO에서는 KL 텀을 loss에 같이 주어 최적화하는 방법을 선택했다. 하지만 이런 penalty도 학습에 어려움을 주고 loss에 얼마 큼의 가중치를 줄 것인지도 hyperparameter로 선택해야 한다. 두 정책 함수 간의 비율 $ r_{t} (\theta) = \frac{\pi_{\theta}(a_{t}|s_{t})} {\pi_{\theta_{old}}(a_{t}|s_{t})} $ 로 나타내면 TRPO의 목적함수는 아래와 같다.
$$ L^{CPI}(\theta) = \mathbb{E}_{t} [r_{t} (\theta) \hat{A}_{t}] $$
한편 PPO는 두 목적함수 간의 비율이 1에서 멀어지지 않게 만드는 clip 방식을 제안했다.
$$ L^{CLIP}(\theta) = \mathbb{E}_{t} [min(r_{t}(\theta)\hat{A}_{t}, clip(r_{t}(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_{t})] $$
min 안의 첫 번째 수식은 기존의 목적 함수와 같고, 두 번째는 정책 비율의 범위를 정해서 나온 값이다. 2개의 값을 비교하여 작은 값을 취함으로써 $\pi_{\theta}$를 보수적으로 업데이트하도록 만든다. ($\hat{A}_{t}$가 양수인 경우를 가정했을 때, $r_{t} < 1-\epsilon$이면 $(1-\epsilon)\hat{A}_{t}$가 되고 $1-\epsilon \leq r_{t} \leq 1+\epsilon$ 이면 $r_{t}(\theta) \hat{A}_{t}$, $r_{t} > 1+\epsilon$이면 $(1+\epsilon)\hat{A}_{t}$ 가 된다.)
PPO에서는 Advantage function $\hat{A}_{t}$ 추산 시 generalized advantage estimator의 truncated version을 이용하였다.
$$ \hat{A}_{t} = \delta_{t} + (\gamma \lambda) \delta_{t+1} +\cdots + (\gamma \lambda)^{T-t+1} \delta_{T-1} $$
($\lambda$: bias/variance의 controlling 도구로 사용됨. (다시 말하면 얼마나 MC/TD 스럽게 훈련할지 정함.))
마지막으로 정책함수 $\pi_{\theta}$에 대한 엔트로피 $ \mathit{H}(\pi_{\theta}(a_{t}|s_{t})) $가 maximize 되도록 loss 함수에 더해준다. 이는 같은 상태일 때 여러 행동을 탐험하도록 도와주는 역할을 한다.
정리하면 PPO의 loss는 아래와 같다.
$$ L_{t}^{CLIP+VF+S}(\theta) = \mathbb{E}_{t}[L_{t}^{CLIP}(\theta) - c_{1}L_{t}^{VF}(\theta) + c_{2} S[\pi_{\theta}](s_{t}) ] $$
PPO는 특이하게 on-policy를 사용하지만 모아둔 샘플을 여러 번에 걸쳐 업데이트를 하는 방식을 사용한다. 이는 $L^{CLIP}$의 구조 덕분에 정책 함수가 너무 멀어지지 않아서 가능한 선택으로 보인다.
아직까지도 PPO는 많이 사용되는데 위에서 설명한 방법들도 효과가 있겠지만 실제 구현 시 들어간 트릭들이 중요한 역할을 했다고 알려져 있다. 이는 논문 [4]에서 다양한 실험을 통해 그 효과를 보여주고 있다. [4]에서 소개한 PPO의 추가 트릭들은 fig 1과 같은 9개다.
1, 2, 5, 6, 7, 9는 모두 대상 값들을 scaling 하는 트릭들인 것을 볼 수 있다. 이는 variance를 줄여주는 방법들로 볼 수 있다. 강화학습은 특성상 variance가 클 수 있어서 이런 트릭들이 주요하게 작용했을 것으로 생각된다. 3번 방법은 생소한 방법인데 심층 신경망 최적화 문제가 ill condition으로 시작하지 않게 도움을 줄 수 있다고 알려져 있다고 한다(정확하지 않은 것 같기도 함.). 4번의 learning rate annealing 방법은 강화 학습뿐 아니라 지도 학습 등에서 일반적으로 사용되는 방법으로 초반에 안정적인 학습과 중반, 후반에 flat minima를 찾는 데 도움을 준다. 8번 방법은 이산 행동 공간의 경우, softmax 함수의 초기 시작값을 균등하게 만드는 데 영향을 주어 초기 exploration에 좋다고 한다.
Fig 2에는 여러 방법들을 적용한 결과를 보여주는 데, 가장 효과가 커 보이는 것은 rewards를 normalization 한 부분으로 보인다. 여기서 사용한 방법은 OpenAI 공개한 방법과 같이 (rewards-mean)/(std+1e-8)의 형식으로 이루어진 코드를 사용했다.
이 이후에도 여러 ablation study를 진행하였는데, PPO가 메인으로 주장했던 $L^{CLIP}$과 같은 방법보단 code level에서 사용했던 여러 트릭들이 더 중요했던 것으로 밝혀졌다. 이런 것들을 보다 보면 강화학습은 최대한 안정적으로 학습을 시키는 트릭들을 잘 익혀놓는 것이 중요해 보인다.
Ref
[1] https://arxiv.org/abs/1707.06347
[2] https://arxiv.org/pdf/1802.09477.pdf
[3] https://arxiv.org/abs/1502.05477
[4] https://arxiv.org/abs/2005.12729
'머신러닝&딥러닝 > 강화학습' 카테고리의 다른 글
TD3 paper 리뷰 (0) | 2023.12.11 |
---|---|
DQN 부터 DDPG 까지 정리 (0) | 2023.12.02 |
RL 기초 개념 정리 (0) | 2023.11.24 |
강화학습 기초 다지기 (2) - 강화학습 문제 풀이 기법 (DP, MC, TD) (0) | 2022.05.08 |
강화학습 기초 다지기 (1) - 마르코프 (0) | 2022.05.01 |