【RL】強化學習另一種思路:policy-based方法

博主的github鏈接,歡迎大家來訪問~:https://github.com/Sh-Zh-7

強化學習經典算法實現地址:https://github.com/Sh-Zh-7/reinforce-learning-impl

之前我們所介紹的,都是所謂value-based方法,它的中心思想是:既然我們要求的策略,是在給定狀態的基礎上選擇動作。那麼我通過研究動作的價值,就可以得到最優的策略。接下來要講的是另一種所謂的policy-based的方法,他所研究的,並不是相同狀態下各個動作的價值,而是相同狀態下,選擇各個動作的概率。但是他這個概率,也是要根據所謂的價值進行更新的。所以這二者並沒有什麼太大的差別。

 

0. Policy-based VS Value-based

我們有強大的QLearning方法已經夠用了,爲什麼還要values-based算法呢?原因是policy-based算法固有的缺陷:

  1. 對連續性動作處理不足:因爲很多時候我們神經網絡都被設計成給定狀態輸出各個動作的。然而,我們只能輸出有限個動作,不能輸出所有連續動作的分佈。
  2. 對受限狀態下問題處理能力不足:對於我們的網絡而言,只要是狀態相同,那我們最後輸出的動作價值也一定是相同的。然而,很多問題中,由於我們agent對環境觀察不足,很容易出現明明不同狀態,但是我們觀察到的狀態卻完全相同的情況。這一點我們的QLearning就無法處理了。
  3. 無法滿足隨機策略的需求:有些遊戲中,我們是不能有確定的策略的,比如石頭剪刀布。一旦我們的策略被對方發現,那我們的策略就失效了,所以我們的策略需要有一點隨機性。然而QLearning的策略卻是確定的。

 

1. 數學背景

我們之前value-based方法已經有特別明確的數學背景知識了——那就是引入包含accmulated reward的狀態價值和動作價值,然後我們證明,只要每一次選擇能使動作價值最大的動作,總可以得到更優的策略。通過不斷地迭代,我們就可以獲得最優的策略。

那現在的policy-based方法應該怎麼解釋呢?大家還記得我們之前提到要最大化accmulated reward R嗎?policy-based方法並沒有引入其它的量來求解,而是直接對這個R求導,首先我們先寫出R和式子中出現的P的表達式:

然後對R求導,看看結果如何:

 其中我們不難發現,這個log P中的P,就是我們之前說的“輸出動作”中的動作。可以看出,爲了順利地進行求導,我們還需要知道R的具體值。

 

2. 進一步理解和調整

在得到了上面那個式子以後還不夠,我們希望它能夠符合我們的直覺,因此我們纔要來理解它:

(1)是R不是r:

我們這裏用到的R是整個trajactory的accumlated reward,而不是每一個step中的reward。想一想就好了,Atari中的space invander遊戲中,我們就是設置左右移動reward爲0,fire reward爲1。顯然如果僅僅是一個step的reward的話,我們的左右移動將變得毫無意義。

(2)爲什麼是log:

在明白這個問題之前,我們首先要了解:一個函數log+求梯度,實際上是求梯度再除以它本身。所以使用Log, 其實是對梯度做了一個normalization。爲什麼要做normalizaiton呢?請看下圖:

這副圖講述了一個問題——那就是在同一個狀態,不同的動作reward不同的情況下,我們有可能經過對reward小的動作經過多次採樣(這一點可能是由於你函數初始化導致的),使得其權重比reward比他高的動作還要高。這樣一來,我們反而要提升它的權重了?這是完全沒有道理的。

(3)添加baseline:

我們之前已經把R和logP都介紹了一遍,下面我們稍微對這個式子做點修改,我們不是單純的R,而是剪掉一個baseline。

這樣做得目的就是讓我們的R有正有負,因爲我們使通過採樣來模擬概率分佈的,因此可能會遇到一些動作沒有采樣到。如果所有的reward都是正的,只是大小不同的話,我們的神經網絡也會選擇增加其它reward可能較小的動作的權重,而不增加沒采樣到的reward較大的權重。因此我們選擇增加一個baseline,讓不同動作的reward有正有負

(4)R的選擇:

講了這麼多了,還沒講R是怎麼計算的呢,現在我列出可行的計算R的方法:

  1. 基於狀態價值:\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t) V(s,w)
  2. 基於動作價值:\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t) Q(s,a,w)
  3. 基於優勢函數:\small A(S,A,w,\beta) = Q(S,A, w, \alpha, \beta) - V(S,w,\alpha)\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t)\delta(t)E_(t)即可。

 

3. 實現:PolicyGradient

PG算法的實現非常簡單,就是使用MC方法進行採樣得到精確的accumulated reward,然後反向傳播即可。這種算法又叫MCPG方法,顯然還有其它更爲複雜的方法,這裏我就不介紹了。

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