[논문링크] https://arxiv.org/abs/1707.06347
Proximal Policy Optimization Algorithms
We propose a new family of policy gradient methods for reinforcement learning, which alternate between sampling data through interaction with the environment, and optimizing a "surrogate" objective function using stochastic gradient ascent. Whereas standar
arxiv.org
1. Introduction
최근에 강화학습과 인공신경망을 융합하려는 시도가 진행되고 있다. 여러가지 방법론 중 하나는 policy gradient methods라 불리는 방법으로 상태에 대한 행동의 조건부 확률분포인 정책을 신경망으로 모델링하여 학습시키는 방법인데, TRPO 등 현재까지 연구된 여러 방법들은 아직 현실적인 한계가 있다. 이를 해결하기 위해 본 논문에서는 PPO라는 새로운 알고리즘을 제안한다.
2. Background: Policy Optimization
먼저 강화학습에서 주로 쓰이는 용어들을 아래와 같이 정리할 수 있다.
- 상태(state) : 에이전트에 영향을 주는 특정 시점의 환경이나 상황. 시점 $t$의 상태는 $s_t$로 표기.
- 행동(action) : 특정 상황에서 에이전트가 취하는 행동이나 동작. 시점 $t$의 행동은 $a_t$로 표기.
- 정책(policy) : 특정 상황에서 에이전트가 어떤 행동을 할지를 나타내는 조건부 확률분포.
- 보상(return) : 특정 상황이나 에이전트의 특정 행동으로부터 에이전트가 얻는 보상. 시점 $t$의 보상은 $r_t$로 표기.
Policy Optimization에서는 policy에 해당하는 확률분포 $\pi(a_t|s_t)$를 신경망으로 모델링하여 학습한다.
정책 $\pi_\theta(a|s)$를 따르는 trajectory $\tau = (s_0,a_0,s_1,a_1,\dots)$의 분포를 $p_\theta(\tau)$라 할 때 목적함수는 아래와 같이 주어진다.
$$ J(\theta) = \mathbb{E}_{\tau \sim p_\theta} \left[ \sum_{t} \gamma^t r_t \right] $$
이는 할인 누적보상의 평균으로 위의 값이 최대화되도록 정책 $\pi_\theta(a|s)$를 업데이트하는 것이 Policy Optimization이다.
위 목적함수의 gradient를 아래와 같이 변형할 수 있다.
$$ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p_\theta}[ \nabla_\theta \log p_\theta(\tau) R(\tau) ] $$
이 때 $p_\theta(\tau) = p(s_0) \prod_{t} \pi_\theta(a_t|s_t) p(s_{t+1} | s_t,a_t) $로 나타낼 수 있으므로 위 식을 아래와 같이 표현할 수 있다.
$$ \nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) R(\tau) \right] $$
위 목적함수를 변형하여 아래와 같은 수식을 얻을 수 있다.
$$ \nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_{t} \nabla_\theta \log \pi_\theta(a_t|s_t) \hat{A}_t \right] $$
위 수식에서 $\hat{A}_t$는 시점 $t$에서의 advantage 값이다. 이는 $s_t,a_t$에서의 기대누적보상에서 $s_t$에서의 기대누적보상을 뺀 것이다. 즉 행동 $a_t$가 얼마만큼의 advantage를 갖느냐를 수치화한 것이다. 양수 또는 음수 값을 가질 수 있다.
2.1 Policy Gradient Methods
위에서 Policy Optimization 방식의 목적함수에 대해 설명했다. 위 수식의 $\nabla_\theta J(\theta)$를 gradient로 갖는 목적함수는 아래와 같이 쓸 수 있다.
$$ L^{PG}(\theta) = \hat{\mathbb{E}}_t \left[ \log \pi_\theta(a_t|s_t) \hat{A}_t \right] $$
Policy Optimization 방식으로 학습을 시킬 때, trajectory를 따라서 시점별로 데이터를 뽑고 해당 데이터들을 사용해서 위 목적함수를 최대화한다. 하지만 위 목적함수를 최대화 시킬 때, 하나의 trajectory 데이터 가지고 여러번 학습을 시켜주게 되면 정책 파라미터가 지나치게 크게 업데이트되는 문제가 있다.
2.2 Trust Region Methods
위에서 정책 업데이트가 지나치게 크게 되는 문제를 해결하기 위해 TRPO(Trust Region Policy Optimization)에서는 파라미터의 변화폭에 아래와 같이 제한을 둔다.
$$ \begin{align} \mathrm{maximize} \;\; &\hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} \hat{A}_t \right] \\ \mathrm{subject\,to} \;\; &\hat{\mathbb{E}}_t \left[ \mathrm{KL}[ \pi_{\theta_{old}}(\cdot|s_t), \pi_\theta(\cdot | s_t) ] \right] \leq \delta \end{align}$$
보상이 최대화되도록 정책을 업데이트하면서 동시에 업데이트되는 파라미터가 이루는 정책 확률분포가 이전의 정책 확률분포와 크게 달라지지 않도록 제한한다. 위처럼 제한을 두는 대신 아래와 같이 목적함수에 페널티를 추가할 수도 있다.
$$ \mathrm{maximize} \;\; \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} \hat{A}_t - \beta\, \mathrm{KL}[ \pi_{\theta_{old}}(\cdot|s_t), \pi_\theta(\cdot|s_t) ] \right] $$
하지만 두 방식 모두 현실적인 한계가 있는데, 제한을 두는 방식은 계산량이 크고 페널티를 추가하는 방식은 적절한 $\beta$ 값을 찾기 힘들다.
3. Clipped Surrogate Objective
이제부터 업데이트 전후 확률분포의 비율을 $r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$라 하자.
$$ L^{CPI}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} \hat{A}_t \right] = \hat{\mathbb{E}}_t \left[ r_t(\theta) \hat{A}_t \right] $$
CPI(Conservative Policy Iteration)은 위 목적함수가 처음 나온 논문에서 따온 이름이다.
TRPO의 목적함수를 위와 같이 (KL 제한 없이) 써 보았다. 특별한 제한사항 없이 목적함수를 최적화하면 앞서 언급했듯이, 정책 파라미터가 지나치게 크게 업데이트 된다. 이를 해결하기 위해 본 논문에서는 아래와 같은 새로운 목적함수를 제시한다.
$$ L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \mathrm{min}( r_t(\theta)\hat{A}_t , \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t ) \right] $$
$\epsilon$은 하이퍼파라미터이며 $\epsilon=0.2$ 정도로 설정한다.
위 목적함수는 정책 파라미터가 좋은 방향으로 지나치게 크게 업데이트 되는 것을 막는다. 여기서 좋은 방향이라함은 목적함수가 최대화되는 방향을 의미한다. 즉 advatage $\hat{A}_t>0$이면 $r_t(\theta)$가 지나치게 큰 값을 갖는 것을 방지하고 만약 $\hat{A}_t<0$이면 $r_t(\theta)$가 지나치게 작은 값을 갖는 것을 방지한다.
아래 그래프는 $r_t(\theta)$와 $L^{CLIP}$의 관계를 직관적으로 보여준다.
$r_t(\theta)$가 $[1-\epsilon, 1+\epsilon]$의 범위밖의 값을 가지게 되면 목적함수에서 clip되어 학습이 되지 않는다. 즉 확률분포의 비율 $r_t(\theta)$가 $[1-\epsilon, 1+\epsilon]$의 범위 안에서 커지거나 작아지도록 학습된다.
위 그림은 $\theta(\alpha) = \theta_{old} + \alpha(\theta_{new} - \theta_{old})$에 대해서 $\alpha$값을 $0$에서 $1$까지 증가시키며 각각의 값들을 계산해 그래프로 그린 것이다. 초기에 파라미터가 $\alpha=0$으로 시작해서 학습이 진행될수록 $\alpha=1$에 가까워진다고 생각하면 된다. 주목할 점은 노란색 그래프($L^{CPI}$)와 빨간색 그래프($L^{CLIP}$)인데, $L^{CLIP}$이 명확하게 $L^{CPI}$의 lower bound를 형성하고 있고, $L^{CPI}$의 경우 학습이 진행될수록 별다른 제약없이 커지는 반면, $L^{CLIP}$은 어느정도 학습이 진행된 후 목적함수의 최대화가 어느정도 지연된 모습이다.
4. Adaptive KL Penalty Coefficient
위에서 제시한 $L^{CLIP}$ 목적함수에 대한 대안으로 KL 페널티를 목적함수에 추가하는 방안을 제시한다. 2.2절의 TRPO와 다르게, 여기서는 계수 $\beta$를 학습 중 적절한 방식으로 업데이트해준다. 학습 중 진행되는 알고리즘은 아래와 같다.
- 아래 목적함수를 최대화시켜준다.
$$ L^{\mathrm{KLPEN}}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t - \beta \, \mathrm{KL}[\pi_{\theta_{old}}(\cdot|s_t), \pi_\theta(\cdot|s_t)] \right] $$
- $d=\hat{\mathbb{E}}_t[\mathrm{KL}[\pi_{\theta_{old}}(\cdot|s_t),\pi_\theta(\cdot|s_t) ]]$의 값을 계산하여 $d<d_{\mathrm{targ}}/1.5$이면 $\beta$의 값을 절반으로 줄이고, $d>d_{\mathrm{targ}} \times 1.5 $이면 $\beta$의 값을 두배로 늘려준다. 이 때 $d_{\mathrm{targ}}$는 미리 설정한 하이퍼파라미터이다.
즉 위 알고리즘에 따라 $\beta$의 값을 학습 중 적절히 변화시킨다. $\beta$의 값이 $d_{\mathrm{targ}}$에 맞게 조절되기 때문에 정책 파라미터가 너무 크게 업데이트 되지 않는다.
$\beta$의 초기 설정값은 $2$ 정도가 적절하지만 알고리즘에 따라 적절히 변화하기 때문에 초기 설정값은 그리 중요하지 않다.
5. Algorithm
실제 학습 과정에서는 보상을 최대화하도록 하는 목적함수 $L^{\mathrm{CLIP}}$나 $L^{\mathrm{KLPEN}}$ 뿐만 아니라, 잘 학습된 가치함수 $V(s)$가 필요하다. 별도로 학습된 가치함수를 사용할 때는 상관이 없지만, 공유된 파라미터 모델로 정책함수와 가치함수를 모델링한다면, 이 목적함수들을 동시에 학습시켜 주어야 한다. 해당 경우에, 아래와 같이 수정된 목적함수를 사용한다.
$$ L_t^{\mathrm{CLIP}+\mathrm{VF}+\mathrm{S}}(\theta) = \hat{\mathbb{E}}_t [ L_t^{\mathrm{CLIP}}(\theta) - c_1 L_t^{\mathrm{VF}}(\theta) + c_2 S[\pi_\theta](s_t) ] $$
$S$는 entropy bonus를 의미하는 함수인데, 에이전트가 충반한 탐색을 할 수 있도록 돕는 역할을 한다.
$L_t^{\mathrm{VF}}$은 가치함수(Value Function, VF)의 목적함수이다. 목적함수는 $L_t^{\mathrm{VF}} = (V_\theta(s_t) - V_t^{targ})^2$로 정의되며 $L_t^{\mathrm{VF}}$의 학습 목적은 가치함수 $V_\theta(s_t)$가 보다 정확하게 미래의 가치를 예측하도록 하는 것이다. 여기서 $V_t^{\mathrm{targ}}$는 아래와 같이 정의된다.
$$V_t^{\mathrm{targ}} = r_t + \gamma r_{t+1} + \dots + \gamma^{T-t+1}r_{T-1} + \gamma^{T-t} V(s_T) $$
이 때 학습은 먼저 $T$스텝만큼 정책에 따라 에피소드를 진행하고, 여기서 나온 값들을 이용해서 $T$스텝만큼의 학습을 시키는 것이다. 조금 더 일반화된 방식으로 아래와 같이도 쓸 수 있다.
$$ \begin{align} & \hat{A}_t = \delta_t + (\gamma\lambda)\delta_{t+1} + \dots + (\gamma\lambda)^{T-t+1}\delta_{T-1} \\& \mathrm{where} \;\; \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) \end{align}$$
학습에 쓰이는 Proximal Policy Optimization(PPO) 알고리즘은 Policy Optimization 학습 알고리즘으로, 아래와 같이 진행된다.
즉 고정된 타임스텝 $T$에 대해서 $N$번의 반복을 진행하여 $NT$개의 데이터를 뽑은 뒤 위에서 정의한 목적함수를 최적화시키는 것이다. 이 때 하나의 데이터로 한번만 학습을 시키는 것이 아니라 미니배치로 나누어 여러번 학습을 시킬 수 있다.
6. Experiments
6.1 Comparison of Surrogate Objectives
먼저 여러가지 목적함수들을 비교해본다. 비교 대상 목적함수 아래와 같다.
$$\begin{align} \mathrm{No\,clipping\,or\,penalty:}\;\;\; & L_t(\theta) = r_t(\theta)\hat{A}_t \\ \mathrm{Clipping:}\;\;\; & L_t(\theta) = \min(r_t(\theta)\hat{A}_t, \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon))\hat{A}_t \\ \mathrm{KL\,penalty\, (fixed\,or\,adaptive):} \;\;\; & L_t(\theta) = r_t(\theta)\hat{A}_t - \beta \mathrm{KL}[\pi_{\theta_{old}},\pi_\theta] \end{align}$$
실험환경은 7 simulated robotics tasks implemented in OpenAI Gym(MuJoCo physics engine)으로 비교적 계산이 간단한 태스크이다. 각각 백만 타임스텝만큼 학습을 시켜주었다. 정책함수는 fully-connected MLP로 구현했고 가치함수는 따로 모델링 및 학습했으며 엔트로피 보너스는 사용하지 않았다.
아래는 실험결과를 나타낸 표이다. 학습 후 마지막 100 에피소드의 총보상을 평균낸 것이다.
위 표에서 볼 수 있듯이 $L^{\mathrm{CLIP}}$ 목적함수와 $\epsilon=0.2$로 하이퍼파라미터 값을 설정했을 때 가장 보상이 크게 나왔다. No clipping or penalty의 경우 7개의 환경 중 특정 환경에서 굉장히 낮은 점수를 기록했다.
6.2 Comparison to Other Algorithms in the Continuous Domain
아래 그래프 그림들은 PPO와 기존의 continuous problems에서 좋은 성능을 보인 다른 알고리즘과의 성능 비교를 나타낸 것이다.
그래프에서 볼 수 있듯이 대부분의 태스크에서 PPO는 기존의 알고리즘들과 비교했을 때 좋은 성능을 보였다.
6.3 Showcase in the Continuous Domain: Humanoid Running and Steering
PPO는 고차원 연속 태스크들에서도 좋은 성능을 보인다. 3D 휴머노이드와 관련된 다양한 과제를 수행했다. 각 태스크에 대한 설명은 아래와 같다.
(1) RoboschoolHumanoid : 넘어지지 않고 빠르게 달리기
(2) RoboschoolHumanoidFlagrun : 추가적으로 목표 지점이 주기적으로 변화
(3) RoboschoolHumanoidFlagrunHarder : 외부에서 방해를 받아 넘어지면 스스로 일어나는 것까지 학습
위 그래프는 타임스텝 진행에 따른 보상의 변화를 나타낸다. 세 태스크 모두에서 적절하게 보상이 증가하도록 학습이 잘 되는 것을 확인할 수 있다.
6.4 Comparison to Other Algorithms on the Atari Domain
아래 표는 Atari 게임에서 PPO 알고리즘과 다른 알고리즘을 비교한 것이다. 정책함수는 동일한 방식으로 모델링했다.
7. Conclusion
본 논문에서는 Proximal Policy Optimization이라는 알고리즘을 소개했고 clipping을 통한 효율적인 목적함수를 제시했다. PPO는 기존 도메인의 다른 알고리즘과 비교했을 때에도 뒤지지 않는 좋은 성능을 보였다.