本書理論與實踐相結(jié)合,系統(tǒng)闡述強化學(xué)習(xí)的基礎(chǔ)知識,以及如何動手編寫智能體以執(zhí)行一系列實際任務(wù)。通過閱讀本書,讀者將獲得深層Q網(wǎng)絡(luò)、策略梯度方法、連續(xù)控制問題以及高度可擴展的非梯度方法等主題領(lǐng)域的可行洞見,還將學(xué)會如何構(gòu)建一個經(jīng)過強化學(xué)習(xí)訓(xùn)練、價格低廉的真實硬件機器人,并通過一步步代碼優(yōu)化在短短30分鐘的訓(xùn)練后解決Pong環(huán)境。此外,本書還專門介紹了強化學(xué)習(xí)的新發(fā)展,包括離散優(yōu)化(解決魔方問題)、多智能體方法、Microsoft的TextWorld環(huán)境、高級探索技術(shù)等。
本書包括新的強化學(xué)習(xí)工具和技術(shù),介紹了強化學(xué)習(xí)的基礎(chǔ)知識,以及如何動手編寫智能體以執(zhí)行一系列實際任務(wù)。
本書較上一版新增6章,專門介紹了強化學(xué)習(xí)的新發(fā)展,包括離散優(yōu)化(解決魔方問題)、多智能體方法、Microsoft的TextWorld環(huán)境、高級探索技術(shù)等。學(xué)完本書,你將對這個新興領(lǐng)域的前沿技術(shù)有深刻的理解。
此外,你將獲得對深度Q-network、策略梯度方法、連續(xù)控制問題以及高度可擴展的非梯度方法等領(lǐng)域的可行洞見,還將學(xué)會如何構(gòu)建一個經(jīng)過強化學(xué)習(xí)訓(xùn)練、價格低廉的真實硬件機器人,并通過逐步代碼優(yōu)化在短短30分鐘的訓(xùn)練后解決Pong環(huán)境問題。
簡而言之,本書將幫助你探索強化學(xué)習(xí)中令人興奮的復(fù)雜主題,讓你通過實例獲得經(jīng)驗和知識。
本書的主題是強化學(xué)習(xí)(Reinforcement Learning,RL),它是機器學(xué)習(xí)(Machine Learning,ML)的一個分支,強調(diào)如何解決在復(fù)雜環(huán)境中選擇動作時產(chǎn)生的通用且極具挑戰(zhàn)的問題。學(xué)習(xí)過程僅由獎勵值和從環(huán)境中獲得的觀察驅(qū)動。該模型非常通用,能應(yīng)用于多個真實場景,從玩游戲到優(yōu)化復(fù)雜制造過程都能涵蓋。
由于它的靈活性和通用性,RL領(lǐng)域在快速發(fā)展的同時,吸引了很多人的關(guān)注。其中,既包括試圖改進現(xiàn)有方法或創(chuàng)造新方法的研究人員,也包括專注于用有效的方式解決問題的從業(yè)人員。
寫本書的目的
寫本書的目的是填補RL理論系統(tǒng)和實際應(yīng)用之間的巨大空白。目前全世界有很多研究活動,基本上每天都有新的相關(guān)論文發(fā)表,并且有很多深度學(xué)習(xí)的會議,例如神經(jīng)信息處理系統(tǒng)(Neural Information Processing Systems,NeurIPS)大會和國際學(xué)習(xí)表征會議(International Conference on Learning Representations,ICLR)。同時,有好幾個大型研究組織致力于將RL應(yīng)用于機器人、醫(yī)學(xué)、多智能體系統(tǒng)等領(lǐng)域。
的相關(guān)研究資料雖然很容易獲得,卻都過于專業(yè)和抽象,難以理解。RL的實踐落地則顯得更為困難,因為將論文中由數(shù)學(xué)公式堆砌的大量抽象理論轉(zhuǎn)換成解決實際問題的實現(xiàn)方式并不總是顯而易見的。
這使得一些對該領(lǐng)域感興趣的人很難理解隱含在論文或?qū)W術(shù)會議背后的方法與思想。雖然針對RL的各個方面有很多非常棒的博客用生動的例子來解釋,但博客的形式限制讓作者們只能闡述一兩種方法,而不是構(gòu)建一個完整的全景圖來將不同的方法聯(lián)系起來。本書就是為了解決這個問題而寫的。
教學(xué)方法
本書的另一個關(guān)注點是實際應(yīng)用。每個方法針對非常簡單到非常復(fù)雜的情況都進行了實現(xiàn)。我試圖讓例子簡潔易懂,PyTorch的易讀與強大使之成為可能。另外,例子的復(fù)雜度是針對RL業(yè)余愛好者而設(shè)計的,不需要大量的計算資源,比如圖形處理器(GPU)集群或很強大的工作站。我相信,這將使充滿樂趣和令人興奮的RL領(lǐng)域不僅限于研究小組或大型人工智能公司,還可以讓更廣泛的受眾涉足。但畢竟本書有關(guān)內(nèi)容還是“深度”RL,因此強烈建議大家使用GPU。
除了Atari游戲或連續(xù)控制問題等RL中一些經(jīng)典的中等規(guī)模例子外,本書還有好幾章(第10、14、15、16和18章)介紹大型項目,說明RL方法能應(yīng)用到更復(fù)雜的環(huán)境和任務(wù)中。這些例子不是現(xiàn)實場景中的完整項目,但也足以說明,除了精心設(shè)計的基準(zhǔn)測試外,RL能在更大的范圍內(nèi)應(yīng)用。
本書從結(jié)構(gòu)上看分為四個部分,其中第1~4章為部分,第5~10章為第二部分,第11~16為第三部分,第17~25章為第四部分。關(guān)于本書前三個部分的例子,值得注意的另一件事是我試圖使它們成為獨立的,會完整地顯示所有代碼。有時這會導(dǎo)致代碼片段的重復(fù)(例如,大多數(shù)方法中的訓(xùn)練迭代都很相似),但是我認(rèn)為,讓大家學(xué)到想學(xué)的函數(shù)比刻意避免一些重復(fù)更重要,你可以自行跳轉(zhuǎn)到需要的代碼。本書中的所有例子都能在GitHub上找到,網(wǎng)址為https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition。歡迎你來獲取、實驗并貢獻(xiàn)代碼。
讀者對象
本書面向已經(jīng)有機器學(xué)習(xí)基礎(chǔ)而想對RL領(lǐng)域進行實踐的讀者。閱讀本書前,讀者應(yīng)該熟悉Python并且有一定的深度學(xué)習(xí)和機器學(xué)習(xí)基礎(chǔ)。具有統(tǒng)計學(xué)和概率論知識會大有幫助,但對于理解本書的大部分內(nèi)容都不是必要的。
本書內(nèi)容
第1章介紹了RL的思想和模型。
第2章使用開源庫Gym介紹了RL實踐。
第3章概述了PyTorch庫。
第4章用簡單的RL方法對RL的方法和問題進行了初步介紹。
第5章介紹了基于價值的RL方法。
第6章描述了深度Q-network(DQN),是對基礎(chǔ)的基于價值的方法的擴展,能解決復(fù)雜環(huán)境下的問題。
第7章描述了PTAN庫,它可以簡化RL方法的實現(xiàn)。
第8章詳細(xì)介紹了DQN的擴展方法,以提升在復(fù)雜環(huán)境下的穩(wěn)定性和收斂性。
第9章概述了使RL代碼加速執(zhí)行的辦法。
第10章給出了個練習(xí)項目,重點是將DQN方法應(yīng)用于股票交易。
第11章介紹了另一類RL方法,即基于策略學(xué)習(xí)的方法。
第12章描述了RL中使用非常廣泛的方法之一。
第13章用并行環(huán)境交互的方式擴展了actor-critic方法,從而提高了穩(wěn)定性和收斂性。
第14章給出了第二個項目,展示了如何將RL方法應(yīng)用于自然語言處理問題。
第15章介紹了RL方法在文字冒險游戲中的應(yīng)用。
第16章給出了另一個大項目,使用MiniWoB任務(wù)集將RL應(yīng)用于Web導(dǎo)航。
第17章介紹了連續(xù)動作空間的環(huán)境特性以及各種方法。
第18章介紹了RL方法在機器人問題中的應(yīng)用,描述了如何用RL方法來構(gòu)建和訓(xùn)練小型機器人。
第19章仍是有關(guān)連續(xù)動作空間的章節(jié),描述了一組置信域方法在其中的應(yīng)用。
第20章展示了另一組不顯式使用梯度的方法。
第21章介紹了能更好地進行環(huán)境探索的方法。
第22章介紹了RL的基于模型的方法,并使用了將想象力應(yīng)用于RL的研究結(jié)果。
第23章描述了AlphaGo Zero方法并將其應(yīng)用于四子連橫棋游戲中。
第24章使用魔方作為環(huán)境,描述了RL方法在離散優(yōu)化領(lǐng)域的應(yīng)用。
第25章介紹了一個相對較新的RL方法應(yīng)用方向,即在多智能體情境下的應(yīng)用。
閱讀指導(dǎo)
本書的所有章節(jié)都采用同樣的結(jié)構(gòu)來描述RL方法:首先討論方法的動機、理論基礎(chǔ)以及背后的思想;然后,給出幾個不同環(huán)境下的帶完整源代碼的例子。
你可以通過不同的方式來閱讀本書:
1. 若要快速熟悉某些方法,可以只閱讀相關(guān)章節(jié)的簡介部分。
2. 若要深入理解某個方法是如何實現(xiàn)的,可以閱讀代碼和相關(guān)注釋。
3. 若要深度熟悉某個方法(我認(rèn)為是好的學(xué)習(xí)方式),可以嘗試借助提供的代碼重新實現(xiàn)該方法并使之有效。
無論如何,我希望這本書對你有幫助!
下載示例代碼及彩色圖片
本書的示例代碼及所有截圖和樣圖,可以從http://www.packtpub.com通過個人賬號下載,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個人賬號下載。
本書的代碼也托管在GitHub上(https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition)。如果代碼有更新,GitHub上的代碼會同步更新。本書所有彩色版屏幕截圖/圖表的PDF文件也可以從https://static.packt-cdn.com/downloads/ 9781838826994_ColorImages.pdf下載。
排版約定
文中的代碼體:表示出現(xiàn)在文中的代碼、數(shù)據(jù)庫表名、目錄名、文件名、文件擴展名、路徑、用戶輸入、Twitter句柄。
代碼塊示例:
命令行輸入或輸出示例:
黑體:表示新的術(shù)語、重要的詞或會在屏幕中顯示的詞(例如,菜單或?qū)υ捒蛑械膬?nèi)容)。
表示警告或重要的提示。
表示提示和技巧。
譯者序
前言
作者簡介
審校者簡介
第1章 什么是強化學(xué)習(xí)1
1.1 機器學(xué)習(xí)分類2
1.1.1 監(jiān)督學(xué)習(xí)2
1.1.2 非監(jiān)督學(xué)習(xí)2
1.1.3 強化學(xué)習(xí)2
1.2 強化學(xué)習(xí)的復(fù)雜性4
1.3 強化學(xué)習(xí)的形式4
1.3.1 獎勵5
1.3.2 智能體6
1.3.3 環(huán)境6
1.3.4 動作7
1.3.5 觀察7
1.4 強化學(xué)習(xí)的理論基礎(chǔ)9
1.4.1 馬爾可夫決策過程9
1.4.2 策略17
1.5 總結(jié)18
第2章 OpenAI Gym19
2.1 剖析智能體19
2.2 硬件和軟件要求21
2.3 OpenAI Gym API23
2.3.1 動作空間23
2.3.2 觀察空間23
2.3.3 環(huán)境25
2.3.4 創(chuàng)建環(huán)境26
2.3.5 車擺系統(tǒng)28
2.4 隨機CartPole智能體30
2.5 Gym的額外功能:包裝器和監(jiān)控器30
2.5.1 包裝器31
2.5.2 監(jiān)控器33
2.6 總結(jié)35
第3章 使用PyTorch進行深度學(xué)習(xí)36
3.1 張量36
3.1.1 創(chuàng)建張量37
3.1.2 零維張量39
3.1.3 張量操作39
3.1.4 GPU張量40
3.2 梯度41
3.3 NN構(gòu)建塊44
3.4 自定義層45
3.5 終黏合劑:損失函數(shù)和優(yōu)化器47
3.5.1 損失函數(shù)48
3.5.2 優(yōu)化器48
3.6 使用TensorBoard進行監(jiān)控50
3.6.1 TensorBoard 10150
3.6.2 繪圖52
3.7 示例:將GAN應(yīng)用于Atari圖像53
3.8 PyTorch Ignite57
3.9 總結(jié)61
第4章 交叉熵方法62
4.1 RL方法的分類62
4.2 交叉熵方法的實踐63
4.3 交叉熵方法在CartPole中的應(yīng)用65
4.4 交叉熵方法在FrozenLake中的應(yīng)用72
4.5 交叉熵方法的理論背景78
4.6 總結(jié)79
第5章 表格學(xué)習(xí)和Bellman方程80
5.1 價值、狀態(tài)和性80
5.2 Bellman方程82
5.3 動作的價值84
5.4 價值迭代法86
5.5 價值迭代實踐87
5.6 Q-learning在FrozenLake中的應(yīng)用92
5.7 總結(jié)94
第6章 深度Q-network95
6.1 現(xiàn)實的價值迭代95
6.2 表格Q-learning96
6.3 深度Q-learning100
6.3.1 與環(huán)境交互102
6.3.2 SGD優(yōu)化102
6.3.3 步驟之間的相關(guān)性103
6.3.4 馬爾可夫性質(zhì)103
6.3.5 DQN訓(xùn)練的終形式103
6.4 DQN應(yīng)用于Pong游戲104
6.4.1 包裝器105
6.4.2 DQN模型109
6.4.3 訓(xùn)練110
6.4.4 運行和性能118
6.4.5 模型實戰(zhàn)120
6.5 可以嘗試的事情122
6.6 總結(jié)123
第7章 高級強化學(xué)習(xí)庫124
7.1 為什么使用強化學(xué)習(xí)庫124
7.2 PTAN庫125
7.2.1 動作選擇器126
7.2.2 智能體127
7.2.3 經(jīng)驗源131
7.2.4 經(jīng)驗回放緩沖區(qū)136
7.2.5 TargetNet類137
7.2.6 Ignite幫助類139
7.3 PTAN版本的CartPole解決方案139
7.4 其他強化學(xué)習(xí)庫141
7.5 總結(jié)141
第8章 DQN擴展142
8.1 基礎(chǔ)DQN143
8.1.1 通用庫143
8.1.2 實現(xiàn)147
8.1.3 結(jié)果148
8.2 N步DQN150
8.2.1 實現(xiàn)152
8.2.2 結(jié)果152
8.3 Double DQN153
8.3.1 實現(xiàn)154
8.3.2 結(jié)果155
8.4 噪聲網(wǎng)絡(luò)156
8.4.1 實現(xiàn)157
8.4.2 結(jié)果159
8.5 帶優(yōu)先級的回放緩沖區(qū)160
8.5.1 實現(xiàn)161
8.5.2 結(jié)果164
8.6 Dueling DQN165
8.6.1 實現(xiàn)166
8.6.2 結(jié)果167
8.7 Categorical DQN168
8.7.1 實現(xiàn)171
8.7.2 結(jié)果175
8.8 組合所有方法178
8.9 總結(jié)180
8.10 參考文獻(xiàn)180
第9章 加速強化學(xué)習(xí)訓(xùn)練的方法182
9.1 為什么速度很重要182
9.2 基線184
9.3 PyTorch中的計算圖186
9.4 多個環(huán)境188
9.5 在不同進程中分別交互和訓(xùn)練190
9.6 調(diào)整包裝器194
9.7 基準(zhǔn)測試總結(jié)198
9.8 硬核CuLE199
9.9 總結(jié)199
9.10 參考文獻(xiàn)199
第10章 使用強化學(xué)習(xí)進行股票交易200
10.1 交易200
10.2 數(shù)據(jù)201
10.3 問題陳述和關(guān)鍵決策202
10.4 交易環(huán)境203
10.5 模型210
10.6 訓(xùn)練代碼211
10.7 結(jié)果211
10.7.1 前饋模型212
10.7.2 卷積模型217
10.8 可以嘗試的事情218
10.9 總結(jié)219
第11章 策略梯度:一種替代方法220
11.1 價值與策略220
11.1.1 為什么需要策略221
11.1.2 策略表示221
11.1.3 策略梯度222
11.2 REINFORCE方法222
11.2.1 CartPole示例223
11.2.2 結(jié)果227
11.2.3 基于策略的方法與基于價值的方法228
11.3 REINFORCE的問題229
11.3.1 需要完整片段229
11.3.2 高梯度方差229
11.3.3 探索230
11.3.4 樣本相關(guān)性230
11.4 用于CartPole的策略梯度方法230
11.4.1 實現(xiàn)231
11.4.2 結(jié)果233
11.5 用于Pong的策略梯度方法237
11.5.1 實現(xiàn)238
11.5.2 結(jié)果239
11.6 總結(jié)240
第12章 actor-critic方法241
12.1 減小方差241
12.2 CartPole的方差243
12.3 actor-crit