1. 程式人生 > >笑談AlphaGo對戰人類從模仿到超越之奧義

笑談AlphaGo對戰人類從模仿到超越之奧義

![chess](http://upload-images.jianshu.io/upload_images/24077087-3f668101b3bc4a9d.PNG) ## 起源 故事從一個圍棋說起,人類賴以自豪的智慧,為什麼這麼說,因為據統計,從這19乘19的方格中擺棋,可以有10的340次方的可能,用一個更形象的比擬,全宇宙的原子加起來,也比這個數要小。 也就是說,如果計算機靠暴力破解,是無法得到解的,而人憑著棋感可以走出非常高明的棋局,這就是為什麼人那麼高傲。 可是不幸的是,在IT男的世界裡,總有一群倔人,他們決定做一隻Go,可以碾壓人類智慧的Go,全稱阿法Go。 ## Go的進化歷程 ![alphago-network](http://upload-images.jianshu.io/upload_images/24077087-42b16097f0527fbf.PNG) 從官方公開的論文來看,從左到右是四隻Go,英文名如上,看起來非常讓人困惑,至少身為中國人的我,有一種看了等於白看的感覺,所以我決定根據它們的特點給它們起個易於理解的名字,例如Merry,笑話。 從左到右,名字為業餘Go,模擬Go,進化Go和勝率Go 下面對這四隻Go從輸入到輸出一一論述 ### 業餘Go 說它業餘,是因為這隻Go,只能模仿人類選手的百分之二十的行為。可以用弱智來形容。雖然如此,但是它有一個好處,快。計算快,因為簡單。 #### 構成 以一層神經網路構成 #### 輸入 以一個棋局來做輸入,例如當前棋局的白子和黑子的位置,例如下圖 ![alphago-check](http://upload-images.jianshu.io/upload_images/24077087-c4c9240dde48f27d.PNG) #### 輸出 輸出下一步所有可能的概率,例如下圖 ![alphago-check-possible](http://upload-images.jianshu.io/upload_images/24077087-3d0ef8e96ff0a673.PNG) 要讓一個單層的神經網路變成一個業餘Go,IT男把人類在網路上下棋的棋局儲存下來作為訓練資料,來讓業餘Go在讀到訓練資料的棋盤的時候,模擬人類下一步的走棋。 通過一些日子的訓練,業餘Go從零基礎成了一個業餘的。 ### 模仿Go 模仿Go跟業餘Go是類似的,它們唯一的不同,是模仿Go比業餘Go複雜,其他,例如模仿人類走棋,輸入資料,輸出資料都是一樣的 #### 構成 它以多層神經網路構成 如下圖 ![alphago-network-go1](http://upload-images.jianshu.io/upload_images/24077087-95b01db493c3fc71.PNG) 可以看到,模擬Go的結構是由13層的卷積加一個全連線層構成。 複雜的結構也代表著它比業餘Go有更好的功力,所以同樣用人類選手的下棋資料,對它進行同樣的訓練,它可以模仿百分之五十的人類下棋的功力。 ### 進化Go 進化Go,顧名思義,就是它自己可以一步一步的成為武林高手。有一個非常高大上的的名字:強化學習。 進化Go一開始,是通過複製模擬Go生成的,然後進化Go就開始跟模擬Go進行武功比試,它們之間會產生千萬計的棋局,然後進化Go就從這些生成的棋局中對自己進行調參,也就是優化,然後變成了進化Go一代。 然後進化Go一代又跟進化Go零代進行武功比試,如此類推。 有人可能就疑惑了,為什麼進化Gon代要跟進化Gon-1代比試來提高自己的武功? 大家想想,練武的過程,開始大家只會一點武功,那麼自然找個跟自己一樣爛的人比試來吸取經驗,隨著經驗的增多,武功也會比以前好,那麼就要找武功更好的人來過招,一直迭代下去。 進化Go也是這樣的一個過程 所以它的成長如下圖 ![alphago-dog](http://upload-images.jianshu.io/upload_images/24077087-b478a9e2febdf2ac.PNG) 可以看出,隨著Go的不斷進化,它變得越來越強大,但是可以看出,它依然無法跟人類頂尖高手比擬。 ### 勝率Go 模擬Go是模擬下一步走棋的,而勝率Go是計算當前局面的勝率的。 勝率Go的構造跟模擬Go類似,差別是它的輸出是一個數字,而不是19乘19的概率。 它的訓練資料通過進化Go之間的對弈生成,並通過統計估算出局面的勝率,作為訓練資料 可以看出,勝率Go跟進化Go之間沒有什麼大的武功進步。 是什麼讓這些Go的武功可以碾壓人類智慧?那是因為它們遇到了一顆樹,這棵樹學名叫蒙特卡洛搜尋樹 ### 蒙特卡洛搜尋樹 ![alphago-tree](http://upload-images.jianshu.io/upload_images/24077087-c769909d01f3c41e.PNG) 這顆樹,是把棋局的走勢,變成一棵樹,葉子節點就是決出勝負的棋局,例如當前棋局為第二層,這棵樹就會通過利用業餘Go模擬1000次隨機走子,直到走到決出勝負為止,然後就可以估計當前節點走下去勝利的局數和失敗的局數,繼而得到一個勝率的估計值 那麼Go通過結合勝率Go計算下一節點的勝率,通過模擬1000次隨機走子計算出下一節點勝率的估計值,通過模擬Go計算出下一步走子的概率,綜合這三項得出綜合評分,並取最高分的為下一步走子。 ## 綜述 可以看出,AlphaGo並沒有從智慧上勝過人類,而只是通過算力的優勢,結合比較好的策略,來完勝人類選手。所以現在談失業還早。好好