PPO學習記錄

2020.4.23更新

1、ppo是一種on-policy,先利用old_pi進行一輪互動得到N個experience,用這些經驗對策略進行多次訓練更新得到new_pi,在此過程中限制new_pi的更新幅度(kl_pen和clip兩種方法)

問題:限制了每次的更新幅度進行多次更新,和一次進行大幅度更新 有區別嗎?

回答:OpenAI 提出的一種解決 Policy Gradient 不好確定 Learning rate (或者 Step size) 的問題. 因爲如果 step size 過大, 學出來的 Policy 會一直亂動, 不會收斂, 但如果 Step Size 太小, 對於完成訓練, 我們會等到絕望. PPO 利用 New Policy 和 Old Policy 的比例, 限制了 New Policy 的更新幅度, 讓 Policy Gradient 對稍微大點的 Step size 不那麼敏感.

2、REINFORCE算法

3、tf.distributions.Normal().prob()函數得到的數是均值爲loc,方差爲scale的正態分佈中,在數5處的概率密度,所以會大於一

import tensorflow as tf

sess=tf.Session()
list=tf.distributions.Normal(loc=5.0,scale=0.1)

p=list.prob(5.0)
sess.run(tf.global_variables_initializer())

print(sess.run(p))

2020.4.20更新

tf.squeeze()函數,刪除維度爲1的維

squeeze(
    input,
    axis=None,
    name=None,
    squeeze_dims=None
)

該函數返回一個張量,這個張量是將原始input中所有維度爲1的那些維都刪掉的結果。axis可以用來指定要刪掉的爲1的維度,此處要注意指定的維度必須確保其是1,否則會報錯

#  't' 是一個維度是[1, 2, 1, 3, 1, 1]的張量
tf.shape(tf.squeeze(t))   # [2, 3], 默認刪除所有爲1的維度

# 't' 是一個維度[1, 2, 1, 3, 1, 1]的張量
tf.shape(tf.squeeze(t, [2, 4]))  # [1, 2, 3, 1],標號從零開始,只刪掉了2和4維的1

論文閱讀

問題:

怎麼表示策略pi的概率分佈?

怎麼表示新舊策略的KL散度?

莫煩代碼中,ppo採用的是on-policy?只用前一個batch(32)次的互動數據,對actor進行M次更新。

1、初始化環境得到狀態S

2、用策略pi選擇action,

 

2020.4.22 代碼下載閱讀

openai 代碼解讀:https://blog.csdn.net/jinzhuojun/article/details/80417179

莫煩代碼理解:

https://blog.csdn.net/zhisuihen6347/article/details/88380637

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章