Re: [心得] 圍棋AI AlphaGo 之我見

看板GO作者 (豬仔包 PigSonBow)時間8年前 (2016/03/14 13:17), 編輯推噓9(9059)
留言68則, 11人參與, 最新討論串3/6 (看更多)
感謝f大的發文,我也是長知識了 我得再次承認我對NN的理解太膚淺,這是我做得不好的 一方面是因為我是做RFIC的,我沒那個能力時間把 NN 和 MCTS 的結合寫得精確 (我就只是在一月ASP-DAC做了 turorial 的 chair 聽了一整天NN,和看了那份 Nature 寫這篇也參考了那個台大資工教授的文章) 另一方面是由於我所寫的出發點是在,我希望借助我有的圍棋知識和我比較熟知的 MCS 還有一些對於 AyaBot 的經驗,去推估 AlphaGo(AG) 的可能弱點 而不是要告訴人 NN 如何在 AG 發揮作用,所以引出你這篇好文啊 XD 只是我不能同意 NN 是 AG 強的關鍵, 因為 NN 和 MCTS 是一起配合的,只有一方的情況下,過去的經驗會告訴你它會弱很多 只有 NN 的話可以想像有可能發生,在第一局第7手下出未見過的佈局, AG 下一手就開始不會下,然後脆敗 我知道 NN 是協助 MCTS 更有效率地找出最佳解 (類似 MC 跟 MCMC 的分別) 用圍棋的話來說,NN 相當於一個形勢判斷 + 一個不強的算路 (相當於棋手第一感) MCTS 就是在 NN 的協助下加強算路的能力,其實跟棋手的思維模式是很接近的 那麼我將 NN 的助益完全算進 MCTS 的 sims 數提高,去估算 AG 的算路深度是合理的 第四盤我看完圍棋TV張東岳的講法, 我會說如果 78手 是勝著,那麼 35手 虎 就是敗著,沒有虎而是黏,後面就不會有78了 也就是我上篇估計的三四十手算路 當然由於它有 MCTS 的關係,它在沒改 code 的情況下,遇到同樣的 78手, 它有可能會平安運轉 我的看法是 Google 太小看李世石,如果1000台 server 增到2000台,說不定就夠了 有人可能說 distributed 版跟單機版的勝率才77%, 但從十番棋的角度3勝1敗已經接近把對方打降級了) 從兩個現象看來,你不能抹殺 MCTS 的作用 1. 第二局的那個五路肩衝,那大概不是 NN 提供的優先選擇吧,非得 MCTS 掃出來 當然五路肩衝在職業譜也不會沒有, 我記憶中武宮有五五肩衝星位的棋吧,那更是對兩邊來說都是五路肩衝, 最近的棋也好像有吧,不過沒有在佈局的那麼早段下 而是其他很多地方都定型後再肩衝五路的場合下法 但樣本數少到單用 NN 是不可能建議你去下這種棋的, 但那個小機率權重讓它能在 MCTS 中脫穎而出 2. 昨天敗定後,AG 下出很多到無禮程度的業餘下法,那也是 MCTS 的「功勞」 它相當於下出很俗的打將式絕對先手,然後期望對方氣合脫先,從而得益 這在機率上就說得通了,但在下得很業餘這個點上,它就變成丟下 NN 的 AI 了 ------- 至於你驚訝 ML 會輸給人類的話,正如我上面所講,Google 太小看李世石了 而且你可能有點陷入 optimal 的迷思了 那些 LS、LMS(MMSE) 或是你想用 SVD 去除掉一些 sigular value 很小的 mode 那樣的 optimum point,我的看法是出來會是 training sequence 的(加權)平均 不可能會最好,更不可能更好 大學專題玩過用 Kalman filter 去預估汐止那邊的車流,就是這種感覺 ※ 引述《fallcolor (秋天走了)》之銘言: : 想透過這篇文章順著介紹一下這次讓圍棋AI效能躍升的關鍵:機器學習(machine : learning)技術。當然現在大家對alphago的演算法背景都大致了解了,簡單說是類神經網 : 路(neural network)與蒙的卡羅樹狀搜尋(monte carlo tree search)的組合。不過如同 : 一些圍棋AI專家提到的,MCTS從2006就被應用於開發圍棋AI了,雖然帶來搜尋策略的大躍 : 進,卻還是有些盤面(例如打劫)難於處理。NN為alphago帶來的最大效益就是搜尋深度/廣 : 度/順序的優化,使MCTS得以在有限時間內對勝率較高的目標手展開樹狀預測。從這點來 : 看,理解alphago成功的關鍵是NN而不是MCTS,要如何破解alphago的關鍵也應該在此處。 : 而NN就是ML技術的其中一種,所以我想提供一點對ML的基礎認知。 : ML的廣義目的是從輸入資料中學習出有意義的pattern,要實現此目的的演算法種類很多 : ,但我想介紹的是比較主流的deterministic algorithm。這類演算法應用於ML上可以用 : 清楚的數學模型表達: : y = f(x; theta) ……(1) : 其中x是輸入資料,f()是需要事先定義的模型函數,theta是f()函數中的參數,y是你希 : 望f()函數輸出的預測值。當中theta是未知的,演算法目的就是希望根據給定的輸入資料 : x與輸出資料y自動決定theta,實踐的手段則是透過最小化模型預測結果與預期輸出之間 : 的誤差值: : Minimize | y – f(x;theta) |^2 …… (2) : 這個例子中選擇的誤差函數只是簡單的平方運算,此函數稱為目標函數,也是可以選擇的 : 。到此為止,機器學習其實只是一道數學問題,解決公式(2)需要用到的是數值最佳化 : (numerical optimization)技巧,但我也不打算從這個方向介紹下去。要理解ML的優缺點 : 應該從對數學的直觀理解出發。這麼說吧,先把公式(2)想像成一個簡單的聯立方程式求 : 解問題,如果我們有三組(x,y)資料(並且不是線性相依),而未知數theta個數也是3,基 : 礎數學告訴我們恰好有唯一解。若未知數theta個數小於3,此時找不到任何解滿足三組方 : 程式了,但我們可以找到一個使誤差值最小的解。若未知數大於3,我們則可以找到無限 : 多解。 : 為什麼要複習這麼簡單的數學概念呢?因為這裡面其實解釋了ML的所有困難與迷人之處。 : 如果你對資料假設的ML模型很簡單,也就是說theta個數少,換言之f()函數無法滿足太大 : 資料量,我們就會說這模型對資料的泛化(generalization)能力差。若相反,f()函數很 : 複雜,theta個數多到比輸入資料多,意味著你可以找到無限多theta滿足所有訓練資料。 : 但很不幸它們對演算法而言又都一樣,此時就容易掉進local optimum,我們就會說這模 : 型過度擬合(overfitting)了。 : 到此為止,大家可以思考看看如果你是一個ML的研究者,你會傾向選擇一個簡單但泛化能 : 力普通的模型還是一個複雜卻容易找到wrong optimum的模型呢?相信有志氣的各位一定 : 是選擇後者吧。但現實情況是,十年以前的這個領域人們寧願選擇前者搭配其他技術當作 : ML的補丁。這當然有許多因素,包括以前的學術研究通常是在規模較小的資料庫上做驗證 : 就可以發論文了,也包括過去處理的ML問題並不複雜,最關鍵的或許是過去的最佳化技術 : 還沒成長到可以解決複雜模型下的最佳化問題,而對簡單模型卻幾乎保證可以找到 : global optimum。種種原因造成當時的學界有另外一種研究面向叫做特徵工程(feature : engineering),它關注的是如何表示輸入資料x。這一派的研究者相信,透過domain : knowledge先對輸入資料設計比較好的特徵表示,而不是把原始資料赤裸裸地丟近模型裡 : 進行訓練,相當於很大的模型複雜度在這個步驟就解決掉了。基於這個理念十年前的ML其 : 實比較像feature extraction + model prediction的組合技,前者衍生出降維 : (dimension reduction)、特徵子(feature descriptor)等技巧,後者更是百家爭鳴,包 : 括logistic regression、support vector machine、decision tree、adaboosting,有 : 時候我贏你一點點,過陣子你又贏我一點點,不變的是誰也不能統一天下。除了以上還有 : 個比較特殊的派別叫做kernel machine,它的理念有點像是把兩步驟再次合二為一:假設 : x可以經過一個mapping轉換到無限維度,此時就可以把這個新表示法塞進模型裡並且以核 : 函數(kernel function)取代。……再往下說就離題了,不過因為kernel machine這概念 : 可以塞進許多ML模型,當時簡直掀起一波洗論文的熱潮,很有趣。 : 說了這麼多,可能有人想問,那尊爵不凡的NN呢?難道還沒被提出嗎? : 其實正好相反,作為幾乎是最早的幾種ML模型之一,NN早在1980左右就被提出來了。雖然 : 我沒能躬逢其盛,但聽說1990初的ML領域幾乎是NN一統天下的時代,直到1995有位叫 : Vapnik的研究者提出SVM後才迅速沒落。NN的好處在於它的模型複雜度可以設計到非常高 : ,而對模型參數做最佳化的數學公式經過Hinton等人推導後也變得非常簡潔。然而它的缺 : 點同時出現:即使有了漂亮的最佳化公式,仍無法解決一旦模型複雜度過高就掉入local : optimum的問題,而且這個local optimum還通常很糟。於是,當SVM挾著「我有global : optimum」的口號橫空出世之後,NN就慢慢被喜新厭舊的研究者們淡忘了。所幸固執的 : Hinton沒有放棄,經過十年沉潛,在2006提出pre-training的技巧首次在工程意義上解決 : NN會overfitting的問題。或許為了重新出發,他這次為NN的學習技巧下了一個叫deep : learning的口號,甚至嗆聲與NN相比,那些SVM、boosting、tree什麼有的沒的模型都只 : 是shallow learning(…膚淺學習)。後面的事大家就比較熟悉了,學界捲起一股DL旋風, : google/FB/IBM/百度……等大公司紛紛投入可觀的資源研究,ML瞬間成為實現AI的希望, : 諸如此類。 : 當然NN在技術層面的故事並不只到此為止。過沒多久研究者就發現,原來只要灌大數據加 : 上對NN模型有一些合理的規範限制,連pre-training都不用做就可以升天啦。灌大數據這 : 件事在過去是難以想像的,然而仰賴計算機硬體效能一日千里總算可以實現;而對NN模型 : 採取合理規範這個概念,造就了convolutional NN、recursive NN等新式模型的興起,其 : 中CNN就是這次alphago使用的機器學習模型。另外研究者也對NN的最佳化演算法進行一些 : 工程方面的改良,使訓練過程更穩定、更不會掉到奇怪的解,也更可以提高模型的複雜度 : 。 : 看上去NN完美無瑕了,不過其中很重要的一點是,這些改良都是透過實驗數據的提升來支 : 持的,背後仍然缺乏優美的數學理論。也就是說,NN會掉到local optimum這件事是它與 : 身俱來的原罪,不管灌再大的數據、做各式各樣演算法補強,這件事永遠可能發生。於是 : 有些腦筋不正常的研究者開始找NN麻煩,他們試圖透過另外一套演算法找出一種輸入雜訊 : n,使得 : x ~= x+n (~=:約等於) : y != f(x+n) (!=:不等於) : 這個研究的目標當然也可以從善意的一面來理解:分析NN模型究竟會在何時預測失效,並 : 以此進行改良。相關資料我曾提供於之前的討論文章中,這邊就不重複了。於是我們終於 : 可以回到圍棋AI的問題,在介紹一堆ML的基礎認知後,人究竟要如何理解alphago前所未 : 有的成功呢? : Alphago這次訓練出來的類神經網路模型,可以看待成是一個複雜度非常高、泛化能力強 : 、預測又穩定的數學函數f()。裡面的所有參數theta都是根據餵進去的棋譜以及相對應的 : 棋局勝負一筆一筆學習出來。這樣的模型可能已經非常接近完美了,但是請記住,回歸數 : 學本質時,它一定是不完美的。因為NN註定就是會在訓練過程中掉進local optimum,而 : 這個local optimum因為沒有完美地擬合圍棋遊戲這個決策的超平面(hyper-plane),就必 : 然會在某一種輸入資料中發生預測失準的問題。經常看到板上有人質疑,是否alphago沒 : 看過的棋步它就無法應付?這句話從ML的角度來看是不對的,因為就算這個棋步alphago : 沒看過,若參數的泛化能力強到可以「合成」這一步棋,就還在模型的表示範圍之內。直 : 觀一點理解或許可以想像成函數的內插,即使輸入資料不在取樣資料內,但計算出來的函 : 數上的每一點都是可以透過取樣資料參數化後內插得到的。反之,若是需要外插才能表示 : 的資料點,就可能造成函數的預測錯誤。 : 所以今天李世石九段的勝利──神之一手78,從數學意義上來說可以簡單理解為製造了一 : 個模型函數的外插點,或是說製造了一筆想搞砸NN模型的研究者朝思暮想的x+n的資料, : 使得alphago終於無法泛化。在之前的文章中我很悲觀地認為這個n一定是得靠另外一套演 : 算法才能破解得到的。也就是說以一位ML愛好者而言,我認為只有ML演算法才能破解ML演 : 算法,沒有機會透過人類的智識歸納。想不到李九段今天立刻狠狠地打我的臉,心情實在 : 是很激動啊。坦白說對這次比賽的關心是很失敬的,因為我甚至不會下圍棋,只是對ML抱 : 著興趣就忍不住當了幾日棋迷,簡直有點蔑視圍棋了。然而這四場比賽下來對於李世石的 : 表現卻是真的打從心底十分動容,於是決定寫這篇文章。希望透過這篇介紹能讓喜歡圍棋 : 的人對ML稍有認識。ML並不神奇,說到底就是資料堆積出來的一個數學模型,因為它仍然 : 缺乏人最重要的邏輯思維與創作才華(我認為這不同於模型的泛化能力),至少在現階段它 : 是遠遠不需要恐懼的,而是需要與人類的智慧互相參考與提升,一起進步下去。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 161.64.208.174 ※ 文章網址: https://www.ptt.cc/bbs/GO/M.1457932651.A.322.html

