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

  • 2020 年 7 月 27 日
  • 筆記

chess

起源

故事從一個圍棋說起,人類賴以自豪的智慧,為什麼這麼說,因為據統計,從這19乘19的方格中擺棋,可以有10的340次方的可能,用一個更形象的比擬,全宇宙的原子加起來,也比這個數要小。

也就是說,如果電腦靠暴力破解,是無法得到解的,而人憑著棋感可以走出非常高明的棋局,這就是為什麼人那麼高傲。

可是不幸的是,在IT男的世界裡,總有一群倔人,他們決定做一隻Go,可以碾壓人類智慧的Go,全稱阿法Go。

Go的進化歷程

alphago-network
從官方公開的論文來看,從左到右是四隻Go,英文名如上,看起來非常讓人困惑,至少身為中國人的我,有一種看了等於白看的感覺,所以我決定根據它們的特點給它們起個易於理解的名字,例如Merry,笑話。

從左到右,名字為業餘Go,模擬Go,進化Go和勝率Go

下面對這四隻Go從輸入到輸出一一論述

業餘Go

說它業餘,是因為這隻Go,只能模仿人類選手的百分之二十的行為。可以用弱智來形容。雖然如此,但是它有一個好處,快。計算快,因為簡單。

構成

以一層神經網路構成

輸入

以一個棋局來做輸入,例如當前棋局的白子和黑子的位置,例如下圖

alphago-check

輸出

輸出下一步所有可能的概率,例如下圖

alphago-check-possible
要讓一個單層的神經網路變成一個業餘Go,IT男把人類在網路上下棋的棋局保存下來作為訓練數據,來讓業餘Go在讀到訓練數據的棋盤的時候,模擬人類下一步的走棋。

通過一些日子的訓練,業餘Go從零基礎成了一個業餘的。

模仿Go

模仿Go跟業餘Go是類似的,它們唯一的不同,是模仿Go比業餘Go複雜,其他,例如模仿人類走棋,輸入數據,輸出數據都是一樣的

構成

它以多層神經網路構成

如下圖

alphago-network-go1
可以看到,模擬Go的結構是由13層的卷積加一個全連接層構成。

複雜的結構也代表著它比業餘Go有更好的功力,所以同樣用人類選手的下棋數據,對它進行同樣的訓練,它可以模仿百分之五十的人類下棋的功力。

進化Go

進化Go,顧名思義,就是它自己可以一步一步的成為武林高手。有一個非常高大上的的名字:強化學習。

進化Go一開始,是通過複製模擬Go生成的,然後進化Go就開始跟模擬Go進行武功比試,它們之間會產生千萬計的棋局,然後進化Go就從這些生成的棋局中對自己進行調參,也就是優化,然後變成了進化Go一代。

然後進化Go一代又跟進化Go零代進行武功比試,如此類推。

有人可能就疑惑了,為什麼進化Gon代要跟進化Gon-1代比試來提高自己的武功?

大家想想,練武的過程,開始大家只會一點武功,那麼自然找個跟自己一樣爛的人比試來吸取經驗,隨著經驗的增多,武功也會比以前好,那麼就要找武功更好的人來過招,一直迭代下去。

進化Go也是這樣的一個過程

所以它的成長如下圖

alphago-dog
可以看出,隨著Go的不斷進化,它變得越來越強大,但是可以看出,它依然無法跟人類頂尖高手比擬。

勝率Go

模擬Go是模擬下一步走棋的,而勝率Go是計算當前局面的勝率的。

勝率Go的構造跟模擬Go類似,差別是它的輸出是一個數字,而不是19乘19的概率。

它的訓練數據通過進化Go之間的對弈生成,並通過統計估算出局面的勝率,作為訓練數據

可以看出,勝率Go跟進化Go之間沒有什麼大的武功進步。

是什麼讓這些Go的武功可以碾壓人類智慧?那是因為它們遇到了一顆樹,這棵樹學名叫蒙特卡洛搜索樹

蒙特卡洛搜索樹

alphago-tree
這顆樹,是把棋局的走勢,變成一棵樹,葉子節點就是決出勝負的棋局,例如當前棋局為第二層,這棵樹就會通過利用業餘Go模擬1000次隨機走子,直到走到決出勝負為止,然後就可以估計當前節點走下去勝利的局數和失敗的局數,繼而得到一個勝率的估計值

那麼Go通過結合勝率Go計算下一節點的勝率,通過模擬1000次隨機走子計算出下一節點勝率的估計值,通過模擬Go計算出下一步走子的概率,綜合這三項得出綜合評分,並取最高分的為下一步走子。

綜述

可以看出,AlphaGo並沒有從智慧上勝過人類,而只是通過算力的優勢,結合比較好的策略,來完勝人類選手。所以現在談失業還早。好好上班。