深度學習與圍棋(Deep Learning and the Game of Go, Max Pumperla & Kevin Ferguson)+深度學習(Deep Learning with Python,François Chollet)
"深度學習與圍棋"就是教你如何用Python寫一個用AI來下圍棋的機器人程式,作者史Pumperla與Ferfuson,這本本來是沒要看的,但最後卻變成主要是看這本.
原本看的是後面這本François Chollet的"深度學習",主要是學Keras相關的用法與概念,無奈這本書有點無聊,書中的範例多數都是以Kerea內建的資料集來跑,原則上執行沒問題,但想想不知這樣的後續能拿來做些甚麼運用,畢竟我還是希望方法與金融資料結合,但作者Chollet卻直接擺明金融市場資料在機器學習運作的艱難,及過往資料與未來的低關係性勸眾人不需花時間在這領域,這與其他談深度學習書籍的做法大不相同,畢竟別的書拿了價格資訊就開始自做自式的跑模型了.但我以為有一個關於市場心理重複行為狀態在日內交易式挺明顯的,是一個可以切入的點.加上這本"深度學習"依舊有許多談概念的部分,相對較乾澀,主要是一個人若在書外如何使用這些定式的程序,畢竟該如何分層,用甚麼函數,書籍中也都沒交代它的決定方式或思考路徑,於是個人興起不如找一個專題來跑看看,看能加深它的使用與觀念有多少,於是便有了這本與它隨後的其他書籍.
沒想到看這兩本書花了挺長的時間,超過兩個月以上,每天只有一點點進度,除了理解難度,主要是實作上的問題,尤其是"深度學習與圍棋"這本,它有實作難度,一方面書附在Github上的程式碼有一些錯誤,光找error就快弄瘋人,何況轉換到自己電腦上還要處理一些環境問題,本書的設定環境式unix,自己換到pc環境,原就有些不同,加上deep learning的程式執行都相當耗時,跑個幾十分鐘的執行是常態,這時只能等待電腦給結果又不能做其他事,個人的電腦雖有獨立GPU,但只能算是勉強能用,畢竟是幾年前的機器了.是一本花很多時間來理解與實作的書籍.而後面那本François Chollet的"深度學習"應該是看本書前關於神經網路與keras等觀念的一個基礎必需,初學者最好先閱讀實作參考後,再來讀"深度學習與圍棋"才較為效率.Chollet的書號稱是經典必讀,但單看其實有點無聊,書中的例子相對簡潔,程式碼清楚,但即便如此理解深度學習,卻也不知能用來做甚麼,這便是困惑的產生.
"深度學習與圍棋"就是談"深度學習",但它是以"圍棋程式"為專題來談深度學習,初看應該算是本比較難讀懂的書,看原文或看中文都一樣,難度不是在語言文字上,而是它不能算是本入門書,讀者必須對深度學習的各層面有個基本認識,因為有些觀念的地方它只會一筆帶過,比如先前我們學過的ANN,CNN,RNN等類神經網路,Keras內的觀念,沒基礎的人會完全看不下去,書也不會詳細解釋程式碼,只是會在某些地方附加說明,這點對初學者或是少寫程式的人閱讀不利,不過,這畢竟是本實作兼談某些理論的書籍,特別是關於"強化學習".書的目標很明確,就是讓讀者讀完後可以Python寫出一個AI圍棋程式,即自動下棋的機器人程式,最後兩章並附帶提了關於alphago的關於網路架構,棋盤編碼,策略網路,價值網路,它改良的蒙地卡羅樹搜索算法等大致結構,甚至更精進的alphago zero裡加強學習的類神經網路來指導樹搜索的觀念,方法,與超深神經網路等技術也約略提了一把,看似多少有些廣度了,但其實只是增加更多的未知領域帶探索.
千萬不要看到AI圍棋程式就自行產生高大的氛圍.下棋的可以是職業九段,也可能是初學1周.這書裡的圍棋機器人不可能一下就跳成Alphago,甚至可以說差得很遠,簡直是mlb與社區少棒的差別,但這個不重要.它是一個普通人想理解如何寫AI下棋程式少數能找到的參考書籍,所以它能教授的絕對不是太過深度的東西,而是讓讀者能夠理解全域架構,與個體細部該有的組件.就像社區少棒比賽與大聯盟比賽所有的規制,設備,及運動都幾乎一模一樣,只是強度大不相同.因此本書談寫出一個AI下棋程式,主要是將它依功能分成三大塊:一個圍棋數據處理器,一個編碼器,一個神經網路架構.
正如上圖所下方所呈現的,從棋盤到數學矩陣,從數學矩陣到神經網路,然後循著箭頭往上看到神經網路的終極目的:下出一手.這三張圖正好符合AI下棋程式的三大部分.而其中首先需要建構一個圍棋數據處理器,這一部分比較屬於綜合性雜亂的知識相匯,處理的問題包括從這個程式是用在進行"個人"與"程式"下棋,或是"程式"與"程式"間的下棋,是單純在本端機器上直執行下棋,還是要透過網路的人機大戰,機機大戰,這些涉及輸出輸入的表象問題處理,到如何形成一個棋盤,這棋盤上那些地方是可以下的地方,那些是不能下的禁手:比如自殺,計算每個棋子的"氣",計算死活,執行落子吃子,盤終勝負狀態,理解劫爭.光是這些就需要一些基本的程式能力與對於網路技術面的理解.而有了這些也只是能夠寫出一個基本能夠執行Play落子動作的無智能"射擊"程式,真的要進入AI,還早得很,首先要將一局棋盤狀態轉換成數學能夠紀錄與使用的格式,然後便有了上圖所標記的國際上通用的SGF(smart game format)文件格式,透過編碼器將SGF轉換成為數據,特徵與標籤,因為採用的SGF必然是大量的百局棋,甚至幾千局棋的資料,所以這方面的處理非常的大與細節,有了以上的大數據,方可能來進行神經網路的處理,找到一個初解,再透過學習逐步地找到較佳的手段,與位置.
這本書直接就採用神經網路中的卷積神經網路(CNN),且會採取好幾層的方式,關於這方面的知識與技術就是弄熟Chollet的"深度學習",這些都不是太大問題.不過呢,這個CNN只能處理眼前的一手決策,而我們要下的整盤棋,這種難度就大了,還會產生幾個對於此專題的疑惑.首先是下棋的核心知識問題,我這裡縮稱的下棋是指的"電腦"下棋,不是人,本書的電腦下棋知識核心有兩大點,一是MCTS,一是Deep learning.MCTS只得是蒙地卡羅樹搜尋法(Monte Carlo tree search):
雖然MCTS是本書核心知識,它是一種藉由逐手評估勝率模式的方式來規劃決定的.從根節點開始,連續向下選擇子節點至葉子節點.讓遊戲樹向最佳的方向擴充,這是蒙地卡羅樹搜尋的精要所在.但是書籍在此相關內容的解釋並不多,必須靠讀者自行找尋資料,或憑藉著過去所學,所幸這邊有本國內出版的"電腦對局導論"可以提供相對的知識輔助,這本書中"蒙地卡羅樹搜尋法"占的篇幅不少,且許多是2016以後被廣泛採用的知識點.但這不是問題,問提是在MCTS與Deep learning的結合上,作者沒有詳談,只是在最後2章提及關於Alphago所採用各類相關新的知識概念上,提出來它有這樣的發展與採用如何用神經網路指導樹搜尋,即新的Alphago Zero裡已積實踐使用這樣的概念,即為樹搜索構建一個神經網路,畢竟就一個人思考會認為下棋應該是個連續思考的動作,手與手間有著高度相關,而這本書所能帶來的只是一連串的個別動作,手與手之間的連結性似乎不高.其次,本書在deep learning的重點除了CNN外,主要是放在了強化學習(reinforcement learning)上,但它談得又不夠深入,最早作者讓我們完成一個能夠執行的AI下棋程式,是為棋盤上的每一個點計算了一個值,每個交叉點得到的值代表神經網路預測下一步在該點落子的置信度,一個簡單的思維就是直接選擇具有最高值的動作,但是對於任何給定的棋局,豈不就永遠就只有一個固定答案,因此最好的就是能加入一個隨機策略來提高多樣性的可能,實作上可以透過自我對弈來強化學習,採用新的策略樣式包括了梯度策略法(gradient policy learning),價值評估法(action-value learning),與演員-評價法(actor-critic learning)三種新的強化學習觀點,但實作不多,僅限於小範圍的舉例,沒有融入到大專題上去,我們只能知道可以利用Keras來建立一個策略函數與價值函數在演員-評估法中來強化學習的效能,但實作還必須自作為來的延續,其實是有些可惜,不過出書就是這樣,不可能甚麼都包山包海全吃到底,後續是要讀者自行去找尋與研究的吧..
這本看了有段時間,其實說看是不精準的,它是本實作的書,需要逐步的依Python程式執行,但僅是複製貼上執行沒有意義,何況作者們將這本書整個的程式碼放在Githut上的竟然有一些錯誤,需要花時間去debug,加上deep learing的程式都要花大量的電腦時間,看起來似乎有些不值.不過Alphago打敗人類後,對圍棋行業外的人來說看似並無關係.不過它已完全的翻轉圍棋與圍棋界這件事,從那時起,職業棋手平日開始啟用AI軟體來訓練自己,學習它的下法,思維它每手的企圖目的,與每手的功能效率.也就是說在那個領域出現了一個無名未知的"電生物"改變了它的環境,生態與文化習慣,人竟然要向一個電生物學習,說起來是有點殘酷的.人類發展的千年的東西,現在居然被這生物告知,你只開發發現了其中不到10%的知識,概念.所以我也就暫時不把Chollet對於身學習與投機市場價格關係的看壞列為必然,應該還有些地方能夠進行某些深度學習的研究切入點吧.以上.
留言列表