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