Ⅰ 「阿爾法狗」為什麼厲害
「阿爾法狗」為什麼厲害
來源: 人民日報
谷歌的圍棋人工智慧程序和人類圍棋冠軍之間的比賽,堪稱人工智慧發展的一個重要里程碑,也讓全世界的目光聚焦在人工智慧這個熱門科技領域。谷歌的人工智慧程序是怎樣贏了人類?人工智慧對人類來說到底意味著什麼,會帶來什麼?它會不會有一天在智能上也超過人類?
本版近期推出「關注『人機大戰』」系列報道上下篇,嘗試揭開谷歌圍棋人工亮局螞智能程序贏得比賽的秘密,並分享相關專家對人工智慧未來前景的預測。
——編者
從3月9日開始,一場人與機器的圍棋大戰吸引了全世界的目光。這場大戰在韓國首爾上演,一直持續到15日,共5輪。大戰之所以舉世矚目,是因為對戰的雙方是世界圍棋冠軍李世石與圍棋人工智慧程序AlphaGo。令人驚嘆的是,整個比賽過程中,AlphaGo的表現都堪稱完美,最終以4:1擊敗李世石。
這個戰勝人類世界圍棋冠軍的AlphaGo程序到底是何方神聖?它為什麼如此厲害?
「阿爾法狗」是什麼?
一款人機對弈的圍棋程序,棋藝不是開發者教給它的,而是「自學成才」
AlphaGo程序是美國谷歌公司旗下DeepMind團隊開發的一款人機對弈的圍棋程序,被中國棋迷們戲稱為「阿爾法狗」。游戲是人工智慧最初開發的主要陣地之一,比如博弈游戲就要求人工智慧更聰明、更靈活,用更接近人類的思考方式解決問題。
1997年,IBM的「深藍」計算機首次擊敗國際象棋世界冠軍卡斯帕羅夫臘啟,成為人工智慧戰勝人類棋手的第一個標志性事件。此後近20年間,計算機在諸多領域的智力游戲中都擊敗過人類。但在圍棋領域,人工智慧卻始終難以逾越人類棋手。直到2015年,由谷歌開發的這款「阿爾法狗」程序才首次戰勝歐洲圍棋冠軍樊麾。
為什麼對於人工智慧而言,圍棋的難度這么大?中國自動化協敬埋會副理事長、秘書長王飛躍說:「首先,圍棋的可能性太多。圍棋每一步的可能下法非常多,棋手起手時就有19×19=361種落子選擇。一局150回合的圍棋可能出現的局面多達10170種。其次,是規律太微妙,在某種程度上落子選擇依靠的是經驗積累而形成的直覺。此外,在圍棋的棋局中,計算機很難分辨當下棋局的優勢方和弱勢方。因此,圍棋挑戰被稱作人工智慧的『阿波羅計劃』。」
既然圍棋對於人工智慧來說這么難攻克,那麼對於AlphaGo程序的設計者來說,是否也需要具備很高的圍棋水平?
「這個不需要,設計者們只需要懂得圍棋的基本規則即可。AlphaGo背後是一群傑出的計算機科學家,確切地說,是機器學習領域的專家。科學家利用神經網路演算法,將棋類專家的比賽記錄輸入給計算機,並讓計算機自己與自己進行比賽,在這個過程中不斷學習訓練。某種程度上可以這么說,AlphaGo的棋藝不是開發者教給它的,而是『自學成才』的。」王飛躍說。
Ⅱ AlphaGo水平的中國象棋電腦可以後手贏得了中象第一人嗎
我我個人覺得二者之間不具有可比性,任何的競技類項目在二者沒有真正一決雌雄的時候我們沒有辦法做出任何預測。
中國象棋源遠流長博大精深變化多端豈是區區一個阿爾法狗只能可以贏得了的?雖然我很想這么說就是了,但如果真要讓阿爾法狗和我國象棋第一人來一局棋盤比拼,我們的第一人怕也是要輸的非常難看了,畢搭搜竟柯潔已經現身說法了。就像在今天之前,我們還滿懷希望柯潔能夠戰勝阿爾法狗,維持住自己世界第一的排名,為全人類贏得勝利,但就目前第一局的狀況來看,似乎是不可能了。第一局柯潔以四分之一目輸給了阿爾法狗,這看似是一個非常小的數字,然而這卻是阿爾法狗一再退讓的結果。柯潔在中盤落後幾十目,跟阿爾法狗之間實在是實力懸殊。但阿爾法狗畢竟只是智能而不是人,在它的概念里,贏幾十目和租敗贏四分之一目都是贏,也正是這種程序讓他不斷退讓維持了剛好能贏的水準。聶衛平在第一局後作出預測稱柯潔將0:3輸給阿爾法狗,對於這個預測結果我是不能接受的,韓國選手李世石都拿下一局,為什麼柯潔會三戰皆敗呢?從個人角度來說,我還是希望柯潔能夠奇跡般的贏知型歷得勝利。
再說說世界幾大棋類、象棋、圍棋、國際象棋、將棋,一般來說這四個比較出名也是最常見到的,而對於大部分玩兒棋的人來說,如果硬要給它們分級的話,圍棋最難、將棋其次、再然後是象棋、最後是國際象棋。目前開發的象棋軟體雖然還沒有打敗象棋選手冠軍的先例,但在國際象棋來說,現有的國際象棋的軟體已經打敗過國際象棋的世界冠軍選手了,估計象棋被打敗也是不遠的事情了,更別提阿爾法狗出手了。
Ⅲ 阿爾法狗的原理是不是在固定的范圍沒窮盡所有可能然後選擇估值高的 打個比方國際象棋當中第一步有20個
不是的。圍棋是三維的。阿爾法狗是真正的人工智慧,有自己的學習方法。
Ⅳ 【轉載】AlphaGo原理解析
這些天都在沒日沒夜地關注一個話題,谷歌人工智慧程序AlphaGo(國內網友親切地稱為「阿爾法狗」)以5:0擊敗歐洲職業圍棋冠軍樊麾二段,並在和世界冠軍的比賽中2:0領先。
什麼!!
19年前計算機擊敗國際象棋冠軍卡斯帕羅夫的情景還歷歷在目,現在計算機又要來攻克圍棋了嗎!?
虛竹在天龍八部里自填一子,無意中以「自殺」破解「珍籠」棋局,逍遙子方才親傳掌門之位。難道以後「阿爾法狗」要出任逍遙派掌門了?
1933年,東渡日本19歲的吳清源迎戰當時的日本棋壇霸主、已經60歲的本因坊秀哉,開局三招即是日本人從未見過的三三、星、天元布陣,快速進擊逼得對方連連暫停「打卦」和弟子商量應對之策。隨後以「新布局」開創棋壇新紀元。難道阿爾法狗會再造一個「新新布局」?
作為一個關心人工智慧和人類命運的理科生,近些天刷了好些報道,記者們說「阿爾法狗是個『價值神經網路』和『策略神經網』絡綜合蒙特卡洛搜索樹的程序」,但我覺得光知道這些概念是不夠的。我想看看「阿爾法狗」的廬山真面目。
准備好棋盤和腦容量,一起來探索吧?
圍棋棋盤是19x19路,所以一共是361個交叉點,每個交叉點有三種狀態,可以用1表示黑子,-1表示白字,0表示無子,考慮到每個位置還可能有落子的時間、這個位置的氣等其他信息,我們可以用一個361 * n維的向量來表示一個棋盤的狀態。我們把一個棋盤狀態向量記為s。
當狀態s下,我們暫時不考慮無法落子的地方,可供下一步落子的空間也是361個。我們把下一步的落子的行動也用361維的向量來表示,記為a。
這樣,設計一個圍棋人工智慧的程序,就轉換成為了,任意給定一個s狀態,尋找最好的應對策略a,讓你的程序按照這個策略走,最後獲得棋盤上最大的地盤。
如果你想要設計一個特別牛逼驚世駭俗的圍棋程序,你會從哪裡開始呢?對於在知唯盯谷歌DeepMind工作的黃士傑和他的小夥伴而言,第一招是:
蒙特卡洛搜索樹(Monte-Carlo Tree Search)是一種「大智若愚」的方法。面對一個空白棋盤S0,黃士傑的老師Coulum最初對圍棋一無所知,便假設所有落子方法分值都相等,設為1。然後扔了一個骰子,從361種落子方法中隨機選擇一個走法a0。Coulum想像自己落子之後,棋盤狀態變成S1,然後繼續假設對手也和自己一樣二逼,對方也扔了一個篩子,隨便瞎走了一步,這時棋盤狀態變成S2,於是這兩個二逼青年一直扔骰子下棋,一路走到Sn,最後肯定也能分出一個勝負r,贏了就r記為1,輸了則為0,假設這第一次r=1。這樣Coulum便算是在心中模擬了完整的一盤圍棋。
Coulum心想,這樣隨機扔骰子也能贏?運氣不錯啊,那把剛才那個落山飢子方法(S0,a0)記下來,分值提高一些:
我剛才從(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()來扔。
如果某一步被隨機到很多次,就應該主要依據模擬得到的概率而非P_human。
所以P_human的初始分會被打個折扣:
這樣就既可以用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匹配起來就得到了一系列<s,a>,設定目標為最後的總得分r,我們可以訓練一個神經網路去擬合在狀態s下,做動作a的總得分。下一次玩游戲的時候,我們就可以根據當前狀態s,去選擇最後總得分最大的動作a。通過不斷玩游戲,我們對<s,a>下總得分的估計就會越來越准確,游戲也玩兒得越來越好。
打磚塊游戲有一個秘訣:把球打到牆的後面去,球就會自己反彈得分。強化學習的程序在玩了600盤以後,學到這個秘訣:球快要把牆打穿的時候評價函數v的分值就會急劇上升。
機器學習的開山鼻祖Samuel早在1967年就用自對弈的方法來學習國際跳棋[7],而之前的蒙特卡洛搜索樹也是一個自對弈的過程。但是現在黃士傑不僅有一個從人類對弈中學習出的P_human這樣一個高起點,而且有一個神經網路可以從對弈樣本中學習,有理由相信這次會有更好的結果。
黃士傑准備在MCTS框架之上融合局面評估函數v()。這次還是用P_human作為初始分開局,每局選擇分數最高的方案落子,下到第L步之後,改用P_human_fast把剩下的棋局走完,同時調用v(SL),評估局面的獲勝概率。然後按照如下規則更新整個樹的分數:
前兩項和原來一樣,如果待更新的節點就是葉子節點,那局面評估分就是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)的越來越精確的估計,但即使引入了「左右互搏」來強化學習,黃士傑和團隊仍然做了大量的細節工作。所以只有一步一個腳印,面對挑戰不斷拆解,用耐心與細心,還有辛勤的汗水,才能取得一點又一點的進步,而這些進步積累在一起,終於讓計算機達到並超過了人類職業選手的水平。
Ⅳ 千奇百怪!國際象棋比賽疑用智能肛珠作弊,國際象棋AI能否擊敗人類
國際象棋AI能擊敗人類。實際上早在1997年的時候IBM深藍當時就已經擊敗了國際象棋的冠軍。從這之中我們也能夠看出來AI與人類悉液的區別,還有像之前的阿爾法狗也戰勝了冠軍的圍棋選手。因為這些AI的學習方式是非常多變的,也就是說他們會根據實際的戰局情況作出最全面的分析,等於是做了數據模型一樣。把所有的結果全部預測到了,然後再根據對方下棋的節奏來選擇下一步應該走哪一步棋。其實就是一種大數據上的碾壓,我們自身平時在下象棋的時候也有和電腦對戰的開關,那麼我們發現在與電腦對戰的時候,總能夠找到最優解。只是人力與機器相比的話,是有著非常大的差距。可能人類在幾十年才能夠學會的東西,機器在短短的時間就能學會,並且能夠比人類做得更好。
Ⅵ 中國象棋AI實現
喜歡下象棋的朋友都知道,象棋的博弈更像是一場堅持到最後才是勝利的游戲。阿爾法狗和柯潔的國際象棋的博弈在當時可以是引起了一場轟動的,人工智慧的出現更是改變了很多東西。這應該算是一個重大突破,在一個以人為智力博弈的游戲中,AI的出現的對決是一場突破人的游戲,機械人自然人的智商,其實也在說明了時代的大潮流發展,未來的世界毀慶的正朝著新領域去發展。
我們知道如果從計算機統計的步數的復雜和空間的復雜上來講,相對來說搜索比較容易實現了,只要模擬一下博弈樹,再進行極大值和極小值的搜索 + 剪枝,難么一個DFS就完成了。 舉個例子,我們都知道,每一步有很多多子可以走,每一個子有那麼多步可以走。如果要思考很多層,那博弈樹就太大了。
這兩塊演算法寫出能跑的不難,寫出能PK過自己的AI也不難,但要真的要寫好是個巨大的坑,要量化自己演算法的好壞就是和開源演算法進行對弈,在相同開銷下比勝率,或者勝率相同比開銷。