實現(xiàn)了一個中國象棋版本的 Alpha zero

先上代碼 github歼秽,這個項目現(xiàn)在仍然在積極開發(fā)和維護的階段应役,通過這個項目你可以組建自己的集群并且訓練自己的中國象棋 alpha go:

icyChessZero

中國有 13+億人,中國象棋的受眾也很廣燥筷,但是有關(guān)中國象棋 alpha go/zero 方面的開源項目其實并不多,國內(nèi)有名的更是幾根手指都能數(shù)過來箩祥,而且在內(nèi)容上高度相似,都是使用 alpha zero 的網(wǎng)絡(luò) + alpha go 的訓練方式肆氓,列舉兩個相對突出一些的:

佳佳 zero: 是一個團隊在維護袍祖,把 Leela Zero(一個國際象棋 alpha zero 項目) 遷移來做中國象棋的項目,目前就 elo 分來說是最強的谢揪,有那么一丟丟商業(yè)化趨勢

cczero: 幾乎只有一個人在維護代碼蕉陋,同樣是一個民間自發(fā)組成,維護的中國象棋項目捐凭,目標是最強開源項目

這兩個項目都是比較棒的,那么為什么我還要自己寫一個呢凳鬓?這就要從更早說起了

早在 alpha go 出來之后茁肠,alpha zero 出來之前,我就有要用神經(jīng)網(wǎng)絡(luò)來做中國象棋的想法缩举,不過那個時候其實大家都不太知道怎么做這個東西垦梆,畢竟象棋和圍棋很不一樣,我當時寫了一個比較幼稚的網(wǎng)絡(luò)蚁孔,希望單純通過一個網(wǎng)絡(luò)奶赔,不加任何類似蒙特卡洛的算法來通過預測人類落子規(guī)律的方法來,畢竟在圍棋中一個單純的策略網(wǎng)絡(luò)就可以達到業(yè)余幾段的棋力水平惋嚎,我追求的也并不是天下第一杠氢,業(yè)余幾段對于我來說,很 ok另伍。

當時寫爬蟲爬了很多國內(nèi)比賽棋譜鼻百,包括了很多我們耳熟能詳?shù)南笃宕髱煹谋荣悾缓箝_始自己訓練一個網(wǎng)絡(luò)來預測人類的落子:

這個是我當時實現(xiàn)的那個很 naive 的網(wǎng)絡(luò)代碼:

icyElephant


我當時的方法是使用 2 個網(wǎng)絡(luò)來預測人類的一步摆尝,一個叫做 select 網(wǎng)絡(luò)(圖 1 中的網(wǎng)絡(luò) 1 )負責預測人類會移動哪個子温艇,另一個叫 move 網(wǎng)絡(luò),負責預測移動的子落子點在哪里堕汞,對比 alpha zero 的方法勺爱,alpha zero 使用一個網(wǎng)絡(luò)就完成了兩個工作:


從直覺上來說,似乎先預測選子讯检,再預測落子的網(wǎng)絡(luò)邏輯更符合人類的思考過程琐鲁,然而這兩個網(wǎng)絡(luò),在實際使用真實對局數(shù)據(jù)訓練時準確率相差非常腥俗啤:


并且我當時的方法( select-move 網(wǎng)絡(luò))不適合用在蒙特卡洛樹搜索中預測每個走法的概率围段,所以后來在寫 icyChessZero 的時候也是用了 alpha zero 的策略網(wǎng)絡(luò)的形式。在訓練完這個網(wǎng)絡(luò)之后投放,我發(fā)現(xiàn)奈泪,雖然象棋走法預測的準確率也不算很低,但是單純和這個預測走子的網(wǎng)絡(luò)對弈灸芳,我發(fā)現(xiàn)這個網(wǎng)絡(luò)雖然開局有模有樣涝桅,但是一旦到了中局和殘局,網(wǎng)絡(luò)經(jīng)常作出匪夷所思的送子行為烙样,這個現(xiàn)象我認為是因為圍棋和象棋的差異性造成的冯遂,由于圍棋的局勢更適合直接從棋盤評估(所謂的“勢”),而象棋則更多涉及邏輯推理误阻。

到這一步為止债蜜,其實還是有很多項目都可以做到晴埂,比如說之前知乎有一篇系列文章:

ENG Bo:28 天自制你的 AlphaGo

