深度強化學習從入門到大師:以 Cartpole 和 Doom 為例介紹策略梯度(第四部分)

本文為 AI 研習社編譯的技術博客,原標題 :

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 為例介紹策略梯度 (第四部分)

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

本文的環境

本文是利用Tensorflow進行深度強化學習課程的一部分。點擊這裡查看教學大綱。

在過去的兩篇關於Q-學習和深度Q學習的文章中,我們完成了基於價值的強化學習算法學習。在給定一個狀態下,我們選擇有最高Q值(在所有狀態下最大的期望獎勵)的行動。因此,在基於價值的學習中,一個策略存在僅僅出於這些行動價值的評估。

今天,我們將學習名為策略梯度的基於策略的強化學習技術。我們將應用兩個智能體。其中一個將學習保持木條平衡。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

第二個智能體學習在毀滅戰士系列的有敵意的環境中通過收集生命值而生存。

在基於策略的方法中,不同於學習能告訴我們給定狀態和行動下獎勵總和的價值函數,我們直接學習能使得狀態映射到行為的策略函數(不通過價值函數選擇行動)。

這意味著我們不通過價值函數試錯而直接嘗試優化策略函數π,直接參數化π(不通過價值函數選擇行動)。

當然,我可以通過價值函數來優化策略參數。但是價值函數將不再用來選擇行動。

本文將學習如下內容:

  • 策略梯度是什麼,它的優點和缺點;

  • 怎麼將其應用於Tensorflow。

為何要使用策略函數

兩種類型的策略:確定的或隨機的。

一個確定的策略能將狀態映射到行為上。輸入一個狀態,函數將反饋一個要執行的行為。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

確定的策略用在確定的環境,行動執行的環境決定了結果,不存在不確定性。例如,當你下國際象棋把兵從A2移到A3時,你是確定你的兵要移到A3。

另一方面,一個隨機的策略輸出一個行為集可能的指派。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

這意味著不是確定地選擇行為a,而是我們有可能能選擇不同的(例子中30%的可能,我們選擇南)。

隨機策略用在環境不確定的情況下。這一個過程也叫部分可測馬爾科夫決策過程(POMDP)。

大多數情況下,我們使用第二種策略類型。

優勢

深度Q學習已經很厲害,為什麼要用策略強化學習方法?

深度學習在使用策略梯度時有三大主要優勢:

收斂

策略函數有更好的收斂特性。價值函數在訓練時有個問題就是大的震盪。這是因為行為的選擇在測算的行為值中可能會戲劇性地任意變小。

另一方面,利用策略梯度,我們僅是循著梯度尋找最佳值。一個平滑的更新出現在每一步中。

由於循著梯度尋找最佳值,我們確保收斂於局部最大值(最壞的情況)或是全局最大值(最好情況)。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

策略梯度在高維空間更有效

第二個優勢是策略梯度在高維空間或是連續行動時更有效。

深度Q學習的一個問題是它在每一步的預測中對給定當前狀態的每一個可能行為分配一個分值(最大化預測將來的獎勵)。

但如果是無限可能的行動呢?

例如,在自動駕駛時,在每一個狀態中,可能會有近乎無限行為的選擇。(調整車輪15°,17.2°, 19,4°,鳴笛…)。我們需要為每一個行動輸出一個Q值。

另一方面,在策略函數中,要直接調整參數(你將要理解什麼是最大值),而不是在每一步估算最大值。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

策略梯度能學習隨機策略

第三個優勢是策略梯度能學習隨機策略,而價值函數不能。這也導致兩個結果。

其一,我們不需要應用探測和開發的權衡。一個隨機策略允許智能體在狀態空間探索而不是一直採用相同的行為。這是因為它輸出一個行為集上的概率分佈。其結果是它將處理探測和開發的權衡而不是硬編碼。

我們同樣去除感知混淆的問題,它是說我們在兩個看起來(或實際上)相同的狀態,卻需要不同的行為。

例如,我們有一個智能吸塵器,它的目標是吸掉灰塵和避免殺死倉鼠。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

這個例子被David Silver的精美課程所引出:http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/pg.pdf

