99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀系統(tǒng)分析AlphaGo
系統(tǒng)分析AlphaGo
2016-03-15
收藏
來自田淵棟的知乎專欄,CDA數(shù)據(jù)分析師已獲得作者授權(quán)
原文標(biāo)題:AlphaGo的分析

最近我仔細(xì)看了下AlphaGo在《自然》雜志上發(fā)表的文章,寫一些分析給大家分享。

AlphaGo這個系統(tǒng)主要由幾個部分組成:

1.走棋網(wǎng)絡(luò)(Policy Network),給定當(dāng)前局面,預(yù)測/采樣下一步的走棋。

2. 快速走子(Fast rollout),目標(biāo)和1一樣,但在適當(dāng)犧牲走棋質(zhì)量的條件下,速度要比1快1000倍。 

3. 估值網(wǎng)絡(luò)(Value Network),給定當(dāng)前局面,估計(jì)是白勝還是黑勝。

4. 蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS),把以上這三個部分連起來,形成一個完整的系統(tǒng)。

我們的DarkForest和AlphaGo同樣是用4搭建的系統(tǒng)。DarkForest較AlphaGo而言,在訓(xùn)練時加強(qiáng)了1,而少了2和3,然后以開源軟件Pachi的缺省策略(default policy)部分替代了2的功能。

以下介紹下各部分。

1.走棋網(wǎng)絡(luò)

走棋網(wǎng)絡(luò)把當(dāng)前局面作為輸入,預(yù)測/采樣下一步的走棋。它的預(yù)測不只給出最強(qiáng)的一手,而是對棋盤上所有可能的下一著給一個分?jǐn)?shù)。棋盤上有361個點(diǎn),它就給出361個數(shù),好招的分?jǐn)?shù)比壞招要高。DarkForest在這部分有創(chuàng)新,通過在訓(xùn)練時預(yù)測三步而非一步,提高了策略輸出的質(zhì)量,和他們在使用增強(qiáng)學(xué)習(xí)進(jìn)行自我對局后得到的走棋網(wǎng)絡(luò)(RL network)的效果相當(dāng)。當(dāng)然,他們并沒有在最后的系統(tǒng)中使用增強(qiáng)學(xué)習(xí)后的網(wǎng)絡(luò),而是用了直接通過訓(xùn)練學(xué)習(xí)到的網(wǎng)絡(luò)(SL network),理由是RL network輸出的走棋缺乏變化,對搜索不利。


有意思的是在AlphaGo為了速度上的考慮,只用了寬度為192的網(wǎng)絡(luò),而并沒有使用最好的寬度為384的網(wǎng)絡(luò)(見圖2(a)),所以要是GPU更快一點(diǎn)(或者更多一點(diǎn)),AlphaGo肯定是會變得更強(qiáng)的。

所謂的0.1秒走一步,就是純粹用這樣的網(wǎng)絡(luò),下出有最高置信度的合法著法。這種做法一點(diǎn)也沒有做搜索,但是大局觀非常強(qiáng),不會陷入局部戰(zhàn)斗中,說它建模了“棋感”一點(diǎn)也沒有錯。我們把DarkForest的走棋網(wǎng)絡(luò)直接放上KGS就有3d的水平,讓所有人都驚嘆了下??梢哉f,這一波圍棋AI的突破,主要得益于走棋網(wǎng)絡(luò)的突破。這個在以前是不可想像的,以前用的是基于規(guī)則,或者基于局部形狀再加上簡單線性分類器訓(xùn)練的走子生成法,需要慢慢調(diào)參數(shù)年,才有進(jìn)步。

當(dāng)然,只用走棋網(wǎng)絡(luò)問題也很多,就我們在DarkForest上看到的來說,會不顧大小無謂爭劫,會無謂脫先,不顧局部死活,對殺出錯,等等。有點(diǎn)像高手不經(jīng)認(rèn)真思考的隨手棋。因?yàn)樽咂寰W(wǎng)絡(luò)沒有價(jià)值判斷功能,只是憑“直覺”在下棋,只有在加了搜索之后,電腦才有價(jià)值判斷的能力。

