Proximal Policy Optimization (PPO)
Proximal Policy Optimization,簡稱PPO,即近端策略最佳化,是對Policy Graident,即策略梯度的一種改進演算法。Importce Sampling的方法,將Policy Gradient中On-policy的訓練過程轉化為Off-policy,即從線上學習轉化為離線學習。
Policy Gradient是一種基於策略迭代的強化學習演算法。
Policy Gradient直接地透過取樣狀態、動作、獎勵,然後期望直接最大化獎勵的期望。
當取樣足夠充分時,獎勵的期望可以近似為N回合的獎勵的平均值:
上式中的第n回合的獎勵值之和
被定義為如下形式:
PolicyGradient (策略梯度):
設計一個網路,其輸入是state,輸出是對應各個action的機率,並策略梯度(PolicyGradient)進行迭代訓練。
我們首先定義
為一次回合的跡:
是這次跡的獎勵值之和:
直觀地,我們希望最大化:
則首先對
求梯度:
而對於
,則可以展開成以下形式:
將上式帶入
中:
最終
將改寫為:
本質上是最小化N回合取樣出的action與網路輸出的action的交叉熵的基礎上乘以
:
需要注意的是,
對於不同的問題計算方式是不同的,在CartPole中,我們更關注回合開始時的獎勵,因為他們直接影響了我們是否有機會進行更可能多的動作,所以在這個問題中,
是這樣計算的:
# Copy r_buffer
r_buffer = self。r_buffer
# Init r_tau
r_tau = 0
# Calculate r_tau
for index in reversed(range(0, len(r_buffer))):
r_tau = r_tau * self。gamma + r_buffer[index]
的正負直接決定了梯度下降的方向,對於訓練過程的收斂至關重要。
Policy Gradient文章中,已經詳細地推導了關於
的計算方法,所以在這裡的具體推導過程將略過,最後關於其計算公式將有如下形式:
本質上是最小化N回合取樣出的動作與網路輸出的動作的交叉熵的基礎上乘以#FormatImgID_24#,獎勵值給了梯度下降的方向,推匯出了#FormatImgID_25#,其實就已經可以根據梯度下降法反向傳播改進網路進行訓練了,但是通常情況下我們會根據具體的問題對其做一些修正。
Actor-Critic Model
第一個改進:需要針對每一個狀態、動作元組對
進行如下替換:
這樣原來的梯度公式將會被改寫為以下形式:
但是這樣還存在一個稱之為Overestimate,即過估計的問題。因為在實際情況中,我們的狀態-動作取樣通常是不充分的,這會導致一些一些動作或者狀態幾乎不會被取樣,這樣在進行梯度下降訓練網路時,在這些狀態對應的動作將可能被極大的放大或者縮小。由於輸出層是soft-max,這些機率會此消彼長,這顯然不是我們想看到的。所以我們需要做第二個改進:引入Baseline,通常可能是一個待調整的常超引數,或者Critic,通常是一個待訓練的網路。
如果引入的是一個Critic,這樣的模型將會被稱之為Actor-Critic Model,即演員-評論家模型,而N回合平均獎勵值的梯度將會被改寫為以下形式:
在一次訓練過程中,我們會按順序同時更新這兩個網路,目前這樣的模型已經被廣泛使用,並在實驗上證明了較好的效果。
Importance Sampling
在前面提到,PPO的一個核心改進是將Policy Gradient中On-policy的訓練過程轉化為Off-policy,即從線上學習轉化為離線學習,這個轉化過程被稱之為Importance Sampling,是一種數學手段。如果我們有連續隨機變數X,它的機率密度函式記作
,則
的期望透過如下公式計算:
若我們對於連續隨機變數X,有另一個機率密度函式記作$q(x)$,那麼他們將有以下關係:
在上式中最右邊的項中,
被稱之為Importance Weight,類比到我們的問題,
是
,而
,則是
新老策略對於當前狀態採取當前動作對應的機率之比
,這句話比較費解,更加具體一些,對於小車倒立杆為例,動作是離散的,在網路的輸出是一組離散的機率分佈,以這個機率分佈選擇動作,這個動作在新老策略中,在當前狀態中都對應了一個機率值,
#FormatImgID_38# 即是他們的比值。
透過這一操作,在取樣充分的情況下,我們可以認為:
Proximal Policy Optimization
最終我們將推匯出PPO,Importance Sampling將給我們將On-policy的訓練過程轉化為Off-policy以基礎,即我們可以透過老策略,即
進行充分取樣,然後改進新策略
,這個過程可以在一回合重複N次,而不再是1次,這樣大幅度減少了原始PG演算法線上學習進行取樣狀態-動作-獎勵元組對時間,同時保證了訓練效果,而N回合平均獎勵值的梯度也將被改寫為以下形式:
在實際訓練過程中,會有一個對
的clip的操作:
相當於一個正則化的操作,其中
是一個可調整的超引數,至此,PPO也就介紹完了。
Clipped 方法
除了上面的方法,其實還有一個更見簡潔的方法,既然想要控制更新的“步伐”,那乾脆控制
的大小。自然而然的就衍生出了下面clipped版本的“surrogate”函式:
首先令
,然後令:
其中
是個超引數,一般設定為
,然後對
使用SGD進行最佳化。
PPO的方法總結來說就是控制新舊策略的比值
的大小來防止更新幅度的變化影響Agent的學習效果。
Clip會把 #FormatImgID_53# 的值限制在 #FormatImgID_54# 範圍內
:
當Advantage函式
時說明此時策略更棒,要加大最佳化力度,但是當
時會將其Clip為
,Min操作會選擇
,這樣一來就會防止其過度最佳化。
當Advantage函式
時說明此事策略更差,要減小其最佳化力度,即選擇更小的
,當
時雖然會將其Clip到
,但是Min函式依舊會選擇更小的
。
一言以蔽之:
當朝好的方向最佳化就會限制其最佳化力度,向差的方向最佳化則會盡可能選擇小的最佳化力度。