iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

沒過多久局面倒轉,電腦開始讓子給人類對手。我也曾好奇地挑戰了電腦幾次,但每次都比不到一半便敗跡畢露。明知沒有辦法,還是被激怒了......

-- <突圍思考>,曹薰鉉著,盧鴻金譯

也過了這麼多天,如果機器學習的部份還不進場,單就遊戲系統的部份的描述實在有暖場過久之嫌。如果以原本我預期的文稿的出場順序繼續發文,恐怕還要拖個一陣,才能真的輪到機器學習的部份。由於在前十天的目前狀況也已經陸續更新訓練代理人過程中的一些想法與進度,所以還是盡快補上這個部份吧。

選擇參考書

同前述,為了 DeltaPathogen 專案,購買了主要參考書的強化式學習:AlphaZero 通用演算法之外,其實我也買了強化學習深度解析以及深度強化式學習。後兩者介紹了許多強化學習(以下或略寫為 RL)的典範概念,最後這本尤其附有程式碼,不像第二本是演算法教科書。這些強化學習典範概念,從最簡單的一些(比方說 Q-Learning),到複雜的(Intrinsic curiosity module 之類),也都有小遊戲(大多是 OpenAI Gym)作為範例且成功訓練。

過去的得獎系列文 Knock Knock! Deep Learning,以及從根本學習Reinforcement Learning,也都介紹了相關的強化學習方法。另外線上學習資源也很多,如李弘毅老師的教學影片

但有一個直接的事實,情感上有點尷尬。AlphaZero 的論文的方法一節,整理了許多西洋棋和將棋的 AI 研究先驅之後,於結語這麼說道:

None of the techniques described in this section are used by AlphaZero. It is likely that
some of these techniques could further improve the performance of AlphaZero; however, we
have focused on a pure self-play reinforcement learning approach and leave these extensions
for future research.

我認為,「純粹的閉關自我修煉即可修成一代高手,也許你們的技巧可以幫助武學再上層樓(,但我不需要)。」的感覺濃厚。所以在主要參考書中,也不見整個強化學習領域那些令人頭暈的演算法。DeepMind 的論文作者以及參考書作者可能是相關知識已經內化,而我們這些啃食懶人包密笈的實作者難免因此根基不穩,但,根基有空再補就好,side project 不就是要圖個做得好玩嗎?

還有,論文中所有的 Reinforcement Learning 一詞,都出現在強調 AlphaZero 方法自己,而不是參照到過去的前輩。雖然是概念上都屬於強化學習,但隱然有「我也不是奠基在你們之上,當然不需引用你們作為參考」之感。一開始覺得光是這樣就有傲慢躍然紙上,但仔細想想這根本不關我的事,人家 CEO 是西洋棋大師,並且 AlphaZero 輕鬆擊敗 Master,而 Master 是能夠輕鬆擊敗擊敗了棋王李世乭的 AlphaGo 的圍棋 AI。一切全憑實力。

簡介 AlphaZero 方法

本文內容整理自中文版(旗標出版)「強化式學習:AlphaZero 通用演算法」的教學與說明。以下以主要參考書指稱。

AlphaZero 強化演算法有三大組成元素:

  • 強化式學習:上述的材料較大篇幅涵蓋強化學習領域的內容,但我還沒有提供任何說明。最快速的講,有別於資料已經上好標籤的一般監督式學習,強化學習是讓代理人從環境所得的回饋之中「強化」行為,而非從具備標籤的資料集中習得行動的方式。這個機器學習子領域的挑戰性在於選擇合用的方法,適度更新策略或價值模型,以讓代理人能夠更準確決策它在給定一個環境時應當產出的行為。AlphaZero 利用到強化學習概念的部份在於,它也是在與環境互動的過程中逐漸累積出策略與價值的設定方法。
  • 深度學習:人類的知識領域或是經驗累積過程裡面,往往有些難以言說的「不傳之密」,像是五彩繽紛的圖像如何產生意義,或是像 DeepMind 一戰成名的圍棋棋感如何產生之類。根據經驗,深度學習習得這些知識的能力是有目共睹的。而 AlphaZero 是使用深度神經網路來作為「狀態 --> 策略分佈」以及「狀態 --> 盤面價值」的函數。所以是一種深度強化學習。
  • 賽局樹演算法:預知能力,或者再次借用棋語來說,就是閱讀盤面的能力必然牽涉到一些計算。而由代理使用的典型計算方法,就是蒙地卡羅樹。在每一個盤面下,模擬諸多參考選點以及之後的可能選點(包含自己的與敵人的)。在到達設定的模擬次數之後,統計所有的合法選點的遍歷狀況,然後將遍歷狀況轉換成可以用來更新策略分佈與盤面價值估計的資料。在先前幾日的「目前狀況」小節當中提及的資料集,就都是用這個方法收集而來。這個部份的挑戰,在理論上是探索(explore)與利用(exploit)的平衡,但說實話是,我就算實作了書中的公式,也還似乎不能保證有找到好的平衡。找平衡這件事情還是很仰賴實證過程。另外一個挑戰則是時間,收集這些對局資料真的很久