2. 快速走子

那有了走棋網(wǎng)絡(luò),為什么還要做快速走子呢?有兩個原因,首先走棋網(wǎng)絡(luò)的運(yùn)行速度是比較慢的,AlphaGo說是3毫秒,我們這里也差不多,而快速走子能做到幾微秒級別,差了1000倍。所以在走棋網(wǎng)絡(luò)沒有返回的時候讓CPU不閑著先搜索起來是很重要的,等到網(wǎng)絡(luò)返回更好的著法后,再更新對應(yīng)的著法信息。

其次,快速走子可以用來評估盤面。由于天文數(shù)字般的可能局面數(shù),圍棋的搜索是毫無希望走到底的,搜索到一定程度就要對現(xiàn)有局面做個估分。在沒有估值網(wǎng)絡(luò)的時候,不像國象可以通過算棋子的分?jǐn)?shù)來對盤面做比較精確的估值,圍棋盤面的估計(jì)得要通過模擬走子來進(jìn)行,從當(dāng)前盤面一路走到底,不考慮岔路地算出勝負(fù),然后把勝負(fù)值作為當(dāng)前盤面價(jià)值的一個估計(jì)。這里有個需要權(quán)衡的地方:在同等時間下,模擬走子的質(zhì)量高,單次估值精度高但走子速度慢;模擬走子速度快乃至使用隨機(jī)走子,雖然單次估值精度低,但可以多模擬幾次算平均值,效果未必不好。所以說,如果有一個質(zhì)量高又速度快的走子策略,那對于棋力的提高是非常有幫助的。

為了達(dá)到這個目標(biāo),神經(jīng)網(wǎng)絡(luò)的模型就顯得太慢,還是要用傳統(tǒng)的局部特征匹配(local pattern matching)加線性回歸(logistic regression)的方法,這辦法雖然不新但非常好使,幾乎所有的廣告推薦,競價(jià)排名,新聞排序,都是用的它。與更為傳統(tǒng)的基于規(guī)則的方案相比,它在吸納了眾多高手對局之后就具備了用梯度下降法自動調(diào)參的能力,所以性能提高起來會更快更省心。AlphaGo用這個辦法達(dá)到了2微秒的走子速度和24.2%的走子準(zhǔn)確率。24.2%的意思是說它的最好預(yù)測和圍棋高手的下子有0.242的概率是重合的,相比之下,走棋網(wǎng)絡(luò)在GPU上用2毫秒能達(dá)到57%的準(zhǔn)確率。這里,我們就看到了走子速度和精度的權(quán)衡。


和訓(xùn)練深度學(xué)習(xí)模型不同,快速走子用到了局部特征匹配,自然需要一些圍棋的領(lǐng)域知識來選擇局部特征。對此AlphaGo只提供了局部特征的數(shù)目(見Extended Table 4),而沒有說明特征的具體細(xì)節(jié)。我最近也實(shí)驗(yàn)了他們的辦法,達(dá)到了25.1%的準(zhǔn)確率和4-5微秒的走子速度,然而全系統(tǒng)整合下來并沒有復(fù)現(xiàn)他們的水平。我感覺上24.2%并不能完全概括他們快速走子的棋力,因?yàn)橹灰咤e關(guān)鍵的一步,局面判斷就完全錯誤了;而圖2(b)更能體現(xiàn)他們快速走子對盤面形勢估計(jì)的精確度,要能達(dá)到他們圖2(b)這樣的水準(zhǔn),比簡單地匹配24.2%要做更多的工作,而他們并未在文章中強(qiáng)調(diào)這一點(diǎn)。


