AlphaGo究竟是如何「思考」的?用國中生也能懂的語言說給你聽

原來,機器學習根本是一種「巨大數據資料的統計、歸納」,而不是「機器對《台灣小吃札記》感到有興趣,所以想主動學習,讓自己變聰明。」這篇文章雖然無關小吃,但它是我在媒體圈五年來,寫過最滿意的一篇報導,放在這邊留念一下。
記者黃郁棋/特稿 

我想,應該不必前情提要了吧?Google Deepmind推出的AlphaGo人工智慧圍棋程式,在與李世乭九段的大戰中,以五戰四勝的優異成績成功打響了名號;而AlphaGo的主要開發者之一,就是來自台灣的黃士傑(另外一位是David Silver,論文上只有他們兩人被打上星號)。有趣的是,黃士傑3月18日在台灣Google總部的記者會上,被問到「第四盤輸掉的原因」時,他坦承自己直接就從會場回到台灣了、還不知道原因,「同事們也還在尋找問題點」。為什麼身為開發者、卻無法很快速的找到關鍵所在呢?這個就必須從「機器學習」(Machine Learning)的原理說起了。

說到「人工智慧」、「機器學習」,很多人可能會直覺聯想到電影《魔鬼終結者》中的「天網」。電影中的天網,有著自我意識、有著「主動決定去做什麼」的判斷力,但是有一天,這個人工智慧忽然判定人類是威脅它們的物種,所以決定將人類「毀滅」。這是多數人對於人工智慧的認知,也因此在AlphaGo不斷拿下勝利的時候,許多有趣的段子出現了:「我最怕的不是AlphaGo贏,而是他能贏卻假裝不能。」


事實上,這是一般人對於人工智慧欠缺瞭解,才會誕生的美麗的誤會。如果換一個角度來形容機器學習,可能就比較不會讓人誤解了:所謂的機器學習,其實是從大量的資料當中,自動找到關聯性,進行統計與歸納的一種動作;而這種動作,又分成了「監督式學習」(Supervised learning)以及「非監督式學習」(Unsupervised learning)。一開始就有答案、知道正確結果,再丟資料給電腦、讓電腦找出規則的學習法,是監督式學習;而非監督式學習,就是在沒有正確答案、不知道結果的情況下,還是將資料直接丟給電腦,讓電腦自己去判斷、統計數據結構之間的關係,但是這種結構關係,我們很可能並不知道它背後代表的意義是什麼。


打個比方:有在用「Google News」看新聞的民眾,應該都知道Google會自動將同一件事情擺在一塊兒,讓你方便就一個事件,看不同家媒體的報導,而且分類速度非常快,24小時都在運作。這是如何做到的呢?其實Google News並沒有血汗編輯沒日沒夜的在做分類,這一切都是靠著「機器學習」在自動判斷:它可以從各家媒體報導的內容當中,找出同一個事件本身的關聯性、將它們擺在一起,方便人類閱讀,但是Google News本身其實並不知道這則新聞所代表的意義。

不知道看到這邊,大家是否有種恍然大悟的感覺(還是說,只有我自己在那邊恍然大悟):原來,機器學習根本是一種「巨大數據資料的統計、歸納」,而不是「機器對《台灣小吃札記》感到有興趣,所以想主動學習,讓自己變聰明。」事實上,在3月18日的記者會上,就有記者對黃士傑提問:距離電腦有自我意識、會主動出擊學習,還有多遠的距離?


黃:「就我所知,還非常遙遠,現在才是剛起步而已。」
記者:「那大概可能會需要多久的時間才能做到?」
黃:「這個我真的不知道,你等於要我當一個預言家(笑),我真的不知道。」

目前的機器學習,或是所謂的人工智慧,其實跟「機器具有意識、具有想法、具有私心、具有自己想做的事」,幾乎扯不上關係。所以,自然短期內也不會有「天網」這種足以毀滅人類的高級人工智慧出現。(當然,未來會不會有,還很難說。)

我有一位朋友,他的專業剛好就是機器學習,聽他在形容這門專業時非常有趣:

「Machine Learning有時候會這樣:預測得很準,不知道為什麼。預測失靈了,我還是不知道為什麼。然後過一個月又好了,我...。」


▲網友惡搞的照片。(圖/路透社/達志影像)

這其實也解釋了黃士傑為什麼無法在短期之內找到AlphaGo輸掉的原因,理由很簡單:現在AlphaGo,是經過了KGS Go伺服器「3000萬筆下子佈局資料」的輸入後,再進行自我對弈所產生的結果,它無時無刻都在改變,包括現在也依舊在學習當中。今天它在某個環節判斷失準的時候,其實要找到原因是相當不容易的:因為,你不知道是哪些資料「教壞」了他。有可能在AlphaGo與李世乭的第四盤對弈結束後,AlphaGo就已經自動排除了錯誤,下一次就不會再犯同樣的錯。

