本書介紹了深度強化學習理論和實現(xiàn)的獨特結合。它從入門開始,然后詳細地解釋了深度強化學習算法的理論,也討論了它的配套軟件庫SLM實驗室的實現(xiàn),并以使深度強化學習工作的實際細節(jié)結束。
闡述深度強化機器學習理論和優(yōu)化算法。圍繞深度強化學習的體系特征進行深入淺出地講解探討,特點鮮明。本書采用端到端的方式引入深度強化學習,即從感性認識開始,而后解釋理論和算法,*后提供代碼實現(xiàn)和實用性技巧。
當DeepMind在Atari街機游戲中取得突破性進展時,我們次發(fā)現(xiàn)了深度強化學習(Deep RL)。人工智能體在只使用圖像而不使用先驗知識的情況下,首次達到了人類的水平。
人工智能體在沒有監(jiān)督的情況下,通過反復試驗自學的想法激發(fā)了我們的想象力,這是一種新的、令人興奮的機器學習方法,它與我們熟悉的監(jiān)督學習領域有很大的不同。
我們決定一起學習這個主題,我們閱讀書籍和論文,學習在線課程,學習代碼,并嘗試實現(xiàn)核心算法。我們意識到,深度強化學習不僅在概念上具有挑戰(zhàn)性,在實現(xiàn)過程中也需要像大型軟件工程項目一樣經(jīng)過艱辛的努力。
隨著我們的進步,我們了解了更多關于深度強化學習的知識算法如何相互關聯(lián)以及它們的不同特征是什么。形成這種心理模型是一個挑戰(zhàn),因為深度強化學習是一個新的研究領域,尚無全面的理論書籍,我們必須直接從研究論文和在線講座中學習。
另一個挑戰(zhàn)是理論與實現(xiàn)之間的巨大差距。通常,深度強化學習算法有許多組件和可調(diào)的超參數(shù),這使其變得敏感且脆弱。為了成功運行,所有組件都需要正確地協(xié)同工作,并使用適當?shù)某瑓?shù)值。從理論上講,實現(xiàn)這一目標所需的細節(jié)并不是很清楚,但同樣重要。在我們的學習過程中,那些理論和實現(xiàn)相結合的資源是非常寶貴的。
我們覺得從理論到實現(xiàn)的過程應該比我們發(fā)現(xiàn)的更簡單,我們希望通過自己的努力使深度強化學習更易于學習。這本書是我們的嘗試,書中采用端到端的方法來引入深度強化學習從直覺開始,然后解釋理論和算法,后是實現(xiàn)和實踐技巧。這也是為什么這本書附帶了一個軟件庫SLM Lab,其中包含了所有算法的實現(xiàn)。簡而言之,這是我們在開始學習這一主題時希望擁有的書。
深度強化學習屬于強化學習中一個較大的領域。強化學習的核心是函數(shù)逼近,在深度強化學習中,函數(shù)是用深度神經(jīng)網(wǎng)絡學習的。強化學習與有監(jiān)督和無監(jiān)督學習一起構成了機器學習的三種核心技術,每種技術在問題的表達方式和算法的數(shù)據(jù)學習方式上都有所不同。
在這本書中,我們專注于深度強化學習,因為我們所經(jīng)歷的挑戰(zhàn)是針對強化學習這一子領域的。這從兩個方面限制了本書的范圍。首先,它排除了在強化學習中可以用來學習函數(shù)的所有其他技術。其次,雖然強化學習從20世紀50年代就已經(jīng)存在,但本書強調(diào)的是2013年到2019年的發(fā)展。近的許多發(fā)展都是建立在較早的研究基礎上的,因此我們認為有必要追溯主要思想的發(fā)展。然而,我們并不打算給出這一領域的全面歷史介紹。
這本書是針對計算機科學專業(yè)的學生和軟件工程師的,旨在介紹深度強化學習,無須事先了解相關主題。但是,我們假設讀者對機器學習和深度學習有基本的了解,并且有中級Python編程水平。一些使用PyTorch的經(jīng)驗也是有用的,但不是必需的。
這本書的結構如下。
第1章介紹深度強化學習問題的不同方面,并對深度強化學習算法進行綜述。
部分是基于策略的算法和基于值的算法。第2章介紹種策略梯度方法(REINFORCE算法)。第3章介紹種基于值的方法(SARSA)。第4章討論深度Q網(wǎng)絡(DQN)算法。第5章重點討論改進的深度Q網(wǎng)絡目標網(wǎng)絡、雙重DQN算法和優(yōu)先級經(jīng)驗回放技術。
第二部分重點研究基于策略和基于值的組合方法。第6章介紹對REINFORCE算法進行擴展的演員-評論家算法。第7章介紹對演員-評論家算法進行擴展的近端策略優(yōu)化(PPO)算法。第8章討論同步和異步并行方法,適用于本書中的任何算法。后,第9章總結所有的算法。
每個算法章節(jié)的結構都是相同的。首先,介紹該章的主要概念,并通過相關的數(shù)學公式進行研究。然后,描述算法并討論在Python中的實現(xiàn)。后,提供一個可在SLM Lab中運行的可調(diào)超參數(shù)配置算法,并用圖表說明該算法的主要特點。
第三部分重點介紹實現(xiàn)深度強化學習算法的實踐細節(jié)。第10章介紹工程和調(diào)試實現(xiàn),包括關于超參數(shù)和實驗結果的小結。第11章為配套的SLM Lab提供使用參考。第12章介紹神經(jīng)網(wǎng)絡架構。第13章討論硬件。
本書的后一部分(第四部分)是關于環(huán)境設計的,由第14~17章組成,分別討論狀態(tài)、動作、獎勵和轉換函數(shù)的設計。
我們推薦從第1章開始順序閱讀到第10章。這些章節(jié)介紹了本書中的所有算法,并提供了實現(xiàn)算法的實用技巧。接下來的三章(第11~13章)集中在更專業(yè)的主題上,可以按任何順序閱讀。對于不想深入研究的讀者來說,第1、2、3、4、6和10章是本書的一個連貫子集,重點關注了一些算法。后,第四部分包含了一組獨立的章節(jié),供對更深入地理解環(huán)境或構建自己的環(huán)境有特殊興趣的讀者閱讀。
SLM Lab\[67\]是本書的配套軟件庫,是一個使用PyTorch\[114\]構建的模塊化深度強化學習框架。SLM是Strange Loop Machine的縮寫,向侯世達的名著《哥德爾、艾舍爾、巴赫:集異璧之大成》\[53\]致敬。SLM Lab的具體例子包括使用PyTorch的語法和特性來訓練神經(jīng)網(wǎng)絡。然而,實現(xiàn)深度強化學習算法的基本原理也適用于其他的深度學習框架,比如TensorFlow\[1\]。
SLM Lab的設計旨在幫助初學者通過將其組成部分組織成概念清晰的片段來學習深度強化學習。這些組成部分與學
贊譽
譯者序
序言
前言
致謝
第1章 強化學習簡介1
1.1 強化學習1
1.2 強化學習中的MDP4
1.3 強化學習中的學習函數(shù)7
1.4 深度強化學習算法9
1.4.1 基于策略的算法9
1.4.2 基于值的算法10
1.4.3 基于模型的算法10
1.4.4 組合方法11
1.4.5 本書中的算法12
1.4.6 同策略和異策略算法12
1.4.7 小結12
1.5 強化學習中的深度學習13
1.6 強化學習與監(jiān)督學習14
1.6.1 缺乏先知14
1.6.2 反饋稀疏性15
1.6.3 數(shù)據(jù)生成15
1.7 總結16
部分 基于策略的算法和基于值的算法
第2章 REINFORCE18
2.1 策略18
2.2 目標函數(shù)19
2.3 策略梯度19
2.3.1 策略梯度推導20
2.4 蒙特卡羅采樣22
2.5 REINFORCE算法23
2.5.1 改進的REINFORCE算法23
2.6 實現(xiàn)REINFORCE24
2.6.1 一種小化REINFORCE的實現(xiàn)24
2.6.2 用PyTorch構建策略26
2.6.3 采樣動作28
2.6.4 計算策略損失29
2.6.5 REINFORCE訓練循環(huán)30
2.6.6 同策略內(nèi)存回放31
2.7 訓練REINFORCE智能體33
2.8 實驗結果36
2.8.1 實驗:評估折扣因子的影響36
2.8.2 實驗:評估基準線的影響37
2.9 總結39
2.10 擴展閱讀39
2.11 歷史回顧39
第3章 SARSA40
3.1 Q函數(shù)和V函數(shù)40
3.2 時序差分學習42
3.2.1 時間差分學習示例44
3.3 SARSA中的動作選擇48
3.3.1 探索和利用49
3.4 SARSA算法50
3.4.1 同策略算法51
3.5 實現(xiàn)SARSA52
3.5.1 動作函數(shù):ε-貪婪52
3.5.2 計算Q損失52
3.5.3 SARSA訓練循環(huán)54
3.5.4 同策略批處理內(nèi)存回放55
3.6 訓練SARSA智能體56
3.7 實驗結果58
3.7.1 實驗:評估學習率的影響58
3.8 總結60
3.9 擴展閱讀60
3.10 歷史回顧60
第4章 深度Q網(wǎng)絡62
4.1 學習DQN中的Q函數(shù)62
4.2 DQN中的動作選擇64
4.2.1 Boltzmann策略65
4.3 經(jīng)驗回放67
4.4 DQN算法68
4.5 實現(xiàn)DQN69
4.5.1 計算Q損失70
4.5.2 DQN訓練循環(huán)70
4.5.3 內(nèi)存回放71
4.6 訓練DQN智能體74
4.7 實驗結果77
4.7.1 實驗:評估網(wǎng)絡架構的影響77
4.8 總結78
4.9 擴展閱讀79
4.10 歷史回顧79
第5章 改進的深度Q網(wǎng)絡80
5.1 目標網(wǎng)絡80
5.2 雙重DQN算法82
5.3 優(yōu)先級經(jīng)驗回放85
5.3.1 重要性抽樣86
5.4 實現(xiàn)改進的DQN88
5.4.1 網(wǎng)絡初始化88
5.4.2 計算Q損失89
5.4.3 更新目標網(wǎng)絡90
5.4.4 包含目標網(wǎng)絡的DQN91
5.4.5 雙重DQN91
5.4.6 優(yōu)先級經(jīng)驗回放91
5.5 訓練DQN智能體玩Atari游戲96
5.6 實驗結果101
5.6.1 實驗:評估雙重DQN與PER的影響101
5.7 總結104
5.8 擴展閱讀104
第二部分 組合方法
第6章 優(yōu)勢演員-評論家算法106
6.1 演員106
6.2 評論家107
6.2.1 優(yōu)勢函數(shù)107
6.2.2 學習優(yōu)勢函數(shù)110
6.3 A2C算法111
6.4 實現(xiàn)A2C113
6.4.1 優(yōu)勢估計113
6.4.2 計算值損失和策略損失115
6.4.3 演員-評論家訓練循環(huán)116
6.5 網(wǎng)絡架構117
6.6 訓練A2C智能體118
6.6.1 在Pong上使用n步回報的A2C算法118
6.6.2 在Pong上使用GAE的A2C算法121
6.6.3 在BipedalWalker上使用n步回報的A2C算法122
6.7 實驗結果124
6.7.1 實驗:評估n步回報的影響124
6.7.2 實驗:評估GAE中λ的影響126
6.8 總結127
6.9 擴展閱讀128
6.10 歷史回顧128
第7章 近端策略優(yōu)化算法130
7.1 替代目標函數(shù)130
7.1.1 性能突然下降130
7.1.2 修改目標函數(shù)132
7.2 近端策略優(yōu)化136
7.3 PPO算法139
7.4 實現(xiàn)PPO141
7.4.1 計算PPO的策略損失141
7.4.2 PPO訓練循環(huán)142
7.5 訓練PPO智能體143
7.5.1 在Pong上使用PPO算法143
7.5.2 在BipedalWalker上使用PPO算法146
7.6 實驗結果149
7.6.1 實驗:評估GAE中λ的影響149
7.6.2 實驗:評估裁剪變量ε的影響150
7.7 總結152
7.8 擴展閱讀152
第8章 并行方法153
8.1 同步并行153
8.2 異步并行154
8.2.1 Hogwild!算法155
8.3 訓練A3C智能體157
8.4 總結160
8.5 擴展閱讀160
第9章 算法總結161
第三部分 實踐細節(jié)
第10章 深度強化學習工程實踐164
10.1 軟件工程實踐164
10.1.1 單元測試164
10.1.2 代碼質(zhì)量169
10.1.3 Git工作流170
10.2 調(diào)試技巧171
10.2.1 生命跡象172
10.2.2 策略梯度診斷172
10.2.3 數(shù)據(jù)診斷173
10.2.4 預處理器174
10.2.5 內(nèi)存174
10.2.6 算法函數(shù)174
10.2.7 神經(jīng)網(wǎng)絡175
10.2.8 算法簡化177
10.2.9 問題簡化177
10.2.10 超參數(shù)178
10.2.11 實驗室工作流178
10.3 Atari技巧179
10.4 深度強化學習小結181
10.4.1 超參數(shù)表181
10.4.2 算法性能比較184
10.5 總結186
第11章 SLM Lab187
11.1 SLM Lab算法實現(xiàn)187
11.2 spec文件188
11.2.1 搜索spec語法190
11.3 運行SLM Lab192
11.3.1 SLM Lab指令193
11.4 分析實驗結果193
11.4.1 實驗數(shù)據(jù)概述193
11.5 總結195
第12章 神經(jīng)網(wǎng)絡架構196
12.1 神經(jīng)網(wǎng)絡的類型196
12.1.1 多層感知機196
12.1.2 卷積神經(jīng)網(wǎng)絡198
12.1.3 循環(huán)神經(jīng)網(wǎng)絡199
12.2 選擇網(wǎng)絡族的指導方法199
12.2.1 MDP與POMDP200
12.2.2 根據(jù)環(huán)境選擇網(wǎng)絡202
12.3 網(wǎng)絡API204
12.3.1 輸入層和輸出層形狀推斷205
12.3.2 自動構建網(wǎng)絡207
12.3.3 訓練步驟209
12.3.4 基礎方法的使用210
12.4 總結211
12.5 擴展閱讀212
第13章 硬件213
13.1 計算機213
13.2 數(shù)據(jù)類型217
13.3 在強化學習中優(yōu)化數(shù)據(jù)類型219
13.4 選擇硬件222
13.5 總結223
第四部分 環(huán)境設計
第14章 狀態(tài)226
14.1 狀態(tài)示例226
14.2 狀態(tài)完整性231
14.3 狀態(tài)復雜性231
14.4 狀態(tài)信息損失235
14.4.1 圖像灰度235
14.4.2 離散化235
14.4.3 散列沖突236
14.4.4 元信息損失236
14.5 預處理238
14.5.1 標準化239
14.5.2 圖像預處理240
14.5.3 時間預處理241
14.6 總結244
第15章 動作245
15.1 動作示例245
15.2 動作完整性247
15.3 動作復雜性248
15.4 總結251
15.5 擴展閱讀:日常事務中的動作設計252
第16章 獎勵255
16.1 獎勵的作用255
16.2 獎勵設計準則256
16.3 總結259
第17章 轉換函數(shù)260
17.1 可行性檢測260
17.2 真實性檢測262
17.3 總結263后記264
附錄A 深度強化學習時間線267
附錄B 示例環(huán)境269
參考文獻274