03/14 13:22, , 1F
推!實際上去估一下cNN讀取時間就會發現分析深度超級淺
03/14 13:22, 1F

03/14 13:25, , 2F
MCTS後段才是處理手筋的重點所在
03/14 13:25, 2F

03/14 14:00, , 3F
MC 跟 MCMC 的異同是什麼?
03/14 14:00, 3F

03/14 14:05, , 4F
因為這領域真的滿專業的吧
03/14 14:05, 4F

03/14 14:45, , 5F
Alphago是強在MCTS+"三套"NN know-how也都在那三套的
03/14 14:45, 5F

03/14 14:45, , 6F
訓練跟整合
03/14 14:45, 6F

03/14 14:48, , 7F
你要說是增加sims數目也不能說錯 但是NN有機會給你
03/14 14:48, 7F

03/14 14:49, , 8F
相當於算到局末的價值 不是純粹1000->5000這樣倍率
03/14 14:49, 8F

03/14 14:49, , 9F
的進步而已
03/14 14:49, 9F

03/14 14:57, , 10F
回aaaba,相似點在「提高 MC 的效率」
03/14 14:57, 10F

03/14 15:00, , 11F
m大,那就相當於職業棋手的形勢判斷,至於準不準呢...
03/14 15:00, 11F

03/14 15:01, , 12F
它就是職業的加權平均水準
03/14 15:01, 12F