我在看大陸《知乎》論壇的時候,發現有人對於AlphaGo「慘電」李世乭的情況,是這樣敘述的:

「或許,機器贏了比賽,才算是捍衛了人類的尊嚴。」


AlphaGo對李世乭九段的勝利,絕對會成為圍棋史上的里程碑:它意味著人類的智慧結晶,已經更上了一層樓。當然,某種程度上它也確實讓人沮喪,畢竟人類能夠贏機器的東西不多了,現在看來又要少一樣。這就好比人類發現跑得最快的汗血寶馬,再也追不上隨隨便便一台汽車的時候一樣,感受到的衝擊絕對是驚人的。

我知道對很多人而言,探討「AlphaGo是如何下棋的」這件事,可能本身就興致缺缺;但我還是想簡單介紹一下,AlphaGo的厲害之處到底在哪裡,為什麼2013年的時候,圍棋程式「Zen」還如此的青澀,過了兩三年,「AlphaGo」卻震撼了全世界。我盡可能簡單介紹一下,電腦下棋的原理,以及AlphaGo的特別之處;資料參考的部分,絕大多數是引用了金門大學助理教授陳鍾誠的教學簡報「用三份投影片講解 AlphaGo 的設計原理」,並且獲得陳老師的同意。


▲陳老師試圖用簡單方式,解釋AlphaGo的下棋邏輯。(影片/陳鍾誠製作)

以下介紹較為複雜一些,趕時間的讀者,我很感動你看到這裡了,你大概已經贏了99%的台灣讀者;放心離開吧,我不會怪你的。如果你繼續看下去,我也不會特別感激你,但是你可能會從中學到一些東西。

一、電腦是如何下棋的?先從最基本的「極小極大演算法」說起

最簡單的邏輯就是,電腦去判斷「所有他可以下棋的點」,每個點下下去之後,所得到的效果,給他定義一個分數。例如說五子棋,你下一顆、可以得1分,連成兩顆得5分,連成三顆得20分,連成四顆得50分,連成五顆得10000分(獲勝)。讓電腦選擇「最貪婪的地方去下」,哪裡分數多、就優先下在哪裡。

然而,這還不夠:我們必須把「對手」也給算進來。這時候,對手的下子也會影響分數,換句話說,我們必須替電腦加入「對局搜尋」的功能,讓電腦除了選擇「最貪婪」的地方下子外,也要考慮到所有下法裡面,最不容易失分的那一個選擇。這種「對局搜尋」有一個很明確的做法,叫做「MinMax」極小極大演算法。


▲極小極大演算法的基本邏輯。(圖/Wikipedia/CC License)

這種「極小極大演算法」,它必須在貪婪得分的時候,兼顧到「最糟情況下失分最少的路」。從圖例我們可以看到,「0、2、4」這三層,電腦選擇了最小的路,因為它是敵方可能的下子位置,必須將傷害降到最低。而「1、3」這兩層,因為是我方的下子,所以要選擇得分最大的路。到最後我們會發現,右邊數來第二條路「-7」成為了最佳解答:因為它在可預見的將來,是傷害最小、我方得分最大的路。這種做法的背後,其實說穿了就是窮舉法。

二、但是,「窮舉法」遇到圍棋是行不通的

可能還有很多人認為,AlphaGo是將所有棋路的可能性都算完了,所以才這麼厲害!其實,並不是這樣子的。如果以每步有19*19=361種可能性的圍棋來說,它光計算到第二層,就已經出現了「361*360=129,960」種可能!再算到第三層,就有4700萬種可能,第四層有160億種可能,第五層有6兆種可能。就算你使用超級電腦、運算速度再快,也不可能運算到超過十層(36兆個兆)!

因此,黃士傑在記者會上也很明確的說明了,如果想用電腦暴力窮舉的話,幾億年也窮舉不完!這就是圍棋的困難所在。


▲黃士傑解釋,對圍棋使用窮舉法是不可能的。(影片/記者黃郁棋攝)

三、解決方案第一種:Alpha-Beta修剪法!

所謂的「Alpha-Beta修剪法」(Alpha–beta pruning)其實說穿了,就是「把一些已經確定不可能會改變結果的分枝給修剪掉」!當分枝被修剪掉越多,電腦需要搜尋的數量就會大大減少。當電腦從最基層的得分發現,某些枝節不管怎麼算、都不可能影響到目前結果時,就可以將它給修剪掉。以下面這張圖片右邊為例,電腦已經算到第二層的「Min」層(取數字最小,因為是敵方下子)右側的數字是5,而底層還有「(9,8)(6)」沒有運算,電腦知道無論這幾個數字如何運算,都不會影響到現在「5」的結果(因為全部都比它大),於是就直接將它修剪掉。


