0
本文作者: AI研習(xí)社-譯站 | 2019-01-14 11:08 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
An introduction to Policy Gradients with Cartpole and Doom
作者 | Thomas Simonini
翻譯 | 安石徒
校對(duì) | 醬番梨 整理 | 菠蘿妹
原文鏈接:
https://medium.freecodecamp.org/an-introduction-to-policy-gradients-with-cartpole-and-doom-495b5ef2207f
深度強(qiáng)化學(xué)習(xí)從入門到大師:以 Cartpole 和 Doom 為例介紹策略梯度 (第四部分)
本文的環(huán)境
本文是利用Tensorflow進(jìn)行深度強(qiáng)化學(xué)習(xí)課程的一部分。點(diǎn)擊這里查看教學(xué)大綱。
在過(guò)去的兩篇關(guān)于Q-學(xué)習(xí)和深度Q學(xué)習(xí)的文章中,我們完成了基于價(jià)值的強(qiáng)化學(xué)習(xí)算法學(xué)習(xí)。在給定一個(gè)狀態(tài)下,我們選擇有最高Q值(在所有狀態(tài)下最大的期望獎(jiǎng)勵(lì))的行動(dòng)。因此,在基于價(jià)值的學(xué)習(xí)中,一個(gè)策略存在僅僅出于這些行動(dòng)價(jià)值的評(píng)估。
今天,我們將學(xué)習(xí)名為策略梯度的基于策略的強(qiáng)化學(xué)習(xí)技術(shù)。我們將應(yīng)用兩個(gè)智能體。其中一個(gè)將學(xué)習(xí)保持木條平衡。
第二個(gè)智能體學(xué)習(xí)在毀滅戰(zhàn)士系列的有敵意的環(huán)境中通過(guò)收集生命值而生存。
在基于策略的方法中,不同于學(xué)習(xí)能告訴我們給定狀態(tài)和行動(dòng)下獎(jiǎng)勵(lì)總和的價(jià)值函數(shù),我們直接學(xué)習(xí)能使得狀態(tài)映射到行為的策略函數(shù)(不通過(guò)價(jià)值函數(shù)選擇行動(dòng))。
這意味著我們不通過(guò)價(jià)值函數(shù)試錯(cuò)而直接嘗試優(yōu)化策略函數(shù)π,直接參數(shù)化π(不通過(guò)價(jià)值函數(shù)選擇行動(dòng))。
當(dāng)然,我可以通過(guò)價(jià)值函數(shù)來(lái)優(yōu)化策略參數(shù)。但是價(jià)值函數(shù)將不再用來(lái)選擇行動(dòng)。
本文將學(xué)習(xí)如下內(nèi)容:
策略梯度是什么,它的優(yōu)點(diǎn)和缺點(diǎn);
怎么將其應(yīng)用于Tensorflow。
兩種類型的策略:確定的或隨機(jī)的。
一個(gè)確定的策略能將狀態(tài)映射到行為上。輸入一個(gè)狀態(tài),函數(shù)將反饋一個(gè)要執(zhí)行的行為。
確定的策略用在確定的環(huán)境,行動(dòng)執(zhí)行的環(huán)境決定了結(jié)果,不存在不確定性。例如,當(dāng)你下國(guó)際象棋把兵從A2移到A3時(shí),你是確定你的兵要移到A3。
另一方面,一個(gè)隨機(jī)的策略輸出一個(gè)行為集可能的指派。
這意味著不是確定地選擇行為a,而是我們有可能能選擇不同的(例子中30%的可能,我們選擇南)。
隨機(jī)策略用在環(huán)境不確定的情況下。這一個(gè)過(guò)程也叫部分可測(cè)馬爾科夫決策過(guò)程(POMDP)。
大多數(shù)情況下,我們使用第二種策略類型。
優(yōu)勢(shì)
深度Q學(xué)習(xí)已經(jīng)很厲害,為什么要用策略強(qiáng)化學(xué)習(xí)方法?
深度學(xué)習(xí)在使用策略梯度時(shí)有三大主要優(yōu)勢(shì):
收斂
策略函數(shù)有更好的收斂特性。價(jià)值函數(shù)在訓(xùn)練時(shí)有個(gè)問(wèn)題就是大的震蕩。這是因?yàn)樾袨榈倪x擇在測(cè)算的行為值中可能會(huì)戲劇性地任意變小。
另一方面,利用策略梯度,我們僅是循著梯度尋找最佳值。一個(gè)平滑的更新出現(xiàn)在每一步中。
由于循著梯度尋找最佳值,我們確保收斂于局部最大值(最壞的情況)或是全局最大值(最好情況)。
策略梯度在高維空間更有效
第二個(gè)優(yōu)勢(shì)是策略梯度在高維空間或是連續(xù)行動(dòng)時(shí)更有效。
深度Q學(xué)習(xí)的一個(gè)問(wèn)題是它在每一步的預(yù)測(cè)中對(duì)給定當(dāng)前狀態(tài)的每一個(gè)可能行為分配一個(gè)分值(最大化預(yù)測(cè)將來(lái)的獎(jiǎng)勵(lì))。
但如果是無(wú)限可能的行動(dòng)呢?
例如,在自動(dòng)駕駛時(shí),在每一個(gè)狀態(tài)中,可能會(huì)有近乎無(wú)限行為的選擇。(調(diào)整車輪15°,17.2°, 19,4°,鳴笛…)。我們需要為每一個(gè)行動(dòng)輸出一個(gè)Q值。
另一方面,在策略函數(shù)中,要直接調(diào)整參數(shù)(你將要理解什么是最大值),而不是在每一步估算最大值。
策略梯度能學(xué)習(xí)隨機(jī)策略
第三個(gè)優(yōu)勢(shì)是策略梯度能學(xué)習(xí)隨機(jī)策略,而價(jià)值函數(shù)不能。這也導(dǎo)致兩個(gè)結(jié)果。
其一,我們不需要應(yīng)用探測(cè)和開(kāi)發(fā)的權(quán)衡。一個(gè)隨機(jī)策略允許智能體在狀態(tài)空間探索而不是一直采用相同的行為。這是因?yàn)樗敵鲆粋€(gè)行為集上的概率分布。其結(jié)果是它將處理探測(cè)和開(kāi)發(fā)的權(quán)衡而不是硬編碼。
我們同樣去除感知混淆的問(wèn)題,它是說(shuō)我們?cè)趦蓚€(gè)看起來(lái)(或?qū)嶋H上)相同的狀態(tài),卻需要不同的行為。
例如,我們有一個(gè)智能吸塵器,它的目標(biāo)是吸掉灰塵和避免殺死倉(cāng)鼠。
這個(gè)例子被David Silver的精美課程所引出:http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/pg.pdf
我們的吸塵器僅能檢測(cè)到墻在哪里。
問(wèn)題:兩個(gè)紅色的方格是相似的狀態(tài),因?yàn)橹悄荏w都能感知到兩面上下部的墻。
在確定的策略下,在紅色的狀態(tài)下,智能體選擇要么是往右,要么往左,都可能導(dǎo)致智能體被卡住而不能吸塵了。
在基于價(jià)值的強(qiáng)化算法,我們學(xué)習(xí)一個(gè)準(zhǔn)確定性策略(?貪婪策略)。其結(jié)果是智能體在找到灰塵前會(huì)花費(fèi)大量時(shí)間。
另一方面,一個(gè)優(yōu)化的隨機(jī)策略在灰色的格子中時(shí)將隨機(jī)往左或往右移動(dòng)。其結(jié)果是智能體不會(huì)被卡住,并能在最大可能的情況下達(dá)到目標(biāo)狀態(tài)。
劣勢(shì)
策略梯度有個(gè)天然的大劣勢(shì)。在絕大多數(shù)情況下,它將在收斂于局部最大值而不是全局最大值。
策略梯度收斂一步一步收斂非常慢,需要很長(zhǎng)時(shí)間來(lái)訓(xùn)練,這不同于同樣努力尋求全局最大值的深度Q學(xué)習(xí)。
盡管如此,我們將看到問(wèn)題的解決方案。
策略選擇
帶參數(shù)θ的策略π輸出行動(dòng)集的概率分布。
給定狀態(tài)S,采取帶參θ行動(dòng)a的概率
可怕的是我們?cè)鯓硬拍苤牢覀兊牟呗允呛玫哪兀?/p>
記住策略可被看做是優(yōu)化問(wèn)題。我們必須尋找到最佳參數(shù)(θ)來(lái)最大化得分函數(shù)J(θ)。
這里有兩步:
利用策略評(píng)分函數(shù)J(θ)來(lái)測(cè)量π(策略)的質(zhì)量。
使用策略梯度上升來(lái)找尋最佳參數(shù)θ來(lái)改進(jìn)π。
這里的主要思想是J(θ)來(lái)告訴我們的策略π有多好。策略梯度上升將幫助我們發(fā)現(xiàn)最佳策略參數(shù)來(lái)最大化良好行動(dòng)的采樣。
第一步:策略評(píng)分函數(shù)J(θ)
為測(cè)量我們的策略有多好,我們使用目標(biāo)函數(shù)(或策略評(píng)分函數(shù))來(lái)計(jì)算期望的策略獎(jiǎng)勵(lì)。
有三種等價(jià)的方法來(lái)優(yōu)化策略。選擇僅僅取決于環(huán)境和目標(biāo)。
首先,在一個(gè)情景的環(huán)境中,我們?nèi)∫粋€(gè)開(kāi)始值,并計(jì)算從第一步(G1)開(kāi)始反饋的均值。這是第整個(gè)情景的累積的貼現(xiàn)獎(jiǎng)勵(lì)。
思想很簡(jiǎn)單,即如果我一直從狀態(tài)s1開(kāi)始,從開(kāi)始狀態(tài)到結(jié)束狀態(tài)的整體獎(jiǎng)勵(lì)是多少呢?
我們要尋找最大化G1的策略,因?yàn)樗鼘⑹亲顑?yōu)的策略,可參見(jiàn)第一篇文章中解釋過(guò)的獎(jiǎng)勵(lì)假設(shè)。
例如,在突圍游戲中,我新玩了一局,但我在破壞了20塊磚后丟失了球(游戲結(jié)束)。新的情景始終從相同的狀態(tài)開(kāi)始。
我利用J1(θ)來(lái)計(jì)算得分。撞擊20個(gè)板磚已屬不錯(cuò),但是我想改進(jìn)得分。為此,我需要通過(guò)調(diào)參來(lái)改進(jìn)我行為的概率分布。這些在第二步中做。在一個(gè)連續(xù)的環(huán)境中,因?yàn)槲覀儾荒芤蕾囂囟ǖ拈_(kāi)始狀態(tài),所以我們可以使用平均值。每個(gè)狀態(tài)值通過(guò)對(duì)應(yīng)狀態(tài)發(fā)生的概率來(lái)加權(quán)(因?yàn)橛行└赡馨l(fā)生)。
第三,使用每步的平均獎(jiǎng)勵(lì)以使我們每步都要獲得最高的獎(jiǎng)勵(lì)。
第二步:策略梯度上升
我們有一個(gè)策略得分函數(shù)告訴我們策略有多好?,F(xiàn)在,我們要找尋最大化得分函數(shù)的參數(shù)θ。最大化得分函數(shù)意味著找到最優(yōu)策略。
為最大化得分函數(shù)J(θ),我們需要在策略參數(shù)上做梯度上升。
梯度上升是梯度下降的反轉(zhuǎn)。記住梯度永遠(yuǎn)指向最速變化。
在梯度下降中,我們?cè)诤瘮?shù)中選擇最速下降方向。同理在梯度上升時(shí),我們?cè)诤瘮?shù)中選擇最速上升方向。
為何是梯度上升而不是梯度下降?因?yàn)槲覀円阱e(cuò)誤函數(shù)中使用梯度下降來(lái)求最小值。
但是得分函數(shù)不是錯(cuò)誤函數(shù),它要求最大值的,所以我們使用梯度上升。
思想是找到相應(yīng)梯度,以使當(dāng)前策略π在迭代中最大增量方向上更新參數(shù)。
現(xiàn)在,讓我們把相關(guān)內(nèi)容數(shù)學(xué)化,這里有點(diǎn)難,但這是理解如何得到梯度公式的基礎(chǔ)。
我們要找到最好的參數(shù)θ*用以最大化得分:
我們的得分函數(shù)可以被如下定義:
這是給定策略下期望獎(jiǎng)勵(lì)的總和。
現(xiàn)在,因?yàn)槲覀円鎏荻壬仙?,所以要去微分我們的得分函?shù)J(θ)。它也可被如下定義:
我們用這種方式寫(xiě)出函數(shù)來(lái)展示我們面對(duì)的問(wèn)題。
我們知道策略參數(shù)影響行為如何被選擇,即我們獲得什么樣的獎(jiǎng)勵(lì)、我們將看到什么樣的狀態(tài)、有多頻繁。
因此,尋找為確保改進(jìn)的策略的變化可能是個(gè)挑戰(zhàn)。這是因?yàn)樾阅芤蕾囉谛袨檫x擇和選擇做出后的狀態(tài)分布。這兩者都受策略參數(shù)的影響。策略參數(shù)在行為上的影響很容易發(fā)現(xiàn),但是在狀態(tài)分布的情況下怎樣發(fā)現(xiàn)策略的影響?環(huán)境的函數(shù)是未知的。
因此,我們面臨這樣的問(wèn)題:當(dāng)梯度依賴于在狀態(tài)分布下的策略改變的未知影響時(shí),我們利用策略θ的對(duì)應(yīng)來(lái)怎么評(píng)估梯度。
解決方案是使用策略梯度原理。利用涉及策略θ不包含狀態(tài)分布的差異方面,為J(θ)(表現(xiàn))的梯度?提供一個(gè)分析性表示。
所以,我們?nèi)缦掠?jì)算:
記住,我們?cè)陔S機(jī)策略的情況中。這意味著我們的策略輸出一個(gè)概率分布π(τ;θ)。它將輸出給定當(dāng)前參數(shù)θ時(shí)的采取步驟(s0, a0, r0…)的概率。
但是,要微分概率函數(shù)是比較困難的,除非我們能將其轉(zhuǎn)換為對(duì)數(shù)。這將使得概率函數(shù)能被簡(jiǎn)單地微分。
這里我們將使用似然比的方法來(lái)將結(jié)果部分替換成log概率。
現(xiàn)在,讓我們將總和轉(zhuǎn)換為一個(gè)期望:
正如你所見(jiàn),我們僅需要計(jì)算log策略函數(shù)的導(dǎo)數(shù)。
我們已經(jīng)做了很多推導(dǎo),現(xiàn)在,我們能得出策略梯度的結(jié)論:
這個(gè)策略梯度告訴我們?nèi)绻@得一個(gè)更高的得分應(yīng)怎樣通過(guò)改變參數(shù)θ來(lái)轉(zhuǎn)變策略分布。
R(tau)像是個(gè)標(biāo)量值:
如果R(tau)高了,就意味著我們采取行動(dòng)平均情況下會(huì)導(dǎo)致高獎(jiǎng)勵(lì)。我們要推動(dòng)可見(jiàn)行為的概率(提高采取這些行為的概率)。
另一方面,如果R(tau)低了,我們要降低可見(jiàn)行為的概率。
梯度的策略導(dǎo)致參數(shù)在有最高回報(bào)的最支持的行動(dòng)的方向上移動(dòng)。
蒙特卡洛策略梯度
在筆記中,鑒于我們的任務(wù)能分為若干階段,我們將使用蒙特卡洛方法來(lái)設(shè)計(jì)策略梯度算法。
Initialize θ
for each episode τ = S0, A0, R1, S1, …, ST:
for t <-- 1 to T-1:
Δθ = α ?theta(log π(St, At, θ)) Gt
θ = θ + Δθ
For each episode:
At each time step within that episode:
Compute the log probabilities produced by our policy
function. Multiply it by the score function.
Update the weights
但是我們?cè)谑褂迷撍惴〞r(shí)面臨一個(gè)問(wèn)題。因?yàn)槲覀儍H在每個(gè)階段結(jié)束時(shí)計(jì)算R值,我們將會(huì)平均所有行為。哪怕部分行為是非常糟糕的,如果我們的分值是非常高的,這樣所有行為都會(huì)被平均成好的。
要想有一個(gè)正確的策略,我們就需要大量的采樣,這將導(dǎo)致很慢的學(xué)習(xí)。
我們將在后續(xù)的文章中看到如下改進(jìn):
行為評(píng)價(jià)器:一個(gè)價(jià)值算法和策略算法的混合體。
近端策略梯度:確保跟前一個(gè)策略的偏差相對(duì)小。
我們拍了一段視頻,利用Tensorflow在死亡模式下的Doom游戲中應(yīng)用策略梯度智能體:
Policy Gradients playing Doom deathmatch ?? with Tensorflow (tutorial)
你可以直接訪問(wèn)筆記:Deep Reinforcement Learning Course repo.
綜上所述,你已經(jīng)創(chuàng)建了一個(gè)能學(xué)習(xí)在Doom環(huán)境下生存的智能體。厲害吧!
別忘了親自應(yīng)用每一個(gè)部分代碼,這非常重要。嘗試增加時(shí)代、改變架構(gòu)、修改學(xué)習(xí)率、使用更好的硬件環(huán)境等等,盡情享受吧!
在下一篇文章中,我將討論在深度Q學(xué)習(xí)上最新的改進(jìn):
雙DQN
競(jìng)賽網(wǎng)絡(luò)
固定Q值
優(yōu)先經(jīng)驗(yàn)重復(fù)
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長(zhǎng)按鏈接點(diǎn)擊打開(kāi)或點(diǎn)擊底部【深度強(qiáng)化學(xué)習(xí)從入門到大師:以Cartpole和Doom為例介紹策略梯度(第四部分)】:
https://ai.yanxishe.com/page/TextTranslation/1406
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來(lái)譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。