Open long8v opened 3 weeks ago
def learn
rollout = self.runner.run(callback)
# Unpack
obs, returns, masks, actions, values, neglogpacs, states, ep_infos, true_reward = rollout
def setup_models (loss 정의부)
loss = self.pg_loss - self.entropy * self.ent_coef + self.vf_loss * self.vf_coef
self.entropy
: 논문에서 $S$. entropy bonus 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 함수가 따로 있고 이를 업데이트 해야함 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
: 수식에서 첫번째 termpg_losses2
: 수식에서 두번째 termpg_loss
: 수식에서 $L^{CLIP}$self.advs_ph
: $\hat A_t$
paper
TL;DR
Details
preliminary
policy network에 대한 gradient를 advantage에 가중하여 미분하는 형태 여기서 E는 sample을 뽑아서 그냥 평균 취하는 형태
loss는 이러한 policy를 따르는 trajectory에 대한 advantage 가중합의 기대값이 최대가 되도록 하면 된다 그러나 large policy update가 될 경우 성능이 좋지 않다
실제로는 제약이 아니라 penalty term을 추가함 여기서 $beta$는 하이퍼파라미터임.
이 논문에서 말하는 TRPO의 문제점은 $\beta$가 하나로 골라질 수 없다 정도인듯.
Clipped Surrogate Objective
결론적으로 $rt(\theta) = \frac{\pi\theta(a_t | st)}{\pi{\theta_{old}}(a_t | s_t)}$가 너무 크거나 작지 않도록 clip했다고 보면 됨
이렇게 하니 policy network의 변동이 적었다고 함
Adaptive KL Penalty Coefficient
아이참 이것도 아주 직관적이고 간단하다..
Algorithm
위에는 policy에 대한 gradient 업데이트를 어떻게 할지 정한거고 외의 것들은 괜찮은 것들 갖다 씀. V(s)를 도입하여 reward의 variance 줄임. 즉 policy surrogate와 value function error term을 추가함. 여기에 exploration 더 많이 하라고 entropy bonus를 추가해줌.
advantage는 현재 할인된 Reward의 summation에서 현재의 V를 빼고 미래의 V를 할인해서 더함.
잘 기억 안나는데.. fixed time step에서 bias // vairance를 최적화하는 기법을 써서 아래와 같이 구함
Experiments
loss term
other RL algorithms 봐도 모르쥬 ㅎ