▲使用Alpha-Beta修剪法,可以減少搜尋樹的分枝。(圖/Wikipedia/CC License)

當分枝數量減少後,電腦需要搜尋運算的量就減少了很多,棋力自然就增加了!然而,單靠「MinMax」+「Alpha-Beta修剪法」對於AlphaGo還是遠遠不夠的,依然無法解決天文數字的難題。我們繼續看下去。

四、AlphaGo的絕招之一:價值網路(Value Network,盤面評估函數)

所謂的價值網路,其實指的就是盤面評估函數,它可以計算每個盤面的分數;換句話說,它可以評估出目前的戰況如何,勝率如何。而這個價值網路所依賴的資料來源,則是之前訓練出來的策略網路,讓它進行自我對弈後所得出的結果。


▲右邊的就是價值網路,左邊是策略網路。(圖/翻攝自《Nature》雜誌)

五、AlphaGo的絕招之二:策略網路(Policy Network)

策略網路最主要的功能,就是收到一個棋盤的局面後,判斷「接下來應該要下在哪一個點」。當然,這個策略網路是需要經過訓練的,所以AlphaGo一開始就被輸入了非常多世界一流高手的棋譜作為參考。接下來,讓AlphaGo在進行策略網路的訓練時,盡可能的接近這些一流高手的下法;根據AlphaGo的論文資料顯示,他們輸入了3000萬筆來自KGS Go伺服器的下子佈局資料後,訓練出來的策略網路,已經可以以57%的比例正確符合了人類高手的下法。

更白話一點講,策略網路經過訓練過後的選擇,可以縮減整個搜尋樹左右的「廣度」;而價值網路,因為可以即時判斷勝率、知道是否繼續算下去必輸無疑,所以不必繼續往下長,它可以縮減整個搜尋樹的深度。原本使用「窮舉法」的時候,圍棋的所有搜尋樹一展開,可能性多達10的360次方之多,算到宇宙毀滅也算不完;但是使用策略網路縮減搜尋時的廣度、使用價值網路來縮減不必要的深度,一切就進入電腦的可以控制的範圍了!


▲黃士傑解釋策略網路與價值網路的運作模式。(影片/記者黃郁棋攝)

六、策略網路還能更厲害:「強化學習」(Reinforcement learning of policy networks)

這邊基本上可以分成四個動作,分別是「直接策略」(Rollout policy)、「習得策略」(SL policy network)、「改良策略」(RL policy network)、「價值網路(Value network,盤面評估函數)的獲得」。首先從圖例我們可以看到,在KGS Go伺服器提供的歷史對局資料庫當中,AlphaGo可以獲得「直接策略」以及「習得策略」,也就是直接獲得前人的下棋方式,以及從前人的下棋方式中,歸納出一些改良的下棋法。


▲AlphaGo的訓練與加強過程。(圖/翻攝自《Nature》雜誌)

接下來才是AlphaGo最可怕的地方:他可以利用自己改良的下棋法,自己跟自己沒日沒夜的對下,這是「改良策略」(也就是所謂的強化學習層面,Reinforcement learning)!這等於是舉一反三後又自行「反九」的可怕過程,它很可能在自己與自己幾百萬、幾千萬盤對下的過程當中,下出了很多前無古人的棋譜。隨著新的對弈不斷發生、新的棋譜不斷輸入,這樣一直改良下去,AlphaGo變成「有史以來最厲害的棋聖」絕對是會發生的。別忘了,AlphaGo不會因為大腦退化而健忘、也沒有情緒干擾,它的學習效率是實打實的。

最後,AlphaGo可以從這些所有下棋的過程當中,透過迴歸分析得出價值網路(Value Network),也就是盤面評估函數。這些經驗,會讓AlphaGo可以判斷盤面的局勢以及勝率,以及究竟要不要繼續下下去。根據黃士傑的說法,在AlphaGo與李世乭第四盤的對決當中,就出現了「判斷勝率低於20%」的情況,於是AlphaGo直接選擇投降。


▲黃士傑解釋策略網路以及投降原因。(影片/記者黃郁棋攝)

七、AlphaGo的絕招之三:蒙地卡羅對局搜尋法(MCTS)

蒙地卡羅對局搜尋法,其實最大的作用就是避免多層對局時的複雜度呈指數成長的問題,主要用在AlphaGo自我對下的時候。它是一種基於隨機式的搜尋法,與傳統的MinMax、Alpha-Beta修剪法都不太一樣。它的主要想法就是:我不需要暴力的搜尋全部,而是用《樣本與結果》來指導我應該要往哪邊更深入的搜尋!換句話說,其實「蒙地卡羅對局搜尋法」使用的也是一種策略網路,只是更快、更簡單,提供給AlphaGo主要的策略網路作為參考使用。

