深度強化學習結合了深度學習和強化學習,使人工智能體能夠在沒有監督的情況下學習如何解決順序決策問題。在過去的十年中,深度強化學習在一系列問題上取得了顯著的成果,涵蓋從單機遊戲和多人遊戲到機器人技術等方方面面。本書採用理論結合實踐的方法,從直覺開始,然後仔細解釋深度強化學習算法的理論,討論在配套軟件庫SLM Lab中的實現,最後呈現深度強化學習算法的實踐細節。
通過本書,你將:
理解深度強化學習問題的每個關鍵方面。
探索基於策略和基於值的算法,包括REINFORCE算法、SARSA算法、深度Q網絡(DQN)算法和改進的深度Q網絡算法。
深入研究基於策略和基於值的組合算法,包括演員-評論家算法和近端策略優化(PPO)算法。
瞭解算法的同步並行和非同步並行。
在SLM Lab中運行算法,學習深度強化學習的實現細節。
探索算法基準測試結果與調優超參數。
瞭解深度強化學習的環境設計。
本書可以作為高等院校人工智能、計算機、大資料等相關專業的本科或研究生教材,也可以作為人工智能相關領域的研究人員和技術人員的參考書籍。此外,對強化學習感興趣的讀者也可以將本書作為自學的參考教材。
勞拉·格雷澤
(Laura Graesser)
軟件工程師,在谷歌從事機器人技術方面的工作。她擁有紐約大學計算機科學碩士學位,專攻機器學習方向。
龔輝倫
(Wah Loon Keng)
Machine Zone的人工智能工程師,致力於將深度強化學習應用於工業問題。他擁有理論物理和計算機科學的背景。
他們共同開發了兩個深度強化學習軟件庫,並就此進行了多次主題講座和技術輔導。
主要譯者:
許靜
南開大學人工智能學院副院長,機器智能所所長,教授,博士生導師。2003年獲得南開大學博士學位,主要研究方向為人工智能、大資料分析和軟件安全。已完成多項國jia級、省部級、國際合作、國內合作項目,發表學術論文100餘篇,出版教材一部,申請發明專利20余項;獲得天津市科技進步二等獎兩項;現為IEEE會員、CCF高級會員、天津市圖形圖像學會常務理事。
1、名人推薦。本書由谷歌首席科學家Vincent Vanhoucke推薦。
2、作者資深。在AI巨頭企業谷歌從事深度強化學習和人工智能的開發和應用。
3、譯者資深。主要譯者為南開大學人工智能學院副院長,機器智能所所長,教授,博士生導師。
4、內容精彩詳細。講解深度強化學習問題的每個關鍵方面。敘述結構合理,知識學習的實用性,本書內容設置合理,重點突出。詳細解釋深度強化學習算法的理論。
5、熱點議題。近些年湧現出一批深度強化學習的新模型與新算法。本書採用理論結合實踐的方法,圍繞深度強化學習的體系特徵進行了深入淺出的講解和探討,特點鮮明。
譯者序
強化學習是從傳統試錯學習發展而來的一種回報式學習方法,它已成為現代人工智能領域的一個重要分支,並在機器人、電子遊戲、語音系統等諸多領域取得了令人矚目的應用成果。在圍棋應用中取得巨大成功的博弈算法AlphaGo以及升級版的AlphaGo Zero,更是將強化學習的相關研究推向高峰。現代強化學習理論與心理學、運籌學和數學優化等其他知識領域有著緊密關聯,特別是隨著深度學習的興起,強化學習的網絡模型向著縱深發展,在學習效果上取得了新的突破,形成了一批面向深度強化學習的新模型、新算法。近年來,在人工智能領域的頂級會議上,關於深度強化學習的探討一直是熱點議題,這使得深度強化學習有望在更多實用領域大顯身手。
由於深度強化學習涉及的知識面較廣,難以從零星的細節中掌握其體系特徵,因此學習深度強化學習需要一本全面且系統的好書。本書從這一目標出發,圍繞深度強化學習的體系特徵進行了深入淺出的講解和探討,特點鮮明。首先,本書的敘述結構合理有序,開篇第1章總覽本書各部分的算法思路,第2~9章介紹典型的深度強化算法理論,第10~17章介紹算法的實操細節。全書沿著從理論到實踐的敘述主線循序漸進地進行講解,遵循客觀學習規律。其次,本書突出知識學習的實用性,對於關鍵算法均有代碼示例講解,用8章的篇幅講解實踐過程中的工作場景、代碼框架、環境搭建等內容,使讀者更易上手,並加深理解。最後,本書內容設置合理,重點突出,理論部分主要圍繞深度強化學習及其優化算法來講解,深入剖析典型的REINFORCE算法的原理和實現,為讀者提供系統的推導和解釋。此外,一些章節最後的擴展閱讀和歷史回顧板塊也是本書的亮點,它們試圖從時間維度上拓寬讀者的視野,激發讀者的學習興趣。
本書可以作為高等院校人工智能、計算機、大資料等相關專業的本科或研究生教材,也可以作為人工智能相關領域的研究人員和技術人員的參考書籍。此外,對強化學習感興趣的讀者也可以將本書作為自學的參考教材。
譯者在本書的翻譯過程中儘量做到語言流暢,符合中文表達的習慣,對於專業術語也儘量保持其語境含義。由於本書涉及範圍廣泛,限於譯者水準,在譯文中難免存在疏漏和錯誤,真誠希望讀者朋友批評指正。
最後,感謝為本書翻譯工作做出貢獻的研究生吳彥峰、邱宇、高紅燦、王偉靜等。同時向機械工業出版社的溫莉芳女士、何方編輯表示深深的謝意,感謝他們為本書順利出版提供的幫助和支援。
許靜
2021年3月於南開園
序 言
2019年4月,OpenAI的五款機器人在Dota 2比賽中與2018年人類世界冠軍OG展開較量。Dota 2是一款複雜的多人競技遊戲,玩家可以選擇不同的角色,贏得一場比賽需要策略、團隊合作和快速決策。如果構建一個人工智能來參與這款遊戲,需要考慮很多的變數和一個看似無限的優化搜索空間,這似乎是一個不可逾越的挑戰。然而,OpenAI的機器人輕而易舉地贏得了勝利,隨後它們在與公眾玩家的比賽中也贏得了99%以上的勝利。這一成就背後的創新就是深度強化學習。
雖然這是最近才發展起來的,但強化學習和深度學習都已經存在了幾十年,大量的新研究和GPU功率的不斷提高推動了這一技術的發展。本書將向讀者介紹深度強化學習,並將過去六年所做的工作融合成一個連貫的整體。
雖然訓練計算機贏得電子遊戲的勝利可能不是特別有用的事情,但它是一個起點。強化學習是機器學習的一個領域,它對於解決順序決策問題(即隨著時間的推移而解決的問題)非常有用。這幾乎適用於任何情況——無論是玩電子遊戲、走在街上,還是駕駛汽車。
本書對這個處於機器學習前沿的複雜主題做了通俗易懂的介紹。兩位作者不僅對這方面的許多論文進行了研究,還創建了一個開源庫SLM Lab,用於幫助讀者通過快速建立和運行算法來深入學習強化學習。SLM Lab是基於PyTorch用Python編寫的,但是讀者只需要熟悉Python即可。至於選擇使用TensorFlow或其他一些庫作為深度學習框架的讀者,仍然可以從這本書中獲得啟發,因為它介紹了深度強化學習解決方案的概念和問題公式。
本書彙集了新的深度強化學習研究成果,以及讀者可以使用的示例和代碼,還有與OpenAI Gym、Roboschool、Unity ML-Agents工具包一起使用的庫,這使得本書成為希望使用這些系統的讀者的完美起點。
Paul Dix
叢書編輯
讚譽
譯者序
序言
前言
致謝
第1章 強化學習簡介1
1.1 強化學習1
1.2 強化學習中的MDP4
1.3 強化學習中的學習函數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 強化學習與監督學習14
1.6.1 缺乏先知14
1.6.2 回饋稀疏性15
1.6.3 資料生成15
1.7 總結16
第一部分 基於策略的算法和基於值的算法
第2章 REINFORCE18
2.1 策略18
2.2 目標函數19
2.3 策略梯度19
2.3.1 策略梯度推導20
2.4 蒙特卡羅採樣22
2.5 REINFORCE算法23
2.5.1 改進的REINFORCE算法23
2.6 實現REINFORCE24
2.6.1 一種最小化REINFORCE的實現24
2.6.2 用PyTorch構建策略26
2.6.3 採樣動作28
2.6.4 計算策略損失29
2.6.5 REINFORCE訓練迴圈30
2.6.6 同策略內存重播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函數和V函數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 實現SARSA52
3.5.1 動作函數:ε-貪婪52
3.5.2 計算Q損失52
3.5.3 SARSA訓練迴圈54
3.5.4 同策略批次處理內存重播55
3.6 訓練SARSA智能體56
3.7 實驗結果58
3.7.1 實驗:評估學習率的影響58
3.8 總結60
3.9 擴展閱讀60
3.10 歷史回顧60
第4章 深度Q網絡62
4.1 學習DQN中的Q函數62
4.2 DQN中的動作選擇64
4.2.1 Boltzmann策略65
4.3 經驗重播67
4.4 DQN算法68
4.5 實現DQN69
4.5.1 計算Q損失70
4.5.2 DQN訓練迴圈70
4.5.3 內存重播71
4.6 訓練DQN智能體74
4.7 實驗結果77
4.7.1 實驗:評估網絡架構的影響77
4.8 總結78
4.9 擴展閱讀79
4.10 歷史回顧79
第5章 改進的深度Q網絡80
5.1 目標網絡80
5.2 雙重DQN算法82
5.3 優先順序經驗重播85
5.3.1 重要性抽樣86
5.4 實現改進的DQN88
5.4.1 網絡初始化88
5.4.2 計算Q損失89
5.4.3 更新目標網絡90
5.4.4 包含目標網絡的DQN91
5.4.5 雙重DQN91
5.4.6 優先順序經驗重播91
5.5 訓練DQN智能體玩Atari遊戲96
5.6 實驗結果101
5.6.1 實驗:評估雙重DQN與PER的影響101
5.7 總結104
5.8 擴展閱讀104
第二部分 組合方法
第6章 優勢演員-評論家算法106
6.1 演員106
6.2 評論家107
6.2.1 優勢函數107
6.2.2 學習優勢函數110
6.3 A2C算法111
6.4 實現A2C113
6.4.1 優勢估計113
6.4.2 計算值損失和策略損失115
6.4.3 演員-評論家訓練迴圈116
6.5 網絡架構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章 近端策略優化算法130
7.1 替代目標函數130
7.1.1 性能突然下降130
7.1.2 修改目標函數132
7.2 近端策略優化136
7.3 PPO算法139
7.4 實現PPO141
7.4.1 計算PPO的策略損失141
7.4.2 PPO訓練迴圈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
第三部分 實踐細節
第10章 深度強化學習工程實踐164
10.1 軟件工程實踐164
10.1.1 單元測試164
10.1.2 代碼質量169
10.1.3 Git工作流170
10.2 調試技巧171
10.2.1 生命跡象172
10.2.2 策略梯度診斷172
10.2.3 資料診斷173
10.2.4 前置處理器174
10.2.5 內存174
10.2.6 算法函數174
10.2.7 神經網絡175
10.2.8 算法簡化177
10.2.9 問題簡化177
10.2.10 超參數178
10.2.11 實驗室工作流178
10.3 Atari技巧179
10.4 深度強化學習小結181
10.4.1 超參數表181
10.4.2 算法性能比較184
10.5 總結186
第11章 SLM Lab187
11.1 SLM Lab算法實現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 實驗資料概述193
11.5 總結195
第12章 神經網絡架構196
12.1 神經網絡的類型196
12.1.1 多層感知機196
12.1.2 卷積神經網絡198
12.1.3 迴圈神經網絡199
12.2 選擇網絡族的指導方法199
12.2.1 MDP與POMDP200
12.2.2 根據環境選擇網絡202
12.3 網絡API204
12.3.1 輸入層和輸出層形狀推斷205
12.3.2 自動構建網絡207
12.3.3 訓練步驟209
12.3.4 基礎方法的使用210
12.4 總結211
12.5 擴展閱讀212
第13章 硬體213
13.1 計算機213
13.2 資料類型217
13.3 在強化學習中優化資料類型219
13.4 選擇硬體222
13.5 總結223
第四部分 環境設計
第14章 狀態226
14.1 狀態示例226
14.2 狀態完整性231
14.3 狀態複雜性231
14.4 狀態信息損失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章 轉換函數260
17.1 可行性檢測260
17.2 真實性檢測262
17.3 總結263後記264
附錄A 深度強化學習時間線267
附錄B 示例環境269
參考文獻274
前 言
當DeepMind在Atari街機遊戲中取得突破性進展時,我們第一次發現了深度強化學習(Deep RL)。人工智能體在只使用圖像而不使用先驗知識的情況下,首次達到了人類的水準。
人工智能體在沒有監督的情況下,通過反復試驗自學的想法激發了我們的想像力,這是一種新的、令人興奮的機器學習方法,它與我們熟悉的監督學習領域有很大的不同。
我們決定一起學習這個主題,我們閱讀書籍和論文,學習在線課程,學習代碼,並嘗試實現核心算法。我們意識到,深度強化學習不僅在概念上具有挑戰性,在實現過程中也需要像大型軟件工程項目一樣經過艱辛的努力。
隨著我們的進步,我們瞭解了更多關於深度強化學習的知識——算法如何相互關聯以及它們的不同特徵是什麼。形成這種心理模型是一個挑戰,因為深度強化學習是一個新的研究領域,尚無全面的理論書籍,我們必須直接從研究論文和在線講座中學習。
另一個挑戰是理論與實現之間的巨大差距。通常,深度強化學習算法有許多元件和可調的超參數,這使其變得敏感且脆弱。為了成功運行,所有元件都需要正確地協同工作,並使用適當的超參數值。從理論上講,實現這一目標所需的細節並不是很清楚,但同樣重要。在我們的學習過程中,那些理論和實現相結合的資源是非常寶貴的。
我們覺得從理論到實現的過程應該比我們發現的更簡單,我們希望通過自己的努力使深度強化學習更易於學習。這本書是我們的嘗試,書中採用端到端的方法來引入深度強化學習——從直覺開始,然後解釋理論和算法,最後是實現和實踐技巧。這也是為什麼這本書附帶了一個軟件庫SLM Lab,其中包含了所有算法的實現。簡而言之,這是我們在開始學習這一主題時希望擁有的書。
深度強化學習屬於強化學習中一個較大的領域。強化學習的核心是函數逼近,在深度強化學習中,函數是用深度神經網絡學習的。強化學習與有監督和無監督學習一起構成了機器學習的三種核心技術,每種技術在問題的表達方式和算法的資料學習方式上都有所不同。
在這本書中,我們專注於深度強化學習,因為我們所經歷的挑戰是針對強化學習這一子領域的。這從兩個方面限制了本書的範圍。首先,它排除了在強化學習中可以用來學習函數的所有其他技術。其次,雖然強化學習從20世紀50年代就已經存在,但本書強調的是2013年到2019年的發展。最近的許多發展都是建立在較早的研究基礎上的,因此我們認為有必要追溯主要思想的發展。然而,我們並不打算給出這一領域的全面歷史介紹。
這本書是針對計算機科學專業的學生和軟件工程師的,旨在介紹深度強化學習,無須事先瞭解相關主題。但是,我們假設讀者對機器學習和深度學習有基本的瞭解,並且有中級Python程序設計水準。一些使用PyTorch的經驗也是有用的,但不是必需的。
這本書的結構如下。
第1章介紹深度強化學習問題的不同方面,並對深度強化學習算法進行綜述。
第一部分是基於策略的算法和基於值的算法。第2章介紹第一種策略梯度方法(REINFORCE算法)。第3章介紹第一種基於值的方法(SARSA)。第4章討論深度Q網絡(DQN)算法。第5章重點討論改進的深度Q網絡——目標網絡、雙重DQN算法和優先順序經驗重播技術。
第二部分重點研究基於策略和基於值的組合方法。第6章介紹對REINFORCE算法進行擴展的演員-評論家算法。第7章介紹對演員-評論家算法進行擴展的近端策略優化(PPO)算法。第8章討論同步和非同步並行方法,適用於本書中的任何算法。最後,第9章總結所有的算法。
每個算法章節的結構都是相同的。首先,介紹該章的主要概念,並通過相關的數學公式進行研究。然後,描述算法並討論在Python中的實現。最後,提供一個可在SLM Lab中運行的可調超參數配置算法,並用圖表說明該算法的主要特點。
第三部分重點介紹實現深度強化學習算法的實踐細節。第10章介紹工程和調試實現,包括關於超參數和實驗結果的小結。第11章為配套的SLM Lab提供使用參考。第12章介紹神經網絡架構。第13章討論硬體。
本書的最後一部分(第四部分)是關於環境設計的,由第14~17章組成,分別討論狀態、動作、獎勵和轉換函數的設計。
我們推薦從第1章開始順序閱讀到第10章。這些章節介紹了本書中的所有算法,並提供了實現算法的實用技巧。接下來的三章(第11~13章)集中在更專業的主題上,可以按任何順序閱讀。對於不想深入研究的讀者來說,第1、2、3、4、6和10章是本書的一個連貫子集,重點關注了一些算法。最後,第四部分包含了一組獨立的章節,供對更深入地理解環境或構建自己的環境有特殊興趣的讀者閱讀。
SLM Lab\[67\]是本書的配套軟件庫,是一個使用PyTorch\[114\]構建的模組化深度強化學習框架。SLM是Strange Loop Machine的縮寫,向侯世達的名著《哥德爾、艾舍爾、巴赫:集異璧之大成》\[53\]致敬。SLM Lab的具體例子包括使用PyTorch的語法和特性來訓練神經網絡。然而,實現深度強化學習算法的基本原理也適用於其他的深度學習框架,比如TensorFlow\[1\]。
SLM Lab的設計旨在説明初學者通過將其組成部分組織成概念清晰的片段來學習深度強化學習。這些組成部分與學術文獻中討論的深度強化學習一致,以便於從理論轉換到代碼。
學習深度強化學習的另一個重要方面是實驗。為了方便實驗,SLM Lab還提供了一個實驗框架,幫助初學者設計和測試自己的假設。
SLM Lab庫作為GitHub上的開源項目發佈。我們鼓勵讀者安裝它(在Linux或MacOS機器上),並按照存儲庫網站上的說明運行第一個演示。已經創建了一個專用的git分支“book”,其代碼版本與本書相容。從存儲庫網站複製的簡短安裝說明顯示在代碼0-1中。
代碼0-1 從book git分支安裝SLM-Lab
我們建議你先設置它,這樣就可以使用本書中介紹的算法來訓練智能體了。除了安裝和運行演示程式外,在閱讀算法章節(第一部分和第二部分)之前,不需要熟悉SLM Lab,我們會在需要的地方向訓練智能體發出所有命令。在第11章中,我們將重點從算法轉移到更實際的深度強化學習方面,對SLM Lab進行更廣泛的討論。
致 謝
有許多人幫助我們完成了這本書,我們要感謝Milan Cvitkovic、Alex Leeds、Navdeep Jaitly、Jon Krohn、Katya Vasilaky以及Katelyn Gleason的支持和鼓勵。感謝OpenAI、PyTorch、Ilya Kostrikov和Jamromir Janisch為深度強化學習算法提供了高質量的開源實現,也感謝Arthur Juliani對環境設計的早期討論,這些資源和討論對於我們創建SLM Lab是非常寶貴的。
許多人對這本書的初稿提供了深思熟慮和有見地的回饋。我們要感謝Alexandre Sablayrolles、Anant Gupta、Brandon Strickland、Chong Li、Jon Krohn、Jordi Frank、Karthik Jayasurya、Matthew Rahtz、Pidong Wang、Raymond Chua、Regina R.Monaco、Rico Jonschkowski、Sophie Tabac和Utku Evci投入的時間和精力,他們使得這本書更加出色。
非常感謝Pearson的製作團隊——Alina Kirsanova、Chris Zahn、Dmitry Kirsanov和Julie Nahil,他們對細節的關注使文字變得更加流暢。
最後,沒有我們的編輯Debra Williams Cauley,這本書就不可能存在。感謝Cauley的耐心和鼓勵,是她幫助我們完成了寫書的夢想。
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。