我們的吸塵器僅能檢測到牆在哪裡。

問題:兩個紅色的方格是相似的狀態,因為智能體都能感知到兩面上下部的牆。

在確定的策略下,在紅色的狀態下,智能體選擇要麼是往右,要麼往左,都可能導致智能體被卡住而不能吸塵了。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

在基於價值的強化算法,我們學習一個準確定性策略(?貪婪策略)。其結果是智能體在找到灰塵前會花費大量時間。

另一方面,一個優化的隨機策略在灰色的格子中時將隨機往左或往右移動。其結果是智能體不會被卡住,並能在最大可能的情況下達到目標狀態。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

劣勢

策略梯度有個天然的大劣勢。在絕大多數情況下,它將在收斂於局部最大值而不是全局最大值。

策略梯度收斂一步一步收斂非常慢,需要很長時間來訓練,這不同於同樣努力尋求全局最大值的深度Q學習。

儘管如此,我們將看到問題的解決方案。

策略選擇

帶參數θ的策略π輸出行動集的概率分佈。

給定狀態S,採取帶參θ行動a的概率

可怕的是我們怎樣才能知道我們的策略是好的呢?

記住策略可被看做是優化問題。我們必須尋找到最佳參數(θ)來最大化得分函數J(θ)。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

這裡有兩步:

  • 利用策略評分函數J(θ)來測量π(策略)的質量。

  • 使用策略梯度上升來找尋最佳參數θ來改進π。

這裡的主要思想是J(θ)來告訴我們的策略π有多好。策略梯度上升將幫助我們發現最佳策略參數來最大化良好行動的採樣。

第一步:策略評分函數J(θ)

為測量我們的策略有多好,我們使用目標函數(或策略評分函數)來計算期望的策略獎勵。

有三種等價的方法來優化策略。選擇僅僅取決於環境和目標。

首先,在一個情景的環境中,我們取一個開始值,並計算從第一步(G1)開始反饋的均值。這是第整個情景的累積的貼現獎勵。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

思想很簡單,即如果我一直從狀態s1開始,從開始狀態到結束狀態的整體獎勵是多少呢?

我們要尋找最大化G1的策略,因為它將是最優的策略,可參見第一篇文章中解釋過的獎勵假設。

例如,在突圍遊戲中,我新玩了一局,但我在破壞了20塊磚後丟失了球(遊戲結束)。新的情景始終從相同的狀態開始。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

我利用J1(θ)來計算得分。撞擊20個板磚已屬不錯,但是我想改進得分。為此,我需要通過調參來改進我行為的概率分佈。這些在第二步中做。在一個連續的環境中,因為我們不能依賴特定的開始狀態,所以我們可以使用平均值。每個狀態值通過對應狀態發生的概率來加權(因為有些更可能發生)。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

第三,使用每步的平均獎勵以使我們每步都要獲得最高的獎勵。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

第二步:策略梯度上升

我們有一個策略得分函數告訴我們策略有多好。現在,我們要找尋最大化得分函數的參數θ。最大化得分函數意味著找到最優策略。

為最大化得分函數J(θ),我們需要在策略參數上做梯度上升。

梯度上升是梯度下降的反轉。記住梯度永遠指向最速變化。

在梯度下降中,我們在函數中選擇最速下降方向。同理在梯度上升時,我們在函數中選擇最速上升方向。

為何是梯度上升而不是梯度下降?因為我們要在錯誤函數中使用梯度下降來求最小值。

但是得分函數不是錯誤函數,它要求最大值的,所以我們使用梯度上升。

思想是找到相應梯度,以使當前策略π在迭代中最大增量方向上更新參數。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

現在,讓我們把相關內容數學化,這裡有點難,但這是理解如何得到梯度公式的基礎。

我們要找到最好的參數θ*用以最大化得分:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

我們的得分函數可以被如下定義:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

這是給定策略下期望獎勵的總和。

現在,因為我們要做梯度上升,所以要去微分我們的得分函數J(θ)。它也可被如下定義:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

我們用這種方式寫出函數來展示我們面對的問題。