03/14 15:01, , 13F
我也覺得MCTS很重要 但既然不熟就不敢評論它的重要性
03/14 15:01, 13F

03/14 15:02, , 14F
至於NN 純粹是認為你對NN求的最佳解理解為平均這概念
03/14 15:02, 14F

03/14 15:02, , 15F
是錯的 所以才想介紹ML基礎原理
03/14 15:02, 15F

03/14 15:06, , 16F
Kalman filter的話...恩...它跟NN複雜度差太多..
03/14 15:06, 16F

03/14 15:06, , 17F
不要這樣推論比較好
03/14 15:06, 17F

03/14 15:08, , 18F
複雜是一回事 比較好是一回事,昨天神就丟顆骰子砸死AG了XD
03/14 15:08, 18F

03/14 15:12, , 19F
比較同意f大的看法 NN應該是MCTS的前提 前提錯了就跟只
03/14 15:12, 19F

03/14 15:12, , 20F
有MCTS一樣 我覺得要如何下出讓Value network估算錯的棋
03/14 15:12, 20F

03/14 15:12, , 21F
才是問題
03/14 15:12, 21F

03/14 15:13, , 22F
而加權平均的假設在這幾盤棋是沒有實驗數據的
03/14 15:13, 22F

03/14 15:15, , 23F
找個佈局下得好的棋手下就不同了
03/14 15:15, 23F

