首頁>科技>

AlphaGo引領了近年來機器學習領域的幾次標誌性突破,並被爆出一系列令人難忘的大新聞,包括與樊麾、李世石、柯潔等圍棋大師的對決。這一系列比賽為圍棋帶來了深遠的影響,改變了圍棋在全世界範圍內的格局,而且也讓更多人瞭解並喜歡上了人工智慧這個領域,這些都令我們感到自豪。

但讀者可能會問,為什麼要關注遊戲呢?答案是,兒童透過遊戲來了解真實世界,與之類似,機器學習研究者也透過遊戲來訓練人工智慧軟體。沿著這個脈絡,DeepMind公司的整體策略也是用遊戲來模擬真實世界。而AlphaGo專案正是這個策略的一部分。這能幫助我們更好地研究人工智慧,訓練學習代理,以期望將來的某一天,我們能構建真正的通用學習系統,可以解決真實世界中最複雜的問題。

諾貝爾經濟學獎獲得者Daniel Kahnemann在他關於人類認知的《思考,快與慢》一書中描述了兩種思維方式,而AlphaGo的工作方式正是類似於這兩種思維方式。在AlphaGo中,慢的思考模式是透過一種名為蒙特卡洛樹搜尋(Monte Carlo Tree Search)的演算法來實現的。對於某個棋盤佈局,這個演算法可以透過擴充套件一個遊戲樹來規劃下一步動作。遊戲樹代表了未來所有可能的落子動作與迴應動作。但由於圍棋大約有10170(即1後面有170個0)種可能的棋盤佈局,因此要搜尋全部的可能動作序列,其實是不可能實現的。為了解決這個問題,需要縮減搜尋空間,我們給蒙特卡洛樹搜尋配套了一個深度學習元件——訓練兩個神經網路,其中一個用來預測對弈雙方的獲勝機率,另一個用來預測最有希望獲勝的落子動作。

AlphaGo的更新版AlphaZero,依照強化學習的原理,完全靠自我對弈來進行學習。這樣就不再需要任何人工訓練資料了。它從零開始學習下圍棋(以及國際象棋、將棋等),在與自己對弈的學習過程中,它常常能獨立發現(之後再拋棄)人類棋手幾百年來積累下來的策略,也獨立地創造了許多屬於它自己的獨特策略。

剛剛上架的《深度學習與圍棋》就是讓你從零開始一步步實現自己的“AlphaGo”的一本書。

《深度學習與圍棋》的兩位作者Max Pumperla和Kevin Ferguson將引領讀者踏上從AlphaGo到它的後期擴充套件的美好旅程。讀完本書之後,讀者不僅能夠了解如何實現AlphaGo風格的圍棋引擎,還能對現代人工智慧演算法最重要的幾個組成部分——蒙特卡洛樹搜尋、深度學習和強化學習,有深入的理解與實踐。作者精心地組織了這幾個人工智慧話題,並選取圍棋作為實踐案例,使之既富有趣味,又淺顯易懂。除此之外,讀者還能學會圍棋(這個人類有史以來發明的最美麗、最具挑戰性的棋類遊戲之一)的基礎知識。

另外,本書從一開始就構建了一個可以執行的、簡單的圍棋機器人,並隨著本書內容對它進行逐步的強化:從完全隨機地選擇動作,逐漸進化成一個複雜的、有自我學習能力的圍棋AI。作者對基礎概念做了精彩的闡述,再加上可執行的Python程式碼,帶著讀者一步一步地前進。必要時,他們也會深入闡述資料格式、部署和雲計算等細節話題,使讀者可以把圍棋機器人真正地執行起來,並享受弈棋的樂趣。

適合讀者群

本書適合於那些想要嘗試機器學習演算法,但相比數學內容來說,更喜歡實踐內容的軟體開發人員。本書假定讀者已經掌握了Python的基礎知識。當然,書中的演算法也可以用其他現代語言來實現。本書不要求讀者有任何圍棋基礎。如果你喜歡的是國際象棋或其他棋類遊戲,也可以將本書介紹的方法與技巧應用到這些棋類遊戲中。當然,如果你是圍棋愛好者,那麼觀察自己開發的圍棋機器人學會下棋的過程,將會非常開心!兩位作者都深有同感。

學習路線圖

本書分為3部分,共包括14章和5個附錄。

第一部分介紹本書涉及的主要概念。

第1章簡明扼要地介紹人工智慧的幾個分支領域:人工智慧、機器學習和深度學習。我們將解釋這幾個領域之間的關係,以及利用這些領域中的技術所能夠解決與無法解決的問題。

第2章介紹圍棋的基本規則,並說明我們能夠教會計算機哪些知識來學習下棋。

