官术网_书友最值得收藏!

6.3 深度Q-learning

剛剛介紹的Q-learning方法解決了在整個狀態集上迭代的問題,但是在可觀察到的狀態集數量很大的情況下仍然會遇到困難。例如,Atari游戲具有多種不同的屏幕狀態,因此,如果決定將原始像素作為單獨的狀態,那么很快就會意識到有太多的狀態無法跟蹤和估算。

在某些環境中,不同的可觀察狀態的數量幾乎是無限的。例如,在CartPole中,環境提供的狀態為四個浮點數。4個數值組合的數量是有限的(用位表示),但是這個數量非常大。我們可以通過創建箱體來離散化這些值,但和它能夠解決的問題相比,這通常會引入更多的問題:需要確定哪些參數范圍對于區分不同的狀態非常重要,以及哪些范圍可以聚集在一起。

在Atari的例子中,單個像素的變化不會產生太大的區別,因此將兩個圖像視為一個狀態是有效的。但是,仍然需要區分某些狀態。

圖6.2顯示了Pong游戲中的兩種不同情況。我們通過控制球拍來對抗人工智能(Artificial Intelligence, AI)對手(我們的球拍在右側,而對手的球拍在左側)。游戲的目的是使球反彈,使其越過對手的球拍,同時防止球越過我們的球拍。我們可以認為這兩種情況是完全不同的:在右側的情況下,球靠近對手,因此我們可以放松并觀察。但是,左側的情況要求更高:假設球從左向右移動,球正在向我們這邊移動,因此我們需要快速移動球拍以避免丟分。圖6.2中的情況只是1070 802種可能情況中的兩種,但是我們希望智能體對它們執行不同的動作。

118-01

圖6.2 Pong的觀察結果是模糊的(在左圖中,球正向右朝我們的球拍移動,而在右圖中,球的移動方向相反)

作為此問題的解決方案,我們可以使用非線性表示將狀態和動作都映射到一個值。在機器學習中,這稱為“回歸問題”。表示形式根據訓練的具體方法可能有所不同,但是你可能已經從本節標題中猜出來了,使用深度NN是最流行的選項之一,尤其是在處理屏幕圖像類的觀察結果時。考慮到這一點,我們對Q-learning算法進行修改:

1)用一些初始近似值初始化Q(s, a)。

2)通過與環境交互,獲得元組(s, a, r, s')。

3)計算損失L:如果片段結束,則118-02,否則118-03

4)通過最小化模型參數的損失,使用隨機梯度下降(Stochastic Gradient Descent,SGD)算法更新Q(s, a)。

5)從步驟2開始重復,直到收斂為止。

前面的算法看起來很簡單,但不幸的是,它的效果并不好。我們來討論可能出問題的地方。

6.3.1 與環境交互

首先,我們需要以某種方式與環境交互以獲得要訓練的數據。在諸如FrozenLake之類的簡單環境中,我們可以隨機執行動作,但這是最佳策略嗎?想象一下Pong游戲。隨機移動球拍來得分的概率是多少?這個概率雖然不是零,但非常小,這意味著需要等待很長時間才能遇到這種罕見情況。作為替代方案,可以將Q函數近似作為動作的來源(就像之前在價值迭代方法中所做的那樣,需要記住測試過程中的歷史經驗)。

如果對Q的表示是好的,那么從環境中獲得的經驗就可以展示相關數據給智能體以進行訓練。但是,當近似估計不理想時(例如,在訓練開始時),就會遇到麻煩。在這種情況下,智能體在某些狀態下可能會困在不好的動作中,而不去探索其他的動作。這就是在第1章及本章前面部分中簡要提到的探索與利用難題。一方面,智能體需要探索環境,以全面了解狀態轉移和動作結果。另一方面,應該有效地利用已有知識與環境交互:不應該浪費時間去隨機嘗試已經嘗試過并已知獎勵的動作。

如你所見,當Q近似值很差時,隨機動作在訓練開始時會比較好,因為它可以提供有關環境狀態的更均勻分布的信息。隨著訓練的進行,隨機動作變得效率低下,我們希望退回到通過Q近似值來決定如何采取行動。

混合執行兩種極端行為的方法稱為ε-greedy方法,它使用概率超參ε在隨機策略和Q策略之間切換。通過改變ε,我們可以選擇執行隨機動作的比率。通常的做法是從ε=1.0(100%隨機動作)開始,然后將其慢慢減小到某個較小的值,例如5%或2%隨機動作。使用ε-greedy方法既有助于在訓練開始時對環境進行探索,又有助于在訓練結束時堅持良好的策略。探索與利用問題還有其他解決方案,我們將在本書的第三部分討論其中一些。這個問題是RL中基本的開放性問題之一,也是一個尚未完全解決的活躍研究領域。

6.3.2 SGD優化

Q-learning過程的核心是從監督學習中借鑒而來的。實際上,我們正在嘗試用NN近似一個復雜的非線性函數Q(s, a)。為此,必須使用Bellman方程計算該函數的目標,然后假裝我們手頭有一個監督學習問題。但是SGD優化的基本要求之一是訓練數據獨立同分布i.i.d.)。

在我們的案例中,用于SGD更新的數據并不滿足這些條件,因為:

1)樣本并不是獨立的。盡管我們積累了大量的數據樣本,但因為它們屬于同一片段,它們彼此是非常接近的。

2)訓練數據的分布與我們要學習的最佳策略所提供的樣本分布并不相同。我們擁有的數據是其他策略(當前的策略、隨機策略,或者在ε-greedy方法中二者皆有)的結果,但是我們并不想學習如何隨機運行,而是希望找到一個能獲得最高獎勵的最優策略。