在AlphaGo有了快速走子之后,不需要走棋網(wǎng)絡(luò)和估值網(wǎng)絡(luò),不借助任何深度學(xué)習(xí)和GPU的幫助,不使用增強(qiáng)學(xué)習(xí),在單機(jī)上就已經(jīng)達(dá)到了3d的水平(見Extended Table 7倒數(shù)第二行),這是相當(dāng)厲害的了。任何使用傳統(tǒng)方法在單機(jī)上達(dá)到這個水平的圍棋程序,都需要花費(fèi)數(shù)年的時間。在AlphaGo之前,Aja Huang曾經(jīng)自己寫過非常不錯的圍棋程序,在這方面相信是有很多的積累的。

3. 估值網(wǎng)絡(luò)


AlphaGo的估值網(wǎng)絡(luò)可以說是錦上添花的部分,從Fig 2(b)和Extended Table 7來看,沒有它AlphaGo也不會變得太弱,至少還是會在7d-8d的水平。少了估值網(wǎng)絡(luò),等級分少了480分,但是少了走棋網(wǎng)絡(luò),等級分就會少掉800至1000分。特別有意思的是,如果只用估值網(wǎng)絡(luò)來評估局面(2177),那其效果還不及只用快速走子(2416),只有將兩個合起來才有更大的提高。我的猜測是,估值網(wǎng)絡(luò)和快速走子對盤面估計(jì)是互補(bǔ)的,在棋局一開始時,大家下得比較和氣,估值網(wǎng)絡(luò)會比較重要;但在有復(fù)雜的死活或是對殺時,通過快速走子來估計(jì)盤面就變得更重要了??紤]到估值網(wǎng)絡(luò)是整個系統(tǒng)中最難訓(xùn)練的部分(需要三千萬局自我對局),我猜測它是最晚做出來并且最有可能能進(jìn)一步提高的。

關(guān)于估值網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)的生成,值得注意的是文章中的附錄小字部分。與走棋網(wǎng)絡(luò)不同,每一盤棋只取一個樣本來訓(xùn)練以避免過擬合,不然對同一對局而言輸入稍有不同而輸出都相同,對訓(xùn)練是非常不利的。這就是為什么需要三千萬局,而非三千萬個盤面的原因。對于每局自我對局,取樣本是很有講究的,先用SL network保證走棋的多樣性,然后隨機(jī)走子,取盤面,然后用更精確的RL network走到底以得到最正確的勝負(fù)估計(jì)。當(dāng)然這樣做的效果比用單一網(wǎng)絡(luò)相比好多少,我不好說。

一個讓我吃驚的地方是,他們完全沒有做任何局部死活/對殺分析,純粹是用暴力訓(xùn)練法訓(xùn)練出一個相當(dāng)不錯的估值網(wǎng)絡(luò)。這在一定程度上說明深度卷積網(wǎng)絡(luò)(DCNN)有自動將問題分解成子問題,并分別解決的能力。

另外,我猜測他們在取訓(xùn)練樣本時,判定最終勝負(fù)用的是中國規(guī)則。所以說三月和李世石對局的時候也要求用中國規(guī)則,不然如果換成別的規(guī)則,就需要重新訓(xùn)練估值網(wǎng)絡(luò)(雖然我估計(jì)結(jié)果差距不會太大)。至于為什么一開始就用的中國規(guī)則,我的猜測是編程非常方便(我在寫DarkForest的時候也是這樣覺得的)。

4. 蒙特卡羅樹搜索

這部分基本用的是傳統(tǒng)方法,沒有太多可以評論的,他們用的是帶先驗(yàn)的UCT,即先考慮DCNN認(rèn)為比較好的著法,然后等到每個著法探索次數(shù)多了,選擇更相信探索得來的勝率值。而DarkForest則直接選了DCNN推薦的前3或是前5的著法進(jìn)行搜索。我初步試驗(yàn)下來效果差不多,當(dāng)然他們的辦法更靈活些,在允許使用大量搜索次數(shù)的情況下,他們的辦法可以找到一些DCNN認(rèn)為不好但卻對局面至關(guān)重要的著法。