第3章將使用Python來實現圍棋棋盤和落子的邏輯,最終可以進行完整的對弈。在本章的最後,我們將編寫出最弱的圍棋AI。

第二部分介紹建立一個強大的圍棋AI所需的技術和理論基礎。我們會著重介紹AlphaGo所採用的三大技術支柱:樹搜尋(第4章)、神經網路(第5章至第8章)、深度學習機器人和強化學習(第9章至第12章)。

第4章概要介紹幾種搜尋和評估棋局序列的演算法。我們將從簡單的極小化極大搜尋開始介紹,然後介紹更高階的演算法,如α-β剪枝演算法、蒙特卡洛樹搜尋等。

第5章是人工神經網路話題的實踐性介紹。我們將講述如何用Python從零開始實現一個神經網路,用來預測手寫的數字字元。

第6章解釋圍棋資料與影象資料的共通特徵,並引入卷積神經網路對落子動作進行預測。從本章開始,我們將基於深度學習庫Keras來構建我們的模型。

第7章將應用第5章和第6章中學到的實踐知識來構建一個由深度神經網路驅動的圍棋機器人。我們使用業餘高階棋手的實盤資料進行訓練,並分析這種方法的侷限性。

第8章講述如何實現一個圍棋軟體,讓人類棋手能夠透過使用者介面與圍棋機器人進行對弈。讀者還將學會如何與其他機器人在本地或遠端圍棋伺服器上進行對弈。

第9章涵蓋強化學習的基礎知識,並介紹如何在圍棋中使用它進行自我對弈。

第10章詳細介紹策略梯度的概念。它是改進第7章中落子動作預測的關鍵方法。

第11章展示如何使用所謂的價值評估方法來評估棋局。這個方法是一種可以與第4章介紹的樹搜尋相結合的強力工具。

第12章介紹預測給定棋局與下一手落子時預測評估其長期效果的技巧。這將有助於我們更有效地選擇下一手落子動作。

第三部分是本書的最終部分,我們將把之前開發的所有部件整合起來,成為一個接近AlphaGo的應用。

第14章是本書的最後一章,描述棋盤遊戲AI的最前沿技術。我們深入探討AlphaGo Zero背後的理論基礎:開創性地將樹搜尋和強化學習相結合。

在附錄中,我們還將涵蓋下面幾個話題。

附錄A溫習線性代數和微積分的一些基礎知識,並展示如何在Python庫NumPy中表示常用的線性代數結構。

附錄B介紹反向傳播演算法。這個演算法描述了大多數神經網路所採用的學習過程,從第5章開始,我們就一直需要用到它。附錄B會詳述更多關於這個演算法的數學細節。

附錄C為想要更深入瞭解圍棋的讀者提供一些線上資源。

附錄D簡要介紹如何在Amazon Web Services(AWS)上執行圍棋機器人。

附錄E展示如何將機器人連線到流行的圍棋伺服器上,這樣就可以與世界各地的玩家進行對弈,並檢驗自己的成果了。

圖0-1總結了各章對附錄的依賴關係。

圖0-1 各章對附錄的依賴關係