我們知道策略參數影響行為如何被選擇,即我們獲得什麼樣的獎勵、我們將看到什麼樣的狀態、有多頻繁。

因此,尋找為確保改進的策略的變化可能是個挑戰。這是因為性能依賴於行為選擇和選擇做出後的狀態分佈。這兩者都受策略參數的影響。策略參數在行為上的影響很容易發現,但是在狀態分佈的情況下怎樣發現策略的影響?環境的函數是未知的。

因此,我們面臨這樣的問題:當梯度依賴於在狀態分佈下的策略改變的未知影響時,我們利用策略θ的對應來怎麼評估梯度。

解決方案是使用策略梯度原理。利用涉及策略θ不包含狀態分佈的差異方面,為J(θ)(表現)的梯度∇提供一個分析性表示。

所以,我們如下計算:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

記住,我們在隨機策略的情況中。這意味著我們的策略輸出一個概率分佈π(τ;θ)。它將輸出給定當前參數θ時的採取步驟(s0, a0, r0…)的概率。

但是,要微分概率函數是比較困難的,除非我們能將其轉換為對數。這將使得概率函數能被簡單地微分。

這裡我們將使用似然比的方法來將結果部分替換成log概率。

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

現在,讓我們將總和轉換為一個期望:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

正如你所見,我們僅需要計算log策略函數的導數。

我們已經做了很多推導,現在,我們能得出策略梯度的結論:

深度强化学习从入门到大师:以 Cartpole 和 Doom 为例介绍策略梯度(第四部分)

這個策略梯度告訴我們如果要獲得一個更高的得分應怎樣通過改變參數θ來轉變策略分佈。

R(tau)像是個標量值:

如果R(tau)高了,就意味著我們採取行動平均情況下會導致高獎勵。我們要推動可見行為的概率(提高採取這些行為的概率)。

另一方面,如果R(tau)低了,我們要降低可見行為的概率。

梯度的策略導致參數在有最高回報的最支持的行動的方向上移動。

蒙特卡洛策略梯度

在筆記中,鑑於我們的任務能分為若干階段,我們將使用蒙特卡洛方法來設計策略梯度算法。

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

但是我們在使用該算法時面臨一個問題。因為我們僅在每個階段結束時計算R值,我們將會平均所有行為。哪怕部分行為是非常糟糕的,如果我們的分值是非常高的,這樣所有行為都會被平均成好的。

要想有一個正確的策略,我們就需要大量的採樣,這將導致很慢的學習。

怎樣改進模型?

我們將在後續的文章中看到如下改進:

行為評價器:一個價值算法和策略算法的混合體。

近端策略梯度:確保跟前一個策略的偏差相對小。

在Cartpole and Doom中應用

我們拍了一段視頻,利用Tensorflow在死亡模式下的Doom遊戲中應用策略梯度智能體:

Policy Gradients playing Doom deathmatch ?? with Tensorflow (tutorial)

你可以直接訪問筆記:Deep Reinforcement Learning Course repo.

綜上所述,你已經創建了一個能學習在Doom環境下生存的智能體。厲害吧!

別忘了親自應用每一個部分代碼,這非常重要。嘗試增加時代、改變架構、修改學習率、使用更好的硬件環境等等,盡情享受吧!

在下一篇文章中,我將討論在深度Q學習上最新的改進:

  • 雙DQN

  • 競賽網絡

  • 固定Q值

  • 優先經驗重複

想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開或點擊底部【深度強化學習從入門到大師:以Cartpole和Doom為例介紹策略梯度(第四部分)】:

https://ai.yanxishe.com/page/TextTranslation/1406

AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網雷鋒網雷鋒網

用PyTorch來做物體檢測和追蹤

用 Python 做機器學習不得不收藏的重要庫

初學者怎樣使用Keras進行遷移學習

一文帶你讀懂 WaveNet:谷歌助手的聲音合成器

等你來譯:

強化學習:通往基於情感的行為系統

如何用Keras來構建LSTM模型,並且調參

高級DQNs:利用深度強化學習翫吃豆人遊戲

用於深度強化學習的結構化控制網絡 (ICML 論文講解)


分享到:


相關文章: