《強化學習精要:核心算法與TensorFlow 實現》用通俗幽默的語言深入淺出地介紹了強化學習的基本算法與代碼實現,為讀者構建了一個完整的強化學習知識體系,同時介紹了這些算法的具體實現方式。從基本的馬爾可夫決策過程,到各種復雜的強化學習算法,讀者都可以從本書中學習到。本書除了介紹這些算法的原理,還深入分析了算法之間的內在聯系,可以幫助讀者舉一反三,掌握算法精髓。書中介紹的代碼可以幫助讀者快速將算法應用到實踐中。
馮超,畢業于中國科學院大學,滴滴出行AI Labs時空數據組專家算法工程師,曾任小猿搜題算法負責人之一。自2016年起在知乎開設技術專欄《無痛的機器學習》,發表與深度學習和強化學習相關的文章,文章以輕松幽默的語言、細致深入的分析為特點,得到了廣泛的關注。曾撰寫深度學習進階領域口碑技術書《深度學習輕松學:核心算法與視覺實踐》。
目錄
第一部分強化學習入門與基礎知識
1 引言2
1.1 強化學習的概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 巴浦洛夫的狗. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 俄羅斯方塊. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 站在被實驗者的角度看問題. . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 強化學習效果的評估. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 不斷試錯. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 看重長期回報. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 強化學習與監督學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 強化學習與監督學習的本質. . . . . . . . . . . . . . . . . . . . . 9
1.4.2 模仿學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5 強化學習的實驗環境. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.1 Arcade Learning Environment . . . . . . . . . . . . . . . . . . . . . 12
1.5.2 Box2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.3 MuJoCo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.4 Gym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6 本書的主要內容. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 數學與機器學習基礎17
2.1 線性代數基礎. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 對稱矩陣的性質. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1 特征值與特征向量. . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2 對稱矩陣的特征值和特征向量. . . . . . . . . . . . . . . . . . . . 22
2.2.3 對稱矩陣的對角化. . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 概率論. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1 概率與分布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.2 最大似然估計. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 重要性采樣. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5 信息論基礎. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.6 KL 散度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.7 凸函數及其性質. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.8 機器學習的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.9 機器學習的目標函數. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.10 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3 優化算法47
3.1 梯度下降法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.1.1 什么是梯度下降法. . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.1.2 優雅的步長. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.2 動量算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3 共軛梯度法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3.1 精妙的約束. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3.2 共軛. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3.3 優化步長的確定. . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3.4 Gram-Schmidt 方法. . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.3.5 共軛梯度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4 自然梯度法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.4.1 基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.4.2 Fisher 信息矩陣. . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.4.3 自然梯度法目標公式. . . . . . . . . . . . . . . . . . . . . . . . . 76
3.5 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4 TensorFlow 入門78
4.1 TensorFlow 的基本使用方法. . . . . . . . . . . . . . . . . . . . . . . . . 78
4.2 TensorFlow 原理介紹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.1 創建變量的scope . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.2.2 創建一個Variable 背后的故事. . . . . . . . . . . . . . . . . . . . 89
4.2.3 運算操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.2.4 tf.gradients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.2.5 Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.2.6 TensorFlow 的反向傳播技巧. . . . . . . . . . . . . . . . . . . . . 106
4.2.7 arg_scope 的使用. . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.3 TensorFlow 的分布式訓練. . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.3.1 基于MPI 的數據并行模型. . . . . . . . . . . . . . . . . . . . . . 114
4.3.2 MPI 的實現:mpi_adam . . . . . . . . . . . . . . . . . . . . . . . . 121
4.4 基于TensorFlow 實現經典網絡結構. . . . . . . . . . . . . . . . . . . . . 122
4.4.1 多層感知器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.4.2 卷積神經網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.4.3 循環神經網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
4.5 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.6 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5 Gym 與Baselines 130
5.1 Gym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.1.1 Gym 的安裝. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.1.2 Gym 的基本使用方法. . . . . . . . . . . . . . . . . . . . . . . . . 132
5.1.3 利用Gym 框架實現一個經典的棋類游戲:蛇棋. . . . . . . . . . 134
5.2 Baselines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.2.1 Baselines 中的Python 3 新特性. . . . . . . . . . . . . . . . . . . . 139
5.2.2 tf_util . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.2.3 對Gym 平臺的擴展. . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.3 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6 強化學習基本算法145
6.1 馬爾可夫決策過程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6.1.1 MDP:策略與環境模型. . . . . . . . . . . . . . . . . . . . . . . . 145
6.1.2 值函數與Bellman 公式. . . . . . . . . . . . . . . . . . . . . . . . 147
6.1.3 “表格式”Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
6.2 策略迭代. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.1 策略迭代法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.2 策略提升的證明. . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.2.3 策略迭代的效果展示. . . . . . . . . . . . . . . . . . . . . . . . . 160
6.3 價值迭代. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
6.3.1 N 輪策略迭代. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
6.3.2 從動態規劃的角度談價值迭代. . . . . . . . . . . . . . . . . . . . 165
6.3.3 價值迭代的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
6.4 泛化迭代. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.1 兩個極端. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.2 廣義策略迭代法. . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
6.4.3 泛化迭代的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.5 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
第二部分最優價值算法
7 Q-Learning 基礎173
7.1 狀態轉移概率:從掌握到放棄. . . . . . . . . . . . . . . . . . . . . . . . 173
7.2 蒙特卡羅方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.3 探索與利用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
7.4 蒙特卡羅的方差問題. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
7.5 時序差分法與SARSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.6 Q-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
7.7 Q-Learning 的收斂性分析. . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.8 從表格形式到價值模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7.9 Deep Q Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.10 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
7.11 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
8 DQN 的改進算法203
8.1 Double Q-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.2 Priority Replay Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
8.3 Dueling DQN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
8.4 解決DQN 的冷啟動問題. . . . . . . . . . . . . . . . . . . . . . . . . . . 211
8.5 Distributional DQN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
8.5.1 輸出價值分布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
8.5.2 分布的更新. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
8.6 Noisy Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.7 Rainbow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
8.7.1 Rainbow 的模型特點. . . . . . . . . . . . . . . . . . . . . . . . . 221
8.7.2 Deep Q Network 的實現. . . . . . . . . . . . . . . . . . . . . . . . 223
8.8 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.9 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
第三部分基于策略梯度的算法
9 基于策略梯度的算法229
9.1 策略梯度法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
9.1.1 算法推導. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
9.1.2 算法分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
9.1.3 算法改進. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.2 Actor-Critic 算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
9.2.1 降低算法的方差. . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
9.2.2 A3C 算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
9.2.3 A2C 算法實戰. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
9.3 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
9.4 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
10 使策略單調提升的優化算法244
10.1 TRPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
10.1.1 策略的差距. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
10.1.2 策略提升的目標公式. . . . . . . . . . . . . . . . . . . . . . . . . 247
10.1.3 TRPO 的目標定義. . . . . . . . . . . . . . . . . . . . . . . . . . . 248
10.1.4 自然梯度法求解. . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
10.1.5 TRPO 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
10.2 GAE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
10.2.1 GAE 的公式定義. . . . . . . . . . . . . . . . . . . . . . . . . . . 256
10.2.2 基于GAE 和TRPO 的值函數優化. . . . . . . . . . . . . . . . . . 259
10.2.3 GAE 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
10.3 PPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
10.3.1 PPO 介紹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
10.3.2 PPO 算法實踐. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
10.4 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
10.5 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
11 Off-Policy 策略梯度法265
11.1 Retrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
11.1.1 Retrace 的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . 266
11.1.2 Retrace 的算法實現. . . . . . . . . . . . . . . . . . . . . . . . . . 267
11.2 ACER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
11.2.1 Off-Policy Actor-Critic . . . . . . . . . . . . . . . . . . . . . . . . . 270
11.2.2 ACER 算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
11.2.3 ACER 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
11.3 DPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
11.3.1 連續空間的策略優化. . . . . . . . . . . . . . . . . . . . . . . . . 279
11.3.2 策略模型參數的一致性. . . . . . . . . . . . . . . . . . . . . . . . 280
11.3.3 DDPG 算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
11.3.4 DDPG 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.4 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
11.5 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
第四部分其他強化學習算法
12 稀疏回報的求解方法291
12.1 稀疏回報的困難. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
12.2 層次強化學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
12.3 HER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
12.3.1 漸進式學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
12.3.2 HER 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
12.4 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
12.5 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
13 Model-based 方法305
13.1 AlphaZero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
13.1.1 圍棋游戲. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
13.1.2 Alpha-Beta 樹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
13.1.3 MCTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
13.1.4 策略價值模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
13.1.5 模型的對決. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
13.2 iLQR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
13.2.1 線性模型的求解法. . . . . . . . . . . . . . . . . . . . . . . . . . 317
13.2.2 非線性模型的解法. . . . . . . . . . . . . . . . . . . . . . . . . . 322
13.2.3 iLQR 的實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
13.3 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.4 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
第五部分反向強化學習
14 反向強化學習入門330
14.1 基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
14.2 從最優策略求解回報. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
14.2.1 求解回報的目標函數. . . . . . . . . . . . . . . . . . . . . . . . . 332
14.2.2 目標函數的約束. . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
14.3 求解線性規劃. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
14.3.1 線性規劃的求解過程. . . . . . . . . . . . . . . . . . . . . . . . . 335
14.3.2 實際案例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
14.4 無限狀態下的求解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
14.5 從樣本中學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
14.6 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
14.7 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
15 反向強化學習算法2.0 345
15.1 最大熵模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
15.1.1 指數家族. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
15.1.2 最大熵模型的推導. . . . . . . . . . . . . . . . . . . . . . . . . . 349
15.1.3 最大熵模型的實現. . . . . . . . . . . . . . . . . . . . . . . . . . 354
15.2 最大熵反向強化學習. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
15.3 GAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
15.3.1 GAN 的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . . 361
15.3.2 GAN 的訓練分析. . . . . . . . . . . . . . . . . . . . . . . . . . . 363
15.4 GAIL 實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
15.5 總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
15.6 參考資料. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370