詳細目錄
第 一部分 基礎知識第 1章 走近深度學習:機器學習入門 31.1 什麼是機器學習 41.1.1 機器學習與AI的關係 51.1.2 機器學習能做什麼,不能做什麼 61.2 機器學習示例 71.2.1 在軟體應用中使用機器學習 91.2.2 監督學習 111.2.3 無監督學習 121.2.4 強化學習 121.3 深度學習 131.4 閱讀本書能學到什麼 141.5 小結 15第 2章 圍棋與機器學習 162.1 為什麼選擇遊戲 162.2 圍棋快速入門 172.2.1 瞭解棋盤 172.2.2 落子與吃子 182.2.3 終盤與勝負計算 192.2.4 理解劫爭 202.2.5 讓子 202.3 更多學習資源 202.4 我們可以教會計算機什麼 212.4.1 如何開局 212.4.2 搜尋遊戲狀態 212.4.3 減少需要考慮的動作數量 222.4.4 評估遊戲狀態 222.5 如何評估圍棋AI的能力 232.5.1 傳統圍棋評級 232.5.2 對圍棋AI進行基準測試 242.6 小結 24第3章 實現第 一個圍棋機器人 253.1 在Python中表達圍棋遊戲 253.1.1 實現圍棋棋盤 283.1.2 在圍棋中跟蹤相連的棋組:棋鏈 283.1.3 在棋盤上落子和提子 303.2 跟蹤遊戲狀態並檢查非法動作 323.2.1 自吃 333.2.2 劫爭 343.3 終盤 363.4 建立自己的第 一個機器人:理論上最弱的圍棋AI 373.5 使用Zobrist雜湊加速棋局 413.6 人機對弈 463.7 小結 47第二部分 機器學習和遊戲AI第4章 使用樹搜尋下棋 514.1 遊戲分類 524.2 利用極小化極大搜尋預測對手 534.3 井字棋推演:一個極小化極大演算法的示例 564.4 透過剪枝演算法縮減搜尋空間 584.4.1 透過棋局評估減少搜尋深度 604.4.2 利用α-β剪枝縮減搜尋寬度 634.5 使用蒙特卡洛樹搜尋評估遊戲狀態 664.5.1 在Python中實現蒙特卡洛樹搜尋 694.5.2 如何選擇繼續探索的分支 724.5.3 將蒙特卡洛樹搜尋應用於圍棋 744.6 小結 76第5章 神經網路入門 775.1 一個簡單的用例:手寫數字分類 785.1.1 MNIST手寫數字資料集 785.1.2 MNIST資料的預處理 795.2 神經網路基礎 855.2.1 將對率迴歸描述為簡單的神經網路 855.2.2 具有多個輸出維度的神經網路 855.3 前饋網路 865.4 我們的預測有多好?損失函式及最佳化 895.4.1 什麼是損失函式 895.4.2 均方誤差 895.4.3 在損失函式中找極小值 905.4.4 使用梯度下降法找極小值 915.4.5 損失函式的隨機梯度下降演算法 925.4.6 透過網路反向傳播梯度 935.5 在Python中逐步訓練神經網路 955.5.1 Python中的神經網路層 965.5.2 神經網路中的啟用層 975.5.3 在Python中實現稠密層 985.5.4 Python順序神經網路 1005.5.5 將網路整合到手寫數字分類應用中 1025.6 小結 103第6章 為圍棋資料設計神經網路 1056.1 為神經網路編碼圍棋棋局 1076.2 生成樹搜尋遊戲用作網路訓練資料 1096.3 使用Keras深度學習庫 1126.3.1 瞭解Keras的設計原理 1126.3.2 安裝Keras深度學習庫 1136.3.3 熱身運動:在Keras中執行一個熟悉的示例 1136.3.4 使用Keras中的前饋神經網路進行動作預測 1156.4 使用卷積網路分析空間 1196.4.1 卷積的直觀解釋 1196.4.2 用Keras構建卷積神經網路 1226.4.3 用池化層縮減空間 1236.5 預測圍棋動作機率 1246.5.1 在最後一層使用softmax啟用函式 1256.5.2 分類問題的交叉熵損失函式 1266.6 使用丟棄和線性整流單元構建更深的網路 1276.6.1 透過丟棄神經元對網路進行正則化 1286.6.2 線性整流單元啟用函式 1296.7 構建更強大的圍棋動作預測網路 1306.8 小結 133第7章 從資料中學習:構建深度學習機器人 1347.1 匯入圍棋棋譜 1357.1.1 SGF檔案格式 1367.1.2 從KGS下載圍棋棋譜並覆盤 1367.2 為深度學習準備圍棋資料 1377.2.1 從SGF棋譜中覆盤圍棋棋局 1387.2.2 構建圍棋資料處理器 1397.2.3 構建可以高效地載入資料的圍棋資料生成器 1467.2.4 並行圍棋資料處理和生成器 1477.3 基於真實棋局資料訓練深度學習模型 1487.4 構建更逼真的圍棋資料編碼器 1527.5 使用自適應梯度進行高效的訓練 1557.5.1 在SGD中採用衰減和動量 1557.5.2 使用Adagrad最佳化神經網路 1567.5.3 使用Adadelta最佳化自適應梯度 1577.6 執行自己的實驗並評估效能 1577.6.1 測試架構與超引數的指南 1587.6.2 評估訓練與測試資料的效能指標 1597.7 小結 160第8章 實地部署圍棋機器人 1628.1 用深度神經網路建立動作預測代理 1638.2 為圍棋機器人提供Web前端 1658.3 在雲端訓練與部署圍棋機器人 1698.4 與其他機器人對話:圍棋文字協議 1708.5 在本地與其他機器人對弈 1728.5.1 機器人應該何時跳過回合或認輸 1728.5.2 讓機器人與其他圍棋程式進行對弈 1738.6 將圍棋機器人部署到線上圍棋伺服器 1788.7 小結 182第9章 透過實踐學習:強化學習 1839.1 強化學習週期 1849.2 經驗包括哪些內容 1859.3 建立一個有學習能力的代理 1889.3.1 從某個機率分佈中進行抽樣 1899.3.2 剪裁機率分佈 1909.3.3 初始化一個代理例項 1919.3.4 在磁碟上載入並儲存代理 1919.3.5 實現動作選擇 1939.4 自我對弈:計算機程式進行實踐訓練的方式 1949.4.1 經驗資料的表示 1949.4.2 模擬棋局 1979.5 小結 199第 10章 基於策略梯度的強化學習 20010.1 如何在隨機棋局中識別更佳的決策 20110.2 使用梯度下降法修改神經網路的策略 20410.3 使用自我對弈進行訓練的幾個小技巧 20810.3.1 評估學習的進展 20810.3.2 衡量強度的細微差別 20910.3.3 SGD最佳化器的微調 21010.4 小結 213第 11章 基於價值評估方法的強化學習 21411.1 使用Q學習進行遊戲 21411.2 在Keras中實現Q學習 21811.2.1 在Keras中構建雙輸入網路 21811.2.2 用Keras實現ε貪婪策略 22211.2.3 訓練一個行動-價值函式 22511.3 小結 226第 12章 基於演員-評價方法的強化學習 22712.1 優勢能夠告訴我們哪些決策更加重要 22712.1.1 什麼是優勢 22812.1.2 在自我對弈過程中計算優勢值 23012.2 為演員-評價學習設計神經網路 23212.3 用演員-評價代理下棋 23412.4 用經驗資料訓練一個演員-評價代理 23512.5 小結 240第三部分 一加一大於二第 13章 AlphaGo:全部集結 24313.1 為AlphaGo訓練深度神經網路 24513.1.1 AlphaGo的網路架構 24613.1.2 AlphaGo棋盤編碼器 24813.1.3 訓練AlphaGo風格的策略網路 25013.2 用策略網路啟動自我對弈 25213.3 從自我對弈資料衍生出一個價值網路 25413.4 用策略網路和價值網路做出更好的搜尋 25413.4.1 用神經網路改進蒙特卡洛推演 25513.4.2 用合併價值函式進行樹搜尋 25613.4.3 實現AlphaGo的搜尋演算法 25813.5 訓練自己的AlphaGo可能遇到的實踐問題 26313.6 小結 265第 14章 AlphaGo Zero:將強化學習整合到樹搜尋中 26614.1 為樹搜尋構建一個神經網路 26714.2 使用神經網路來指導樹搜尋 26814.2.1 沿搜尋樹下行 27114.2.2 擴充套件搜尋樹 27414.2.3 選擇一個動作 27614.3 訓練 27714.4 用狄利克雷噪聲改進探索 28114.5 處理超深度神經網路的相關最新技術 28214.5.1 批次歸一化 28214.5.2 殘差網路 28314.6 探索額外資源 28414.7 結語 28514.8 小結 285附錄A 數學基礎 286附錄B 反向傳播演算法 293附錄C 圍棋程式與圍棋伺服器 297附錄D 用AWS來訓練和部署圍棋程式與圍棋伺服器 300附錄E 將機器人釋出到OGS 307
作者簡介