叫 28 天自制 alpha go 的文章(雖然這個系列文章后來太監(jiān)了,作者賣燈去了寻定,估計是因為算力不夠)儒洛,但是再往下做的話,其實是有一定門檻的狼速,使用蒙特卡洛樹進行子對弈琅锻,并且進行神經(jīng)網(wǎng)絡(luò)的增強學習訓練,需要巨大的算力向胡,這個門檻恼蓬,其他的開源項目一般是通過眾籌訓練的方式解決的,比如 cczero 和佳佳 zero僵芹,但是有越過這個門檻的处硬,也就有沒越過這個門檻的,比如之前知乎上的另一個項目:

程世東:AlphaZero 實踐——中國象棋(附論文翻譯)

這個項目就因為訓練增強學習所需要的巨量資源所限制拇派,雖然代碼寫出來了荷辕,但是因為算力不夠,作者在燒了幾百美元之后只能作罷件豌。

那么我是怎么面對這個問題的呢疮方?我利用了我在校生的身份,把手深到了我能夠到的每一臺 gpu 機器茧彤,求爺爺告奶奶的搞到了四五臺機器骡显,組了一個集群,雖然仍然算力不夠曾掂,但是至少可以開始訓練了惫谤。

想要從根本上解決這個問題,只能用巨量的算力遭殉,但是我們也能通過一些提高效率的方法來緩解一些這個問題石挂,一些常用的方法比如:

使用 c/c++ 加速代碼

使用多進程同時跑多個網(wǎng)絡(luò)的前向

使用協(xié)程來將多個前向組成 batch,提高 gpu 利用效率

使用協(xié)程 /多進程的蒙特卡洛樹算法险污,提速蒙特卡洛樹的搜索速度

使用多臺機器分布式跑棋譜痹愚,利用更多 gpu

除了 C/C++加速的方法我還沒有使用,其他的方法我都使用了蛔糯,細節(jié)參考:

深入理解 alpha go 的方法并應用到中國象棋

在實現(xiàn)了使用蒙特卡洛樹搜索走子的功能之后拯腮,我讓監(jiān)督學習的網(wǎng)絡(luò) 和 監(jiān)督學習+蒙特卡洛樹的兩種算法進行了對戰(zhàn),結(jié)果如下:


在 29 盤對局中蚁飒,蒙特卡洛樹一盤都沒有輸动壤,平的 5 局都是超出當時的步數(shù)限制( 100 步,為了節(jié)省時間)判和的淮逻,判和時無一例外都是 mcts 優(yōu)勢琼懊。這明確證明蒙特卡洛樹能夠有效提升 policy 網(wǎng)絡(luò)的棋力阁簸。

這個項目原理簡單敢会,但是實現(xiàn)起來全是邏輯蹂析,我從三月(存疑)開始寫全肮,一直沒時間寫稚虎,斷斷續(xù)續(xù)的寫,5 月跑了幾天藏古,出了一些 bug玄捕,后來一堆事情又涌上來睦刃,這項目就又擱置了起來车胡,到 7檬输,8 月,我意外的發(fā)現(xiàn)終于又有一些時間了匈棘,于是終于丧慈,我完成了我的中國象棋 alpha go zero 的第一版。

然后開始了漫長的訓練過程羹饰,由于我的算力非常有限伊滋,到目前為止也只是一個 4碳却,5 臺 gpu server 的集群在訓練這個版本的 alpha zero队秩,我一開始的評估結(jié)果是以實驗室的資源大概至少 10 年能跑出來吧,后來隨著計算越來越精確昼浦,我發(fā)現(xiàn)在短短一年馍资,甚至半年之內(nèi)完成訓練是很有可能的(我的目標只是達到中上人類水平,由于收到算力和時間的限制)关噪,但是一臺機器肯定不夠鸟蟹,需要有很多機器,于是我寫了分布式版本使兔,甚至花了一周時間重構(gòu)了很多代碼建钥,這次重構(gòu)以后一些 bug 莫名其妙的消失了,elo 曲線總算開始正常上升虐沥。




ps 一句:如果你在北郵有閑置的 GPU 服務器的權(quán)限熊经,又有意愿加入集群一起訓練,希望能夠聯(lián)系我

我認為欲险,并不是只有訓練出一個最強的網(wǎng)絡(luò)才是有價值的(當然如果有資源能夠訓練最強的我也不介意 [手動捂臉] )镐依,探究在這個訓練過程中的優(yōu)化點,考究 alpha zero 這個強化學習過程中是否有不合理的地方天试,這些都是有價值的槐壳。

