本書理論與實踐相結合,系統(tǒng)闡述強化學習的基礎知識,以及如何動手編寫智能體以執(zhí)行一系列實際任務。通過閱讀本書,讀者將獲得深層Q網(wǎng)絡、策略梯度方法、連續(xù)控制問題以及高度可擴展的非梯度方法等主題領域的可行洞見,還將學會如何構建一個經(jīng)過強化學習訓練、價格低廉的真實硬件機器人,并通過一步步代碼優(yōu)化在短短30分鐘的訓練后解決Pong環(huán)境。此外,本書還專門介紹了強化學習的新發(fā)展,包括離散優(yōu)化(解決魔方問題)、多智能體方法、Microsoft的TextWorld環(huán)境、高級探索技術等。
本書包括新的強化學習工具和技術,介紹了強化學習的基礎知識,以及如何動手編寫智能體以執(zhí)行一系列實際任務。
本書較上一版新增6章,專門介紹了強化學習的新發(fā)展,包括離散優(yōu)化(解決魔方問題)、多智能體方法、Microsoft的TextWorld環(huán)境、高級探索技術等。學完本書,你將對這個新興領域的前沿技術有深刻的理解。
此外,你將獲得對深度Q-network、策略梯度方法、連續(xù)控制問題以及高度可擴展的非梯度方法等領域的可行洞見,還將學會如何構建一個經(jīng)過強化學習訓練、價格低廉的真實硬件機器人,并通過逐步代碼優(yōu)化在短短30分鐘的訓練后解決Pong環(huán)境問題。
簡而言之,本書將幫助你探索強化學習中令人興奮的復雜主題,讓你通過實例獲得經(jīng)驗和知識。
本書的主題是強化學習(Reinforcement Learning,RL),它是機器學習(Machine Learning,ML)的一個分支,強調如何解決在復雜環(huán)境中選擇動作時產(chǎn)生的通用且極具挑戰(zhàn)的問題。學習過程僅由獎勵值和從環(huán)境中獲得的觀察驅動。該模型非常通用,能應用于多個真實場景,從玩游戲到優(yōu)化復雜制造過程都能涵蓋。
由于它的靈活性和通用性,RL領域在快速發(fā)展的同時,吸引了很多人的關注。其中,既包括試圖改進現(xiàn)有方法或創(chuàng)造新方法的研究人員,也包括專注于用有效的方式解決問題的從業(yè)人員。
寫本書的目的
寫本書的目的是填補RL理論系統(tǒng)和實際應用之間的巨大空白。目前全世界有很多研究活動,基本上每天都有新的相關論文發(fā)表,并且有很多深度學習的會議,例如神經(jīng)信息處理系統(tǒng)(Neural Information Processing Systems,NeurIPS)大會和國際學習表征會議(International Conference on Learning Representations,ICLR)。同時,有好幾個大型研究組織致力于將RL應用于機器人、醫(yī)學、多智能體系統(tǒng)等領域。
的相關研究資料雖然很容易獲得,卻都過于專業(yè)和抽象,難以理解。RL的實踐落地則顯得更為困難,因為將論文中由數(shù)學公式堆砌的大量抽象理論轉換成解決實際問題的實現(xiàn)方式并不總是顯而易見的。
這使得一些對該領域感興趣的人很難理解隱含在論文或學術會議背后的方法與思想。雖然針對RL的各個方面有很多非常棒的博客用生動的例子來解釋,但博客的形式限制讓作者們只能闡述一兩種方法,而不是構建一個完整的全景圖來將不同的方法聯(lián)系起來。本書就是為了解決這個問題而寫的。
教學方法
本書的另一個關注點是實際應用。每個方法針對非常簡單到非常復雜的情況都進行了實現(xiàn)。我試圖讓例子簡潔易懂,PyTorch的易讀與強大使之成為可能。另外,例子的復雜度是針對RL業(yè)余愛好者而設計的,不需要大量的計算資源,比如圖形處理器(GPU)集群或很強大的工作站。我相信,這將使充滿樂趣和令人興奮的RL領域不僅限于研究小組或大型人工智能公司,還可以讓更廣泛的受眾涉足。但畢竟本書有關內容還是“深度”RL,因此強烈建議大家使用GPU。
除了Atari游戲或連續(xù)控制問題等RL中一些經(jīng)典的中等規(guī)模例子外,本書還有好幾章(第10、14、15、16和18章)介紹大型項目,說明RL方法能應用到更復雜的環(huán)境和任務中。這些例子不是現(xiàn)實場景中的完整項目,但也足以說明,除了精心設計的基準測試外,RL能在更大的范圍內應用。
本書從結構上看分為四個部分,其中第1~4章為部分,第5~10章為第二部分,第11~16為第三部分,第17~25章為第四部分。關于本書前三個部分的例子,值得注意的另一件事是我試圖使它們成為獨立的,會完整地顯示所有代碼。有時這會導致代碼片段的重復(例如,大多數(shù)方法中的訓練迭代都很相似),但是我認為,讓大家學到想學的函數(shù)比刻意避免一些重復更重要,你可以自行跳轉到需要的代碼。本書中的所有例子都能在GitHub上找到,網(wǎng)址為https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition。歡迎你來獲取、實驗并貢獻代碼。
讀者對象
本書面向已經(jīng)有機器學習基礎而想對RL領域進行實踐的讀者。閱讀本書前,讀者應該熟悉Python并且有一定的深度學習和機器學習基礎。具有統(tǒng)計學和概率論知識會大有幫助,但對于理解本書的大部分內容都不是必要的。
本書內容
第1章介紹了RL的思想和模型。
第2章使用開源庫Gym介紹了RL實踐。
第3章概述了PyTorch庫。
第4章用簡單的RL方法對RL的方法和問題進行了初步介紹。
第5章介紹了基于價值的RL方法。
第6章描述了深度Q-network(DQN),是對基礎的基于價值的方法的擴展,能解決復雜環(huán)境下的問題。
第7章描述了PTAN庫,它可以簡化RL方法的實現(xiàn)。
第8章詳細介紹了DQN的擴展方法,以提升在復雜環(huán)境下的穩(wěn)定性和收斂性。
第9章概述了使RL代碼加速執(zhí)行的辦法。
第10章給出了個練習項目,重點是將DQN方法應用于股票交易。
第11章介紹了另一類RL方法,即基于策略學習的方法。
第12章描述了RL中使用非常廣泛的方法之一。
第13章用并行環(huán)境交互的方式擴展了actor-critic方法,從而提高了穩(wěn)定性和收斂性。
第14章給出了第二個項目,展示了如何將RL方法應用于自然語言處理問題。
第15章介紹了RL方法在文字冒險游戲中的應用。
第16章給出了另一個大項目,使用MiniWoB任務集將RL應用于Web導航。
第17章介紹了連續(xù)動作空間的環(huán)境特性以及各種方法。
第18章介紹了RL方法在機器人問題中的應用,描述了如何用RL方法來構建和訓練小型機器人。
第19章仍是有關連續(xù)動作空間的章節(jié),描述了一組置信域方法在其中的應用。
第20章展示了另一組不顯式使用梯度的方法。
第21章介紹了能更好地進行環(huán)境探索的方法。
第22章介紹了RL的基于模型的方法,并使用了將想象力應用于RL的研究結果。
第23章描述了AlphaGo Zero方法并將其應用于四子連橫棋游戲中。
第24章使用魔方作為環(huán)境,描述了RL方法在離散優(yōu)化領域的應用。
第25章介紹了一個相對較新的RL方法應用方向,即在多智能體情境下的應用。
閱讀指導
本書的所有章節(jié)都采用同樣的結構來描述RL方法:首先討論方法的動機、理論基礎以及背后的思想;然后,給出幾個不同環(huán)境下的帶完整源代碼的例子。
你可以通過不同的方式來閱讀本書:
1. 若要快速熟悉某些方法,可以只閱讀相關章節(jié)的簡介部分。
2. 若要深入理解某個方法是如何實現(xiàn)的,可以閱讀代碼和相關注釋。
3. 若要深度熟悉某個方法(我認為是好的學習方式),可以嘗試借助提供的代碼重新實現(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句柄。
代碼塊示例:
命令行輸入或輸出示例:
黑體:表示新的術語、重要的詞或會在屏幕中顯示的詞(例如,菜單或對話框中的內容)。
表示警告或重要的提示。
表示提示和技巧。
譯者序
前言
作者簡介
審校者簡介
第1章 什么是強化學習1
1.1 機器學習分類2
1.1.1 監(jiān)督學習2
1.1.2 非監(jiān)督學習2
1.1.3 強化學習2
1.2 強化學習的復雜性4
1.3 強化學習的形式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 強化學習的理論基礎9
1.4.1 馬爾可夫決策過程9
1.4.2 策略17
1.5 總結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 總結35
第3章 使用PyTorch進行深度學習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構建塊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應用于Atari圖像53
3.8 PyTorch Ignite57
3.9 總結61
第4章 交叉熵方法62
4.1 RL方法的分類62
4.2 交叉熵方法的實踐63
4.3 交叉熵方法在CartPole中的應用65
4.4 交叉熵方法在FrozenLake中的應用72
4.5 交叉熵方法的理論背景78
4.6 總結79
第5章 表格學習和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中的應用92
5.7 總結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 步驟之間的相關性103
6.3.4 馬爾可夫性質103
6.3.5 DQN訓練的終形式103
6.4 DQN應用于Pong游戲104
6.4.1 包裝器105
6.4.2 DQN模型109
6.4.3 訓練110
6.4.4 運行和性能118
6.4.5 模型實戰(zhàn)120
6.5 可以嘗試的事情122
6.6 總結123
第7章 高級強化學習庫124
7.1 為什么使用強化學習庫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 其他強化學習庫141
7.5 總結141
第8章 DQN擴展142
8.1 基礎DQN143
8.1.1 通用庫143
8.1.2 實現(xiàn)147
8.1.3 結果148
8.2 N步DQN150
8.2.1 實現(xiàn)152
8.2.2 結果152
8.3 Double DQN153
8.3.1 實現(xiàn)154
8.3.2 結果155
8.4 噪聲網(wǎng)絡156
8.4.1 實現(xiàn)157
8.4.2 結果159
8.5 帶優(yōu)先級的回放緩沖區(qū)160
8.5.1 實現(xiàn)161
8.5.2 結果164
8.6 Dueling DQN165
8.6.1 實現(xiàn)166
8.6.2 結果167
8.7 Categorical DQN168
8.7.1 實現(xiàn)171
8.7.2 結果175
8.8 組合所有方法178
8.9 總結180
8.10 參考文獻180
第9章 加速強化學習訓練的方法182
9.1 為什么速度很重要182
9.2 基線184
9.3 PyTorch中的計算圖186
9.4 多個環(huán)境188
9.5 在不同進程中分別交互和訓練190
9.6 調整包裝器194
9.7 基準測試總結198
9.8 硬核CuLE199
9.9 總結199
9.10 參考文獻199
第10章 使用強化學習進行股票交易200
10.1 交易200
10.2 數(shù)據(jù)201
10.3 問題陳述和關鍵決策202
10.4 交易環(huán)境203
10.5 模型210
10.6 訓練代碼211
10.7 結果211
10.7.1 前饋模型212
10.7.2 卷積模型217
10.8 可以嘗試的事情218
10.9 總結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 結果227
11.2.3 基于策略的方法與基于價值的方法228
11.3 REINFORCE的問題229
11.3.1 需要完整片段229
11.3.2 高梯度方差229
11.3.3 探索230
11.3.4 樣本相關性230
11.4 用于CartPole的策略梯度方法230
11.4.1 實現(xiàn)231
11.4.2 結果233
11.5 用于Pong的策略梯度方法237
11.5.1 實現(xiàn)238
11.5.2 結果239
11.6 總結240
第12章 actor-critic方法241
12.1 減小方差241
12.2 CartPole的方差243
12.3 actor-crit