机器学习(三十四)——策略梯度
策略梯度
價值函數可以進行近似的參數化表達,策略本身也同樣可以函數化、參數化:
πθ(s,a)=P[a∣s,θ]\pi_\theta(s,a)=P[a | s, \theta]πθ?(s,a)=P[a∣s,θ]
所謂函數化是指,通過一個概率分布函數πθ(s,a)\pi_\theta(s,a)πθ?(s,a),來表示每一步的最優策略,在每一步根據該概率分布進行action采樣,獲得當前的最佳action取值。顯然概率越高的a,就是該策略最傾向的a。
顯然,生成action的過程,本質上是一個隨機過程;最后學習到的策略,也是一個隨機策略(stochastic policy).
而策略函數的參數化就和價值函數的參數化類似了,無非是用較少的參數,來表示巨大的狀態空間而已。
基于策略學習的優點:
-
基于策略的學習可能會具有更好的收斂性,這是因為基于策略的學習雖然每次只改善一點點,但總是朝著好的方向在改善;但是上講提到有些價值函數在后期會一直圍繞最優價值函數持續小的震蕩而不收斂。
-
在對于那些擁有高維度或連續狀態空間來說,使用基于價值函數的學習在得到價值函數后,制定策略時,需要比較各種行為對應的價值大小,這樣如果行為空間維度較高或者是連續的,則從中比較得出一個有最大價值函數的行為這個過程就比較難了,這時候使用基于策略的學習就高效的多。
連續行為空間內的action對應一個具體的數值,這個數值可以從上述的策略分布中隨機采樣產生。因此策略學習天生支持連續行為空間。
-
能夠學到一些隨機策略。這一點后文會詳述。
-
有時候計算價值函數非常復雜。比如當小球從從空中某個位置落下你需要左右移動接住時,計算小球在某一個位置時采取什么行為的價值是很難得;但是基于策略就簡單許多,你只需要朝著小球落地的方向移動修改策略就行。
缺點:
-
容易收斂到局部最優,而非全局最優。
-
因為基于價值函數的策略決定每次都是推促個體去選擇一個最大價值的行為;但是基于策略的,更多的時候策略的選擇時僅會在策略某一參數梯度上移動一點點,使得整個的學習比較平滑,因此不夠高效。
隨機策略
隨機策略有時是最優策略。對于石頭剪刀布的游戲,只要一方有一個確定性的策略,就會被對手抓住進而整體上輸掉。這個時候最好的策略就是隨機選擇每次出法,以得到最大可能的總體獎勵。
以上面的Gridworld圖為例,如果我們用某一個格子的某個方向是否有墻擋住來描述格子狀態的話,就會發生灰色格子的狀態是一樣的情況,這就是所謂的狀態重名(Aliased)。
在這種情況下,如果采用確定性的策略話,在個體處于無論哪個灰色格子時,都只能選取相同的行為。假設個體現在學到了一個價值函數,在這個價值函數里狀態就是基于上述特征的參數化表示,此時當個體處在灰色格子中,如果采取的是greedy執行的方式,價值函數給出的策略要么都是向東,要么都是向西。如果是向西,那么當個體處在左側灰色格子時,它將一直(greedy)或很長時間(?\epsilon?-greedy)徘徊在長廊左側兩個格子之間而無法到達有錢袋子的格子,因而很長時間得不到獎勵。
當發生狀態重名情況時,隨機策略將會優于確定性的策略。之前的理論告訴我們,對于任何MDP總有一個確定性的最優策略。不過那是針對狀態可完美觀測、或者使用的特征可以完美描述狀態的情況下的。當發生狀態重名無法區分,或者使用的近似函數無法對狀態完美描述時,個體得到的狀態信息等效于部分觀測的環境信息,這時問題將不具備Markov性。而此時的最優策略,也不再是確定性的。
策略目標函數(Policy Objective Functions)
首先,我們看看如何評價一個策略的好壞。
- Start value:
J1(θ)=Vπθ(s1)=Eπθ[v1]J_1(\theta)=V^{\pi_\theta}(s_1)=E_{\pi_\theta}[v_1]J1?(θ)=Vπθ?(s1?)=Eπθ??[v1?]
上式表示在能夠產生完整Episode的環境下,從狀態s1s_1s1?開始,直到結束狀態所能獲得的累計獎勵。在這種情況下,由于整個Episode的狀態、路徑都是確定的,因此獎勵也是確定的。我們需要做的只是最大化start value,以找到最佳路徑(也就是最佳策略)。
- Average Value:
JavV(θ)=∑sdπθ(s)Vπθ(s)J_{avV}(\theta)=\sum_s d^{\pi_\theta}(s)V^{\pi_\theta}(s)JavV?(θ)=s∑?dπθ?(s)Vπθ?(s)
對于連續環境條件,不存在一個開始狀態,這個時候可以使用average value。上式中的dπθ(s)d^{\pi_\theta}(s)dπθ?(s)表示πθ\pi_\thetaπθ?對應的MDP過程的Markov chain的穩態分布。
- Average reward per time-step:
JavR(θ)=∑sdπθ(s)∑aπθ(s,a)Rs,aJ_{avR}(\theta)=\sum_s d^{\pi_\theta}(s)\sum_a\pi_\theta(s,a)R_{s,a}JavR?(θ)=s∑?dπθ?(s)a∑?πθ?(s,a)Rs,a?
上式表示每一個time-step在各種情況下所能得到的平均獎勵。
當然了,在很多情況下,我們未必可以得到一個真實的獎勵值,這時使用相關函數的估計值作為獎勵值即可。
策略優化(Policy Optimisation)
主要分為兩大類:
1.非gradient算法。
- Hill climbing
- Simplex / amoeba / Nelder Mead
- Genetic algorithms
2.gradient算法。
- Gradient descent
- Conjugate gradient
- Quasi-newton
一般來說,gradient算法的優化效率較高,因此本文只討論gradient算法。
我們可以仿照ML中的梯度優化算法,定義策略的梯度函數:
Δθ=α?θJ(θ)\Delta\theta=\alpha\nabla_\theta J(\theta)Δθ=α?θ?J(θ)
其中,
?θJ(θ)=(?J(θ)?θ1??J(θ)?θn)\nabla_\theta J(\theta)=\begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \\ \vdots \\ \frac{\partial J(\theta)}{\partial \theta_n} \end{pmatrix}?θ?J(θ)=??????θ1??J(θ)???θn??J(θ)???????
然而,梯度函數有的時候并不簡單,也許并不可微。這時可以使用有限差分法:
?J(θ)?θk≈J(θ+?uk)?J(θ)?\frac{\partial J(\theta)}{\partial \theta_k}\approx \frac{J(\theta + \epsilon u_k)-J(\theta)}{\epsilon}?θk??J(θ)?≈?J(θ+?uk?)?J(θ)?
這里的uku_kuk?是第k個元素為1,其余元素為0的單位向量。
有限差分法簡單,不要求策略函數可微分,適用于任意策略;但有噪聲,且大多數時候不高效。
Monte-Carlo Policy Gradient
?θπθ(s,a)=πθ(s,a)?θπθ(s,a)πθ(s,a)=πθ(s,a)?θlog?πθ(s,a)\nabla_\theta \pi_\theta(s,a) = \pi_\theta(s,a)\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)}=\pi_\theta(s,a) \nabla_\theta \log \pi_\theta(s,a)?θ?πθ?(s,a)=πθ?(s,a)πθ?(s,a)?θ?πθ?(s,a)?=πθ?(s,a)?θ?logπθ?(s,a)
上式一般被稱作Likelihood ratios,這里使用到了一個公式:dlog?(y)=dy/y\mathrmze8trgl8bvbq\log(y)=\mathrmze8trgl8bvbqy/ydlog(y)=dy/y
我們定義Score function為:?θlog?πθ(s,a)\nabla_\theta \log \pi_\theta(s,a)?θ?logπθ?(s,a)
下面討論幾種常見的策略。
Softmax Policy
Softmax Policy適用于離散行為空間,它把行為權重看成是多個特征在一定權重下的線性代數和:?(s,a)Tθ\phi(s,a)^T\theta?(s,a)Tθ,則采取某一行為的概率為:
πθ(s,a)∝e?(s,a)Tθ\pi_\theta(s,a)\propto e^{\phi(s,a)^T\theta}πθ?(s,a)∝e?(s,a)Tθ
相應的Score function為:
?θlog?πθ(s,a)=?(s,a)?Eπθ[?(s,?)]\nabla_\theta \log \pi_\theta(s,a)=\phi(s,a)-E_{\pi_\theta}[\phi(s,\cdot)]?θ?logπθ?(s,a)=?(s,a)?Eπθ??[?(s,?)]
上式中,等號右邊第一部分是采取某行為的Score,第二部分是當前狀態的期望分值。
Gaussian Policy
Gaussian Policy適用于連續行為空間。比如,如果控制機器人行走要調整流經某個電機的電流值,而這個電流值是連續值。
它用一個正態分布表示策略:a~N(μ(s),σ2)a\sim N(\mu(s), \sigma^2)a~N(μ(s),σ2),其中μ(s)=?(s)Tθ\mu(s)=\phi(s)^T\thetaμ(s)=?(s)Tθ。
相應的Score function為:
?θlog?πθ(s,a)=(a?μ(s))?(s)σ2\nabla_\theta \log \pi_\theta(s,a)=\frac{(a-\mu(s))\phi(s)}{\sigma^2}?θ?logπθ?(s,a)=σ2(a?μ(s))?(s)?
下面我們用一個圖來演示一下相關步驟。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UI1YvCTe-1571621618479)(/images/img3/pg.png)]
左圖的藍點表示采樣X,箭頭指示該點的梯度方向,既然是正態分布,這些箭頭顯然是遠離中心的。中圖表示,X對應的Score function。我們根據Score function更新參數(沿著綠色箭頭方向,或者沿著紅色箭頭的反方向)。最終得到右圖中的新的正態分布。
從貝葉斯學習的角度來看,左圖相當于先驗分布,而中圖相當于后驗分布。
參考:
https://karpathy.github.io/2016/05/31/rl/
Deep Reinforcement Learning: Pong from Pixels
Policy Gradient Theorem
One-Step MDP是一類特殊的MDP:它從任意狀態開始,只執行一次動作,然后就結束了。
J(θ)=Eπθ[r]=∑s∈Sd(s)∑a∈Aπθ(s,a)Rs,aJ(\theta)=E_{\pi_\theta}[r]=\sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)R_{s,a}J(θ)=Eπθ??[r]=s∈S∑?d(s)a∈A∑?πθ?(s,a)Rs,a?
?θJ(θ)=∑s∈Sd(s)∑a∈A?θlog?πθ(s,a)Rs,a=Eπθ[?θlog?πθ(s,a)r]\nabla_\theta J(\theta)=\sum_{s\in S} d(s)\sum_{a\in A}\nabla_\theta \log \pi_\theta(s,a)R_{s,a}=E_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a)r]?θ?J(θ)=s∈S∑?d(s)a∈A∑??θ?logπθ?(s,a)Rs,a?=Eπθ??[?θ?logπθ?(s,a)r]
One-Step MDP的相關結論可以擴展到multi-step MDP,只需要將即時獎勵r,替換為長期獎勵(一般使用其估計函數Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a))即可。
在監督學習里,當前狀態、行為的好壞由監督信息告知;而在強化學習里,則需要通過價值函數來估計當前狀態行為的好壞。
我們將Policy Gradient應用到MC算法上,則得到如下流程:
Initialise θ\thetaθ arbitrarily
for each episode {s1,a1,r2,…,sT?1,aT?1,rT}~πθ\{s_1,a_1,r_2,\dots,s_{T?1},a_{T?1},r_T\}\sim \pi_\theta{s1?,a1?,r2?,…,sT?1?,aT?1?,rT?}~πθ? {
for t = 1 to T?1T?1T?1 {
θ←θ+α?θlog?πθ(st,at)vt\theta \leftarrow \theta + \alpha\nabla_\theta \log \pi_\theta (s_t , a_t )v_tθ←θ+α?θ?logπθ?(st?,at?)vt?
}
}
return θ\thetaθ
在基于策略的學習算法中,算法挑選策略的時候不需使用?\epsilon?-貪婪搜索,策略是直接根據參數θ\thetaθ得到的。同時在對策略參數更新時有一個學習率α\alphaα,它體現了在梯度方向上更新參數θ的步長(step size),一般的我們在更新參數時是按梯度方向只更新由α\alphaα確定的一定量。
打個比方,當前策略在更新時提示梯度方向傾向于選擇“向左”的行為,那么在更新策略參數時,可以朝著向左的方向更新一定的值,如果這個α\alphaα取值增大,則導致決策朝著更容易選擇“向左”的行為傾斜,這其實就相當于沒有探索的貪婪決策行為。而只要學習在持續,就有可能因為梯度變化而嘗試更多的行為,這一過程中參數α\alphaα控制了策略更新的平滑度。
如果基于價值函數制定策略,則使用查表(table look-up)的方式可以保證收斂到全局最優解。即使使用的是直接基于策略的學習方法;但是,如果使用的是通用化的近似函數表示方法,比如神經網絡等,則無論是基于價值函數,還是基于策略,都可能陷入局部最優解。
參考
https://zhuanlan.zhihu.com/p/54825295
基于值和策略的強化學習入坑
https://blog.csdn.net/gsww404/article/details/80705950
策略梯度(Policy Gradient)
總結
以上是生活随笔為你收集整理的机器学习(三十四)——策略梯度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(三十三)——价值函数的近似表示
- 下一篇: 机器学习(三十五)——Actor-Cri