馬克斯•帕佩拉(Max Pumperla)就職於Skymind公司,是一名專職研究深度學習的資料科學家和工程師。他是深度學習平臺Aetros的聯合創始人。

凱文•費格森(Kevin Ferguson)在分散式系統和資料科學領域擁有18年的工作經驗。他是Honor公司的資料科學家,曾就職於谷歌和Meebo等公司。

Max和Kevin是BetaGo的共同創造者。BetaGo是用Python開發的極少數開源圍棋機器人之一。

關於阿爾法圍棋

阿爾法圍棋(AlphaGo)是第一個擊敗人類職業圍棋選手、第一個戰勝圍棋世界冠軍的人工智慧機器人,由谷歌(Google)旗下DeepMind公司戴密斯·哈薩比斯領銜的團隊開發。其主要工作原理是“深度學習”。

2016年3月,阿爾法圍棋與圍棋世界冠軍、職業九段棋手李世石進行圍棋人機大戰,以4比1的總比分獲勝;2016年末2017年初,該程式在中國棋類網站上以“大師”(Master)為註冊賬號與中日韓數十位圍棋高手進行快棋對決,連續60局無一敗績;2017年5月,在中國烏鎮圍棋峰會上,它與排名世界第一的世界圍棋冠軍柯潔對戰,以3比0的總比分獲勝。圍棋界公認阿爾法圍棋的棋力已經超過人類職業圍棋頂尖水平,在GoRatings網站公佈的世界職業圍棋排名中,其等級分曾超過排名人類第一的棋手柯潔。

2017年5月27日,在柯潔與阿爾法圍棋的人機大戰之後,阿爾法圍棋團隊宣佈阿爾法圍棋將不再參加圍棋比賽。2017年10月18日,DeepMind團隊公佈了最強版阿爾法圍棋,代號AlphaGo Zero。

2017年7月18日,教育部、國家語委在北京釋出《中國語言生活狀況報告(2017)》,“阿爾法圍棋”入選2016年度中國媒體十大新詞。——來自百度

20
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 現象分析丨EIP-1559提案或使ETH遭遇安全問題