0
雷鋒網(wǎng)按:Petr Baudis是捷克布拉格技術(shù)大學(xué)的一名博士生,他也是創(chuàng)業(yè)公司Rossum.ai的創(chuàng)始人。近日,Petr在Medium上發(fā)表了一篇博客,結(jié)合自己在強化學(xué)習(xí)方面的研究以及在圍棋方面的應(yīng)用講述了如何按AlphaGo Zero的原理打造自己的AlphaGo Zero,以下則是由雷鋒網(wǎng)整理的相關(guān)內(nèi)容:
多年來,我一直聚焦于強化學(xué)習(xí)領(lǐng)域——尤其在讓計算機玩圍棋的棋盤游戲領(lǐng)域。我之前就被這個游戲迷住了,它被認為是我們最終可以解決、但又是最棘手的挑戰(zhàn)之一。
我當時編寫了當時最強大的開源程序Pachi,后來又發(fā)布了一個演示性程序Michi(這是一個簡約的圍棋蒙特卡洛搜索引擎,僅有550行Python代碼)。幾個月后,Google DeepMind宣布了他們的AlphaGo程序在神經(jīng)網(wǎng)絡(luò)應(yīng)用方面取得的重大突破(雷鋒網(wǎng)按:即AlphaGo戰(zhàn)勝歐洲冠軍樊麾);同時我也將神經(jīng)網(wǎng)絡(luò)的研究應(yīng)用在了自然語言處理領(lǐng)域上。
DeepMind的AlphaGo Zero在一個月前再次引爆了了人工智能社區(qū)——這一次,他們的神經(jīng)網(wǎng)絡(luò)能夠在沒有人類的知識(監(jiān)督學(xué)習(xí)或手工數(shù)據(jù))的情況下從頭開始完全學(xué)習(xí),所需要的計算量也更少。正如DeepMind在其博客中所說:
“無需人類知識即可精通圍棋游戲”
人工智能的一個長期目標是通過后天的自主學(xué)習(xí)(雷鋒網(wǎng)注:tabula rasa,意為“白板”,指所有的知識都是逐漸從他們的感官和經(jīng)驗而來),在一個具有挑戰(zhàn)性的領(lǐng)域創(chuàng)造出超越人類的精通程度學(xué)習(xí)的算法。此前,AlphaGo成為首個戰(zhàn)勝人類圍棋世界冠軍的程序......我們將介紹一種僅基于強化學(xué)習(xí)的算法,而不使用人類的數(shù)據(jù)、指導(dǎo)或規(guī)則以外的領(lǐng)域知識。AlphaGo成為自己的老師,這一神經(jīng)網(wǎng)絡(luò)被訓(xùn)練用于預(yù)測AlphaGo自己的落子選擇,提高了樹搜索的強度,使得落子質(zhì)量更高,具有更強的自我對弈迭代能力。從一塊白板開始,我們的新程序AlphaGo Zero表現(xiàn)驚人,并以100:0擊敗了此前版本的AlphaGo。
當天晚上我很興奮地閱讀了這篇發(fā)表在《Nature》上的論文。結(jié)合我將神經(jīng)網(wǎng)絡(luò)應(yīng)用于圍棋AI的經(jīng)驗,我可以很快了解AlphaGo Zero的原理,其算法比之前的AlphaGo更簡單,其神經(jīng)網(wǎng)絡(luò)訓(xùn)練的循環(huán)也更精致,我很快對Nochi進行了調(diào)整,當我凌晨5點終于睡下時,新版本的Nochi圍棋程序已經(jīng)在Rossum的GPU集群中開始訓(xùn)練了。
AlphaGo Zero的原理很簡單:一個單一的、可以同時評估位置并建議接下來的走法的神經(jīng)網(wǎng)絡(luò),而通過經(jīng)典的蒙特卡羅樹搜索算法可以構(gòu)建游戲走法樹,探索變化及找到應(yīng)手——只有在這種情況下,它只使用神經(jīng)網(wǎng)絡(luò),而不是進行隨機的游戲模擬(而之前所有強大的圍棋程序都是如此)。
AlphaGo從一個完全隨機、只能進行混沌的預(yù)測的神經(jīng)網(wǎng)絡(luò)開始,在一次又一次地迭代中自我對弈。神經(jīng)網(wǎng)絡(luò)可以根據(jù)預(yù)測正確或錯誤的結(jié)果來進行訓(xùn)練并建立強化學(xué)習(xí)策略,隨著時間的推移從混沌中形成自己的規(guī)則。
通過這樣的“第一原則”進行學(xué)習(xí)并達到超過人類水平的做法實際上要比原來的AlphaGo快得多,這真是太神奇了。同時令人驚訝的是,所發(fā)現(xiàn)的策略實際上與人類數(shù)千年來的發(fā)展非常相似——這也說明我們的做法是正確的!
如果將AlphaGo與AlphaGo Zero進行比較時,很容易發(fā)現(xiàn)AlphaGo Zero的三大主要進展:
不要基于人類游戲的游戲記錄進行訓(xùn)練。
用一個簡單的神經(jīng)網(wǎng)絡(luò)代替之前AlphaGo中使用的兩個神經(jīng)網(wǎng)絡(luò)的復(fù)雜聯(lián)鎖。
在圍棋局勢評估的卷積神經(jīng)網(wǎng)絡(luò)中使用剩余單元(ResNet-like)。
用于圖像識別的深度殘差學(xué)習(xí)(arxiv)
最后我有一個一般性建議:如果您使用Pre-ResNet的卷積神經(jīng)網(wǎng)絡(luò)進行視覺任務(wù),請考慮升級精度是否重要!在Rossum,我們持續(xù)看到所有這些工作的準確性都有所提高,AlphaGo團隊也是如此。
在這個用Python寫的圍棋程序Michi中包含了圍棋規(guī)則的實現(xiàn),蒙特克洛樹搜索算法和用于評估的隨機游戲模擬。這是理想的狀況 —— 只需用基于Keras的神經(jīng)網(wǎng)絡(luò)來代替隨機游戲模擬,并為程序添加一個“自我演奏”訓(xùn)練循環(huán)即可(當然,把它寫出來只花了一個晚上,但這并不是說我們在接下來的幾個星期里沒有進行過調(diào)試...)
但還有一個問題:盡管AlphaGo Zero比老款A(yù)lphago要求低得多,但按常規(guī)硬件手段,運行相同的設(shè)置仍然需要1700 GPU年的訓(xùn)練時間。 (考慮一下Google的計算能力,以及他們用TPU所做的加速)。因此,我們做了相應(yīng)的簡化,我們不是使用全尺寸的19x19板,而是僅在最小的靈敏板7x7上訓(xùn)練Nochi 。
同時我們還對原始方法進行了調(diào)整:基于我們在Rossum的實踐,我們稍微修改了神經(jīng)網(wǎng)絡(luò)的架構(gòu),以及采用了一個更激進的訓(xùn)練過程,確保自我游戲期間的神經(jīng)網(wǎng)絡(luò)盡快收斂,使得Nochi成為第一個達到GNU Go基準水平的AlphaGo復(fù)現(xiàn)版本(GNU Go是一個經(jīng)典的中級程序,通常用于其他算法的基準測試)。另外,Nochi的水平隨著每次移動所的分配時間提高而得到提高,這表明神經(jīng)網(wǎng)絡(luò)不僅僅記住了游戲,而且學(xué)會了概括和計算抽象策略。
下面說重點。Nochi已經(jīng)在GitHub上開源,而且仍然是一個任何人易于上手學(xué)習(xí)的小型Python程序。目前我們正在進行其他復(fù)制AlphaGo Zero的其他成功工作,例如 Leela Zero和Odin Zero。畢竟,我們還需要一個任何人都可以安裝和學(xué)習(xí)的、超人類的圍棋軟件,盡管我們主業(yè)是在文檔處理(我們的愿望是消除所有的手動數(shù)據(jù)輸入)上,我們將視其作為我們一項可以長期發(fā)展的衍生成果進行更新。
關(guān)于AlphaGo和Nochi的更多信息,可關(guān)注以下鏈接:
DeepMind最新的《Nature》論文及AlphaGO Zero Cheat Sheet(原理表單)
我在Machine Learning Meetup上演講的PPT以及相關(guān)視頻(見下)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。