AlphaGo 其實挺“笨”的

36氪 於 23/05/2017 發表 收藏文章
編者按:本文來自微信公眾號“待字閨中”(ID:daiziguizhongren),作者陳老師;36氪經授權發佈。

記得小時候,城裏來了個機器人展,於是買了門票,興致勃勃的去看,有踢球的,有打球的,有玩遊戲的,有講故事的,有談情説愛的,等等。我最感興趣的是一個能和我對話的機器人,她會問我問題,也會回答我的問題,好神奇呀。天真無暇的我,玩的很開心,心中有了追求科學的夢想。但是,後來有人告訴我,其實當時每個機器人裏面都是藏着一個真人,於是心中咯噔一下,有些沮喪,幼小的心靈就這麼受傷了。

現在,人工智能取得了飛速發展和進步,兒時的記憶的場景已經完全反轉了。看看 AlphaGo 和李世石的圍棋比賽,其中最大的看點和吐槽應該是圖片中的石頭人黃博士,這時,機器人走到了後台,充當了智能的核心,而人,也就是黃博士,只是起到了人機交互的媒介。

看來,這次和柯潔的比賽,依然沒有改變這種現狀,因為現狀太難改變了。還是黃博士,而不是黃博士化身的機器人,我是多麼期待真正的機器和人下圍棋。

這麼來説,有些異樣,為什麼這麼聰明的 AlphaGo,不真正做成一個機器人,能看棋盤,能下棋子,能思考,還能説笑,會不會更好玩。其實,有時看起來簡單的事情,讓機器來做不一定簡單,這是後話,不囉嗦了。

好了,段子講完了,該言歸正傳了。免得被唾沫淹死,首先申明一下,AlphaGo 確實很厲害的,也不簡單。但是,為什麼又説,AlphaGo 挺“笨”的呢?

我們知道,圍棋的搜索空間很大,有3的19x19次方個狀態,要在這麼大的空間去找最優算法,一個一個看是不可能的,所以被認為人類智能的一個高點,解決時需要優化搜索。人是根據一些輸入空間和參數較少的模式識別來記憶和搜索,而機器採用的卻是大數據,大記憶和大計算來實現的。説到 AlphaGo 後面的智能和算法,就不能不説深度學習(DL),強化學習(RL),和蒙特卡洛樹搜索(MCTS)。

深度學習,主要用來學習和建立兩個模型網絡。一個是評測現在的棋盤狀態如何,也就是説給當前的棋盤狀態打個分,評估一下贏的期望值,它就是價值網絡(Value Network)。輸入是棋盤19x19每個點的狀態,有子或無子,輸出是贏的期望值。按理説,如果要是有一個聰明的數學家或是機器足夠聰明,説不準他馬上就能在黑板上寫一個高級的數學公式。很遺憾,現在還沒有,所以,只能用多層的神經元網絡來近似表示這個高級的函數。這麼來説,是不是有點“笨”。

二是根據現在的棋盤狀態,決定下一個棋子該如何走才能有最大的贏的概率,它就是 AlphaGo 的策略網絡(Policy Network)。也就是説,給一個19x19的棋盤狀態,在所有空的地方,哪個是最佳的選擇,會有最大的贏率。同樣,也可以用一個函數來描述,輸入是當前棋盤狀態,輸出是每個空處和它期望的贏的期望值,但這個函數還沒有一個高級的數學公式,所以,最後也求助於多層神經網絡。

但是,這兩個深度學習網絡模型,怎麼訓練出來的呢?這時,不得不説隨機梯度下降(SGD),

這個“笨”辦法。

為了求一個目標函數的最優值,複雜一點的,不能像解一個二次方程一樣,用一個簡單的公式就能得到方程的解。

對於,圍棋這種深度學習要求的目標函數,沒有一個簡單的求解公式,那怎麼辦?只能求助於迭代,隨機梯度下降迭代(SGD),就像爬山,每往上走一步,都是接近山頂一點點,或者叫摸着石頭過河。畢竟機器的計算能力強,這種數值計算,是它的強項,就讓它拼命的算,直到算到一個還算滿意的結果。這回知道了吧,為什麼 GPU 這種東西來做這種重複簡單的計算。這麼説來,是不是有點“笨”。就像我們一個公式不會解時,就從1開始帶入計算,看看是不是滿足條件。或是,做選擇題有四個選項,每個選項代入公式算一下。

這些玩意兒,都是線下用大量數據,做大量的辛苦計算得到的,賺的是不是辛苦錢呀。那麼,在真正下棋的時候,用它們就能減少或是已經預算了很大的搜索空間,不好的狀態,不好的棋子,就不用花時間去看了。在平時不比賽的時候,機器也不會閒着,畢竟還有很多狀態沒有嘗試過,畢竟那些暫時認為不好的棋子不一定最後不好,那怎麼辦?
AlphaGo 有自己的想法,它求助於強化學習,也就是self-play,或是左右手互搏,來提前嘗試更多的搜索空間,減少未知空間,同時通過深度學習的網絡模型記錄下來,提高前面兩個模型網絡的效果,那麼真正下棋的時候就能用上。這就是平時多努力,老大不白頭。這種勞模的精神,在現實生活中,有時會不會被認為時有點“笨”,只會死幹。

在強化學習的算法中,也需要大量的迭代計算,以求得到最優的期望值,也就是達到收斂。這種“笨”辦法,效果還不錯。

有了這些,機器就能玩的可以了,但是,畢竟還有很多的空間沒有嘗試過,也不能保證當前的模型預測的每一步都是最優,因而,AlphaGo 心裏不是特別有底氣。那怎麼辦?這時,機器需要求助於蒙特卡洛了,就是在下棋的過程中,以當前的狀態為起點,在有限的時間內,儘量多的再探索一些搜索空間。這個探索的辦法,就是暴力採樣,一個一個的試,這麼看來,是不是有點“笨”。

具體來説,“蒙特卡洛樹搜索”是一種啟發式的搜索策略,能夠基於對搜索空間的隨機抽樣來擴大搜索樹,從而分析圍棋這類遊戲中每一步棋應該怎麼走才能夠創造最好機會。來個通俗的解釋,假如筐裏有100個蘋果,讓你每次閉眼拿1個,挑出最大的。於是你隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……你每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但你除非拿100次,否則無法肯定挑出了最大的。這個挑蘋果的算法,就屬於蒙特卡羅算法,儘量找好的,但不保證是最好的。想像這個拿蘋果的場景,是不是就感覺累,而且有點“笨”,然而,對於機器來説,它可是要做巨多的這種嘗試。確實是勞模。

好了,好了,AlphaGo 如果你不“笨”,能和人類一樣,觸類旁通就牛逼,能不能玩一些人類很容易適應的新玩法,還是圍棋,比如,將棋盤改成一個比19大的,或是改變下棋時的一個小小規則,這樣,也許能更好得證明不“笨”。這個場景,涉及到另外的一個機器學習領域,就是遷移學習。人類,好像特別擅長。

這麼看來,你是不是也感覺 AlphaGo 其實挺“笨”的,這個“笨”,其實是人類把自己能解決此類問題,用的最聰明的“笨”辦法教給機器了。至少到現在為止,AlphaGo,在還沒有像愛因斯坦的E=MC2的美妙數學公式發明前,也是最聰明的了。

期待不久的將來,AlphaGo 能“拋棄”人類教他的“笨”辦法,和愛因斯坦一比高下。那時,讓人類真正體驗到你的自有的智慧和聰明。


資料來源:36Kr

留言


請按此登錄後留言。未成為會員? 立即註冊
    快捷鍵:←
    快捷鍵:→