為了解決這種麻煩,我們通常需要大量使用過去的經驗,并從中提取訓練數據樣本,而不是使用最新經驗數據。此技術稱為回放緩沖區(replay buffer)。最簡單的實現是設置一個固定大小的緩沖區,將新數據添加到緩沖區的末尾,同時將最舊的經驗數據移除。

回放緩沖區允許我們在大致獨立的數據上訓練,但數據仍需足夠新,以便在由最近策略生成的樣本上訓練。下一章將介紹另一種回放緩沖區:帶優先級的回放緩沖區,它提供了更復雜的采樣方法。

6.3.3 步驟之間的相關性

默認訓練過程的另一個實際問題也與缺少i.i.d.數據有關,但方式略有不同。Bellman方程通過Q(s', a')提供Q(s, a)的值(此過程稱為bootstrapping)。但是,狀態ss'之間只有一步之遙。這使得它們非常相似,而NN很難區分它們。當對NN的參數進行更新以使Q(s, a)更接近所需結果時,可以間接更改為Q(s', a')和附近其他狀態產生的值。這會使訓練變得非常不穩定,就像追逐自己的尾巴一樣:當更新狀態sQ時,在隨后的狀態中,我們會發現Q(s', a')變得更糟,但是嘗試更新它會破壞Q(s, a)的近似值,以此類推。

為了讓訓練更加穩定,使用一個叫作目標網絡的技巧,通過該技巧我們可以保留網絡的副本并將其用于Bellman方程中的Q(s', a')值。該網絡僅周期性地與主網絡同步,例如,每N步進行一次同步(其中N通常是很大的超參,例如1000或10 000次訓練迭代)。

6.3.4 馬爾可夫性質

RL方法以馬爾可夫決策過程(MDP)為基礎,它假設環境服從馬爾可夫性質:從環境中觀察到的一切都是獲取最佳動作所需的。(換句話說,觀察使我們能夠區分不同狀態。)

從前面的Pong游戲屏幕截圖中可以看到,Atari游戲中的一張圖像不足以捕獲所有重要信息(僅使用一張圖像,我們不知道物體的速度和方向,例如球和對手的球拍的速度和方向)。這顯然違反了馬爾可夫性質,并將單幀Pong環境變成了部分可觀察的MDP(POMDP)。POMDP基本上是沒有馬爾可夫性質的MDP,在實際中非常重要。例如,對于大多數無法看到對手卡牌的紙牌游戲,游戲觀察值就是POMDP,因為當前觀察值(你的卡牌和桌上的卡牌)可能對應于對手手中的不同卡牌。

在本書中,我們不會詳細討論POMDP,但是會使用一個小技巧將環境推回到MDP領域。解決方案是保留過去的一些觀察結果并將其作為狀態。對于Atari游戲,我們通常將k個后續幀堆疊在一起,將其作為每個狀態的觀察值。這可以使智能體推算出當前狀態的動態,例如獲得球的速度及方向。Atari游戲常用的“經典”k值為4。當然,這只是一個小技巧,因為環境中的依賴時間可能更長,但是對于大多數游戲而言,這已經可以運行良好了。

6.3.5 DQN訓練的最終形式

研究人員發現了許多其他技巧,可以使DQN訓練更加穩定高效,我們將在下一章介紹其中的最佳技巧。但是,ε-greedy、回放緩沖區和目標網絡構成了其基礎,使AI公司DeepMind能夠成功地在49款Atari游戲中訓練DQN,并證明了在復雜環境中使用此方法的效果。

原始論文(無目標網絡)已于2013年底發表(“Playing Atari with Deep Reinforcement Learning”, 1312.5602v1, Mnih等),并使用了7款游戲進行測試。后來,在2015年初,該論文的修訂版包含了49種不同的游戲,發表在Nature雜志上(“Human-Level Control Through Deep Reinforcement Learning”, doi:10.1038/nature14236, Mnih等)。

前面論文中的DQN算法包含以下步驟:

1)使用隨機權重(ε←1.0)初始化Q(s, a)和121-01的參數,清空回放緩沖區。

2)以概率ε選擇一個隨機動作a,否則121-02

3)在模擬器中執行動作a,觀察獎勵r和下一個狀態s'

4)將轉移過程(s, a, r, s')存儲在回放緩沖區中。

5)從回放緩沖區中采樣一個隨機的小批量轉移過程。

6)對于回放緩沖區中的每個轉移過程,如果片段在此步結束,則計算目標y=r,否則計算121-03

7)計算損失:L=(Q(s, a)–y)2

8)通過最小化模型參數的損失,使用SGD算法更新Q(s, a)。

9)每N步,將權重從Q復制到121-04

10)從步驟2開始重復,直到收斂為止。

我們現在就實現它并嘗試擊敗Atari游戲!

主站蜘蛛池模板: 巴林右旗| 临高县| 仪征市| 隆林| 禹州市| 伊宁县| 金门县| 阜宁县| 安阳市| 仙游县| 东兴市| 曲沃县| 始兴县| 陆川县| 湘潭县| 孝义市| 郎溪县| 吉首市| 穆棱市| 靖安县| 交城县| 云安县| 合山市| 博爱县| 晋中市| 连平县| 图木舒克市| 蕲春县| 西青区| 霍邱县| 巴南区| 辉南县| 通山县| 陈巴尔虎旗| 福州市| 亚东县| 银川市| 斗六市| 舒城县| 津市市| 漳平市|