long8v/PTIR

[168] Proximal Policy Optimization Algorithms

Opened this issue · 1 comments

image

paper

TL;DR

  • I read this because.. : 배경지식 차
  • task : RL
  • problem : q-learning은 너무 불안정하고, trpo 는 상대적으로 복잡. data efficient하고 sclable한 arch?
  • idea : KL divergence term 대신에 clipping을 사용하자. step size $\beta$를 adaptive하게 변동시키자
  • input/output : state -> action
  • architecture : MLP
  • objective : $L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon)\hat{A}_t) \right]$
  • baseline : loss(no clipping, KL penalty), A2C, CEM, TRPO
  • data : OpenAI Gym(Mujoco), human control task(Roboschool), Atari
  • evaluation : 몰라
  • result : 좋다
  • contribution : 간단하고 직관적인 loss.. 사실 이 논문만 보면 직관적인 이해가 되어서 굳이 그 전 내용을 알았어야 하는 생각도.. ㅎㅎ
  • etc. :

Details

preliminary

  • policy gradient method
image

policy network에 대한 gradient를 advantage에 가중하여 미분하는 형태
여기서 E는 sample을 뽑아서 그냥 평균 취하는 형태

image

loss는 이러한 policy를 따르는 trajectory에 대한 advantage 가중합의 기대값이 최대가 되도록 하면 된다
그러나 large policy update가 될 경우 성능이 좋지 않다

  • Trust Region methods
    TRPO는 대리 함수를 사용하여 성능 개선이 보장되는 policy update를 할 수 있는 surrogate 함수를 증명했고(#154) 이는 policy가 업데이트 될 때의 제약이 생겨서 결론적으로 아래와 같이 new, old policy network의 importance weight와 advantage가 곱해진 형태
image

실제로는 제약이 아니라 penalty term을 추가함 여기서 $beta$는 하이퍼파라미터임.
image

이 논문에서 말하는 TRPO의 문제점은 $\beta$가 하나로 골라질 수 없다 정도인듯.

Clipped Surrogate Objective

image image

결론적으로 $r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)}$가 너무 크거나 작지 않도록 clip했다고 보면 됨

image

이렇게 하니 policy network의 변동이 적었다고 함

image

Adaptive KL Penalty Coefficient

image

아이참 이것도 아주 직관적이고 간단하다..

Algorithm

위에는 policy에 대한 gradient 업데이트를 어떻게 할지 정한거고 외의 것들은 괜찮은 것들 갖다 씀.
V(s)를 도입하여 reward의 variance 줄임. 즉 policy surrogate와 value function error term을 추가함. 여기에 exploration 더 많이 하라고 entropy bonus를 추가해줌.
image

advantage는 현재 할인된 Reward의 summation에서 현재의 V를 빼고 미래의 V를 할인해서 더함.
image

잘 기억 안나는데.. fixed time step에서 bias // vairance를 최적화하는 기법을 써서 아래와 같이 구함
image

Experiments

  • loss term
image
  • other RL algorithms
    봐도 모르쥬 ㅎ
image

def learn

                rollout = self.runner.run(callback)
                # Unpack
                obs, returns, masks, actions, values, neglogpacs, states, ep_infos, true_reward = rollout

def setup_models (loss 정의부)

image
                    loss = self.pg_loss - self.entropy * self.ent_coef + self.vf_loss * self.vf_coef
  • self.entropy : 논문에서 $S$. entropy bonus

https://github.com/Stable-Baselines-Team/stable-baselines/blob/master/stable_baselines/ppo2/ppo2.py#L176-L188

                    vf_losses1 = tf.square(vpred - self.rewards_ph)
                    vf_losses2 = tf.square(vpred_clipped - self.rewards_ph)
                    self.vf_loss = .5 * tf.reduce_mean(tf.maximum(vf_losses1, vf_losses2))
  • vf_losses : Value 함수 업데이트 하는 부분. value 예측값도 clipping을 하나봄..!
    PPO 논문엔 생략 되어 있지만 value 함수가 따로 있고 이를 업데이트 해야함
image
                    ratio = tf.exp(self.old_neglog_pac_ph - neglogpac)
                    pg_losses = -self.advs_ph * ratio
                    pg_losses2 = -self.advs_ph * tf.clip_by_value(ratio, 1.0 - self.clip_range_ph, 1.0 +
                                                                  self.clip_range_ph)
                    self.pg_loss = tf.reduce_mean(tf.maximum(pg_losses, pg_losses2))
  • neglogpac: Negative Log-likelihood probability of Actions
    • train_model.proba_distribution.neglogp(self.action_ph) action이 확률분포로 나올 텐데 이에 대해 negative log 를 구하면 됨
  • ratio : 논문에서 $r_t(\theta)$. neglogpac의 이전것과 현재 것의 차이에 exponential 취한 것
  • pg_losses: 수식에서 첫번째 term
  • pg_losses2: 수식에서 두번째 term
  • pg_loss : 수식에서 $L^{CLIP}$
  • self.advs_ph : $\hat A_t$