03/14 15:17, , 24F
我沒說NN不是前提,但只有NN沒MCTS 實力就只有業餘低段
03/14 15:17, 24F

03/14 15:23, , 25F
記者會上說AG是按勝率最大去下的,所以更像NN提供權重
03/14 15:23, 25F

03/14 15:24, , 26F
讓MCTS去找,那找到錯的,不一定是NN錯,是進入了一個稀有
03/14 15:24, 26F

03/14 15:24, , 27F
事件,所以我會說神丟個骰子砸死了AG
03/14 15:24, 27F

03/14 15:38, , 28F
無禮還是無理?
03/14 15:38, 28F

03/14 15:39, , 29F
看論文就知道分支的分數是綜合nn和rollout,nn低分不見得就
03/14 15:39, 29F

03/14 15:39, , 30F
會被忽略。例如第二局五路肩沖那手
03/14 15:39, 30F

03/14 15:40, , 31F
已經無理到無禮的地步了
03/14 15:40, 31F

03/14 15:41, , 32F
對啊,所以我說NN 低分,還是可能在MCTS 出來
03/14 15:41, 32F

03/14 15:42, , 33F
是條件機率的概念
03/14 15:42, 33F

03/14 15:43, , 34F
請問有辦法估讓AlphaGo跑自我訓練 得到一組勝率的數據需
03/14 15:43, 34F

