Policy Gradient

Ivan Lee
Change The World With Technology
11 min readMar 7, 2020

--

這章節介紹reinforcement learning中,policy的模型,以此為基礎,發展出後續的PPO、A2C算法。

先來介紹reinforcement learning應用場景。π是設計好的決策模型,也就是policy,另外一個則是環境的模型。環境會先產出一個state,可以想像是遊戲畫面,或無人車駕駛前方監測的影像,接著policy輸入一個state後,會再output出一個動作,動作會在輸入至環境裡面,policy的動作影響環境後,環境會在output出新的state。可以想像成,無人車往左行駛後,接著產生新的前方畫面,兩者交替互動,這就是實際RL在應用上的樣貌。

因為環境跟policy的輸出都是機率值,整個p(τ)就是由π的動作機率與環境的變化機率p,一系列的互動所組成,在這我們可定義p(τ),為兩者互動事件的連乘。再兩者互動過程中,會根據決策完後的結果,產生一個獎勵r (獎勵函數怎麼來這件事情,可參考這一篇),我們這邊先定義θ*為最好的policy,它能最大化整體獎勵。

在跟環境互動會有兩個形態,一種是永恆的,另種則是有限,例如像是圍棋或遊戲,都是由有限回合所組成。

整個τ的定義,我們叫trajectory。t是每回合的一步,i則是回合的次數,J則是所有回合跟每回合的獎勵的累積。因為是由所有回合組成,趨近於N個回合,所以期望值展開我們可以用除於N表示。

為了討論後方如何優化,這邊開始導policy。中間一樣期望值展開,我們用r表示為獎勵的加總。另外雖然所有事件是離散的,但這裡我們用連續的方式表示,放置一個積分符號,然後π的機率帶出來。最下面一行我們對期望值做梯度,中間用微積分的方法置換,最後期望值等於∇logπ(τ)。

我們把梯度的部分在做拆解,剛剛談到整個π(τ)是由很多獨立事件連成,右上我們把公式展開,接著左右取log,則連乘的部分變相加,log(p)的部分我們可以直接刪去,因為我們是要優化 π 參數。最後微分後變成∇logπ(a|s)。

把剛剛梯度的部分帶過來,因為包含回合的機率值,所以期望值攤開,則是1/N,每個τ的機率與獎勵相乘,接著做加總。

policy gradient優化過程為:跟環境採樣一定數量的樣本,接著求梯度,接用梯度更新θ的參數。

在互動中時π實際會是怎麼樣?舉個例子,如果是無人車,定義好離散的動作為往左開、往右開跟前開,π就是產出左右上的機率,基礎的分類模型輸出的是判斷貓狗,但我們這邊是分動作。網路最後一層接softmax,出來就是這三個動作的機率。

這跟監督學習的cross entropy很像,差別在policy gradient有獎勵,以及我們以往的分類是要讓loss下降,但這裡是要讓reward好的τ機率變大。

如果不是隨機參數,我們同樣可用多元正態分佈來policy,同樣參數可藉由回合來優化。

實際上的優化會是怎樣的結果?如果某trajectory的獎勵較多,則會因為cross entropy關係,機率值跟著增加,反之則相對減少。

實際上,如果是個全知全能的個體,知道當下環境所有的變動,這樣的決策會是出色的,但實際上我們不用得到這麼多資訊,用普通的畫面觀測就可以運行無人車了,但我們當下不用關心車子的零件狀態。雖然這種觀測跟model base不同,但這種連貫性的決策與互動,我們仍可以定義policy gradient具有馬爾科夫鏈性質,它的決策與優化是有效的。

但在policy gradient訓練會遇到一個問題,我們這舉個例子。假設此時有三個樣本,兩個較小的正值樣本,一個較大的負值樣本。

經過優化後,policy輸出τ的機率分佈往右邊移動,好的樣本出現機率在於整個分佈高峰處,則壞的樣本機率趨近於0。

今天遇到個問題是,我們對於所有的τ的獎勵都加上一個常數,它不會影響policy 更新的方式,以剛剛的三個樣本作為例子,負值樣本便正值,原本兩個正值樣本變得更大了。

這個做優化會造成說,實際上它會讓三個樣本機率值都變大,但因為右邊兩個較好的正值樣本集中,所以機率分佈往右邊移動,但它沒法真正徹底剔除掉不好樣本出現的機率,整體的分佈也變得較為平緩。

在舉個極端例子,如果我們今天的獎勵是負值呢?正值的樣本被減到剩下為0,負值變得更低,但因為獎勵變成0的關係,這兩個τ將不會獲得更新。

剛介紹到這做個總結,剛的部分講解怎麼跟環境互動生成資料樣本、用微分技巧公式上做梯度、透過優化如何實際影響policy、部分觀察的state是可行的,以及最後介紹policy gradient會遇到的問題。接下來會說明這些問題,因很多因素組成高方差,以及如何應對的辦法。

首先第一個方法叫因果關係(causality)。在優化π的時候,會對出現過的τ做優化,獎勵值是τ所有的累加,對輸入的π(a|s)來說,乘的對象是整個τ的獎勵,但有時你已經走到中間的step了,為什麼過去獎勵會影響你?好比你現在的努力,是為了將來的自己,而不是為了更早的自我。

