DeepMind 研發的圍棋 AI AlphaGo 是如何下棋的?
看到了正在進行的圓桌對弈人工智慧,想邀請嘉賓來講講它的工作原理如何?其中應用了哪些技術?
相關問題:如何評價第二局比賽 AlphaGo 又一次戰勝李世石? - 人工智慧
人類有什麼破解的方法?本題已加入圓桌 ? 人機對弈終章,更多「AlphaGo(阿爾法圍棋)」相關的話題歡迎關注討論
我來貢獻一點乾貨和八卦~
AlphaGo的第一作者David Silver還在MIT做post-doc的時候(也有可能是visit?),曾經和我們組師兄合作利用機器學習和蒙特卡羅樹搜索玩《文明2》。當時也有不小的轟動:
有興趣的同學可以參考項目主頁和論文 [1][2]。可以翻牆youtube的同學還可以看到一段遊戲視頻。
作為其他答案的補充,下面淺顯地針對性地介紹一下蒙特卡羅樹搜索(MCTS)。
(***本文圖片來源DeepMind和師兄論文)
一、為什麼要用搜索?
-------
由於狀態數有限和不存在隨機性,象棋和五子棋這類遊戲理論上可以由終局自底向上的推算出每一個局面的勝負情況,從而得到最優策略。例如五子棋就被驗證為先手必勝 [3] 。
遺憾的是,由於大部分博弈遊戲狀態空間巨大(圍棋約為),嚴格計算評估函數是辦不到的。於是人們設計了 (啟發式的) 搜索演算法,一句話概括如下:由當前局面開始,嘗試看起來可靠的行動,達到終局或一定步數後停止,根據後續局面的優劣反饋,選擇最優行動。通俗的說就是「手下一著子,心想三步棋」、「三思而後行」的意思。
二、哪些是「看起來可靠」的行動?怎麼評價局面的優劣?
-------
這裡就要引入遊戲論和強化學習裡面的概念了。在數學上,「最優策略」和「局面判斷」可以被量化成為函數,。這裡表示局面狀態,表示下一步(走子)行動。在強化學習里,兩者被稱為 策略函數(policy function) 和 局面函數(value function),前者衡量在局面下執行能帶來的價值,後者衡量某一局面的價值,越大的值表示對當前行動的選手越有利。
Q和V函數是對我們所謂的「棋感」和「大局觀」的量化。有了這兩個估值函數,在搜索的時候我們盡量選擇估值更大的行動,達到縮小思考範圍(減少搜索分支)的目的。同時即使在未達到終局的情況下,我們也可以依靠局面函數對當前局勢優劣做判斷。
那麼如何得到精確的估值函數就很重要了。由於不能通過枚舉狀態空間來精確計算Q和V,傳統的做法是人為的設計估值。例如五子棋的局面可以依靠計算「三連」、「四連」等特徵的數量乘以相應的分值來估算。這裡就涉及到識別特徵和衡量特徵分值兩個問題。對於更加複雜的遊戲(例如文明、圍棋等),現代的做法是利用機器學習和大量數據,自動的找到特徵,同時擬合出估值函數。AlphaGo利用深度學習達到了該目的。
三、蒙特卡洛樹搜索(MCTS)
-------
蒙特卡洛樹搜索是集以上技術於一身的搜索框架,通過反覆模擬和採樣對局過程(稱為Rollout)來探索狀態空間。可以看出它的特點是非常容易並行、可任何時候停止(時間和收益上的平衡)、引入了隨機性採樣而減小估值錯誤帶來的負面影響,並且可以在隨機探索的過程中,結合強化學習(Reinforcement Learning),「自學」式的調整估值函數,讓演算法越來越聰明。直觀一點的圖示如下:
(a) 從當前狀態(帶有隨機性)的模擬對局,該過程可以並行:
(b) 通過採樣和估值結果,選擇最優行動,並重複執行這個過程:
(c) 如果選擇強化學習,則根據結果更新估值函數的參數
有興趣的同學可以閱讀AlphaGo或其他相關論文。
四、總結
-------
- 蒙特卡洛樹搜索 (MCTS) 是大框架,是許多牛逼博弈AI都會採用的演算法
- 強化學習 (RL) 是學習方法,用來提升AI的實力
- 深度神經網路 (DNN) 是工具,用來擬合局面評估函數和策略函數
這些都不是AlphaGo或者DeepMind團隊首創的技術。但是強大的團隊將這些結合在一起,配合Google公司強大的計算資源,成就了歷史性的飛躍。
一些個人見解:MCTS 、RL 和 DNN這三者,前兩者讓具有自學能力、並行的博弈演算法成為可能,後者讓「量化評估圍棋局面」成為了可能(這個@田淵棟大神的帖子里已經解釋了)。
對於AlphaGo來說,這每一個模塊都是必要的,DeepMind論文中已經展示了各個模塊對於棋力的影響:
五、RL / MCTS 的其他應用
-------
除了最開始提到的《文明2》遊戲和圍棋,MCTS和RL還可以應用到各種博弈、遊戲場景下。因為評論里有不少討論,這裡增加幾個有意思的乾貨:
- Flappy Bird:不知道大家還記不記得這個曾近很火的讓人抓狂的遊戲,有人利用強化學習讓AI 從0 進化到了100多分: Flappy Bird RL by SarvagyaVaish
- 星際母巢之戰AI:Berkeley Overmind,曾經得過AI比賽冠軍。飛龍甩得飛起 (主頁有youtube視頻,需翻牆)[4]
- 紅白機遊戲:DeepMind在圍棋之前利用RL和DNN玩紅白機小遊戲,同樣在《自然》雜誌上發表 [5]。GitHub主頁
其他小八卦
- 作為論文第一作者的David Silver,整個Phd都投身在了蒙特卡羅搜索、計算機圍棋和強化學習的領域。十年磨一劍。AlphaGo的成功離不開團隊和個人兢兢業業的努力。
- 據說DeepMind CEO Hassabis 和 David是一對大學時期的好基友?David也是因為Hassabis教他圍棋而入了這個坑..(?)
參考文獻
-------
[1] Learning to Win by Reading Manuals in a Monte-Carlo Framework
[2] http://www.jair.org/media/3484/live-3484-6254-jair.pdf
[3] wikipedia.org 的頁面
[4] http://nlp.cs.berkeley.edu/pubs/Burkett-Hall-Klein_2011_IMBA_paper.pdf
[5] http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html
左右互搏,青出於藍而勝於藍?
—阿爾法狗原理解析
這些天都在沒日沒夜地關注一個話題,谷歌人工智慧程序AlphaGo(國內網友親切地稱為「阿爾法狗」)以5:0擊敗歐洲職業圍棋冠軍樊麾二段,並在和世界冠軍的比賽中2:0領先。
什麼!!
19年前計算機擊敗國際象棋冠軍卡斯帕羅夫的情景還歷歷在目,現在計算機又要來攻克圍棋了嗎!?
虛竹在天龍八部里自填一子,無意中以「自殺」破解「珍籠」棋局,逍遙子方才親傳掌門之位。難道以後「阿爾法狗」要出任逍遙派掌門了?
1933年,東渡日本19歲的吳清源迎戰當時的日本棋壇霸主、已經60歲的本因坊秀哉,開局三招即是日本人從未見過的三三、星、天元布陣,快速進擊逼得對方連連暫停「打卦」和弟子商量應對之策。隨後以「新布局」開創棋壇新紀元。難道阿爾法狗會再造一個「新新布局」?
作為一個關心人工智慧和人類命運的理科生,近些天刷了好些報道,記者們說「阿爾法狗是個『價值神經網路』和『策略神經網』絡綜合蒙特卡洛搜索樹的程序」,但我覺得光知道這些概念是不夠的。我想看看「阿爾法狗」的廬山真面目。
準備好棋盤和腦容量,一起來探索吧?
圍棋棋盤是19x19路,所以一共是361個交叉點,每個交叉點有三種狀態,可以用1表示黑子,-1表示白字,0表示無子,考慮到每個位置還可能有落子的時間、這個位置的氣等其他信息,我們可以用一個361 * n維的向量來表示一個棋盤的狀態。我們把一個棋盤狀態向量記為s。
當狀態s下,我們暫時不考慮無法落子的地方,可供下一步落子的空間也是361個。我們把下一步的落子的行動也用361維的向量來表示,記為a。
這樣,設計一個圍棋人工智慧的程序,就轉換成為了,任意給定一個s狀態,尋找最好的應對策略a,讓你的程序按照這個策略走,最後獲得棋盤上最大的地盤。
如果你想要設計一個特別牛逼驚世駭俗的圍棋程序,你會從哪裡開始呢?對於在谷歌DeepMind工作的黃士傑和他的小夥伴而言,第一招是:
「深度卷積神經網路」
深度卷積神經網路早在98年就攻克了手寫數字識別,近些年在人臉識別、圖像分類、天氣預報等領域無往而不利,接連達到或超過人類的水平,是深度學習火遍大江南北的急先鋒。我們現在看到的Picasa照片自動分類,Facebook照片識別好友,以及彩雲小譯同聲傳譯(軟廣出現,不要打我)都是此技術的應用。這等天賜寶物,如果可以用來下圍棋,豈不是狂拽酷炫吊炸天?
所以2015年黃士傑發表在ICLR的論文[3]一上來就使出了「深度神經網路」的殺招,從網上的圍棋對戰平台KGS(外國的qq遊戲大廳)可以獲得人類選手的圍棋對弈的棋局。觀察這些棋局,每一個狀態s,都會有一個人類做出的落子a,這不是天然的訓練樣本&嗎?如此可以得到3000萬個樣本。我們再把s看做一個19x19的二維圖像(具體是19x19 x n,n是表示一些其他feature),輸入一個卷積神經網路進行分類,分類的目標就是落子向量a』,不斷訓練網路,儘可能讓計算機得到的a』接近人類高手的落子結果a,不就得到了一個模擬人類棋手下圍棋的神經網路了嗎?
於是我們得到了一個可以模擬人類棋手的策略函數P_human,給定某個棋局狀態s,它可以計算出人類選手可能在棋盤上落子的概率分布a = P_human(s),如下圖:
紅圈就是P_human覺得最好的落子方案。每一步都選擇概率最高的落子,對方對子後再重新計算一遍,如此往複就可以得到一個棋風類似人類的圍棋程序。
這個基於「狂拽酷炫」深度學習的方案棋力如何呢?
不咋地。黃士傑說P_human已經可以和業餘6段左右的人類選手過招,互有勝負,但還未能超過當時最強的電腦程序CrazyStone[1,5],距離人類頂尖玩家就差得更遠了。
所以,為求更進一步,黃士傑打算把P_human和CrazyStone的演算法結合一下,師夷長技以制夷,先擊敗所有的其他圍棋AI再說。
等等,CrazyStone的演算法是什麼?
哦,那個演算法是黃士傑的老師Remi Coulum在2006年對圍棋AI做出的另一個重大突破:
「MCTS,蒙特卡洛搜索樹」
蒙特卡洛搜索樹(Monte-Carlo Tree Search)是一種「大智若愚」的方法。面對一個空白棋盤S0,黃士傑的老師Coulum最初對圍棋一無所知,便假設所有落子方法分值都相等,設為1。然後扔了一個骰子,從361種落子方法中隨機選擇一個走法a0。Coulum想像自己落子之後,棋盤狀態變成S1,然後繼續假設對手也和自己一樣二逼,對方也扔了一個篩子,隨便瞎走了一步,這時棋盤狀態變成S2,於是這兩個二逼青年一直扔骰子下棋,一路走到Sn,最後肯定也能分出一個勝負r,贏了就r記為1,輸了則為0,假設這第一次r=1。這樣Coulum便算是在心中模擬了完整的一盤圍棋。
Coulum心想,這樣隨機扔骰子也能贏?運氣不錯啊,那把剛才那個落子方法(S0,a0)記下來,分值提高一些:
- 新分數= 初始分+ r
我剛才從(S0, a0)開始模擬贏了一次,r=1,那麼新分數=2,除了第一步,後面幾步運氣也不錯,那我把這些隨機出的局面所對應落子方法(Si,ai)的分數都設為2吧。然後Coulum開始做第二次模擬,這次扔骰子的時候Coulum對圍棋已經不是一無所知了,但也知道的不是太多,所以這次除(S0, a0)的分值是2之外,其他落子方法的分數還是1。再次選擇a0的概率要比其他方法高一點點。
那位假想中的二逼對手也用同樣的方法更新了自己的新分數,他會選擇一個a1作為應對。如法炮製,Coulum又和想像中的對手又下了一盤稍微不那麼二逼的棋,結果他又贏了,Coulum於是繼續調整他的模擬路徑上相應的分數,把它們都+1。隨著想像中的棋局下得越來越多,那些看起來不錯的落子方案的分數就會越來越高,而這些落子方案越是有前途,就會被更多的選中進行推演,於是最有「前途」的落子方法就會「湧現」出來。
最後,Coulum在想像中下完10萬盤棋之後,選擇他推演過次數最多的那個方案落子,而這時,Coulum才真正下了第一步棋。
蒙特卡洛搜索樹華麗轉身為相當深刻的方法,可以看到它有兩個很有意思的特點:
1)沒有任何人工的feature,完全依靠規則本身,通過不斷想像自對弈來提高能力。這和深藍戰勝卡斯帕羅夫完全不同,深藍包含了很多人工設計的規則。MCTS靠的是一種類似遺傳演算法的自我進化,讓靠譜的方法自我湧現出來。讓我想起了卡爾文在《大腦如何思維》中說的思維的達爾文主義[6]。
2)MCTS可以連續運行,在對手思考對策的同時自己也可以思考對策。Coulum下完第一步之後,完全不必要停下,可以繼續進行想像中的對弈,直到對手落子。Coulum隨後從對手落子之後的狀態開始計算,但是之前的想像中的對弈完全可以保留,因為對手的落子完全可能出現在之前想像中的對弈中,所以之前的計算是有用的。這就像人在進行對弈的時候,可以不斷思考,不會因為等待對手行動而中斷。這一點Coulum的程序非常像人,酷斃了。
但黃士傑很快意識到他老師的程序仍然有局限:初始策略太簡單。我們需要更高效地扔骰子。
如何更高效的扔骰子呢?
用P_human()來扔。
黃士傑改進了MCTS,一上來不再是二逼青年隨機擲骰子,而是先根據P_human的計算結果來得到a可能的概率分布,以這個概率來挑選下一步的動作。一次棋局下完之後,新分數按照如下方式更新:
- 新分數= 調整後的初始分+ 通過模擬得到的贏棋概率
如果某一步被隨機到很多次,就應該主要依據模擬得到的概率而非P_human。
所以P_human的初始分會被打個折扣:
- 調整後的初始分= P_human/(被隨機到的次數+ 1)
這樣就既可以用P_human快速定位比較好的落子方案,又給了其他位置一定的概率。看起來很美,然後實際操作中卻發現:「然並卵」。因為,P_human()計算太慢了。
一次P_human()計算需要3ms,相對於原來隨機扔骰子不到1us,慢了3000倍。如果不能快速模擬對局,就找不到妙招,棋力就不能提高。所以,黃士傑訓練了一個簡化版的P_human_fast(),把神經網路層數、輸入特徵都減少,耗時下降到了2us,基本滿足了要求。先以P_human()來開局,走前面大概20多步,後面再使用P_human_fast()快速走到最後。兼顧了準確度和效率。
這樣便綜合了深度神經網路和MCTS兩種方案,此時黃士傑的圍棋程序已經可以戰勝所有其他電腦,雖然距離人類職業選手仍有不小的差距,但他在2015年那篇論文的最後部分信心滿滿的表示:「我們圍棋軟體所使用的神經網路和蒙特卡洛方法都可以隨著訓練集的增長和計算力的加強(比如增加CPU數)而同步增強,我們正前進在正確的道路上。」
看樣子,下一步的突破很快就將到來。同年2月,黃士傑在Deepmind的同事在頂級學術期刊nature上發表了「用神經網路打遊戲」的文章[2]。這篇神作,為進一步提高MCTS的棋力,指明了前進的新方向:
「左右互搏,自我進化」
紅白機很多人小時候都玩過,你能都打通嗎?黃士傑的同事通過「強化學習」方法訓練的程序在類似紅白機的遊戲機上打通了200多個遊戲,大多數得分都比人類還好。
「強化學習」是一類機器學習方法,Agent通過和環境s的交互,選擇下一步的動作a,這個動作會影響環境s,給Agent一個reward,Agent然後繼續和環境交互。遊戲結束的時候,Agent得到一個最後總分r。這時我們把之前的環境狀態s、動作a匹配起來就得到了一系列&,設定目標為最後的總得分r,我們可以訓練一個神經網路去擬合在狀態s下,做動作a的總得分。下一次玩遊戲的時候,我們就可以根據當前狀態s,去選擇最後總得分最大的動作a。通過不斷玩遊戲,我們對&下總得分的估計就會越來越準確,遊戲也玩兒得越來越好。
打磚塊遊戲有一個秘訣:把球打到牆的後面去,球就會自己反彈得分。強化學習的程序在玩了600盤以後,學到這個秘訣:球快要把牆打穿的時候評價函數v的分值就會急劇上升。
黃士傑考慮給圍棋也設計一個評價函數v(s),在P_human()想像自己開局走了20多步之後,不需要搜索到底,如果有一個v(s)可以直接判斷是否能贏,得到最後的結果r,這樣肯定能進一步增加MCTS的威力。
黃士傑已經有了國外的qq遊戲大廳KGS上的對局,但是很遺憾這些對局數量不夠,不足以得到局面評價函數v。但是沒關係,我們還可以左右互搏自對弈創造新的對局。
機器學習的開山鼻祖Samuel早在1967年就用自對弈的方法來學習國際跳棋[7],而之前的蒙特卡洛搜索樹也是一個自對弈的過程。但是現在黃士傑不僅有一個從人類對弈中學習出的P_human這樣一個高起點,而且有一個神經網路可以從對弈樣本中學習,有理由相信這次會有更好的結果。
先用P_human和P_human對弈,比如1萬局,就得到了一萬個新棋譜,加入到訓練集當中,訓練出P_human_1(網友@一小卒 指出,此時訓練方法和之前稍有不同,P_human只是儘可能的模仿人類高手下棋,而不區分每一步棋是好棋還是壞棋。但這時的訓練還考慮了最終勝負。P_human和P_human對弈之後,記錄下狀態s、下一步落子位置a、以及最終勝負情況z,得到一個訓練數據(s,a,z)。如果z=1, 表示我方贏棋,則儘可能模仿此時自我對弈中的下棋位置;反之則儘可能避免選擇自我對弈中的下棋位置。)。然後再讓P_human_1和P_human_1對局,得到另外一萬個新棋譜,這樣可以訓練出P_human_2,如此往複,可以得到P_human_n。P_human_n得到了最多的訓練,棋力理應比原來更強。我們給最後這個策略起一個新名字:P_human_plus。這時,再讓P_human_plus和P_human對局,在不用任何搜索的情況下勝率可達80%,不加任何搜索策略的P_human_plus和開源的MCTS相比也有85%的勝率。自對弈方法奏效了。
既然P_human_plus這麼強,我們先代入到MCTS中試試,用P_human_plus來開局,剩下的用P_human_fast。可惜,這樣的方法棋力反而不如用P_human。黃士傑認為是因為P_human_plus走棋的路數太集中,而MCTS需要發散出更多的選擇才好。看來,P_human_plus練功還是太死板,還沒有進入無招勝有招的境界。
沒關係,黃士傑還有局面評價函數v(s)這一招,有了v(s),如果我可以一眼就看到「黑棋大勢已去」,我就不用MCTS在想像中自我對弈了。但考慮到P_human_plus的招法太過集中,黃士傑在訓練v( )的時候,開局還是先用P_human走L步,這樣有利於生成更多局面。黃士傑覺得局面還不夠多樣化,為了進一步擴大搜索空間,在L+1步的時候,乾脆完全隨機擲一次骰子,記下這個狀態SL+1,然後後面再用P_human_plus來對弈,直到結束獲得結果r。如此不斷對弈,由於L也是一個隨機數,我們就得到了開局、中盤、官子不同階段的很多局面s,和這些局面對應的結果r。有了這些訓練樣本&,還是使用神經網路,把最後一層的目標改成回歸而非分類,黃士傑就可以得到一個v( )函數,輸出贏棋的概率。
v( )可以給出下一步落子在棋盤上任意位置之後,如果雙方都使用P_human_plus來走棋,我方贏棋的概率。如果訓練v()的時候全部都使用P_human不用P_human_plus呢?實驗表明基於P_human_plus訓練的v,比基於P_human訓練的v』,棋力更強。強化學習確實有效。
萬事俱備,只欠東風。準備好P_human(),MCTS,以及評價函數v(),黃士傑和小夥伴們繼續進擊,向著可以和人類專業選手過招的圍棋AI前進:
「阿爾法狗」
黃士傑準備在MCTS框架之上融合局面評估函數v()。這次還是用P_human作為初始分開局,每局選擇分數最高的方案落子,下到第L步之後,改用P_human_fast把剩下的棋局走完,同時調用v(SL),評估局面的獲勝概率。然後按照如下規則更新整個樹的分數:
- 新分數= 調整後的初始分+ 0.5 * 通過模擬得到的贏棋概率 + 0.5 * 局面評估分
前兩項和原來一樣,如果待更新的節點就是葉子節點,那局面評估分就是v(SL)。如果是待更新的節點是上級節點,局面評估分是該節點所有葉子節點v()的平均值。
如果v()表示大局觀,「P_human_fast模擬對局」表示快速驗算,那麼上面的方法就是大局觀和快速模擬驗算並重。如果你不服,非要做一個0.5: 0.5之外的權重,黃士傑團隊已經實驗了目前的程序對陣其他權重有95%的勝率。
以上,便是阿爾法狗的廬山真面目。
上圖演示了阿爾法狗和樊麾對弈時的計算過程,阿爾法狗執黑,紅圈是阿爾法狗實際落子的地方。1、2、3和後面的數字表示他想像中的之後雙方下一步落子的地方。白色方框是樊麾的實際落子。在復盤時,樊麾覺得位置1的走法更好。
深度學習、蒙特卡洛搜索樹,自我進化三招齊出,所有其他圍棋ai都毫無還手之力。99%的勝率不說,「阿爾法狗」還可以在讓四子的情況下以77%的勝率擊敗crazystone。「阿爾法狗」利用超過170個GPU,粗略估算超過800萬核並行計算,不僅有前期訓練過程中模仿人類,自我對弈不斷進化,還有實戰時的模擬對局可以實時進化,已經把現有方法發揮到了極限,是目前人工智慧領域絕對的巔峰之作。
後記
圍棋是NP-hard問題,如果用一個原子來存儲圍棋可能的狀態,把全宇宙的原子加起來都不夠儲存所有的狀態。於是我們把這樣的問題轉換為尋找一個函數P,當狀態為S時,計算最優的落子方案a = P(s)。我們看到,無論是「狂拽酷炫」的深度學習,還是「大智若愚」的MCTS,都是對P(s)的越來越精確的估計,但即使引入了「左右互搏」來強化學習,黃士傑和團隊仍然做了大量的細節工作。所以只有一步一個腳印,面對挑戰不斷拆解,用耐心與細心,還有辛勤的汗水,才能取得一點又一點的進步,而這些進步積累在一起,終於讓計算機達到並超過了人類職業選手的水平。
因為一盤棋走一步需要3ms(P_human_plus遍歷整個棋盤的時間),谷歌用大規模集群進行並行化計算,自我對弈3000萬盤棋生成訓練集只需要一天左右的時間[4],所以如果對弈更多棋局可以提高棋力的話,黃士傑他們早就做了。目前的方案可能已經達到了CNN網路能力的極限。完整的阿爾法狗不僅需要生成訓練集,還要用訓練集來生成局面評估函數v(),而這還使用了兩周時間,一局比賽需要花掉4個小時,自我對局速度不夠快,這也許是阿爾法狗並沒有能夠完全使用強化學習,而僅僅是在整個過程的一小部分使用左右互搏的原因。左右互博用的還不夠多,這是一個遺憾。
如果存在一個「圍棋之神」,一個已經窮盡了所有的圍棋步法的「上帝」,那他每一步都是最優應對。一些頂尖棋手在接受採訪時表示[8],「圍棋之神」對戰人類選手可能還有讓4子的空間,也就是說,就算下贏了人類,計算機也還有很大進步的空間。
面對一個如此高難度的問題,計算機和人類都無法在有限時間內找到完全的規律(柯潔和李世乭比賽是一人有3小時時間思考,阿爾法狗今年3月和李世乭進行的比賽則是每人2小時)。計算機和人都是在對問題做抽象,然後搜索最佳策略。要下好圍棋所需要的能力已經接近人類智力的極限:要有大局觀、要懂得取捨、還要會精打細算,治理一個國家也不過如此。計算機可以學會圍棋,就能學會很多一樣難度的技能。在未來,也許圍棋、自動駕駛、同聲傳譯(「彩雲小譯」已經開始公測,歡迎體驗)都會被一一攻克。甚至在數論、量子場論等領域,深度學習和搜索相結合,可能也會帶給我們更多驚喜,比如攻克「哥德巴赫猜想」。
那麼,人工智慧是否真的會很快登頂呢?
雖然在智力方面AI有希望登峰造極,但高智商只是人類眾多能力的一個方面。吳清源先生在方寸之間縱橫無敵,但仍然漂泊一生,被命運推著前進。早年他做段祺瑞的門客,棋盤上把段祺瑞打的落花流水,弄得下人都沒有早飯吃;後來東渡日本,三易國籍,留下許多遺憾。如果把「強人工智慧」比作一個天才少年,雖然智商爆表,但其他方面還需要我們悉心加以引導。創造出「德才兼備,匡扶濟世」的人工智慧,才是我輩真正應該努力實現的目標。
一起加油吧,科學少年們!
To the infinity and beyond !
參考文獻:
1, EfficientSelectivity and Backup Operators in Monte-Carlo Tree Search
2, Human-level control through deep reinforcementlearning
3, Move Evaluation In GO Using Deep Convolutional Neural Networks
4. Masteringthe Game of Go with Deep Neural Networks and Tree Search
5. A Survey ofMonte Carlo Tree Search Methods
6. 大腦如何思維—智力演化的今昔
7. Some Studies in Machine LearningUsing the Game of Checkers.II-Recent Progress
8.圍棋之神存在的話,可以讓你几子?
-------------------------------------
以上這篇文章是我在1月28日nature論文基礎上對alpha go的理解,現在又過了5個月,並且alpha go已經擊敗了李世石,我猜測其工作原理會有較大改進,如果有時間,我會貼出我覺得它可能的改進方向。
歡迎轉載,請保留作者信息。
最後的最後,允許插播我司的廣告一則:
———————————————————-
彩雲天氣正在招聘中(前端、後端、運營),我們在毗鄰皇家園林的兩層別墅式公寓辦公,有鋼琴和溫水泳池。需要你的幫助,我們才能每天穩定快速的計算出上億次天氣預報,用人工智慧幫到更多普通大眾。
谷歌DeepMind宣布他們研發的神經網路圍棋AI,AlphaGo,在2015年10月首次5:0戰勝了人類職業選手歐洲圍棋冠軍Fan Hui二段。這篇論文由David Silver等完成。裡面的技術是出於意料的簡單卻又強大。為了方便不熟悉技術的小白理解,這裡是我對系統工作原理的解讀。下面主要編譯與:How AlphaGo Works ,原作者是SpinPunch CTO DAN MAAS。本文首發微信公眾號「董老師在矽谷」(donglaoshi-123)
深度學習
「深度學習」是指多層的人工神經網路和訓練它的方法。一層神經網路把大量矩陣數據作為輸入,通過非線性激活方法取權重,再產生另一個數據集合作為輸出。這就像生物神經大腦的工作機理一樣,通過合適的矩陣數量,多層組織鏈接一起,形成神經網路「大腦」進行精準複雜的處理,就像人們識別物體標註圖片一樣。
雖然神經網路在幾十年前就有了,直到最近才形勢明朗。這是因為他們需要大量的「訓練」去發現矩陣中的數字價值。對早期研究者來說,想要獲得不錯效果的最小量訓練都遠遠超過計算能力和能提供的數據的大小。但最近幾年,一些能獲取海量資源的團隊重現挖掘神經網路,就是通過「大數據」技術來高效訓練。
兩個大腦
AlphaGo是通過兩個不同神經網路「大腦」合作來改進下棋。這些大腦是多層神經網路跟那些Google圖片搜索引擎識別圖片在結構上是相似的。它們從多層啟發式二維過濾器開始,去處理圍棋棋盤的定位,就像圖片分類器網路處理圖片一樣。經過過濾,13 個完全連接的神經網路層產生對它們看到的局面判斷。這些層能夠做分類和邏輯推理。
這些網路通過反覆訓練來檢查結果,再去校對調整參數,去讓下次執行更好。這個處理器有大量的隨機性元素,所以我們是不可能精確知道網路是如何「思考」的,但更多的訓練後能讓它進化到更好。
第一大腦: 落子選擇器 (Move Picker)
AlphaGo的第一個神經網路大腦是「監督學習的策略網路(Policy Network)」 ,觀察棋盤布局企圖找到最佳的下一步。事實上,它預測每一個合法下一步的最佳概率,那麼最前面猜測的就是那個概率最高的。你可以理解成「落子選擇器」。
落子選擇器是怎麼看到棋盤的?數字表示最強人類選手會下在哪些地方的可能。
團隊通過在KGS(網路圍棋對戰平台)上最強人類對手,百萬級的對弈落子去訓練大腦。這就是AlphaGo最像人的地方,目標是去學習那些頂尖高手的妙手。這個不是為了去下贏,而是去找一個跟人類高手同樣的下一步落子。AlphaGo落子選擇器能正確符合57%的人類高手。(不符合的不是意味著錯誤,有可能人類自己犯的失誤)
更強的落子選擇器
AlphaGo系統其實需要兩個額外落子選擇器「大腦」。一個是「強化學習的策略網路(Policy Network)」,通過百萬級別模擬對局來完成。姑且稱之為更強的選擇器。對比基本的訓練,那只是教網路去模仿單一的人類落子,高級訓練會與每一個模擬棋局下到底,教網路最可能贏的下一手。Sliver團隊通過更強的落子選擇器總結了百萬級訓練棋局,比他們之前版本又更新改進了不少。
如果就只用這種落子選擇器已經是強大的對手了,可以到業餘棋手的水平,或者說跟之前最強的圍棋AI媲美。這裡重點是這種落子選擇器不會去「讀」。它就是簡單審視從單一棋盤位置,再提出從那個位置分析出來的落子。它不會去模擬任何未來的走法,展示了樸素的深度神經網路學習的力量。
更快的落子選擇器
AlphaGo當然團隊沒有在這裡止步。下面我會闡述是如何將閱讀能力賦予AI的。為了做到這一點,他們需要更快版本的落子選擇器大腦。越強的版本在耗時上越久-為了產生一個不錯的落子也足夠快了,但「閱讀結構」需要去檢查幾千種落子可能性才能做決定。
Silver團隊建立簡單的落子選擇器去做出「快速閱讀」的版本,他們稱之為「滾動網路」。簡單版本是不會看整個19*19的棋盤,但會在對手之前下的和新下的棋子中考慮,觀察一個更小的窗口。去掉部分落子選擇器大腦會損失一些實力,但輕量級版本能夠比之前快1000倍,這讓「閱讀結構」成了可能。
第二大腦:棋局評估器 (Position Evaluator)
AlphaGo的第二個大腦相對於落子選擇器是回答另一個問題。不是去猜測具體下一步,它預測每一個棋手贏棋的可能,在給定棋子位置情況下。這「局面評估器」就是論文中提到的「價值網路(Value Network)」,通過整體局面判斷來輔助落子選擇器。這個判斷僅僅是大概的,但對於閱讀速度提高很有幫助。通過分類潛在的未來局面的「好」與「壞」,AlphaGo能夠決定是否通過特殊變種去深入閱讀。如果局面評估器說這個特殊變種不行,那麼AI就跳過閱讀在這一條線上的任何更多落子。
局面評估器是怎麼看這個棋盤的。深藍色表示下一步有利於贏棋的位置。
局面評估器也通過百萬級別的棋局做訓練。Silver團隊通過 複製兩個AlphaGo的最強落子選擇器,精心挑選隨機樣本創造了這些局面。這裡AI 落子選擇器在高效創建大規模數據集去訓練局面評估器是非常有價值的。這種落子選擇器讓大家去模擬繼續往下走的很多可能,從任意給定棋盤局面去猜測大致的雙方贏棋概率。而人類的棋局還不夠多恐怕難以完成這種訓練。
增加閱讀
這裡做了三個版本的落子選擇大腦,加上局面評估大腦,AlphaGo可以有效去閱讀未來走法和步驟了。閱讀跟大多數圍棋AI一樣,通過蒙特卡洛樹搜索(MCTS)演算法來完成。但AlphaGo 比其他AI都要聰明,能夠更加智能的猜測哪個變種去探測,需要多深去探測。
蒙特卡洛樹搜索演算法
如果擁有無限的計算能力,MCTS可以理論上去計算最佳落子通過探索每一局的可能步驟。但未來走法的搜索空間對於圍棋來說太大了(大到比我們認知宇宙里的粒子還多),實際上AI沒有辦法探索每一個可能的變種。MCTS做法比其他AI有多好的原因是在識別有利的變種,這樣可以跳過一些不利的。
Silver團隊讓AlphaGo裝上MCTS系統的模塊,這種框架讓設計者去嵌入不同的功能去評估變種。最後馬力全開的AlphaGo系統按如下方式使用了所有這些大腦。
1. 從當前的棋盤布局,選擇哪些下一步的可能性。他們用基礎的落子選擇器大腦(他們嘗試使用更強的版本,但事實上讓AlphaGo更弱,因為這沒有讓MCTS提供更廣闊的選擇空間)。它集中在「明顯最好」的落子而不是閱讀很多,而不是再去選擇也許對後來有利的下法。
2. 對於每一個可能的落子,評估質量有兩種方式:要麼用棋盤上局面評估器在落子後,要麼運行更深入蒙特卡羅模擬器(滾動)去思考未來的落子,使用快速閱讀的落子選擇器去提高搜索速度。AlphaGo使用簡單參數,「混合相關係數」,將每一個猜測取權重。最大馬力的AlphaGo使用 50/50的混合比,使用局面評估器和模擬化滾動去做平衡判斷。
這篇論文包含一個隨著他們使用插件的不同,AlphaGo的能力變化和上述步驟的模擬。僅使用獨立大腦,AlphaGo跟最好的計算機圍棋AI差不多強,但當使用這些綜合手段,就可能到達職業人類選手水平。
AlphaGo的能力變化與MCTS的插件是否使用有關。
這篇論文還詳細講了一些工程優化:分散式計算,網路計算機去提升MCTS速度,但這些都沒有改變基礎演算法。這些演算法部中分精確,部分近似。在特別情況下,AlphaGo通過更強的計算能力變的更強,但計算單元的提升率隨著性能變強而減緩。
優勢和劣勢
我認為AlphaGo在小規模戰術上會非常厲害。它知道通過很多位置和類型找到人類最好的下法,所以不會在給定小範圍的戰術條件下犯明顯錯誤。
但是,AlphaGo有個弱點在全局判斷上。它看到棋盤式通過5*5金字塔似的過濾,這樣對於集成戰術小塊變成戰略整體上帶來麻煩,同樣道理,圖片分類神經網路往往對包含一個東西和另一個的搞不清。比如說圍棋在角落上一個定式造成一個牆或者引征,這會劇烈改變另一個角上的位置估值。
就像其他的基於MCTS的AI, AlphaGo對於需要很深入閱讀才能解決的大勢判斷上,還是麻煩重重的,比如說大龍生死劫。AlphaGo 對一些故意看起來正常的局也會失去判斷,天元開盤或者少見的定式,因為很多訓練是基於人類的棋局庫。
我還是很期待看到AlphaGo和李世石9段的對決!我預測是:如果李使用定式,就像跟其他職業棋手的對決,他可能會輸,但如果他讓AlphaGo陷入到不熟悉情形下,他可能就贏。
參考資料:
Nature 論文:http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html
關於 AlphaGo 論文的閱讀筆記_36氪
--------------------
報名翻譯:科技閱讀列表全集[600篇]關注如下我的微信公眾號「董老師在矽谷」,關注矽谷趨勢,一起學習成長。
http://weixin.qq.com/r/tUx-Z5TEQMk-rdAE9xmn (二維碼自動識別)
AlphaGo贏了,擔心找不到工作,嚇得趕緊去讀了nature的論文。
Background:
首先一切機器學習都是存在y=f(x),給了大量的x和y,來學習這個f的過程,就叫做訓練。輸出y是自己規定的,可以取一個值或者一個矩陣。AlphaGo也是這個過程。
其他答主提到的policy network和value network實際上都是卷積神經網路,根據這裡功能不同起了不同的名字。那麼什麼是卷積神經網路呢?
上面是最早的卷積神經網路LeNet5,多用來處理圖片等,用一層一層的濾波器處理最後得到輸出,這裡也是把圍棋棋盤當作圖片來處理的。
------------------------------------------
正文:
根據文章里所說,阿法狗的訓練分為3步:
1)使用監督學習的方法訓練一個policy network,記為,同時做一個簡化版,記為
2)使用強化學習(RL)繼續訓練policy network,記為
3)訓練一個value network
那麼這三步是什麼意思呢?
1、訓練policy network
上面我們卷積神經網路是機器學習的一種手段,用來尋找x和y之間的關係。第一步的policy network的輸入數據來自KGS的三千萬個棋局,輸出是人類是怎麼下子的。把輸出設置為矩陣,得到的就是一個概率分布,即在當前狀況(state)s下採取行動(action) a的情況下人類落子的概率分布。就是輸入一個棋局,得出人可能怎麼下。簡化輸入特徵參量訓練,得到網路。
2 使用強化學習(RL)
強化學習的意思是當我們執行某個操作,並不能立即得到結果,需要不停摸索和反饋。這裡RL採取和policy network完全相同的結構,初始參數設置為policy network的參數,然後自己和自己下棋(心好累),根據最終的勝負反饋調節網路參數,得到網路
3訓練一個value network
前面得到policy網路的輸出是個概率矩陣,這裡value network的結構和policy大致相同,但是輸出的是單個值,即當前這個位置的值(獎勵?價值?大致這個意思)。輸入採用第二部RL的輸入,輸出也採用RL最後勝負的積分,來訓練這個網路。
到此為止訓練階段已經完成,下面在戰鬥的時候(事實上在訓練過程應該也用到)蒙特卡洛樹搜索(MCTS)
MCTS有四個步驟:
挑選一個葉子節點;往下擴展一個節點;模擬沿這個節點運行下去的結果;反饋。
實際上上面的卷積網路與MCTS的結合就在挑選節點上。(懶得輸公式我要貼圖了!)
公式如下(不想看公式的直接跳到下面結論):
也就是決策函數,等於取得最大的action value和概率(也就是policy network的值)/(模擬節點訪問次數+1).
那麼action value是啥
等於採取行動a所得的Value()的均值,那麼是啥呢
等於value network的值和這次模擬到結尾的結果zL
最後的落子的選擇是多次模擬後policy network和value network的加權值。實際上中間訓練的其他神經網路也有用到,並不止policy和value兩個network。
結論:AlphaGo的工作原理就是利用卷積神經網路的學習能力,通過輸出分布的policy network和輸出單個值的value network來分析每一步的收益,並以此來簡化蒙特卡洛樹的搜索空間,達到落子合理性和時間消耗的平衡。
所以我感覺整個過程中從技術來講,並沒有什麼新的突破。擔心AI統治人類大可不必。這是人類計算能力發展到一定階段量變引起質變的一個結果。
但我依然認為這是一個里程碑式的成就~
AI訓練起來好累。感覺還是能找到工作的。
http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html
Monte Carlo Tree Search
看了一晚上alphaGo的paper。還是相當複雜的。
首先用19*19*48的feature作為input,用專家棋譜做訓練得到一個neural network用來預測給定棋局下一手位置的概率。
以此neural network的結構及參數為基礎然後通過自己和自己之前的模型下棋(數千局)的方式更新參數以達到贏棋最大概率。至此alphaGo構建了一個給定棋面下一步下哪裡的分布(policy network)。在自己和自己下棋的同時,alphaGo以此中每一棋面為訓練集,用上述相同的feature,訓練得到一個預測當前棋面會輸還是會贏的模型(value network)。
以上述訓練所得兩個模型為基礎,alphaGo來進行策略選擇。大致思路如下。下一步的選擇由兩個模型共同決定,棋局越開始越貼近policy network,越後來越貼近value network。值得注意的是這裡的value network是由之前訓練所得的value network和一個快速Monte Carlo預測結果的線性加和。
這個思路相當機智,一開始棋面簡單可供學習的專家棋譜多,因此下棋就以學人下為主,後期搜索空間變少了,則已暴力窮舉為主。為什麼AlphaGo會遇強則強
某些人猜測AlphaGo會遇強則強,認為AlphaGo會模仿對手的棋風下棋,如果遇到樊麾二段,就會下出樊那樣的水平較低的棋,而如果遇到好戰的李世乭九段,則會變成一頭嗜血的怪獸。
事實上,AlphaGo的確會遇強則強,遇到李世乭可能贏二目半,遇到業餘6段可能也就贏二目半。但這並非是因其會模仿對手的棋風。因為AlphaGo是通過海量人類對局資料庫來訓練對棋型的感覺,再從模仿人類選點中篩選勝率最高的一招棋的,因此它不會去專門去模仿特定對手的所謂棋風。但由於AlphaGo篩選選點的唯一考慮因素是勝率最大,而非最兇狠走法和局部最佳應手,也就是能贏就行,不求大勝,比如說選點A有99%的概率贏半目,選點B有98%的概率贏20目半,那AlphaGo就會選擇A,而淘汰B,而且為計算獲勝概率,它要假定你是最強對手,假定你會算到它能算到的各種變化,所以面對弱手,AlphaGo也會淘汰掉會因強手才能下出的強烈反擊從而招致自己勝率下降的棋。這導致AlphaGo遇到弱敵也會走出看似很緩的棋,似乎它遇弱則弱。
在與樊麾的第2局棋中,執黑的AlphaGo第135手沒有選擇扳殺白右上角的走法,而是選擇跳,放活白角,這一手被中國職業棋手廣為詬病,認為AlphaGo計算力太差,連這麼簡單的死活都沒算出來,其實這是沒有理解AlphaGo的選點標準,它肯定是算出殺棋的勝率不如放活的勝率高,所以選擇了穩贏的放活。
因此,在局面領先的情況下,AlphaGo常會走出人類棋手所認為的緩手,從而縮小了領先優勢,其實這正是AlphaGo的強大之處,它通過選擇勝率更高的退讓走法,雖然損目但提高了勝率,從而將其優勢轉化為不可動搖的勝勢。而很多人類棋手反而會在優勢局面下貪吃爭勝,從而走出過分的招法導致逆轉。
必須指出的是,AlphaGo並非一味退讓,只有當損目的走法勝率更高時它才會選擇退讓,否則它永遠會走在最大的地方。3月9日對李世乭九段完勝的第一局,就非常完美地體現出了AlphaGo的這個特點。
AlphaGo的棋讓人想起了李昌鎬九段全盛時期的招法,經常走一些看似緩手的自補,其實這正是李昌鎬和AlphaGo的英雄所見略同啊,已走下神壇的李昌鎬,看到AlphaGo想必會別有一番滋味在心頭。
寫於2016年3月9日夜AlphaGO擁有兩個深度神經網路:基於谷歌雲計算巨量數據的策略網路(Policy Network)和估值網路(Value Network),再結合傳統人工智慧方法蒙特卡洛樹搜索(MCTS),構成了人工智慧的三大武器。
1. 策略網路Policy Network,其實是一個落子選擇機制,它著眼於每一步弈棋的下法。
它又細分為三個部分:
突破策略網路(RolloutPolicy Network),通過對盤面的初步判斷,得出一個準確率較低的落子選擇。
模仿策略網路(SLPolicy Network),通過調用谷歌雲存儲中上百萬的人類對弈棋譜,模仿人類的下棋走法,預測人類的下一步落子位置。
學習策略網路(RLPolicy Network),通過兩個AI之間互相自對弈,不斷地學習和提高棋力。在學習期間,AlphaGO每天可以自對弈一百萬盤之多,而人類一輩子也下不到一萬盤棋。
2. 估值網路Value Network,則是一個局面評估機制,它注重於對全局形勢的判斷。
估值網路通過對全局位置的判斷,分析出局面形勢,並進行一個價值評估,準確率可達80%以上。
雖然AlphaGo評估的位置只有深藍的幾千分之一,但這正是由於它使用了策略網路,可以更智能地選擇位置;再加上估值網路,可以實現更精準的局面評估。
這才是更接近人腦下棋的方式,而不是簡單粗暴的窮舉法。
3. 蒙特卡洛樹搜索 Monte-Carlo Tree Search,則是實現圍棋這樣超高複雜博弈機制的一種隨機演算法。
蒙特卡洛演算法,是由烏拉姆最早提出,再經數學天才馮·諾伊曼發展和完善,以賭城蒙特卡洛命名的一種演算法。
在過於複雜的局面中,人工智慧由於硬體缺陷,無法實現窮舉級別的採樣,而蒙特卡洛演算法正是在採樣不足的情況下,通過儘可能多次的隨機採樣,一步一步接近最優解。
舉個簡單例子你就可以理解。比如有一堆鑽石,每次隨機選一枚,選中更大的就留下。那麼經過越來越多次隨機選擇,最終留下的那枚鑽石,就必然越來越接近這堆鑽石中最大的。但是由於隨機的緣故,在不遍歷每一枚鑽石的情況下,只能接近最大,而不能確認最大。
與之對應的是另一個以賭城之名命名的演算法——拉斯維加斯演算法,則是為了一步一步確認最優解。
它的例子是,比如有一堆鑰匙,只有一個能打開鎖。每次隨機選一把,打不開則再選。那麼經過越來越多次隨機選擇,找到正確鑰匙的幾率也就越來越大。但是由於隨機的緣故,在不遍歷每一把鑰匙的情況下,並不能確定一定可以找到。
在圍棋這樣的博弈遊戲中,並不存在絕對正確的下法,所以自然應當運用前者。並且,正是由於蒙特卡洛演算法的運用,圍棋的人工智慧才得到了突飛猛進。
AlphaGO是怎樣下棋的?
身為集結多種尖端技術於一身的人工智慧,AlphaGO的下棋思路可以簡化為以下四個步驟:
Step 1:通過突破策略網路和模仿策略網路,找出下一步棋的數個備選走法。
Step 2:利用蒙特卡洛樹搜索,從數個備選走法中找出接近最優的走法。
Step3:利用估值網路對這一走法產生的局面進行評估,將評估結果作為當前棋局下的下一步走法的估值。
Step 4 :結合下一步走法的估值和模仿策略網路進行反覆的模擬,根據選擇次數最多的下法,確定最終的走法。
AlphaGO的下棋思路和步驟
在和樊麾的對弈中,AlphaGO表現得並不僅僅糾結於局部的得失,而更注重通盤大局的考慮。這也恰恰是人類圍棋智慧的體現。說AlphaGO真的像人類一樣下棋,並不為過。
原文鏈接:http://mp.weixin.qq.com/s?__biz=MjM5OTYwOTM0Nw==mid=402134179idx=1sn=c945085a5cc499c1eb339589bcf7a96escene=4#wechat_redirect
創建於 2016-03-09
著作權歸作者所有
我來作為正在選修人工智慧這門課的學生來給大家拋磚引玉,從最簡單的原理給大家講一下人工智慧與人的思維差異。
圍棋是一種雙人對決的零和博弈,所以從原理上講,一方要在可選的選項中選擇將其優勢最大化的選擇,另一方則選擇令對手優勢最小化的方法。我贏即你輸,。
那麼怎麼保證自己的選擇使自己優勢最大呢? 容易想到,為了在任何情況下都能勝利,必須假定自己無論選擇那一點落子,對手都會選擇讓你優勢最小的。遵循這樣的原則,根據對手可能的選擇中找到讓自己優勢最大的策略,這就叫最小最大搜索演算法。
如下圖,MAX層為先手,MIN層為後手,第0層做決策,必須考慮對手第1層的可能決策。注意這裡圖上的分數是對先手MAX的分數,後手MIN 的分數直接取負即可,開始評估時AI並不知道分數。顯然第0層的獲勝分是選擇第1層中最大的那一個。那怎麼求第1層獲勝分呢?我們假定對手也是貪婪而明智的,那麼他會選擇使我們獲勝分最小的一步,也就是說第1層會選擇第2層最小的那個。不斷遞歸,直到結束(最底層),我們就可以評估獲勝分數了。
這個樹每一層代表棋手做出了一個可能的選擇,隨著棋子不斷的填充棋盤,狀態樹的規模就會指數增大,直到結束(棋盤填滿)。如果我們把結束後對這個狀態進行評分,就知道樹最底層節點的評分,再通過最小最大原則,可以把整個樹評分,從而選擇最優選項。
如果計算機能夠把所有的可能算完,那顯然人是贏不了的,但考慮到狀態總數比宇宙中的粒子還多,顯然計算機是算不完的,怎麼辦呢?
1. 一個簡單的想法就是算到規定步數,規定時間就不算了,那最底層的評分怎麼辦?我們可以估值一個。谷歌這裡可能運用了神經網路來學習這個估值函數,(這裡是AlphaGo核心優勢,當然也跟這幾年硬體和分散式計算的發展密不可分)。當然估值可能是不準的
不過隨著圍棋進行到後面,可下的子越來越少,狀態空間越小, 對於計算機來說計算難度就指數下降,同時估值就估的越准,
這就是 @舒自均 所說的在後盤的局部細節,以及最後的收官上,計算機完爆人類,因為每個局部小了以後電腦都可以算清楚最優解,所以中後盤可以無限佔便宜,這個事實已經在比賽里清晰地體現出來了.
2. 圍棋明顯是靠遠見的,一子就可能有很大的不同,於是有了另一個簡單的想法就是我不把整個狀態空間跑完,同時只隨機抽出一些可能性來跑,這就是蒙特卡洛樹搜索,這樣在規定的時間內就可以跑的很深,從而解決局部最優不等於全局最優的問題。
引用 @Richard Xu的話
學過圍棋的同學都知道一個詞,叫「定式」。
定式的存在,是人類在上千年的對弈中所積攢下來的局部「最優」解。
然而AlphaGo卻違背了定式,違背了老師教導給學生的標準走法。
這就是為什麼我在「最優」這兩個字上打了引號。
也許定式不是解決當前狀況的最優解,或者說,這個局部的最優對於全局卻是虧的……
難道沒有這樣的可能?
人畢竟思考的層數有限,狀態空間有限,而計算機卻可以想的非常深,這樣就有可能解決局部最優解的問題。
3. 同時,運用最小最大原則,從策略上來講他其實是選擇最保守的點落子,這樣發揮最穩定(也就是說計算機追求的是假定你選擇最好的地方下時,依然能夠獲勝,而不是最大化獲勝分數)。不會像人一樣選擇可能優勢很大卻因為想的少而被抓住弱點。
@wgwang :個人猜測,alphaGo的優化目標應該是勝負,至於勝負多少是不管的(跟大多數人的理解一致)。所以舉個極端的例子,如果一種下法是贏一目的概率是90%,而另一種下法是贏100目的概率是89%,alphaGo也會選擇90%的那種下法,所以用已有的棋手的思維慣式去解釋alphaGo的「昏」招,可能會得到離譜的答案。
@舒自均 :
從盤面上,其實從頭至尾一直是alphago領先的,最起碼alphago自己認為自己是領先的,不止是alphago,zen也是這麼認為的,而且給了alphago很高的評分,AI和人都以為自己優勢很大,結果AI笑到了最後.
想用這種方法來做一個中國象棋,不知有興趣的朋友沒有???
最近在讀一本書,巧的是裡面有一章講到了關於「IBM 的深藍(Deep Blue)可以打敗國際象棋世界冠軍卡斯帕羅夫」所運用的系統原理。非常有意思,在此和大家分享。
這本書是講星球大戰里的科學的,開篇涉及了一些關於星戰的科學知識來做引證。我也找了一些相關資料,一併做一個解釋。如下:
《星球大戰》中,R2-D2 展示出了這項技能。當時萊婭公主給了他一個秘密任務:將他自己和萊婭公主的消息帶給歐比-旺·克諾比。
劇情梗概 | R2進入了一個逃生艙,將他自己和3PO安全地送到了塔圖因星球。一到那裡,他就找到了人員混雜的地方;被盧克的伯伯買了以後,他也很快獲得了需要的信息。R2欺騙盧克,宣稱歐比-旺是他的主人,還發現了這名絕地武士的位置。之後,他在發現盧克對萊婭公主的信息感興趣後,說有抑制螺栓阻止他播放完整信息,這樣盧克就可以拿走螺栓了。沒有螺栓,R2就可以自由執行任務了。他離開了盧克的家,穿越沙漠向本的家走去。
完成這一系列動作需要以下步驟:
高等的智慧——對人類本性的了解——思辨的能力——靈活的計劃——做出決斷的能力
這一系列的動作需要高等的智慧、對人類本性的了解、思辨的能力、靈活的計劃和做出決斷的能力。這些特質都是人工智慧,即一台電腦展現人類智慧的關鍵要素。科學家幾十年來一直在努力創造人工智慧,雖然他們還沒有實現目標,但是已經有了實質性的進展,有了許多不同的方案。
第一種方案是:以規則為基礎的方案致力於讓電腦成為某個特定、專門學科領域的專家。
如果選擇了一個有限的專長,電腦科學家就可以將大量與此學科相關的知識編程進電腦里。
例如:IBM 的深藍(Deep Blue)可以打敗國際象棋世界冠軍卡斯帕羅夫,它就是這樣的一個系統。電腦里包含了關於象棋的所有規則,它有能力權衡各種可能的棋著和這些棋著可能帶來的後果,然後選擇最佳的棋著。
但是這樣的問題是:當這樣的電腦面對其他專業領域的問題時就束手無策了。它不能基於灌輸給它的知識進行推測或者類比,它只能順從規則。
(如同星戰中R2 和3PO 都有各自可以稱得上專家的特定領域,比如翻譯或駕駛X 翼,但是他們也展示出了在各種條件下都可以靈活適應的能力。所以他們並不是單純以規則為基礎的系統。)
此時,科學家會採取的第二種方案:以案例為基礎進行推理的人工智慧。
這種電腦會解決上述的問題,不是盲目地遵從規則,它們會進行類比,將面臨的情況和其他已知的情況做出比較,選出最相似的案例並調取信息。
比如,R2 可能知道奧德朗和許多其他行星上的人類殖民地在哪裡。為了找到塔圖因星球上的人類殖民地,他將其他星球殖民地的地理特徵和他在逃生艙里觀察到的地理特徵進行對比,定位出最有可能有人類殖民地的地方。實際上,他看起來就是這麼做的,這顯示出他有以案例為基礎進行推理的能力。如果對比很直接,這種系統可以成功完成任務,但是以案例為基礎的系統很難抉擇出哪一種類比是適合的,哪一種不是。
為了做到這一點,電腦必須有一些關於世界的基本知識,這些知識被我們稱為常識。我們的常識來源於一生中學到的東西,雖然我們對這些東西早已經習以為常,但是這些東西卻很難傳授給電腦。
比如:在對弈過程中處理的方法及對圍棋中的基本知識的運用等等。
成功案例:在星戰中,R2 和3PO 展示出了他們了解許多常識。比如,他們知道如果盧克被困在垃圾處理器那裡,他就不會突然出現在「千年隼號」旁邊;如果垃圾處理器里的兩面牆合在一起,就會將盧克擠扁殺死;人類都趨生避死,所以如果他們關掉垃圾處理器,盧克就會很高興。所有這些對我們來說都是顯而易見的,但是對電腦來說並不是這樣,除非這些信息被輸入了進去。
又例如:道格拉斯·里南(Douglas Lenat)博士將常識編程到了一台電腦中,這台電腦叫作CYC,是百科全書(encyclopedia)的簡稱。他的目標是給予CYC 一億條常識。這些知識將幫助它進行合理的比較,高效地做出決定,刪除不實際或者不符合需求的方案。因此到目前為止,CYC 搜索信息的能力比一般網路搜索引擎都要高。比如,我們要求它向我們展示「一個強壯的、有冒險精神的人」的照片,CYC 就會給出一張照片,上面配有文字「一個攀登石壁的人」,CYC 認為,攀岩是具有冒險精神且需要力量的活動。
第三種製造出人工智慧的方案,是製造出可以從經驗中學習的系統。
如果我們可以給予計算機感知周圍的事件並從這些事件中學習的能力,那麼計算機就有可能發展出智力,就像嬰兒一樣。為了創造出這樣的學習系統,科學家建起了神經系統網路,系統的設計大致模仿了人腦的結構。
一般的電腦都受一個複雜的中央處理器控制,但是人腦並沒有中央處理系統。人類大腦大約有一千億個神經細胞,或稱「神經元」,每個神經元和其他1 萬個神經元連接在一起。為了模仿大腦,神經網路包含了多個簡單的處理器,以取代單個中央控制系統。這些簡單的處理器相互聯繫,和大腦中神經元相互聯繫的方式相似。科學家認為神經元之間大規模的連接給予了大腦同時處理一千萬億條信息的能力。這種大規模的內部關聯也被稱為「平行結構」,它可以使許多不同的信號同時從一個地方到達另外一個地方。
斯蒂夫·格蘭特(Steve Grand)是網路生活科技公司的首席技術官,這個機構致力於有高等智慧的人工生命形式的開發。格蘭特相信,平行結構是人工智慧發展的關鍵。「大腦實際上是一台機器,許多事情同時在裡面發生。只有這樣大規模的平行系統才能產生智能。」到目前為止,神經網路還遠遠沒有大腦複雜和廣闊,它們還只有蟑螂腦力的十五分之一而已,但是從根本上來說,它們確實複製了大腦的分散控制結構。
神經網路工作方法如下:
電腦科學家在輸入端輸入一個具體的刺激,刺激信號通過網路在相連的其他處理器之間進行傳遞,在輸出端就會輸出一個信號。通過「訓練」網路,科學家可以讓網路輸出適合需要的結果。
但是我們怎樣訓練神經網路系統呢?
連接對神經系統網路來說的重要性,超過了一個個處理器。這些連接可以被加強也可以被削弱,加強或者削弱的過程從根本上複製了大腦的學習過程。大腦神經元可以記住它們之前傳過的信號,以及這些信號是從哪個神經元傳過來的。藉助過去信號傳輸留下的印象,神經元就會下更大的力氣處理傳自特定神經元的信號,這種連接就被增強了,而同時其他的連接就弱化了。這種過程一直在進行,比如在你學習彈鋼琴或者加減法的時候。在大腦中,傳輸路徑已經確定下來了,之後就是熟能生巧的過程。科學家通過調整連接的強度來訓練網路,構建出能夠產出符合需要的結果的適當路徑。這些調整模仿了基本的學習方法,但是網路還沒有任何邏輯可言。
雖然神經網路還不是那麼成熟,但是它們卻有能力學會十分難以編寫的程序。比如,它們可以識別出複雜的模式,這是一項被稱為模式匹配的技能。神經網路系統現在被用於識別股票市場的模式,並預測其走向。科學家也測試過系統在電子眼中的應用,未來,它們也許可以幫助電腦識別人臉。現在電腦只能識別沒有表情的臉,而且還必須是全臉、正臉。強大的模式匹配能力可以使神經網路在各種各樣的光線條件下識別出萊婭的臉,不管是從哪個角度、不管成像是否清晰、不管萊婭是微笑還是皺眉,甚至是在她髮型奇特的情況下都可以。
R2 和3PO 一定有這個能力。斯蒂夫·格蘭特認為,在神經網路系統中使用到的連接機制在製造人工智慧的領域最有前景。「以規則為基礎的系統和以案例為基礎的系統曾經有50 年的時間證明自己可行,但是都失敗了。」格蘭特認為R2 使用了神經網路,他說,「R2-D2 身上展示出來的智慧簡直是新奇的現象。」這意味著智能是一個群體共同運作的結果,而不屬於群體中的任何一員。格蘭特舉了一例:「你是人類中獨特而又普通的一員,是幾十億個構成你身體的細胞共同作用的結果,你不是任何一個細胞的產物。」相似地,智慧一定是構成神經網路系統的平行結構上連接的各個處理器相互作用的結果。智慧不存在於任何一個處理器上,我們需要讓它們像大腦神經元一樣相互作用。格蘭特解釋說:「最大的障礙就是我們幾乎不知道大腦是怎樣工作的!」
R2 和3PO 都有模式匹配的能力,我們可以假設神經網路至少組成了他們系統的一部分。另外,《星球大戰百科全書》中說R2 和3PO 沒有強加在其他機器人身上的內存清理功能1,這讓他們可以從經驗中學習。這樣的學習能力又一次證明了他們有神經網路。
我們最有可能創造出真正的人工智慧的方式可能就是將這三種方式結合起來,機器人也將擁有上述的能力。
不過,如果不能感知周圍的情況、收集信息、學習和交流,擁有再高超智慧的機器人也不算是好的機器人。R2 和3PO 有視覺、聽覺,甚至還有觸覺。我們距離製造出這樣的機器人還有多遠呢?
(內文摘自北京聯合出版社圖書《&<星球大戰&>里的科學》,若不小心涉及版權雷區請與我聯繫。如有需求或轉載請與相關負責編輯聯繫)
好多答案還是太專業了。現在嘗試用最通俗的語言回答這個問題。
大家都知道計算機的強項就是窮舉,可是這一招在圍棋上面吃不開,因為每一步都好幾百種選擇的下法,一局棋要下一兩百步,實在窮舉不完。
AlphaGo高明的地方就在於它部分模擬了人類的思維。人下棋的時候不會把每個落子點都考慮一遍,比如,開局第一步你不會下在棋盤正中心,也不會下在頂點上。
AlphaGo不再試圖窮舉任何一種下法,而是單挑那些看起來比較有前途的下法再往下計算。怎麼樣知道哪一步下法比較有前途呢?它利用了兩點,第一點是學習人類高手怎麼走,和人類高手走的比較像的下法AlphaGo會優先給予深度考慮。第二點是學習像人類一樣評估盤面局勢,落子之後局勢較優的走法也會優先給予深度考慮。怎麼樣?這個決定怎麼下的方式是不是和人類有些接近了?有了這兩點之後,媽媽再也不用擔心狗狗計算不過來了。
至於AlphaGo怎麼知道哪些下法和人類比較像,又有哪些下法會讓局勢較優呢?這就靠人們說到這條圍棋狗時常提到的深度學習。這種學習方式通俗的說就是模擬人類大腦神經元的運作方式,當然是極度簡化的模擬神經元。簡化到什麼程度呢?它認為神經元就是一個簡單函數,輸入一個x,就按函數計算輸出一個y(要是神經元真的有這麼簡單那腦科學估計要容易多了)。AlphaGo把成百上千個神經元聯在一塊,要是神經元輸出結果和人類下的比較像,那就很好,下次接著這麼干,要是下的不像,那就調調參數,以便下次下的像一點。這樣不停的調參數調啊調,終於得到了兩套系統,一套可以模仿人類去落子,第二套可以評估下一步每個落子點的優劣。
就是這兩套系統把AlphaGo從窮舉的囚籠裡面解脫了出來,這也是它的棋力強於其他人工智慧的訣竅。至於為什麼參數調啊調就可以造出這兩個系統,這一點你就不必知道了,因為我也不知道啊,並且我印象中學界知道工程上這麼做,但科學道理上也沒見誰講的太明白。
AlphaGo的表現很神奇,但人們說它在機器學習演算法上並沒有什麼太大突破,而是已有演算法在應用上的突破,這一點也確實如此。不過這也是科學偉大的地方,因為你總是可以找到背後看起來很平凡原因,而不用像神跡一樣去膜拜她。
關於 AlphaGo 的運行原理,前面的答主都已經說了很多了,我們就來說說 AlphaGo 的底層技術晶元: TUP 跟 GPU。
在去年的 Google I/O 大會上,谷歌就曾經說過, AlphaGo 之所以能這般所向披靡,是因為有一款「秘密武器」,那就是 TPU(Tensor Processing Unit),一款專為谷歌深度學習系統 TensorFlow 定製的 AI 晶元。
2006 年,谷歌就在考慮為神經網路構建一個專用集成電路(ASIC)。
2013 年隨著數據量的急速膨脹,提高計算能力的需求開始變得更加迫切。
2015年 11 月,谷歌開源了其王牌機器學習系統 TensorFlow。
3016年 3 月,應用了 TensorFlow 深度學習系統的 AlphaGo 在對戰李世石中一戰成名,也使得也使得這款 AI 學習系統及其硬體基礎 TPU 聲名遠播。
(圖轉自網路,侵刪)
作為一個雲計算硬體和軟體系統,TPU 是專門為機器學習而設計的晶元,其出現的使命在於加速谷歌人工智慧落地的速度。其第一代 TPU 被 AlphaGo 人工智慧系統用作其預測和決策的基礎,可提供高達每秒 180 萬億次浮點運算的性能,大大加速了對單個大型機器學習模型的培訓。
然後到了不久前,Google I/O 2017 開發者大會上,谷歌又推出了第二代 TPU 升級版本,它比以往任何的 TPU 運行得都要快,而且可以加速訓練和運行 ML 模型。
並且,谷歌為了這個還專門在一個月前就發布了一篇論文,公布了 TPU 一些相關的技術細節,並直接將矛頭對準了 AI 晶元巨頭英偉達,稱:「TPU 處理速度比當前 GPU 和 CPU 要快 15 到 30 倍」。
TPU 內部架構
我們先來看看這篇論文談到的一些有關 TPU 的要點,需要提及的是,下列數據是基於谷歌自己公司的標準測試得出的:
· TPU 是一種 ASIC,需要先用 GPU 訓練神經網路,再用 TPU做推斷。
· TPU 沒有與 CPU 密切整合,而是設計成了一個 PCIeI/O 匯流排上的協處理器,可以像 GPU 一樣插到現有的伺服器上。
· 在推斷任務中,TPU 平均比英偉達的 Tesla K 80 GPU或英特爾E5-2699 v3 CPU速度快 15 至 30 倍左右。
· 一個 TPU 的 MAC 是 Tesla K 80 的 25 倍,片上內存容量達到 K80 的 3.5 倍,而且體積更小。
· TPU 的功耗效率(performance/Watt,每耗電 1 瓦的性能)比 GPU 和 CPU 高出 30 至 80 倍。
· 如果對 TPU 進行優化,給它和 K80 一樣大的內存,他的速度能比 GPU 和 CPU 高 30 - 50 倍,公好效率高 70 - 200 倍。
——『In-Datacenter Performance Analysis of a Tensor Processing Unit』
另外,還有傳言說,谷歌也曾考慮像微軟一樣用 FPGA,因為開發起來更加靈活。但是經過測試之後發現速度提升不夠。
TPU 跟 GPU 的區別在哪裡?
TUP 的發力,讓近年來在深度學習領域享有支配性地位的晶元供應商英偉達壓力巨大。
為了做出反擊,英偉達也開始加強其新推的 GPU 晶元的定製化和專業性。在不久前英偉達 GTC 大會上,英偉達發布了基於新一代圖形架構 Volta 的 Tesla V100 。特斯拉 V100 配備了 640 個 Tensor 內核,能提供提供了高達 120 teraflops 的、驚人的深度學習能力,它們是專為運行深入學習網路中使用的數學運算而設計的。
作為晶元製造商的大客戶,谷歌揭幕 TPU 對 CPU 巨頭英特爾和 GPU 巨頭英偉達來說都是不小的商業壓力。除了英偉達,英特爾也在去年推出了適用於深度學習的處理器架構和晶元,意欲擴張當下的市場份額,抵擋谷歌帶來的衝擊。但是目前看來,「定製晶元」的需求可能比他們預計還要更深。
英偉達 CEO 黃仁勛
不過呢,TPU 跟 GPU 其實各有所長。GPU 巨頭英偉達 CEO 黃仁勛就曾告訴『華爾街日報』,兩年前谷歌就意識到 GPU 更適合訓練,而不善於做訓練後的分析決策。谷歌打造 TPU 的動機只是想要一款更適合做分析決策的晶元。這一點在谷歌的官方聲明裡也得到了印證:TPU 只在特定機器學習應用中作輔助使用,公司將繼續使用其他廠商製造的 CPU 和 GPU。
事實上,訓練神經網路模型,還是離不開 GPU 和 CPU。而對於 CPU 製造商而言,真正的挑戰是提供在考慮到能耗和效率的前提下,具有極高推理性能的晶元。TPU 是一款推理晶元,其出現並不是為了取代 CPU 或者GPU,而是作為一種補充。
儘管如此,由於谷歌 TPU 論文引起的反響太大,迫使感受到威脅的英偉達很快做出的回應。英偉達回應說,GPU 在機器學習的推理(inferencing)方面相對於 TPU 有一些優勢,還能用於機器學習中神經網路的訓練。英偉達的 GPU 更通用一些,谷歌的 TPU 則比較專註於一個點,應用場景十分單一。
英偉達對谷歌在論文中進行的對比細節有些意見,黃仁勛表示,GPU 的通用性高一些,先是肯定 TPU 在深度學習的張量處理領域有一些重合,隨後通過一些細節來論證 GPU 相對於 TPU 的優勢,這也算是不大不小的撕逼吧。
說回比賽本身, AlphaGo 再次對戰柯潔,不管最終結果是什麼樣,最後的贏家都是谷歌,因為這對於 TPU、對於 TensorFlow,乃至對於人工智慧都不會是一個終點,而是一個嶄新的起點。
參考內容:
人機大戰柯潔勝算不到一成,AlphaGo 身後的 TPU 殺傷力究竟有多強大?
In-Datacenter Performance Analysis of a Tensor Processing Unit:https://arxiv.org/pdf/1704.04760.pdf
圖為美劇疑犯追蹤
宅總與機器TM的對弈
大神說的都很精彩,我來隨便說點我自己在看論文時候記下的理解和想法(噪音引入~),歡迎指正錯誤,隨意討論~
- AlphaGo(這裡簡稱AG)首先有一個machine learning system。對於明確的目的任務,machine learning分為四個部分,數據集dataset,系統模型model,訓練(學習)演算法 training algorithm,評估方法 performance measure。之前大家喜歡把model和training algorithm放在一起討論,但是隨著現在的model和algorithm變得越來越複雜,其中可做的文章越來越多,還是分開來討論比較好;
- AG沒有選用處理時許序列的模型,所以AG下棋沒什麼邏輯性,做的就是基於當前局面選出感覺最好的一手棋,因此它的數據集就是一個個獨立的瞬時局面,以及最後的勝負;
- model的結構主要有兩部分,policy network value network。
- pol-net稱為策略網路,或者網上也喜歡叫走棋網路,目的就是輸入當前棋局,輸出下一手棋落在棋盤上各個點的偏好,也可以看成是一個對於棋盤上各個點的概率分布。
- val-net稱為評估網路,輸入也是當前棋局,但輸出是對於當前棋局的一個總體評分,基於(0,1)之間,可以解釋為當前棋局下的勝率;
- 訓練方法有點複雜,主要有兩種,一個是監督學習(supervised learning),一個是增強學習(reinforce learning)
- 首先是pol-net的訓練,用的是監督學習。根據KGS server上弄來的3000萬+人類棋譜,對每一個盤面進行下一手的預測;論文里說如此訓練完後的預測準確率能達到五成以上,只用這樣訓練好的pol-net去下棋可以有KGS server上2~3D的水平(我去KGS server上和2D的下過一盤,比我現在水平強一點,但感覺要弱於我當年剛考出業餘初段的水平)
- pol-net還有一個增強版,是讓pol-net自己和自己下棋進行訓練。這個就是增強學習,網上俗稱左右互搏。增強學習後的pol-net增強版對普通版的勝率達到80%。但是他有一些缺陷,就是走棋缺乏變化,這個不是很利於他在之後的大系統里發揮作用,所以原始的pol-net沒有完全被取代;
- pol-net雖然可以走棋但是走的很慢,AG還有一個快速走棋的模型,但這個模型不是用神經網路訓練的,是基於之前的研究者對於圍棋的理解提煉出的一些局部特性來決定的落子演算法,這個快速走棋模型雖然在預測棋手落子上表現一般,只有兩成多一點的準確率,但是實力也有KGS3D的水平。
- 最後一個是val-net的訓練,用的也是監督訓練,但數據量更大一些,除了之前的3000萬+人類棋譜,它還對之前提到的pol-net左右互搏的棋局進行採樣評估,最後就訓練得到一個對於當前局面下的勝率判斷網路。
- 模型和訓練部分基本就是這樣了。然後有了這些功能迥異的模型後,問題就變成了如何把這些能力整合起來變成一個超級圍棋AI。這裡還沒有提到之前圍棋AI的一個核心演算法蒙特卡羅樹搜索(Monte Carlo Tree Search, MCTS)。這個不是我的專長解釋不好,大致的理解是對於棋局的進程(你走這兒我走這兒你再走這兒我再走這兒。。。)可以表示成一個樹狀結構,這棵樹當然是大的不行,永遠遍歷不完,但是可以通過MC演算法來去掉一些感覺明顯不好的分枝,如此來減少最佳策略的搜索範圍。
- AG的下棋程序是這樣的:
- 首先對於當前局面,用pol-net給出幾個可能的選點,這個類似於人類棋手先根據棋感找出幾個第一落點;
- 然後用pol-net通過自我對弈的方式往後走幾步,由此展開搜索樹;
- 上面那個過程中對於各個節點的盤面進行評估,勝率高的就繼續展開搜索下去,勝率太低一看就不行的那就放棄;這裡評估的方式有兩個,這兩個方法在AG里是以55開的比例加權:
- 一個是用val-net對於盤面直接給一個分數;
- 另一個是用之前提到的基於局部特徵的快速走棋法用來進行成千上萬次直到終盤的自我對弈,由此返回一個當前分支節點下的勝率;
- 搜索樹展開的演算法里還有一些技巧,這裡就不提了,總之通過MCTS這個神奇的演算法把幾個部分合起來,就成了這樣一個超強的圍棋AI。
- 稍稍總結一下,其實這個過程里有一些很像人類學棋和下棋的過程:
- 人類學棋的時候
- 首先要打譜,就是學習前人的棋譜,然後培養一個作為棋手的棋感;
- 然後要和自己下棋也要和別人下棋,進一步訓練自己的棋感和著法;
- 在下棋的時候
- 人也是首先根據自己的棋感找出第一感的幾個落點
- 然後,有時候是直接根據盤面做判斷,比如布局的時候;但在局部戰鬥中,會更依賴於深入的計算。
- 但是和AG不太一樣的是,人對於局部戰鬥的判斷可以僅限於局部,而不需要也不可能像AG那樣自我對弈到棋局終結然後看勝率。
- 人類學棋的時候
嗯。。。然後說說我對於AG的看法。
- 首先AG是一個完全基於全局和最終勝負來下棋的機器,目前看來它最出色的地方反而是在人類覺得比較虛的大局的把控和運營上。AG通過學習人類上千萬的棋譜獲得棋感,我覺得越是在鋪地磚的棋局中效果越明顯(AG喜歡打太極~);但是在局部變化比較複雜的情況下棋感對於落子選點的幫助不是特別大,計算才更重要。
- Policy Network的大局觀不說超越人類吧,應該也是人類頂尖的水平(從那5盤棋中來看至少超越了李世石,雖然柯潔說李世石的布局是他整盤棋中最弱的部分。。。)
- 但是在局部變化的計算上可能還是有問題,因為AG完全沒有局部的概念嘛。局部計算應該是基於local feature的快速走棋的強項。但是google目前是把這快速走棋的判斷和val-net的全局判斷以55開的方式合在一起。
- 而且之前很多人對於圍棋AI的計算能力有點誤會。雖說在單純的計算量上是遠遠勝過人類的,但是對於每一個局部變化的計算質量來說,是不如人類的。目前看來計算機在局部計算上還是不如頂尖高手,會下不出最優解,甚至失誤。頂尖的圍棋選手在局部計算上大概最多可以在四五十個選點中往後推算三四十步吧,這其中任何一步的選點都是不能有一絲的偏差的,而且很多時候行棋的次序很重要。這個組合數對於計算機來說還是沒有辦法窮盡吧。而且從論文里可以看出計算機還是沒有什麼局部的概念,唯一的損失函數是棋局結束時的輸贏,這樣的好處是在處理大局的時候可能更好一點,壞處就是局部戰鬥的好壞一定要放到最後的棋局裡才能判斷優劣,會浪費更多的計算量。而且計算量的分配也沒有變化,在一些需要精細計算的局部死活,和需要大局的著法判斷的地方是同一套方法勻速的在下棋,這樣的話對於計算量的分配感覺也是一個可研究和提升的方向~。
- 個人覺得這裡還是有值得改進的地方。一是或許能引入局部判斷的概念,但是這個可能對於當前系統不是特別容易,因為整個系統是基於全局判斷的。
- 那還有一個辦法是把整盤棋看成一個時序序列數據,在棋局進行到不同階段的時候,動態的選擇兩種評估方式的權重,而這個參數的調整也是作為模型訓練的一部分,這樣的話感覺可以引入反饋神經網路(RNN)啊~ 這樣會不會下棋更有邏輯性一點呢~
- 在圍棋中形狀是很重要的,但不僅僅是幾何圖形,還有拓撲結構(比如兩塊棋的連接是直線連接還是繞一圈連接,其實差別不大;厚勢的形狀是筆筆直的還是有一些扭曲的差別也不大,重要的是其中有沒有斷點;一坨棋里有一個眼,兩個眼,還是十目以上的大空,差別是挺大的)。
- CNN是很擅長學習幾何圖形的, 但是對於拓撲結構好像沒什麼關注。
- CNN還有一個問題可能是,CNN具有對於輸入圖像的平移不變性,但是圍棋里類似的結構,角部邊部和中部的局部變化差別其實是比較大的,不知道CNN能不能區別對待。
- 還有一個我看到木遙提出的很有意思的觀點是,目前AG的performance measure是最終局面的勝負,也就是說贏多贏少沒區別。它的棋風也偏穩健,古力也說有當年石佛李昌鎬的風範。如果能把performance measure改成輸贏的多少的期望的話,會不會培養出一個棋風犀利的圍棋AI呢~
- 不管怎麼說AG帶給圍棋界,計算機界乃至全世界都是非常深遠的影響。
- 我在看比賽的那段時間裡也去網上的圍棋對戰平台下了幾局棋,我碰到好些人都說自己是看了AlphaGo和李世石的比賽後,來重溫一下自己當年學棋和下棋的經歷。
- 這項據說吸引了全球一億觀眾的對決也讓圍棋這個代表著人類智力最高成就的古老博弈遊戲受到了中日韓歐美以及全世界的關注(據說柯潔的微博粉絲好像幾天里就漲了幾十萬,古力也去開了微博)。我也想強烈安利大家去學圍棋,尤其是學齡前兒童~ 谷歌的這個現象級的成果應該也會給計算機領域注入巨大的能量。他們至少向全世界顯示了目前學界對於Deep Learning和AI的研究是可以有fancy的成果的,至少方向上不會錯的太離譜。這也給計算機科學家們以更大的信心在今後開更大的腦洞獲取更多的研究經費吧~
- AG還遠遠沒有達到圍棋之神的境界,而我們追求人工智慧的道路也還很漫長~
最後推薦兩篇我覺得寫的最好的評述:
- AlphaGo的分析 - 遠東軼事 - 知乎專欄AlphaGo的分析 - 遠東軼事 - 知乎專欄 田淵棟博士應該是除了DeepMind團隊自己的人以外,對於AG最了解的研究者了~
- 觀棋錄 | Imaginary 作為一個不搞AI也不會下圍棋的數學phd,木遙的觀點感覺異常的犀利啊~
我覺得EV可能是容易被人忽視的一點,他和神經網路無關,但是至關重要。
有人說是機器一直在選擇獲勝概率最高的下法,其實嚴格來說是選擇EV最高的下法,只不過最終結果只有一個,勝利或者失敗,是一個常量,所以被認為是概率。EV也可以用來打撲克,德州撲克的頂尖高手基本上都是EV打法。
人類目前的圍棋理論似乎主要是以V來判斷形勢,而不是EV,即便是計算全局的目數,也是用EV估算更為精確。事實上之前的CrazyStone,Zen已經在用EV來下棋,只不過他們水平還不夠,人們沒有足夠重視。
用V來評估形勢有個問題,就是當價值相同的時候,可能有一點是90%的概率,另一點是10%的概率,這時候明顯應該選擇90%的那個點,但現有的圍棋理論不能幫助人們做出最正確的選擇,人類也不大可能算得清一步棋的概率是多少,這導致人類棋手的很難選出最優解,尤其是情況變得複雜以後。
我覺得人類棋手今後可能很難贏電腦了,因為如果要算EV的話,真的還是用電腦算比較精確和快速,這就類似於一個複雜的算術題,人類連計算器都干不過,更別說高配置的電腦。人類之所以沒有去算EV,可能也是因為這個東西人類很難算清,而「感覺」對EV這種東西也無能為力。
對了,德州撲克如果保持+EV的話,整體上就不會輸錢了。圍棋的話,我想如果能夠每一步都選擇最大的EV,基本上很難輸了吧?谷歌AlphaGo大勝人類冠軍李世石,交大文科軟妹紙程序員和創業者鼓勵師訪談谷歌工程師,解密背後的演算法。歡迎廣大工科技術男關注程序員和創業者鼓勵師(微信公眾號),歡迎拍磚。
谷歌工程師給文科妹紙聊AlphaGo
許丞:谷歌中國第三位工程師,之前在谷歌參與谷歌中國地圖,谷歌地圖以及谷歌光纖網路等項目,
現創業擔任心橙互聯信息技術有限公司的CEO。
2002.9-2005.7 北京大學計算機
2005.7-2006.2 IBM
2006.2-2010.4 谷歌中國
2010.4-2015.5 美國谷歌
最近,AlphaGo和李世石的圍棋大戰刷爆了朋友圈,之前的比賽AlphaGo首次擊敗人類圍棋冠軍,朋友圈都在轉發人工智慧的前景有多麼樂觀,其在未來發生的應用場景會非常多,機器代替人類的一天將在不久會出現。隨著2016年3月13日李世石第一次取勝AlphaGo,朋友圈又引起了一片嘩然,都是對人類充滿了希望,感慨人類未來會越來越好,未來的世界還是人類主宰。AlphaGo的出現,無疑反應了谷歌的技術實力,研究水平之深。今天,我們採訪曾經的谷歌中國第三位工程師,許丞,李開復的50大弟子之一,試圖從一個谷歌人的角度談談AlphaGo與李世石的這場激戰。
Q1: 您之前在谷歌有從事過人工智慧相關的工作嗎?
A1: 老實說,其實沒有。。。我在谷歌參與的項目主要有谷歌地圖搜索,谷歌生活搜索以及谷歌光纖網路。我參與過使用機器學習的項目,比如條件隨機場進行命名實體識別和Logistic Regression做點擊概率預測,但是沒有直接做跟Deep
Learning等相關的項目。
有兩個項目可能跟目前熱得發紫的深度學習相關的吧:
在谷歌我們有一個去學習深度學習的codelab,工程師都可以去學習如何使用像DistBelief(第一代谷歌大腦項目)來進行實驗研究。我研究過如何用DistBelief去完成MINST手寫數字識別,我寫的程序還進了後來的tutorial。之前的研究者如果要去做手寫數字識別,需要自己先定義好各個features,
然後再訓練模型。谷歌大腦系統完全不用寫features,直接把原始手寫數字標註好,直接讓機器去尋找最好的features並生成模型。這個過程簡直太奇妙了。
第二個項目是在參與谷歌光纖網路項目的時候,我們需要去用計算機視覺的方式去解決一個物體識別的問題。簡單來說的話,就是從街景車的全景圖裡面,用谷歌大腦去識別是不是有電線杆子,聽起來這個電線杆子沒什麼用。。。。嗯。。。在做光纖布線的時候還是有用的。街景圖裡面去識別物體已經用在了抹去車牌或者說隱私保護的很多場景下,經過對比測試之後,目前我知道的數字是谷歌大腦識別這些數字或者名字的能力已經超過了人眼。
Q2:AlphaGo為什麼可以下圍棋?之前深藍擊敗卡斯帕羅夫的時候是用了什麼原理?呃。。。計算機是怎麼可以下棋的?
A2: 計算機下棋的一個基本原理就是在狀態空間上進行搜索。。。。嗯,太專業了是吧?好吧,那我們用一個簡單的方式來描述一下這個過程。
我們把圍棋簡化一下,簡化成一個叫做九宮棋的棋類遊戲。
這個棋就是個簡化版的五子棋,規則就是誰能把3個棋子連一片,就算贏(這也太簡單了吧?圍棋比這個可複雜多了。。。嗯,所有的抽象模型都是由簡單開始的)。
我們把每個棋的一個形態當做一個狀態,把所有的可能性都作為它的子狀態。那麼久可以形成一個如下類似的一顆樹,這顆樹就叫做博弈樹。
這樣的一棵樹基本上把自己接下來可能的步數,以及對手可能走的步數都模擬了一遍,這就是大家下棋的時候所說的能夠往後看幾步了。看得步數越多,顯然贏的可能性就越大,因此就越厲害。
對於九宮棋(三子棋),所有的狀態空間是一定的,所以其實是能夠知道必勝的走法的。但是對於圍棋或者象棋來說,每一次可能的步數都很多,這樣每多看一步,就產生很多倍的新的狀態空間,對於機器來說,可能就會內存不夠或者時間不夠了。
因此大家會定義一個用來評估當前局面的函數,叫做評估函數。比如拿九宮棋來說,可以有很多,比如那可以是目前已經連成2個子的個數,或者任然空著的行列對角線的個數等等。評估這個局面可以告訴計算機,目前我這一步的情況如何,是不是很好。
對於某些特別不好的局面,那麼評估之後就會被剪掉,這叫做剪枝法。因為博弈樹是一個下完一個,另外一個跟著下,因此剪枝的方法一般用的是α–β剪枝法(Alpha–beta pruning)
通過這顆搜索樹,那麼機器就知道如何下子跟走棋了。
Q3: 這樣就明白了。那麼《自然》論文的AlphaGo的原理是什麼樣的呢?跟剛剛講的一樣嗎?
A3:其實所有的計算機下棋的程序抽象來看都是上面那個的過程。只是因為難度不一樣,所以具體的演算法複雜性也會有巨大的區別。
AlphaGo最厲害的地方是用人工神經網路來建模了「棋感」這一個完全無法用計算機語言來描述的概念。通過上面的學習我們可以知道,評估一個棋局的局面實際上可以用簡單的函數來描述,也可以通過往後看幾步來分析。這個評估函數建模了棋局的勝負概率,因此至關重要。人類經過訓練之後,能夠比較快速的去數目並判斷棋盤的局勢,但是機器顯然很難(對於計算來說,數數顯然是很快的,但是圍棋的目數和局勢顯然不是單純數一下數目)。
AlphaGo的幾個核心部分是
1.
Policy Network: 用來預測如果是人類最好的選手,他會選擇哪一個走法。這個模型是用深層神經網路實現的,其實是建立了最好棋手棋感的一部分。
2.
Fast rollout: 快速走子,跟1的功能一樣,但是用了不同的模型,這個模型跟預測點擊率的Logistic Regression模型沒有區別。
3.
Value Network: 評估當前的棋局形勢。
4.
Monte Carlo Tree Search: 蒙特卡洛樹搜索。用來進行狀態空間的快速搜索的概率模型。
拿著剛剛學習的東西來對比:
Policy/Value Network是對比與上文說的評估函數。在上面的搜索樹裡面用了一個簡單的數數的方式,而在AlphaGo中,用的是棋感和預測走子的方式來進行構建狀態空間。
而蒙特卡洛樹搜索是一個概率搜索演算法,跟上面的博弈樹搜索是一個套路的東西,只是用的是概率模型來進行更有效的搜索。
Q3: 太複雜了沒看懂,那麼你直接告訴我。。。他的貢獻是什麼吧?
A3:建立了棋感是很重要的貢獻。人和機器根本的不一致在於: 如果你給他看一個圖片;
對於機器而言,他看到的都是0/1這樣的二進位數字,除了最基礎的可以去數裡面有多少不同顏色什麼信息以外,啥都不知道。而人可以從全局的角度看這個圖片,這樣就能知道這個圖片大概是什麼東西,是什麼內容。
棋感也是一樣 - 人工神經網路應用在計算機視覺上的重要突破,就是人不再讓計算機用0/1來去識別圖像內容了,而是讓計算機自動的去抽取圖像的語義特徵--當然很可能只是一個一個小圖塊tiles這種組合方式的語義特徵。這樣計算機就可以開始慢慢的能夠開始感知到這個物體可能是什麼特徵通過線性組合出來的。慢慢的也就形成了概念。而棋感就是類比於這樣的概念!
其二是增強學習。也就是說計算機可以開始通過自己和自己進行比賽的方式來提高自己的模型的精度。在此之前,所有的機器學習大部分都可以說是監督學習,人類在扮演著一個家長的角色,不停的告訴自己的計算機模型說這個是對的,這個需要修正。而現在在AlphaGo中,他們實現的無監督學習已經可以讓人不用再去當家長,他們左右互搏也能學習到非常強的知識。這個結果非常可怕。
Q4:目前不管是AlphaGo戰勝李世石還是李世石戰勝了AlphaGo ,這場人機大戰對未來會有什麼影響呢?
A4:我認為這個影響將會是巨大的。在此之前,雖然人工智慧,機器學習也算是人盡皆知的辭彙,但是此次新聞的傳播影響之大,從來沒有過讓普通人去這麼去關心人工智慧的進展。這次人機大戰可以說是影響力全面超越了卡斯帕羅夫深藍大戰那次。可以預言人工智慧在接下來的幾年之內一定是最熱的熱點話題,可以想像會有更多大學生投入到其中的學習和研究之中,也可能會讓投資更多的聚焦於這個領域,更多的應用和場景,進而會產生讓人不可思議的結果。
AlphaGo中的技術和演算法顯然不會只用於下棋,有意思的是歷史上的每一次人機棋類大戰都會帶來更多新技術的進步。1989年我的老師李開復博士帶著他的實習生在奧賽羅比賽中,利用統計學習打敗了當時的世界冠軍。也許當時對大部分的人來說,其實也僅僅是一次人機大戰而已。然而那次之後,統計學習在非特定人語音識別系統開始發揮無與倫比的作用,傳統的基於規則的語音識別系統被打得找不著北。現在我們能用到的siri, 自動電話應答機都是從此變為現實。更重要的是,從此之後,統計學習理論基本上統治了整個機器學習這個學科的所有研究方向,延續了差不多20多年。今天,風水輪流轉,曾經被認為沒前途的神經網路技術捲土重來,通過深度學習的方式再次讓人類在視覺識別,棋類競技等項目上敗給機器,重新佔據了學術研究的焦點。這是一場計算機智能革命,這些比人機大戰結果的更有現實意義。我相信,隨著這些演算法應用到計算機視覺,自動駕駛,自然語言理解等領域,AlphaGo及其帶來的人工智慧革命必將改善我們所有人的生活。
說人話!5分鐘帶你看懂阿法狗。
寫在前面的話:
昨天天的結果也出來了,李世石試圖用比較攻擊性的打法,結果還是完敗。
作為一個算是勉強會下圍棋的IT從業者,心情有點複雜。一方面我知道計算機戰勝人是遲早的事情,另一方面卻沒有想到李世石會敗得這麼徹底。
或許大時代的潮流終會將一切碾壓而過,卻總會留下一些落寞的身影。
平心而論,李世石下的不太好,但是首次面對機器人,其實壓力之大,是不可想像的,李世石勇敢的做了第一個吃螃蟹的人,值得我們尊敬。
計算機下棋的歷史:
其實AI下圍棋已經有了快20年了。之前我們沒有太關注,是因為還不夠強,印象中最好的AI有業餘5段的水平。
1997年,IBM公司的「深藍」計算機戰勝了國際象棋世界冠軍卡斯帕羅夫,然後大概是2006年,人類最後一次戰勝過計算機。因為國際象棋的規則簡單,下法也比較固定(兵不能後退,象只能斜著走什麼的),IBM憑藉單純的硬體堆疊,用最粗暴的方式。計算所有下一步,之後的可能性,就直接解決了問題。
為什麼圍棋那麼複雜?
國際象棋所有的可能性性是10^47,1後面跟著47個「0」。
但是圍棋不一樣,19*19 的交叉點中蘊含了2*10^170種可能,就是2後面跟著170個「0」。這個數字大到什麼概念呢?
全宇宙的原子數量是10^80,也就是全宇宙每個原子代表一張棋譜,都還差得遠。
大家不要小看那幾個「0」,給大家用面積表示下。
請看看上面的圖,圍棋可是整整比國際象棋多了127個「0」,每一個0都會呈現幾何級的增大,大家想想一下相差127個「0」面積差多少吧,反正我的電腦是畫不出來了。
所以這這種情況下,阿法狗被研究出來開始了。下面正式開始介紹
學習狗
從前,有一隻學習狗。這隻狗很喜歡看人來下棋,並且能記住看過的每一盤棋。我們管他叫學習狗。在初期,他學習的是西方國家的人在QQ遊戲中下圍棋的棋譜。
然後他記住,哦,當出現這個局面的時候,下在天元會輸,下小目會贏。他只會做輸贏判斷,其他一概不知。
請大家記住他的技能,學習狗過目不忘。
但是下著下著,他發現自己總是輸,因為之前說過了,圍棋可能性太多,他學過的棋譜根本數量不夠。人類思考一下就能打敗他。
亂走貓
於是,他的鄰居--亂走貓出現了。這隻貓的特別是動作特別快,但是她懶得思考,從來不看棋譜。就是瞎走。然後她會記住,哦,這樣瞎走最後會贏,那樣瞎走最後會輸。
記住,瞎走貓,是亂走的,但是她能記住,怎麼亂走贏的可能性更大。
分身術
但是很快問題出現了,由於亂走貓總是亂走。沒人願意和她下棋了(廢話,誰這麼無聊啊)。於是亂走貓用了分身術,自己和自己下,並且記住怎麼會贏。
反正是自己和自己下,不想學習狗只是自己背棋譜,那當然可以用很多分身了。與是亂走貓每天能下好多盤。
題外話:當然,分身數量是有限的,不能無限分身,原因嘛,是因為谷歌給的經費是有限的,只能有那麼多機器。
什麼,你問如果要強行無限分身會怎麼樣?你拿你家電腦開一萬個網頁你就知道了。:)
合體!
但是當亂走貓和人類下棋的時候,還是輸。因為可能性太多,2*10^170種可能種呢。怎麼能下的完。
他們的主人--科學家想了想說,這樣,學習狗和亂走貓,你們一起來下。
如果出現的情況誰碰見過,並且知道該怎麼下就聽誰的。
他們合體後,當然就很厲害了,打遍電腦屆無敵手。但是和人類比賽有時候還是會輸。於是科學家再想辦法,這樣,你們分身出來自己和自己下,然後總結經驗。
注意,這個自己和自己下和當初的亂走貓完全不同,由於學習狗記住了棋譜。遇到有些情況,知道該怎麼下,亂走貓終於不會再亂走一氣了,但是學習狗的棋譜里,沒有的亂走貓就依據亂走的經驗來,他們的水平提高非常快。
學習狗與亂走貓的真身
其實學習狗就是IT界的「深度學習」,目前用於人臉識別,語音識別。由於需要大量的數據(比如很多棋譜棋譜),所以和大數據結合緊密。
大家最常用的應該就是---汽車駕駛導航。
亂走貓呢,就是大名鼎鼎的「蒙特卡洛搜索樹」他最大的特別是可以並行,可以理解成同時下很多種可能,把每種可能都分身成一盤新棋來下。
用處嘛,可以理解凡是排序都能用,比如你要某電商網站搜索北京最便宜的拖鞋。就有無數拖鞋相互比較價格,最終經過預賽、初賽、半決賽、決賽,得出冠軍。
但是遇到簡單的排序就排他的小弟就行了,不用他親自出馬
鬧矛盾
但是新的問題又出現了,一貓一狗配合出現了問題,他們先各思考,再合計,一合計就容易鬧矛盾。所以,他們特別慢!
指點鷹
科學家一看,好啦,大家不要吵了。
其實不就是對局面的看法不一致嘛,我給你們個專門看局面的傢伙--「指點鷹」。
這傢伙不用計算該怎麼下,專門看如果這樣下,勝率是多少。這樣速度就快多了。
為了防止,貓、狗、鷹。互相打起來。科學家定了個規矩。你們分別給出幾個候選,給了候選後就沒有學習狗的事情了。
剩下的決策者,亂走貓和指點鷹的意見各佔一半。偶像天團組合
然後整個組合的成員就都找齊了。學習狗、亂走貓、指點鷹成為給了一個天團組合,名字就叫SHE! 啊不!叫阿法狗。
為什麼叫這個名字
其實人家不是狗。。。Alpha是希臘字母的第一個。GO是圍棋的英文說法,翻譯過來應該是:圍棋一號。
不過我認為起名的時候,科學家想的是:奔跑吧,阿爾法!
然後科學家進行了一些人為的調整,讓阿法狗養成了這樣的習慣。
1、開始階段,先主要由學習狗來下。因為布局越經典,越不容易有錯誤。這階段不求有功,但求無過。
2、中盤後,逐漸由亂走貓接手,因為之後的可能性越來越小,很可能亂走貓已經走過一模一樣的局面。
3、指點鷹隨時輔助。
4、局部爭奪的時候,也由亂走貓接手。亂走貓把棋盤假設成只有5*5大小,然後集中精力來計算,這5*5裡面有多少種可能。
----------------------------------------------------分割線----------------------------------------------------
好了,阿法狗,基本上就是這樣一個東西,下面說一點私人的看法。
當然,目前阿法狗還在不斷和自己下棋,不斷進化,之後變成究極態,就幾乎沒有人能戰勝了。但是只要他還沒有下到2*10^170種情況,人勝利的可能就一直存在。
於怎麼戰勝他嘛,很簡單。
那就是李世石掄起棋盤砸向電腦!---這是門外漢的說法,人家的主機不在韓國啦,這麼多伺服器,得多大啊。得專門有自己的發電站、水冷系統、專門的保安和電工好嗎!
或者拔網線?黑客入侵?都行~~
好啦,換回嚴肅臉,估計下一個對手就是柯潔了。
我認為,只是我認為。唯一的勝算在開局階段,需要不斷的下一子換一個地方,跳出5*5的範疇。
也許,只是也許,能戰勝他,因為如果中盤後,還是勢均力敵的話。人類戰勝亂走貓的幾率幾乎為0
當然,李世石第一局也是這麼想的,當然結局大家看到了。阿法狗的科學家黃世傑,就是代替阿法狗落子那位,人家好歹業餘五段啊!
好啦,先寫到這裡,之後想到什麼再補充,歡迎大家留言討論。
然後也歡迎大家搜索h4cj250,或者掃描我的頭像二維碼關注。
我喜歡寫一些,關於歷史體育,遊戲的東西。。。
簡單來說,就是先隨便走,然後看哪種隨便走的方案勝率更高就選哪個…(即蒙特卡洛搜索樹演算法)。
看起來蠢爆了對不對?但計算機又不怕累!人類一天能下幾十盤棋就要吐血了,但Alphago直接就先開三千萬局練手,你怕不怕?谷歌工程師也對這一方向表示認可,「人類與電腦相比也有其自身的弱點,李世石每年可以下多少盤棋作為練習?也許一千盤?但Alphago可以下一百萬盤……每天。」所以,阿爾法狗實力是呈幾何倍成長,相比於人類,又沒有沒心理壓力的。
接下來具體坐下解釋吧:
在AlphaGo中,DeepMind研究員在程序中錄入了大量職業棋手的棋譜讓它自己下棋,研習棋譜。不過這只是第一步。理論上,這樣的訓練只能讓這個人工智慧系統無法突破人類的計算。為了獲得更好的成績,研究員隨後讓系統進行自我博弈,計算出比基礎棋譜更多新的打點。這其中最重要的是,AlphaGo不僅記錄著大量的棋譜,還有一系列規則來指導『思考』,該程序能夠通過機器學習的方式掌握比賽技巧。
DeepMind的技術核心結合了「強化學習」及其他人工智慧手段,這種技術能夠用於解決現實機器人執行物理任務和對環境作出回應的技術問題。就是說,要讓機器人變得更「自然」。
視覺判斷
國際象棋每一步平均只有35種可能性的走法,但是圍棋呢——在19*19的棋盤內,共有361個點,就機器學習的角度而言,圍棋的計算最大有3361種局面,大致的體量是10170,而已經觀測到的宇宙中,原子的數量才1080。國際象棋最大只有2155種局面,稱為香農數,大致是1047。
使用蒙特卡洛樹搜索技術,Crazystone等系統能夠進行更長遠的計算。而結合其他技術的話,它們能夠對可能性走法進行刷選,然後選擇出最優的策略。在大多數情況下,它們能夠戰勝人類選手,但不是最厲害的那一個。頂級大師中,走法很多時候依靠直覺——做棋除了需要計算,還有棋感——棋手能夠根據棋形分析攻防線路。
自我強化
深度學習要依靠神經網路技術,它是可以模擬人腦中神經元網路的軟硬體網路。神經網路不會依靠蠻力或預先輸入的規則,而是會分析大量數據,「學習」特定的任務。給神經網路提供足夠的喵星人照片,它就能學習識別喵星人;提供足夠的語音,它也會學習理解人類的語言;提供足夠的圍棋走法,它也會學會圍棋。
在經過3000萬步人類走法的訓練後,它的神經網路能以57%的準確度(此前記錄是44%)預測人類的下一步。然後通過強化學習技術,讓這一神經網路與它自己的另一個稍有區別的版本對戰。兩者互搏中,系統會評估哪一步效果最好,即佔領更多棋盤區域。最終,神經網路在判斷哪一步更好時會越來越優秀。
計算機網路
與其它神經網路一樣,DeepMind的系統運行在配備了GPU的機器上。GPU最初用於渲染遊戲圖像,但後來有人發現,它們很適合深度學習。DeepMind系統在裝備了一定數量GPU晶元的單一電腦上也可以用,還用上了更大的計算機網路,其包括170個GPU和1200個標準CPU。大的計算機網路訓練了同樣的系統並進行了實際對戰,還借鑒了訓練的結果。
幸而DeepMind的系統還在人類的控制之下。雖然他們用系統破解了複雜的遊戲,但這仍只是個遊戲。AlphaGo離人類智能還很遠,更不論超級智能了。下棋是一種高度結構化的情景,系統也沒有人類級別的理解力。
如果宇宙就是一局超大型的圍棋呢?
全程視頻直播觀看。
AlphaGo策略分析
逆向一下AlphaGo可能的策略:前半場,以定式和防守為主,每一步用時非常均勻,後半場,發起進攻(據說用了決策網路演算法),用時大大增加。
AlphaGo時間管理演算法分析
開發團隊對AI的認知定位非常清晰:計算能力,從而很好的控制時間。所以就時間分配上說,在「計算能力在30秒內窮可以盡所有盤面」之時(即將AI演算法降級為傳統演算法的邊界值,也是演算法穩贏邊界),將2小時用掉是最好的策略。而如何分配這不確定的2小時,AlphaGo將時間分成了2段,防守和進攻。
對於布局階段,AlphaGo使用了相對中庸的防守策略,主要是因為布局階段計算量巨大,所以將優先的計算能力投入到保守策略中,盡量不出會被人類利用的落子上,不留弱點。
在中盤偏後階段,AlphaGo明顯改變了計算策略,開始主動出擊,甚至積極打入製造機會。在AlphaGo在右側李的中腹打入的時候,主播甚至說,「我看到了李世石在笑」,因為那一步的確很激進無理(如下圖)。
最終這種嘗試取得了回報:不但先手將右側大龍補活,而且在右下角的打入也成功做活。當然,這跟李的失誤也不無關係。
AlphaGo有「邏輯」嗎?
從盤面上看,一家之言,應該可以斷定是沒有的,每一步是獨立的,並沒有人類對於局部棋盤判斷的「歷史包袱」。
AlphaGo的「失誤」
之前戰勝歐洲選手的棋譜上,很多人都說AlphaGo有一些失誤,包括今天的對局,當時也覺得有些落子下的有些奇怪,不合常理。後來轉頭一想,也許團隊在設計AlphaGo時,會有考慮場上情況,下出一些「即使失敗損失也可控」的非常規落子(新下法),從最終結果上看,這些「失誤」是成功的。全局一盤棋,所有的落子都對結果有影響和貢獻。從這一點上,我倒是希望AlphaGo保留這種下棋的方式,它增加了AI替人類探索未知的可能性。
李世石
李的失誤,對於第一次對局來說,可以接受。從李布局階段的下法來看,也有針對AI的落子,比如下了新定式,而且贏得有利的開局。
作為人類選手,在了解了AlphaGo的策略(而不是復盤)後,應該針對性的制定自己的策略。從現在所知的信息看來,開局部分人類應該努力擴大自己的優勢,並在進入中盤的時候鞏固優勢。
另外也要充分了解自己的弱點,避免孤注一擲。AlphaGo在最後連給李世石打劫的機會都不給,可以看到和人類不同,在計算到獲勝後,AI並不會迷戀戰鬥,而人類卻很難控制。
對於未來幾盤想看到的對局
1、第一局的戰爭基本是從局部帶入全盤,希望後面可以看到幾處同時開火的情況,看看AI是否會有短板;
2、下次李執黑時下模仿棋,讓AI和AI戰鬥,人類坐收漁利,也是一種玩法,當然李不屑;
3、希望Google在KGS上開放AlphaGo,然後人類組團戰AI,尤其想看老聶殺AI反被虐。
附棋譜:sgf
(;GM[1]SZ[19]PB[Lee Sedol]
PW[AlphaGo]
RE[W+R]
KM[7.5]DT[2016-03-09]TM[7200]RU[Chinese]
;B[qd];W[dd];B[pq];W[dp];B[fc];W[cf];B[ql];W[od];B[ld];W[qc]
;B[rc];W[pc];B[re];W[of];B[pg];W[og];B[ph];W[id];B[lf];W[oh]
;B[pi];W[lh];B[kh];W[ke];B[le];W[lg];B[kg];W[kf];B[ne];W[oe]
;B[jc];W[ic];B[jd];W[ie];B[je];W[jf];B[if];W[jg];B[li];W[mi]
;B[hf];W[ih];B[mb];W[gd];B[ki];W[mj];B[kk];W[ib];B[ob];W[ml]
;B[lm];W[nc];B[nb];W[kb];B[lc];W[mm];B[ln];W[kl];B[ll];W[lk]
;B[jj];W[jl];B[hj];W[hi];B[gj];W[gf];B[ii];W[jh];B[ij];W[mn]
;B[lo];W[mo];B[lp];W[mp];B[lq];W[mq];B[im];W[qo];B[fq];W[gg]
;B[cn];W[dn];B[dm];W[fp];B[gp];W[gq];B[fr];W[co];B[en];W[do]
;B[ep];W[cm];B[dl];W[lr];B[kr];W[rb];B[jb];W[ja];B[mf];W[mh]
;B[nd];W[qj];B[pj];W[qk];B[pl];W[pk];B[ok];W[rh];B[rl];W[qf]
;B[ri];W[rf];B[pf];W[qe];B[qh];W[cc];B[bn];W[bm];B[bl];W[bo]
;B[rg];W[mr];B[po];W[jr];B[kq];W[pn];B[oo];W[qp];B[on];W[pp]
;B[op];W[qq];B[or];W[pr];B[oq];W[pd];B[qr];W[rr];B[ps];W[rs]
;B[rn];W[ro];B[qn];W[so];B[cl];W[an];B[ks];W[om];B[ol];W[ci]
;B[hh];W[hg];B[dr];W[dj];B[bq];W[cq];B[cr];W[bp];B[dq];W[br]
;B[cp];W[ap];B[ek];W[fi];B[bj];W[bi];B[pb];W[qb];B[sf];W[rd]
;B[ai];W[ah];B[aj];W[bh];B[gi];W[fj];B[fk];W[oc];B[mc];W[cj]
;B[al];W[nm];B[pm];W[aq];B[gh];W[fh])
根據一些實際的經驗。。。深度學習這東西啊,有時候你讓他做一些不熟悉的工作他還不一定做不好。恩。那些訓練出來的weight有些還蠻奇特的,你用到別的上面去他還就是跑的不錯。
順便用深度學慣用得好超越人類那已經是過去式了。但是我最佩服Google的就是它能把深度學慣用到下圍棋上。一般深度學習最常見的用途是圖像和NLP就是所謂的自然語言處理,用在下圍棋上還是比較需要想像力的。推薦閱讀:
※如何看待人機大戰第四局李世石戰勝 AlphaGo?
※如何評價 AlphaGo 自我對弈 50 盤棋?
※類似AlphaGo一樣的人工智慧什麼時候才可以擊敗RTS(如星際)頂級選手?
TAG:神經網路 | 工作原理 | 深度學習(Deep Learning) | AlphaGo | Google DeepMind |