在主要參考書的第六章,作者實作了一個井字遊戲代理人。其架構如下

  • 對偶網路:一個多個殘差塊(residual block)為主組成的神經網路結構,輸入當前的盤面狀態,在末端輸出一組執行的策略,以及當前盤面的勝率。
  • 蒙地卡羅樹演算法:從每個盤面樹狀展開,計算未來衍生盤面的優劣作為策略的依據。
  • 自我對弈模組:令強化學習代理人反覆自我對弈,產生訓練資料。
  • 訓練模組:以訓練資料進行訓練。
  • 評估模組:以最新代理人和歷史上累積的最強代理人對弈,並紀錄誰才是最強的一方。
  • 上述三個模組迭代固定次數(書中的井字遊戲代理人操作 10 次)。

我一直很感興趣的是這些模組如何應用在不對稱棋類上。比方說,是否有別於井字遊戲或圍棋只須訓練一個代理人,我是否應該要訓練三組代理人,分別餵食純的疫病方著手資料、純的醫療方著手資料、和混合的綜合遊戲著手資料?是否應該同時維護三組最強,然後每次迭代就來個 3x3 的循環賽矩陣分看各個代理人的勝率?但,這美好的遊玩心態最後敗給了時間。實在沒有時間展開那些組合,也因為後續陸續的發現而更新作法,以至於必須先專注在單獨訓練疫病方的代理人。

接下來我會進入蒙地卡羅樹模擬部份的實作,這無疑的是這個專案裡面最燒腦的環節。從六、七月開始思考相關的作法,但還是牛步進行。另外我在 python 部位的測試實踐完全是一片空白,所以短暫衝刺的結果還是留下了許多不確定性。總之這個部份也會在接下來的數日與各位分享。

目前狀況

趕在這個不至於太尷尬的地方切入機器學習篇。如前幾日已經有宣言給讀者做心裡準備,那就是我沒有要百分之百引用 AlphaZero,而是想要先以我自己的想法踩出第一步。從 訓練紀錄看來,現在已經進行到第 15 代,但其實前面的各個世代多得是重開機的全新模型訓練。實際上,完全還沒有開始自我對弈迭代這麼回事。所以,說現在還在等待槍響,也不為過。

事實上更有趣的是,在這過去的 15 個世代當中(well,在 github 上只看得到 summary,因為 simulation 的棋譜、train 的每個 epoch 的模型,都會佔空間。沒有 train 好的模型根本沒有分享的價值),這種「終於要踏出第一步了!」的感覺時常出現,以至於我現在根本也很難盡數每個轉折點、每個興奮的期待和每次失落所為何來。希望之後能夠再慢慢跟大家分享那些轉折點。

接下來,這種定性論述的簡介文稿,大概還有以下幾篇比較明顯的主題,

  • 對偶網路
  • 蒙地卡羅實作x3(這真的充滿血淚...文章應該是看不出來,但想了一個月又寫了一個月...)
  • 實作讀譜網頁(系列文第二篇展示的盤面之由來)
  • 實作殘局譜生成器
  • 實作對局網頁(這個,完全還沒完成...)

算起來 19 天;再之後就沒有主題了,就分享當時的訓練心得或是回顧目前為止的心得。假設可以分享 5 篇上述說的數個世代間的轉折,這樣是 24 天的份。剩下的 6 天,或許就可以開始寫附錄,描述相關的一些內容、之後有時間應該進行的研究方向、與友人之間針對桌遊的閒聊之類。

我曾描述上一屆晶心壯士 II 的隊友是用一個月的時間進行黑客松(打通 rv32 版本的 alpine linux),這一次則輪到我,而且還更不確定未來如何...

但是!!!就在昨晚,向友人 J 訴苦之後,稍微轉向的作法,竟然又有一種,終於要踏出第一步了!的感覺。不囉唆,上圖:

https://ithelp.ithome.com.tw/upload/images/20240912/20103524eQAmNsZlvk.png

個別圖表的標題意義會在明天的對偶網路實作之中解釋。但總之,這裡三排,下兩排是使用交叉驗證的訓練和訓練中驗證的損失曲線,可以看到兩者都 fit 得還不錯,這還沒什麼;最驚喜的是上排的測試用資料,竟然也 fit 得很好。這表示有些通用的概念開始累積在模型內部,讓它推論未曾見過的資料集也能夠有不錯的表現。

但是,這樣就能夠確定下棋下得更好嗎?這就必須留待後續檢驗了。


上一篇
導入單元測試
下一篇
對偶網路實作
系列文
DeltaPathogen:國產雙人不對稱抽象棋「疫途」之桌遊 AI 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言