至於《樣本與結果》要如何來指導搜尋呢?假設「蒙地卡羅對局搜尋法」已經探索了一些樣本與結果,就可以利用「信賴區間的上界」來作為分數。每次都使用上界(UCB)最高的節點進行更深入的探索,讓這棵樹有系統的成長。由於樣本數越多,上界的範圍就會越小,所以不會對好的節點進行過多的探索。


▲蒙地卡羅對局搜尋法的計算邏輯。(圖/取自陳鍾誠老師的簡報

總結來說,當策略網路在判斷「接下來應該要下在哪一個點」的時候,會將蒙地卡羅對局搜尋法所模擬出來的結果,以及價值網路的判斷給一起算進來,判斷該節點的勝率。而這一切背後的目的,依然是省去(或許)不必要的分枝數,將注意力用在最有價值的分枝上。當然,蒙地卡羅本身並沒有進行全面的探索,它絕對會漏掉一些分枝:或許,李世乭第四戰之所以可以得勝,就是擊中了AlphaGo漏掉的那些分枝。

八、AlphaGo的絕招之四:深卷積神經網路(DCNN)

之所以將深卷積神經網路放在第八,就是因為它最難解釋,而且應該算是Deep Learning的技術了;這個技術原本是用在影像辨識上,但是卻被AlphaGo團隊用來下圍棋,有點奇妙。所謂的「卷積神經網路」,是對局部感知區域進行卷積的一個動作,而且這些卷積的權重會共享。直接看圖,相信你可以理解:


▲深卷積神經網路的做法,這是動畫。(圖/取自Stanford

之後,為了同時照顧到局部以及全局的資訊,會讓各種不同層次的卷積一起運作,最後再透過卷積的非線性組合ReLu得到新的數值,來代表整體資訊。(AlphaGo用到了13層的卷積)


▲深卷積的組合原理。(圖/取自Technische Universität Berlin)

如果用比較通俗的話來解釋,深卷積神經網路可以「自己從大量的數據中找出特徵」,隨著卷積層越來越多,電腦能夠辨識出來的特徵就越高階、也可以越抽象。例如你想讓電腦辨識出貓咪,你不需要給定電腦「貓咪有哪些特徵」,只要給電腦一大堆貓咪的照片,它就會自己從卷積層中找到抽象的定義、進而辨識出貓咪的照片來。

至於AlphaGo的兩個獨立網路「策略網路」以及「價值網路」,其實就是由13層的卷積神經網路所構成,卷積核大小為5*5;圍棋與卷積神經網路在做圖像識別時的情況有點類似,圍棋是19*19的方陣,它的定義複雜且相較於其他棋類要更為模糊,要讓電腦認識什麼是「氣」、什麼是「劫」,還不如運用卷積神經網路,讓它在不斷卷積前人留下的棋譜過程當中,自己找到共同點以及抽象定義,得出屬於「AlphaGo」自己的下棋邏輯。


▲卷積神經網路用在影像辨識時的運作邏輯。(圖/取自Boston Labs

我能介紹的部分大概就僅止於這些了,再細究下去,其實已經超出了我的能力範圍,而且也越來越難純粹用文字來解釋了;有興趣的人,可以自己想辦法找來AlphaGo發表在《Nature》上的論文來看,或是參考陳老師的簡報、以及尹相志的文章:《淺談Alpha Go所涉及的深度學習技術》

AlphaGo算是人類在機器學習領域的一次大勝利,它成功的利用電腦自行演算出策略網路,然後再利用策略網路自行強化學習,成功讓AlphaGo成為世界前幾名的超級對手,而且還持續以驚人的速度進化當中。

黃士傑也說,DeepMind的人工智慧計劃未來也將會運用在「醫療」以及「機器人」的領域,讓世界變得更好是終極目標。至於很多人都在問的問題:「為什麼黃士傑不必上廁所?」黃也做出了解釋,他說:「我是下圍棋的人,李世乭九段我看過他大部分的棋譜,我對他有一種尊敬的心情,比賽中我是覺得很榮幸坐他對面,那我就盡我所能不要影響他、尊重他。」


▲黃士傑自己本身也是圍棋高手。(圖/記者黃郁棋攝)

另外,由於黃士傑下棋的時間是算在AlphaGo的頭上,而這個「人為影響的變數」是沒有算進AlphaGo的系統裡面的;因此,節省AlphaGo的時間,也是盡可能讓AlphaGo在下棋時接近原本實力的關鍵。這樣,不知道有沒有解答到無數台灣人心中的大問號呢?

留言