這是一本深入淺出且極富趣味的深度學(xué)習(xí)入門書。本書選取深度學(xué)習(xí)近年來最重大的突破之一 AlphaGo,將其背后的技術(shù)和原理娓娓道來,并配合一套基于 BetaGo 的開源代碼,帶領(lǐng)讀者從零開始一步步實(shí)現(xiàn)自己的“AlphaGo”。本書側(cè)重實(shí)踐,深入淺出,庖丁解牛般地將深度學(xué)習(xí)和AlphaGo這樣深?yuàn)W的話題變得平易近人、觸手可及,內(nèi)容非常精彩。
全書共分為3個(gè)部分:第一部分介紹機(jī)器學(xué)習(xí)和圍棋的基礎(chǔ)知識,并構(gòu)建一個(gè)最簡圍棋機(jī)器人,作為后面章節(jié)內(nèi)容的基礎(chǔ);第二部分分層次深入介紹AlphaGo背后的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù),包括樹搜索、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)機(jī)器人和強(qiáng)化學(xué)習(xí),以及強(qiáng)化學(xué)習(xí)的幾個(gè)高級技巧,包括策略梯度、價(jià)值評估方法、演員-評價(jià)方法 3 類技術(shù);第三部分將前面兩部分準(zhǔn)備好的知識集成到一起,并最終引導(dǎo)讀者實(shí)現(xiàn)自己的AlphaGo,以及改進(jìn)版AlphaGo Zero。讀完本書之后,讀者會(huì)對深度學(xué)習(xí)這個(gè)學(xué)科以及AlphaGo的技術(shù)細(xì)節(jié)有非常全面的了解,為進(jìn)一步深入鉆研AI理論、拓展AI應(yīng)用打下良好基礎(chǔ)。
本書不要求讀者對AI或圍棋有任何了解,只需要了解基本的Python語法以及基礎(chǔ)的線性代數(shù)和微積分知識。
1.本書是一本人工智能的實(shí)踐性入門教程,成功地把AlphaGo這個(gè)人工智能領(lǐng)域中最激動(dòng)人心的里程碑之一,轉(zhuǎn)化為一門優(yōu)秀的入門課程;
2.采用Keras深度學(xué)習(xí)框架,用Python來實(shí)現(xiàn)代碼;
3.內(nèi)容全面,層次劃分細(xì)致,基本上將AlphaGo背后所有的理論知識都覆蓋了;
4.提供配套源代碼。
圍棋這個(gè)古老的策略游戲是AI研究的特別適用的案例。2016年,一個(gè)基于深度學(xué)習(xí)的系統(tǒng)戰(zhàn)勝了圍棋世界冠軍,震驚了整個(gè)圍棋界。不久之后,這個(gè)系統(tǒng)的升級版AlphaGo Zero利用深度強(qiáng)化學(xué)習(xí)掌握了圍棋技藝,輕松擊敗了其原始版本。讀者可以通過閱讀本書來學(xué)習(xí)潛藏在它們背后的深度學(xué)習(xí)技術(shù),并構(gòu)建屬于自己的圍棋機(jī)器人!
本書通過教讀者構(gòu)建一個(gè)圍棋機(jī)器人來介紹深度學(xué)習(xí)技術(shù)。隨著閱讀的深入,讀者可以通過Python深度學(xué)習(xí)庫Keras采用更復(fù)雜的訓(xùn)練方法和策略。讀者可以欣賞自己的機(jī)器人掌握圍棋技藝,并找出將學(xué)到的深度學(xué)習(xí)技術(shù)應(yīng)用到其他廣泛的場景中的方法。
本書主要內(nèi)容
● 構(gòu)建一個(gè)游戲 AI,并教會(huì)它自我改進(jìn)。
● 用深度學(xué)習(xí)增強(qiáng)經(jīng)典游戲 AI 系統(tǒng)。
● 實(shí)現(xiàn)深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)。
要閱讀本書,讀者只需具備基本的Python技巧和高中水平的數(shù)學(xué)知識,而不需要任何深度學(xué)習(xí)經(jīng)驗(yàn)。
馬克斯·帕佩拉(Max Pumperla)供職于Skymind公司,是一位專職研究深度學(xué)習(xí)的數(shù)據(jù)科學(xué)家和工程師。他是深度學(xué)習(xí)平臺Aetros的聯(lián)合創(chuàng)始人。
凱文·費(fèi)格森(Kevin Ferguson)在分布式系統(tǒng)和數(shù)據(jù)科學(xué)領(lǐng)域擁有近20年的工作經(jīng)驗(yàn)。他是Honor公司的數(shù)據(jù)科學(xué)家,曾就職于谷歌和Meebo等公司。
馬克斯·帕佩拉和凱文·費(fèi)格森都是經(jīng)驗(yàn)豐富的深度學(xué)習(xí)專家,擁有豐富的分布式系統(tǒng)和數(shù)據(jù)科學(xué)方面的知識。他們是開源圍棋機(jī)器人 BetaGo 的共同創(chuàng)造者。
目 錄
第 一部分 基礎(chǔ)知識
第 1章 走近深度學(xué)習(xí):機(jī)器學(xué)習(xí)入門 3
1.1 什么是機(jī)器學(xué)習(xí) 4
1.1.1 機(jī)器學(xué)習(xí)與AI的關(guān)系 5
1.1.2 機(jī)器學(xué)習(xí)能做什么,不能做什么 6
1.2 機(jī)器學(xué)習(xí)示例 7
1.2.1 在軟件應(yīng)用中使用機(jī)器學(xué)習(xí) 9
1.2.2 監(jiān)督學(xué)習(xí) 11
1.2.3 無監(jiān)督學(xué)習(xí) 12
1.2.4 強(qiáng)化學(xué)習(xí) 12
1.3 深度學(xué)習(xí) 13
1.4 閱讀本書能學(xué)到什么 14
1.5 小結(jié) 15
第 2章 圍棋與機(jī)器學(xué)習(xí) 16
2.1 為什么選擇游戲 16
2.2 圍棋快速入門 17
2.2.1 了解棋盤 17
2.2.2 落子與吃子 18
2.2.3 終盤與勝負(fù)計(jì)算 19
2.2.4 理解劫爭 20
2.2.5 讓子 20
2.3 更多學(xué)習(xí)資源 20
2.4 我們可以教會(huì)計(jì)算機(jī)什么 21
2.4.1 如何開局 21
2.4.2 搜索游戲狀態(tài) 21
2.4.3 減少需要考慮的動(dòng)作數(shù)量 22
2.4.4 評估游戲狀態(tài) 22
2.5 如何評估圍棋AI的能力 23
2.5.1 傳統(tǒng)圍棋評級 23
2.5.2 對圍棋AI進(jìn)行基準(zhǔn)測試 24
2.6 小結(jié) 24
第3章 實(shí)現(xiàn)第 一個(gè)圍棋機(jī)器人 25
3.1 在Python中表達(dá)圍棋游戲 25
3.1.1 實(shí)現(xiàn)圍棋棋盤 28
3.1.2 在圍棋中跟蹤相連的棋組:棋鏈 28
3.1.3 在棋盤上落子和提子 30
3.2 跟蹤游戲狀態(tài)并檢查非法動(dòng)作 32
3.2.1 自吃 33
3.2.2 劫爭 34
3.3 終盤 36
3.4 創(chuàng)建自己的第 一個(gè)機(jī)器人:理論上最弱的圍棋AI 37
3.5 使用Zobrist哈希加速棋局 41
3.6 人機(jī)對弈 46
3.7 小結(jié) 47
第二部分 機(jī)器學(xué)習(xí)和游戲AI
第4章 使用樹搜索下棋 51
4.1 游戲分類 52
4.2 利用極小化極大搜索預(yù)測對手 53
4.3 井字棋推演:一個(gè)極小化極大算法的示例 56
4.4 通過剪枝算法縮減搜索空間 58
4.4.1 通過棋局評估減少搜索深度 60
4.4.2 利用α-β剪枝縮減搜索寬度 63
4.5 使用蒙特卡洛樹搜索評估游戲狀態(tài) 66
4.5.1 在Python中實(shí)現(xiàn)蒙特卡洛樹搜索 69
4.5.2 如何選擇繼續(xù)探索的分支 72
4.5.3 將蒙特卡洛樹搜索應(yīng)用于圍棋 74
4.6 小結(jié) 76
第5章 神經(jīng)網(wǎng)絡(luò)入門 77
5.1 一個(gè)簡單的用例:手寫數(shù)字分類 78
5.1.1 MNIST手寫數(shù)字?jǐn)?shù)據(jù)集 78
5.1.2 MNIST數(shù)據(jù)的預(yù)處理 79
5.2 神經(jīng)網(wǎng)絡(luò)基礎(chǔ) 85
5.2.1 將對率回歸描述為簡單的神經(jīng)網(wǎng)絡(luò) 85
5.2.2 具有多個(gè)輸出維度的神經(jīng)網(wǎng)絡(luò) 85
5.3 前饋網(wǎng)絡(luò) 86
5.4 我們的預(yù)測有多好?損失函數(shù)及優(yōu)化 89
5.4.1 什么是損失函數(shù) 89
5.4.2 均方誤差 89
5.4.3 在損失函數(shù)中找極小值 90
5.4.4 使用梯度下降法找極小值 91
5.4.5 損失函數(shù)的隨機(jī)梯度下降算法 92
5.4.6 通過網(wǎng)絡(luò)反向傳播梯度 93
5.5 在Python中逐步訓(xùn)練神經(jīng)網(wǎng)絡(luò) 95
5.5.1 Python中的神經(jīng)網(wǎng)絡(luò)層 96
5.5.2 神經(jīng)網(wǎng)絡(luò)中的激活層 97
5.5.3 在Python中實(shí)現(xiàn)稠密層 98
5.5.4 Python順序神經(jīng)網(wǎng)絡(luò) 100
5.5.5 將網(wǎng)絡(luò)集成到手寫數(shù)字分類應(yīng)用中 102
5.6 小結(jié) 103
第6章 為圍棋數(shù)據(jù)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò) 105
6.1 為神經(jīng)網(wǎng)絡(luò)編碼圍棋棋局 107
6.2 生成樹搜索游戲用作網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù) 109
6.3 使用Keras深度學(xué)習(xí)庫 112
6.3.1 了解Keras的設(shè)計(jì)原理 112
6.3.2 安裝Keras深度學(xué)習(xí)庫 113
6.3.3 熱身運(yùn)動(dòng):在Keras中運(yùn)行一個(gè)熟悉的示例 113
6.3.4 使用Keras中的前饋神經(jīng)網(wǎng)絡(luò)進(jìn)行動(dòng)作預(yù)測 115
6.4 使用卷積網(wǎng)絡(luò)分析空間 119
6.4.1 卷積的直觀解釋 119
6.4.2 用Keras構(gòu)建卷積神經(jīng)網(wǎng)絡(luò) 122
6.4.3 用池化層縮減空間 123
6.5 預(yù)測圍棋動(dòng)作概率 124
6.5.1 在最后一層使用softmax激活函數(shù) 125
6.5.2 分類問題的交叉熵?fù)p失函數(shù) 126
6.6 使用丟棄和線性整流單元構(gòu)建更深的網(wǎng)絡(luò) 127
6.6.1 通過丟棄神經(jīng)元對網(wǎng)絡(luò)進(jìn)行正則化 128
6.6.2 線性整流單元激活函數(shù) 129
6.7 構(gòu)建更強(qiáng)大的圍棋動(dòng)作預(yù)測網(wǎng)絡(luò) 130
6.8 小結(jié) 133
第7章 從數(shù)據(jù)中學(xué)習(xí):構(gòu)建深度學(xué)習(xí)機(jī)器人 134
7.1 導(dǎo)入圍棋棋譜 135
7.1.1 SGF文件格式 136
7.1.2 從KGS下載圍棋棋譜并復(fù)盤 136
7.2 為深度學(xué)習(xí)準(zhǔn)備圍棋數(shù)據(jù) 137
7.2.1 從SGF棋譜中復(fù)盤圍棋棋局 138
7.2.2 構(gòu)建圍棋數(shù)據(jù)處理器 139
7.2.3 構(gòu)建可以高效地加載數(shù)據(jù)的圍棋數(shù)據(jù)生成器 146
7.2.4 并行圍棋數(shù)據(jù)處理和生成器 147
7.3 基于真實(shí)棋局?jǐn)?shù)據(jù)訓(xùn)練深度學(xué)習(xí)模型 148
7.4 構(gòu)建更逼真的圍棋數(shù)據(jù)編碼器 152
7.5 使用自適應(yīng)梯度進(jìn)行高效的訓(xùn)練 155
7.5.1 在SGD中采用衰減和動(dòng)量 155
7.5.2 使用Adagrad優(yōu)化神經(jīng)網(wǎng)絡(luò) 156
7.5.3 使用Adadelta優(yōu)化自適應(yīng)梯度 157
7.6 運(yùn)行自己的實(shí)驗(yàn)并評估性能 157
7.6.1 測試架構(gòu)與超參數(shù)的指南 158
7.6.2 評估訓(xùn)練與測試數(shù)據(jù)的性能指標(biāo) 159
7.7 小結(jié) 160
第8章 實(shí)地部署圍棋機(jī)器人 162
8.1 用深度神經(jīng)網(wǎng)絡(luò)創(chuàng)建動(dòng)作預(yù)測代理 163
8.2 為圍棋機(jī)器人提供Web前端 165
8.3 在云端訓(xùn)練與部署圍棋機(jī)器人 169
8.4 與其他機(jī)器人對話:圍棋文本協(xié)議 170
8.5 在本地與其他機(jī)器人對弈 172
8.5.1 機(jī)器人應(yīng)該何時(shí)跳過回合或認(rèn)輸 172
8.5.2 讓機(jī)器人與其他圍棋程序進(jìn)行對弈 173
8.6 將圍棋機(jī)器人部署到在線圍棋服務(wù)器 178
8.7 小結(jié) 182
第9章 通過實(shí)踐學(xué)習(xí):強(qiáng)化學(xué)習(xí) 183
9.1 強(qiáng)化學(xué)習(xí)周期 184
9.2 經(jīng)驗(yàn)包括哪些內(nèi)容 185
9.3 建立一個(gè)有學(xué)習(xí)能力的代理 188
9.3.1 從某個(gè)概率分布中進(jìn)行抽樣 189
9.3.2 剪裁概率分布 190
9.3.3 初始化一個(gè)代理實(shí)例 191
9.3.4 在磁盤上加載并保存代理 191
9.3.5 實(shí)現(xiàn)動(dòng)作選擇 193
9.4 自我對弈:計(jì)算機(jī)程序進(jìn)行實(shí)踐訓(xùn)練的方式 194
9.4.1 經(jīng)驗(yàn)數(shù)據(jù)的表示 194
9.4.2 模擬棋局 197
9.5 小結(jié) 199
第 10章 基于策略梯度的強(qiáng)化學(xué)習(xí) 200
10.1 如何在隨機(jī)棋局中識別更佳的決策 201
10.2 使用梯度下降法修改神經(jīng)網(wǎng)絡(luò)的策略 204
10.3 使用自我對弈進(jìn)行訓(xùn)練的幾個(gè)小技巧 208
10.3.1 評估學(xué)習(xí)的進(jìn)展 208
10.3.2 衡量強(qiáng)度的細(xì)微差別 209
10.3.3 SGD優(yōu)化器的微調(diào) 210
10.4 小結(jié) 213
第 11章 基于價(jià)值評估方法的強(qiáng)化學(xué)習(xí) 214
11.1 使用Q學(xué)習(xí)進(jìn)行游戲 214
11.2 在Keras中實(shí)現(xiàn)Q學(xué)習(xí) 218
11.2.1 在Keras中構(gòu)建雙輸入網(wǎng)絡(luò) 218
11.2.2 用Keras實(shí)現(xiàn)ε貪婪策略 222
11.2.3 訓(xùn)練一個(gè)行動(dòng)-價(jià)值函數(shù) 225
11.3 小結(jié) 226
第 12章 基于演員-評價(jià)方法的強(qiáng)化學(xué)習(xí) 227
12.1 優(yōu)勢能夠告訴我們哪些決策更加重要 227
12.1.1 什么是優(yōu)勢 228
12.1.2 在自我對弈過程中計(jì)算優(yōu)勢值 230
12.2 為演員-評價(jià)學(xué)習(xí)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò) 232
12.3 用演員-評價(jià)代理下棋 234
12.4 用經(jīng)驗(yàn)數(shù)據(jù)訓(xùn)練一個(gè)演員-評價(jià)代理 235
12.5 小結(jié) 240
第三部分 一加一大于二
第 13章 AlphaGo:全部集結(jié) 243
13.1 為AlphaGo訓(xùn)練深度神經(jīng)網(wǎng)絡(luò) 245
13.1.1 AlphaGo的網(wǎng)絡(luò)架構(gòu) 246
13.1.2 AlphaGo棋盤編碼器 248
13.1.3 訓(xùn)練AlphaGo風(fēng)格的策略網(wǎng)絡(luò) 250
13.2 用策略網(wǎng)絡(luò)啟動(dòng)自我對弈 252
13.3 從自我對弈數(shù)據(jù)衍生出一個(gè)價(jià)值網(wǎng)絡(luò) 254
13.4 用策略網(wǎng)絡(luò)和價(jià)值網(wǎng)絡(luò)做出更好的搜索 254
13.4.1 用神經(jīng)網(wǎng)絡(luò)改進(jìn)蒙特卡洛推演 255
13.4.2 用合并價(jià)值函數(shù)進(jìn)行樹搜索 256
13.4.3 實(shí)現(xiàn)AlphaGo的搜索算法 258
13.5 訓(xùn)練自己的AlphaGo可能遇到的實(shí)踐問題 263
13.6 小結(jié) 265
第 14章 AlphaGo Zero:將強(qiáng)化學(xué)習(xí)集成到樹搜索中 266
14.1 為樹搜索構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò) 267
14.2 使用神經(jīng)網(wǎng)絡(luò)來指導(dǎo)樹搜索 268
14.2.1 沿搜索樹下行 271
14.2.2 擴(kuò)展搜索樹 274
14.2.3 選擇一個(gè)動(dòng)作 276
14.3 訓(xùn)練 277
14.4 用狄利克雷噪聲改進(jìn)探索 281
14.5 處理超深度神經(jīng)網(wǎng)絡(luò)的相關(guān)最新技術(shù) 282
14.5.1 批量歸一化 282
14.5.2 殘差網(wǎng)絡(luò) 283
14.6 探索額外資源 284
14.7 結(jié)語 285
14.8 小結(jié) 285
附錄A 數(shù)學(xué)基礎(chǔ) 286
附錄B 反向傳播算法 293
附錄C 圍棋程序與圍棋服務(wù)器 297
附錄D 用AWS來訓(xùn)練和部署圍棋程序與圍棋服務(wù)器 300
附錄E 將機(jī)器人發(fā)布到OGS 307