03/14 15:43, , 35F
要吃多少資源嗎 @ @?
03/14 15:43, 35F

03/14 15:44, , 36F
因為自我訓練相當於在平時做窮舉,COMPUTER GO DIGEST上說
03/14 15:44, 36F

03/14 15:45, , 37F
自我訓練在起始會有作用,但慢慢就會收歛
03/14 15:45, 37F

03/14 15:46, , 38F
請先看一下 7779
03/14 15:46, 38F

03/14 15:47, , 39F
因為圍棋複雜度是10^170次方,是沒機會掃好掃滿的
03/14 15:47, 39F

03/14 15:54, , 40F
bir大,我再說一次,我是在估 AG 的弱點,計算深度
03/14 15:54, 40F

03/14 15:54, , 41F

03/14 15:55, , 42F
7779是轉貼這篇之前就有版友給的連結
03/14 15:55, 42F

03/14 15:56, , 43F
我知道 NN 可以提高MCTS效率,就反過來相當於節省了硬件
03/14 15:56, 43F

03/14 15:57, , 44F
我不是在描述 AG 的技術 details
03/14 15:57, 44F

03/14 15:59, , 45F
這裡的"自我訓練"沒那麼神, 其實只是訓練估值網路的過程
03/14 15:59, 45F

03/14 15:59, , 46F
自我訓練的收歛是...不明顯但仍然向上增長 還是會到瓶頸?
03/14 15:59, 46F

03/14 16:00, , 47F
在這裡面有很多名堂要注意, 並不是棋譜倒進去那麼簡單
03/14 16:00, 47F

03/14 16:00, , 48F
eg "每一盤棋只取一個樣本來訓練以避免過擬合"
03/14 16:00, 48F

03/14 16:08, , 49F
只取一個樣本是什麼意思呀?只計算一次?
03/14 16:08, 49F

03/14 16:13, , 50F
看原文啊 有解釋... 現在的做法好壞其實是未知 XD
03/14 16:13, 50F

03/14 16:14, , 51F
這一塊應該算是還沒開拓過的領域, 如果 DeepMind 不知道
03/14 16:14, 51F

03/14 16:14, , 52F
世界上也沒人會知道, 只有花大量時間下去實驗才會有結論
03/14 16:14, 52F

03/14 16:14, , 53F
(高級軟體測試工程師 get)
03/14 16:14, 53F

03/14 16:27, , 54F
但到底要再投入多資源才能有效證明這個「假設」?
03/14 16:27, 54F

03/14 16:34, , 55F
大量的硬體資源和足夠強的棋手呀,正在實驗中
03/14 16:34, 55F

03/14 16:36, , 56F
......就當作是職業棋手的天劫吧= =
03/14 16:36, 56F

03/14 17:01, , 57F
那你就這樣認為吧 以後你對ML懂更多就會改變想法了
03/14 17:01, 57F

03/14 17:47, , 58F
所以現在在爭什麼?
03/14 17:47, 58F

03/14 17:56, , 59F
f大認為NN可以到達training 樣本(職棋)的最強水平甚至更強
03/14 17:56, 59F

03/14 19:02, , 60F
我沒這麼說 我是說平均這概念不對 請別腦補 謝謝
03/14 19:02, 60F

03/14 19:16, , 61F
嚴格來說NN是「feature」的多層加權平均(線性組合),但
03/14 19:16, 61F

03/14 19:16, , 62F
不會是「instances」的加權平均
03/14 19:16, 62F

03/14 19:17, , 63F
所以不會是職業(棋譜)的加權平均水準
03/14 19:17, 63F

03/14 19:18, , 64F
另外就算論feature,因為這邊的「加權」可以為負值也可以
03/14 19:18, 64F

03/14 19:18, , 65F
為超大的正值,所以「平均」的概念也不是非常好
03/14 19:18, 65F

03/14 19:43, , 66F
樓上大致正確,但局限於非最後一層裡的前半段
03/14 19:43, 66F

03/14 19:45, , 67F
也就是通過activation function以前
03/14 19:45, 67F

03/14 19:58, , 68F
對,你說的比較精確XD
03/14 19:58, 68F
文章代碼(AID): #1MvabhCY (GO)
文章代碼(AID): #1MvabhCY (GO)