在這我們把公式做個調整,在每個logπ(a|s)的t時刻,我們把t時刻後的獎勵做加總,作為新的梯度優化。

我們這邊暫時用Q hat 表示,裡面的獎勵是t到T的總和。

還有個狀況是如果好的獎勵為一百萬加一,不好的為一百萬減一,這樣的影響會讓優化幅度微乎其微。

猜你已經想到了,那就把獎勵值減去平均值就好拉!但這個做法在數學上是可行的嗎?我們來實際證明看看。

假設b值我們已經定義,在每個獎勵減去一個b值,我們先把logπ的部分拿掉,因為我們想先瞭解實際b的影響,所以剩下就是對∇logπb的影響。

期望值帶出轉乘積分,接著用前面提過的微積分公式,把∇π帶回來,接著b帶出積分,會發現就只剩下π(τ),因為總值為1的關係,所以梯度會是0,最終我們驗證了,減去平均值是不會影響方向的,這是一個相當有效的技巧。

儘管剛提出了兩個有效方法,但我們很好奇是否有最佳baselines這件事情。為了驗證,數學上我們先找出變異數,帶入變異數公式,我們在期望值裡面帶入J的梯度,右邊的項不用理會,因為我們剛求過值會是0,剩下的值就是我們要的變異數公式,接著我們對公式微分b值,並且設微分的值會是0,因為前面已假定是最好b的關係。剩下求微分後的數字,轉位置上的交換,確定求出b。

儘管數學上驗證是可行的,但實際操作上會帶來計算上的麻煩,這裡的話還是建議用平均值方式,方便又有效。

到剛剛介紹,我們講了幾個高方差問題,還有個因素是,如果你的T越大,獎勵的大小相對也會很不穩定。接著了解了幾個方法,因果關係、減平均值,以及我們印證了b值會有最佳解。

policy gradient在訓練過程中會產生一個問題,就是樣本無法重複訓練。儘管現代已經有各種模擬環境可快速累積資料,但累積的大量樣本的時間也會讓訓練更加緩慢。在這我們先看一下為什麼不能用過去的資料樣本。

看中間期望值的更新,因為policy在更新的時候是遵從舊樣本的機率分佈,所以新的模型參數已經修改了,如果此時沿用舊的資料樣本,優化會出現問題。所以實際上,會是更新完後會在做一次採樣,重複如下圖123過程。

有無辦法解決這問題呢?有的!就是做importance sampling。延續剛剛的優化公式,我們先參考右側的數學過程。期望值變回積分,待出機率值,接著生出分子分母q,p除分母q,剩分子q,接著把分子q帶回期望值機率。

在回到剛剛的優化公式,簡單來說就是乘一個重要性採樣的係數,期望值會遵從新的機率分佈。接著把π(τ)展開來,變成機率連成。因為τ都是相同的,所以上下只要是環境機率的部分,我們都可直接刪掉。

接著我們來導做importance sampling的policy gradient。實際上,我們對新的policy,π’做梯度,得到右邊公式。換湯不換藥,我們用上直接的微積分技巧,∇π(τ)換成π(τ)∇logπ(τ)。

最後如果θ’更新的幅度微乎其微,實質上θ=θ’,那原本的係數可消掉,變回原本的優化梯度。

優化過程到這邊,在這我們把π換成剛解析出來的連成π(a|s),但在這會發生個問題,因為我們沒做因果關係,importance sampling做因果關係的公式在最後一行,最後的連成會影響優化,但實際上這可以變成1,為什麼這可直接消去,未來會再增加篇幅做說明。

剛剛得到了新的importance sampling的因果關係公式,但中間的指數連成,會因為T的關係受影響,如果T越大,連成越多,影響也會更大。在這我們把係數換掉,變成以當下的π(s, a)值做取代,π(s,a)可直接換成π(s)*π(a|s),前面的一項可先忽略掉,未來有機會會在做補充。

好拉接下來把今天的內容做總結,公式上我們會用cross entropy做loss。

這邊先展示maximum likelihood的版本,同樣有action跟state,從上至下,把state輸入至policy,接著輸出機率值。接著放進做cross entropy,這裡輸入的action是已經塞選完的動作。假設動作有兩個,0.7跟0.3,在這就轉成 1,0 或0,1,但前者出現機率比較大,會遵從logits的機率分佈。接著輸入至reduce,然後做梯度。

policy gradient版本就是加上q_value,然q_value對τ做評分,越好的越大。

到這總結跟一般的監督式學習不同,梯度會有高方差。梯度度會有噪聲,建議可用大的batch。學習率難調整,可用ADAM。

  • off-policy可使用方法 重要性採集
  • exponential 縮放T
  • 可以忽略state部分(approximation) 之後老師上課會再提到

約定俗成的說法,policy gradient就是 on-policy。對於高方差的問題,可採用重要性採樣。指數T可換成當下的π(s,a)

今天介紹到這邊拉~policy gradient是未來跟q_value結合的一塊,取代掉greedy方法,policy gradient還可以解決連續動作的問題,這是q_value單獨無法面對的。這篇理解後,未來推薦可再去看延伸應用PPO跟A2C。

內容來源:https://youtu.be/Ds1trXd6pos

講義:https://bre.is/MJcFQ3Hw

--

--