這次開源的代碼同時包含了集群 master 和 slave 的代碼,一個組建集群的 minimal sample 我已經(jīng)上傳到了 google drive:

colab.research.google.com/drive/1sC-g…

這個 minimal sample 可以直接用 google colab (免費)運行喜每,只要把這個文件存到自己的 google drive 之后用 colab 打開就行(注意開啟 gpu 加速):


在 google colab 中運行這個 minimal sample 的所有代碼务唐,應該能夠看到類似下面的結(jié)果雳攘,說明一個隨機的權(quán)重已經(jīng)被初始化并且用于蒙特卡洛樹的子對弈:


根據(jù)其他項目的進度和情況,想要達到我的小目標應該需要 4000 ~ 5000 elo 的分數(shù)枫笛,現(xiàn)在這個項目已經(jīng)達到了 700elo 左右的分數(shù)来农,所以達到目標并不是不可能的。

另外這個項目參考了很多同類項目的實現(xiàn)崇堰,比如:

zhuanlan.zhihu.com/p/34433581

cczero.org/

github.com/junxiaosong…

寫這個項目的目的也是希望在探索的路上多走一條道沃于,多一個人。

最后給其他對 alpha zero 算法感興趣的人一點建議:

如果沒有足夠算力的話海诲,沒事不要碰象棋繁莹,圍棋這種復雜游戲,可以從五子棋這種簡單游戲入手訓練特幔,五子棋這種簡單游戲?qū)λ懔Φ拈T檻要求會低很多咨演。

另外,如果想探討一些技術(shù)問題可以站內(nèi)私聊蚯斯,評論薄风,或者通過icybee@yeah.net聯(lián)系我

作者:icybee

鏈接:https://juejin.im/post/5b727fdd518825614653b471

來源:掘金

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)拍嵌,非商業(yè)轉(zhuǎn)載請注明出處遭赂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市横辆,隨后出現(xiàn)的幾起案子撇他,更是在濱河造成了極大的恐慌,老刑警劉巖狈蚤,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件困肩,死亡現(xiàn)場離奇詭異,居然都是意外死亡脆侮,警方通過查閱死者的電腦和手機锌畸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靖避,“玉大人潭枣,你說我怎么就攤上這事〗畋停” “怎么了卸耘?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粘咖。 經(jīng)常有香客問我蚣抗,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任翰铡,我火速辦了婚禮钝域,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锭魔。我一直安慰自己例证,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布迷捧。 她就那樣靜靜地躺著织咧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漠秋。 梳的紋絲不亂的頭發(fā)上笙蒙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音庆锦,去河邊找鬼捅位。 笑死,一個胖子當著我的面吹牛搂抒,可吹牛的內(nèi)容都是我干的艇搀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼求晶,長吁一口氣:“原來是場噩夢啊……” “哼焰雕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起誉帅,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤淀散,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚜锨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡慢蜓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年亚再,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨抡。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡氛悬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耘柱,到底是詐尸還是另有隱情如捅,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布调煎,位于F島的核電站镜遣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏士袄。R本人自食惡果不足惜悲关,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一谎僻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寓辱,春花似錦艘绍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至这敬,卻和暖如春般甲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹅颊。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工敷存, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堪伍。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓锚烦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帝雇。 傳聞我的和親對象是個殘疾皇子涮俄,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 2016年3月,Alpha Go Master擊敗最強的人類圍棋選手之一李世石尸闸。擊敗李的版本彻亲,在訓練過程中使用了大...
    桂糊涂閱讀 11,377評論 0 7
  • 作者簡介:王晶,Google廣告大數(shù)據(jù)部門資深工程師吮廉,從事機器學習算法研發(fā)苞尝,2014年博士畢業(yè)于波士頓大學,主要研...
    hzyido閱讀 2,991評論 0 12
  • 今天收到我家先生送的花宦芦,心情嘛自然是好的不要不要的宙址,畢竟這是他除了結(jié)婚送我的手捧花以外,第一次另外單獨送花給我调卑,雖...
    坤凝閱讀 325評論 0 0
  • 09/28/2017 周四 丁酉年 八月初九日
    媽媽熊閱讀 93評論 0 0
  • 溫庭筠 晨起動征鐸抡砂,客行悲故鄉(xiāng)。 雞聲茅店月恬涧,人跡板橋霜注益。 槲葉落山路,枳花明(照)驛墻溯捆。 因思杜陵夢丑搔,鳧雁滿回...
    木蕭蕭兮_初霽閱讀 713評論 0 0