一個有趣的地方是在每次搜索到葉子節(jié)點(diǎn)時,沒有立即展開葉子節(jié)點(diǎn),而是等到訪問次數(shù)到達(dá)一定數(shù)目(40)才展開,這樣避免產(chǎn)生太多的分支,分散搜索的注意力,也能節(jié)省GPU的寶貴資源,同時在展開時,對葉節(jié)點(diǎn)的盤面估值會更準(zhǔn)確些。除此之外,他們也用了一些技巧,以在搜索一開始時,避免多個線程同時搜索一路變化,這部分我們在DarkForest中也注意到了,并且做了改進(jìn)。

5. 總結(jié)

總的來說,這整篇文章是一個系統(tǒng)性的工作,而不是一兩個小點(diǎn)有了突破就能達(dá)到的勝利。在成功背后,是作者們,特別是兩位第一作者David Silver和Aja Huang,在博士階段及畢業(yè)以后五年以上的積累,非一朝一夕所能完成的。他們能做出AlphaGo并享有現(xiàn)在的榮譽(yù),是實(shí)至名歸的。

從以上分析也可以看出,與之前的圍棋系統(tǒng)相比,AlphaGo較少依賴圍棋的領(lǐng)域知識,但還遠(yuǎn)未達(dá)到通用系統(tǒng)的程度。職業(yè)棋手可以在看過了寥寥幾局之后明白對手的風(fēng)格并采取相應(yīng)策略,一位資深游戲玩家也可以在玩一個新游戲幾次后很快上手,但到目前為止,人工智能系統(tǒng)要達(dá)到人類水平,還是需要大量樣本的訓(xùn)練的??梢哉f,沒有千年來眾多棋手在圍棋上的積累,就沒有圍棋AI的今天。

在AlphaGo中,增強(qiáng)學(xué)習(xí)(Reinforcement Learning)所扮演的角色并沒有想像中那么大。在理想情況下,我們希望人工智能系統(tǒng)能在對局中動態(tài)地適應(yīng)環(huán)境和對手的招式并且找到辦法反制之,但是在AlphaGo中增強(qiáng)學(xué)習(xí)更多地是用于提供更多質(zhì)量更好的樣本,給有監(jiān)督學(xué)習(xí)(Supervised Learning)以訓(xùn)練出更好的模型。在這方面增強(qiáng)學(xué)習(xí)還有很長的路要走。

另外,據(jù)他們的文章所言,AlphaGo整個系統(tǒng)在單機(jī)上已具有了職業(yè)水平,若是谷歌愿意開幾萬臺機(jī)器和李世石對決(這對它來說再容易不過了,改個參數(shù)就行),相信比賽會非常精彩。 

===========================

一些更新。

問題1:「Alphago的MCTS做rollout的時候,除了使用快速走子,還用了搜索樹的已有部分,看起來像是AMAF/RAVE反過來:AMAF是把快速走子的信息傳導(dǎo)到樹的其它無關(guān)部分,Alphago是把樹的其它無關(guān)部分拿來增強(qiáng)快速走子。我懷疑這是不是它棋力比其它DCNN+MCTS強(qiáng)的原因之一。」

這個辦法在解死活題的文章中出現(xiàn)過,會在一定程度上提高搜索效率,但是提高多少還不知道。

問題2:「rollout的走法質(zhì)量變好可能會導(dǎo)致棋力下降。」

這里要分兩種情況,tree policy和default policy。在AlphaGo的文章里面已經(jīng)說過了,tree policy的分布不能太尖,不然在搜索時太過重視一些看起來的好著,可能使得棋力下降。但是除了這種原因,一般來說tree policy變好棋力還是會變強(qiáng)的。default policy這邊,即(半)隨機(jī)走子到最后然后判分,就很復(fù)雜了,質(zhì)量變好未必對局面能估得更準(zhǔn)。default policy需要保證的是每塊棋的死活大體正確,不要把死的棋下成活的或者反之,而對大局觀的要求反而沒有那么高。雙方完全可以配合著把每塊棋下完,然后轉(zhuǎn)戰(zhàn)另一塊,而不是說搶在對方前去別處占先手。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }