search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

AlphaGo贏了柯潔,我們如何打敗AlphaGo

導讀

柯潔 VS AlphaGo」 0:3遺憾落幕,人類智慧再一次輸給了人工智慧。AlphaGo到底是一個什麼樣的存在,能夠如此所向披靡?我們是否有打敗AlphaGo的可能?本文將從以下幾個方面,以盡量通俗易懂的方式揭秘AlphaGo,找到戰勝AlphaGo的方法:

1、如何寫一個下棋的演算法;

2AlphaGo的演算法奧秘;

3、打敗AlphaGo的策略;

4AlphaGo擊敗柯潔,是否勝之不武。

人類智慧再一次輸給了人工智慧。象徵人類智慧最後一塊遮羞布的圍棋終於也被人工智慧破解。在柯潔失利之後,媒體和大眾的驚嘆、惋惜不絕於耳。

再過三十年,人類會被人工智慧統治,然後會想起三十年前AlphaGo的恐怖。

人類很早就跑不贏汽車了,只要戰勝了自己就好。

而柯潔在失利后哽咽地說道:很抱歉我輸了。今天下棋時其實我有些失態,因為前半盤我已經知道不好了,但之後它每一步棋,我擔心的棋它肯定會下,它下出我想不到的棋,我仔細想一下,然後就發現這真是一步好棋。我只能猜到它一半的棋,這就是我們的差距,太大了。

我本來也很替柯潔惋惜,然而,柯潔的這一番感言,總讓我覺得哪裡不對。

接著,細思恐極。

這讓我不禁去思考AlphaGo到底是如何運作的。在閱讀有關AlphaGo演算法的各類文章后,一個結論浮出水面。

AlphaGo是可以被打敗的,至少,你可以不輸給AlphaGo

一、如何寫一個下棋的演算法

要談AlphaGo,讓我們先談談如何寫一個下棋的演算法。一個下棋的演算法需要解決兩個問題: 1、對手下一步會怎麼下?

2、每一種棋局對應的獲勝概率?

那麼一個最直接的想法,就是窮舉法。

一個簡單例子,如果一盤棋最多5個回合結束,而每個回合我和對手各有2種走法,那麼一局遊戲最多就有(2*2^5=1024種情況。窮舉每一種情況后,找到通往勝利的最優下法即可。

這個問題在計算機中,叫做Game Tree(遊戲的博弈樹)。一個井字棋遊戲的Game Tree如下:

每一個Node(節點),對應的就是一種棋局,相應地也就可以計算每一個節點的期望勝率。比如一種棋局繼續下下去會有10種情況,而其中7種情況會贏,那麼這個棋局對應的勝率就是70%

下每一步棋的目標,也就變成最大化下完這一步之後的勝率。

然而,對於井字棋這種情況簡單的遊戲窮舉法是可能的,每一步最多只有9種下法,最多5個回合就會結束。而圍棋平均每一步大概有250種下法,平均要70回合以上才會結束。在如此複雜的問題面前,即使是世界上最好的計算機也不可能完全窮舉。

二、 AlphaGo的演算法奧秘:Monte Carlo Tree Search (蒙特卡洛樹搜索)、Reinforcement Learning(強化學習)和Convolutional Neural Network(卷積神經網路)

即便變得更複雜,但要解決的問題仍然是那兩個,如何預測對手的反應,如何計算棋局的獲勝概率

用之前的Game Tree樹狀圖來說,一是預測每一個節點發散的路徑中該選哪一條,二是如何計算每一個節點的勝率。AlphaGo中管前者叫做Policy Network(預測網路),管後者叫Value Network(評估網路)

1Monte Carlo Tree Search (蒙特卡洛樹搜索)和Reinforcement Learning(強化學習)

Policy Network預測網路遇到的第一個挑戰,就是沒有足夠的計算能力窮舉所有的可能性。作為暴力搜索的替代品,AlphaGo使用的方案是Monte Carlo Tree Search (蒙特卡洛樹搜索)。

針對每一種棋局,用蒙特卡洛的方法模擬成千上萬盤圍棋比賽,直到一方獲勝。在每一次模擬試驗中,記錄都經歷了哪些棋局,各多少次,以及最終哪一方獲勝。我們用井字棋樹狀圖中相同的方法回看,就可以找到通往比賽勝利的最優途徑。

最初模擬的時候,下棋是隨機的。隨著不斷模擬,就會發現勝率高的節點和勝率低的節點。通過利用這些不斷發現的信息去指導接下來如何下棋,下棋的落點就會越來越不隨機。從數學上,隨著模擬次數的增加,模擬的結果會越來越趨近下棋的最優路徑(如果模擬次數不夠多,則結果趨近於次優路徑。)。

這也是AlphaGo為什麼會不斷變強的原因之一,從擊敗樊麾二段,到擊敗李世石九段,再到擊敗世界第一的柯潔——不斷增加的蒙特卡洛模擬實驗。

那麼Value Network評估網路要如何給每一個節點賦值?或者說如何評估每一種棋局的獲勝概率?

答案就是Reinforcement Learning(強化學習)。

什麼是強化學習?教狗狗上廁所就是一個簡單例子。你發現狗狗便便在地板上,就打一頓;便便在廁所里,就獎勵一根骨頭。狗狗一開始被打得莫名其妙,但慢慢發現只要便便在廁所里就能得到骨頭;而相應的你也發現,狗狗在馬桶里便便的次數也越來越多,直到再也不會在地板上便便。

這就是強化學習。

放在圍棋上,把贏定義為獎勵,把輸定義為懲罰。在不斷地蒙特卡洛試驗中,機器就會慢慢發現哪種下棋策略能夠得到「甜頭」。通過計算各種策略的回報平均值,就能比較策略A是否優於策略B

至此,我們既有Policy network預測網路,也有Value network評價網路了,也就可以做出一個能尋找最優策略的下棋演算法了。

事實上,只要經過足夠大量的蒙特卡洛實驗,這樣的演算法已經可以擊敗很多業餘下棋選手。

2Convolutional Neural Network(卷積神經網路)

為了讓AlphaGo業餘晉陞到大師級別,Google還應用了另一個演算法,就是Convolutional Neural Network(卷積神經網路)。

Convolutional Neural Network卷積神經網路在圖像識別上有廣泛應用,比如判斷一張圖片是不是貓、觀察兩個人的照片判斷兩人是否是親屬,特斯拉自動駕駛中識別紅綠燈和車輛行人也是用的這個技術。

Convolutional Neural Network卷積神經網路的輸入變數是大量的圖片,而輸出變數可以是數量,比如0或者1,也可以是一種策略,比如下棋下在哪,開車怎麼開。其原理,第一步是採樣,比如在一張人臉照片上設置100個點,採集每一個點的位置和顏色。第二步是Feature engineering (特徵工程), 對採集的信息進行數量變換,比如計算兩根眉毛之間的距離,面頰的膚色白皙程度。第三步是neural network神經網路,如果將第二步數量變換后的結果定義為神經網路的第一層的話,第二層神經網路就是對第一層變換后的結果再進行變換,比如把x變成二次方x^2,;第三層神經網路又會對第二層神經網路變換后的結果進行變換,一直到最後的第n層。最後,我們用第n層變換的結果對output(輸出變數)回歸。

據稱,AlphaGo一共用到了13層神經網路,相比人臉識別的演算法,

並不多。

對於AlphaGo,就是通過運用Convolutional Neural Network卷積神經網路,首先輸入上萬個棋局的照片以及其對應的勝率。然後通過回歸得到兩個模型。Value network評估網路預測每一個棋局的勝率是多少,輸入信息是棋局的圖像,輸出信息是一個數字;policy network預測網路判斷當前棋局下,怎麼下棋能夠最大化獲勝概率,輸入信息是棋局的圖像,輸出信息則是另一個棋局的圖像

3AlphaGo為什麼這麼厲害?

AlphaGo之所以比當前其他下棋演算法還要強大,就是在於它開創性地把兩種計算獲勝概率的模型結合在了一起——Reinforcement Learning(強化學習)和Convolutional Neural Network(卷積神經網路)兩個模型預測結果的加權平均值。

獲勝概率=模擬實驗結果+圖像回歸結果

與之對應,一個頂尖的棋手是怎樣的?

成功的棋手=經驗+直覺

蒙特卡洛實驗強化學習的結果就如同棋手的經驗,通過下成千上萬盤棋,找到下棋的套路。哪些棋局是必勝棋局,對手的落子要如何反制,通過不斷測試各種可能性,來找到最優策略。通常,這對應的是一場圍棋比賽的中後段,當局勢已經逐漸明朗時。

神經網路圖像回歸的結果就像是棋手的直覺,為什麼這一步要這麼下,沒有棋譜是這麼說的,但是著眼於圍棋的氣與勢,直覺感覺應該這麼下。圖像回歸也一樣,為什麼這種棋局的獲勝概率就是70%,而另外一種就是65%?說不清,但這就是神經網路回歸的結果。這對應的,也就是圍棋比賽的前半段,局勢尚看不清時。

AlphaGo的強大之處,就在於採用了人類下棋的思考方式,用人工智慧的演算法模擬了棋手的經驗+直覺。

三、打敗AlphaGo是有可能的!

圍棋是一個封閉的有限的數學問題。圍棋盤就那麼大,每一個落子就只有兩三百個,能夠出現的棋局所有情況雖然很多,但是是有限的。終有一天,科技的發展使得計算機可以計算全部的可能性,徹底的統治圍棋這個遊戲。

但是,至少不是現在。

至少不是AlphaGo

AlphaGo戰勝世界第一的何潔這件事,掩蓋不了其本身的一個演算法設計上的邏輯漏洞。

(以下推測基於AlphaGo 2016年戰勝李世石后披露的演算法,即適用於V18版本,也許並不適用當前新版本)

任何一個下棋演算法,目標函數都是提高期望的獲勝概率。如果將當前棋局定義為Xt,下一回合的棋局定義為Xt+1;而每一個棋局的獲勝概率是f(x),那麼演算法的目的,就是在下了這一步棋之後,使得:

E(f(Xt+1))>=E(f(X)) and f(Xn)→1 when n→∞

定義獲勝時目標函數f(x)=1,那麼演算法的目標就是隨著回合數n的增加,勝率f(x)從一開始平局的0.5逐漸趨近於1;如若不能,則這一盤棋理論上永遠不會結束。換言之,演算法的目標是最大化期望勝率。

那麼問題來了,如果讓它考慮下面這種情況:

當前獲勝概率是70%,該我方下棋,有兩種策略:

策略A — 對手有10種反應情況,每種情況我方的獲勝概率都是75%

策略B — 對手有10種反應情況,其中9種情況下我方的獲勝概率是80%,另外1種的獲勝概率是60%

AlphaGo使用的是蒙特卡洛實驗,其結果也就是計算期望的平均勝率。那麼就會選擇策略B,期望勝率是78%,大於第一種的75%

那麼如果AlphaGo選擇了策略B,我們能不能獲勝?能,如果雙方信息對稱的話。如果AlphaGo能考慮到的那種使他勝率下降到60%的演算法,我們同樣清楚的話,利用這一招反制,並不斷重複這個過程,AlphaGo就會一次次「心甘情願」跳入這個陷阱,勝率不斷下降。

這個例子把問題簡單化了,真正背後的數學上的核心矛盾,在於演算法進行最優化的目標函數,要如何在mean平均值和min最小值之間取捨。

When E(mean(a))>=E(mean(b)) and E(min(a))<E(min(b))

只要AlphaGo最優化的是期望的平均勝率,就可以利用尋找對其最不利情況這一方法來反制,也就是說設計出一種讓AlphaGo的平均勝率高但在最差情況下勝率卻相對顯著的低的情況。

那如果AlphaGo最優化的是勝率的最小值呢,換言之,最差情況下的勝率?

第一,當前算力不可能。如果不窮舉總有可能漏掉最不利這一特殊情況,當前算力無法窮舉前文已然論述過。

第二,就算能夠計算最不利情況下的勝率,這種演算法在計算機應用中叫做Minimax極小化極大演算法(找出失敗的最大可能性中的最小值的演算法)。然而這一種演算法將不能保證隨著N增大,f(Xn)無限趨近於1。像圍棋這種對於雙方公平的遊戲,在中前期局勢不明朗時,無論你使用哪一種策略,對方如果能找到其最優策略(極小化極大演算法的假設),你的下一回合的勝率在這一最壞情況下,肯定要低於這一回合。既然目標函數f(x)數學上難以趨近於1,也就是無法獲勝,那麼在做前文提到的蒙特卡洛實驗時就有很大可能陷入死循環,演算法無法擬合出結果。

退一萬步講,極小化極大演算法唯一能夠應用的情況,就是局勢明朗勝局已定后,就連對手的最優策略都不能阻止AlphaGo的勝率隨回合數提高時。

當然基於AlphaGoV18版本,其運用的神經網路回歸,和基於蒙特卡洛實驗的強化學習,本質都是將條件平均值作為預測結果和最優化的目標函數,而不是勝率的最小值。

所以,用淺顯易懂的話來說,擊敗AlphaGo的策略,就是針對它的目的,製造陷阱」——一種詭譎的絕處逢生的陷阱。而最好時機,是在尚不明朗的比賽中前段。

比如當前AlphaGo的獲勝概率是50%,只要它這麼下,我有100種對應下法,其中99種情況AlphaGo的勝率都將變成60%,可有那麼一種會讓它的勝率變成40%AlphaGo會根據蒙特卡洛實驗結果開心地選擇跳進這個陷阱。當然,真正下棋並沒有這麼簡單,可能沒有哪一步棋會產生讓勝率從60%40%這麼大影響。但是邏輯是一樣的,那就是基於prior probability事前概率,增大post probability事後概率的variance(方差)。其必要條件,就是prior probability事前概率處於兩個post probability時候概率的中間,比如當前AlphaGo勝率是60%,而我的好招昏招會使得AlphaGo的勝率變為61%~59%

讓我們回想2016AlphaGo在唯一輸給李世石的第四場比賽,在李世石下出第78手之後,AlphaGo彷彿突然精神失常,從83手一直到103手,表現突轉直下,特別是黑97主動送死,令人大跌眼鏡。連GoogleDeep Mind團隊代表都表示無法理解演算法的突然失常,要回去研究數據、分析情況。

為何如此?兩個可能性,第一個可能性是這個棋局是演算法從未模擬過,但這不可能。上文提過,根據AlphaGo的蒙特卡洛實驗的設計,如果是意料之外從未見過的棋局,AlphaGo會隨機下在某個位置,而這些落子顯然不是隨機的。那我們就可以做出一個大膽但合理的假設,李世石的神來一手恰好暴露了上文分析的AlphaGo目標函數的一個邏輯矛盾。儘管白78手在人類看來是一步秒棋,但在AlphaGo看來卻不是,它反而認為自己的勝率提高了,殊不知卻自己把自己推到了最危險的邊緣。

擊敗AlphaGo的可能性之一,就在其選擇最優化的目標函數上。

四、AlphaGo擊敗柯潔,是否勝之不武

之前我說,有一件細思恐極的事情。

柯潔說:它每一步棋,我擔心的棋它肯定會下。

棋盤有那麼多格子,每一個棋局都會有各種各樣獲勝方法,為什麼AlphaGo下的偏偏是柯潔擔心的那一步?

這個比賽,到底是不是像表面那樣公平

世界第二的李世石對柯潔和AlphaGo的比賽如此評價:是否應該給棋手充分了解阿爾法的機會呢?比如賽前提供程序,約一周時間讓棋手了解程序,摸一摸特點和棋風等等。不然人類棋手基本就沒機會。

李世石表示,如果在去年的人機大戰之前自己能夠有機會去測試AlphaGo的話,很有可能會有贏下比賽的機會。而且,在他看來,新版本的AlphaGo並沒有開創什麼新的下法,但的確更加穩定、強大了。

AlphaGo了解柯潔

而柯潔對AlphaGo幾乎一無所知

AlphaGo和李世石下過棋,和世界上其他高手也下過棋。Google可以收集整理世界上所有圍棋比賽的錄像,還可以收集網上圍棋平台所有玩家的下棋記錄,把這些數據扔到神經網路、強化學習模型中,必然能在某種程度上預測棋手如何下棋。

特別是,在我們之前講的policy network預測網路中,可以專門針對柯潔,在樣本中加大柯潔過去比賽下棋數據的權重,將演算法調整為專門預測柯潔如何下棋、「專門」戰勝柯潔的演算法。

如果AlphaGo和幾乎不懂圍棋的我下棋,對比與世界第一的柯潔下棋,會走同樣的路數嗎?如果不同,那麼模型的設定就是會根據對弈者情況而調整。

作為大數據翹楚Google旗下AlphaGo的模型,大抵會最大化利用全部可以利用的信息,比如對手是誰,什麼段位,過去下棋的記錄。

柯潔或許一上來就處於劣勢。

試想,雖然柯潔是世界第一,李世石是世界第二。如果我聯繫柯潔希望與其比賽,結果請李世石戴著面具替我比賽,柯潔還會取勝嗎?兩人實力相近,對於對手策略沒有針對性準備的柯潔,大意失荊州也並不令人意外。

三場比賽,柯潔第一場只有四分之一子的差距,第二場一步之差落入劣勢。這是否其實只是信息不對稱的劣勢使然?

我不是谷歌員工,也不是圍棋高手,這些當然都是不負責任、無法驗證的猜測。

我只知道這場世紀矚目的人機大戰,柯潔是赤膊上陣光明磊落,AlphaGo蒙著面紗遮遮掩掩。

圍棋沒有必勝策略。

AlphaGo還沒能窮盡棋盤上的每一種可能性。

現在的人工智慧,一種是模仿人類學習的過程,一種是在人類制定的規則下對各種可能性試錯來學習。

大可不必恐懼人工智慧,擔憂有一天人工智慧取代人類,惶惶不可終日。

畢竟,人工智慧,

沒有人工,

談何智能?



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