iT邦幫忙

2024 iThome 鐵人賽

DAY 1
3

"Many things prevent knowledge, including the obscurity of the subject and the brevity of human life."

-- Protagoras

「整晚又整晚...整個星期又整個星期...就只為了一個字...有時還只為了一個連接詞。您要了解,醫生,嚴格說來,在『但是』與『而且』之間做選擇還算簡單。介於『而且』與『接著』之間就已經比較困難。『接著』與『然後』困難度更高。但最困難的莫過於是選擇到底該不該加『而且』這個字。」

-- 〈瘟疫〉,卡繆著,嚴慧瑩譯

前言

這次的感受真的與前幾次參賽非常不同,幾番動手行文,總是增修刪減不斷,難以開始。後來才豁然開朗,既然如此踟躕,那還是就從踟躕的本身開始說起,才是我的風格。由於除了技術部份之外並無準備文章,本來想要以完全生冷的方式只論實作與實驗結果,但這樣一破題後,顯然我也已經廢棄了這條路線。所以還是讓這個專案的分享如多維度的雜訊分佈一般,什麼都有的大雜燴類型來呈現吧。

這次大會新增了佛心分享-SideProject 類別,剛好切合我一貫以來參賽的角度。但時也命也,這次的 AI 實戰於我卻又是最跌跌撞撞的專案。比之予焦啦,助跑期大致相仿(兩年左右),但是完成度和每個小階段的踏實感都遠遠不及;比之前年放飛自我的 hyperscube 也少了遊興與隨手亂寫的瀟灑(說也奇怪,ChatGPT 出現之後,反而沒有憑本能亂寫英文的勇氣了)。雖然是遊戲位居核心的一個專案,卻總令我眉頭深鎖,好像突然被宇宙開了個玩笑,置放到完全不同物理尺度的時空,所有的常識若不是被挑戰或推翻,就是意會到那些只是欠缺深度的愚者之信。

我會偶爾混用遊戲 AI遊戲代理人代理人機器人,他們都指涉能夠成功與 server 互動並做出決策抵達遊戲終局的程式。

DeltaPathogen 專案的目的在於,針對疫途這個遊戲,訓練出可以擊敗真實玩家的代理人

要論遊戲 AI 以及相關的衝擊性事件,必當回顧 Google/DeepMind 團隊在 2016 以 AlphaGo 風光擊敗世界棋王李世石的第一局實況的那個奇點,或許是最快能夠累積感覺的方式,但該年年底,DeepMind 繼續以升級版 Master 在對弈平台上斬盡中日韓高手之後,他們還再以後來的 AlphaZero 超越了團隊先前的成就:這些超人數等的遊戲 AI,不再仰賴人們過去累積的圍棋知識,而純以自我對局的方式累積棋譜並進化。

感謝旗標在 2021 年翻譯並出版了布留川老師的強化式學習:打造最強通用演算法 AlphaZero,讓我們業餘愛好者能夠試著移植;也感謝深顏色工作室在棋類遊戲的研發努力,讓我在 2023 年初得以在展覽攤位上入手疫途這款遊戲。至於為什麼要以這款遊戲作為目標,而非其他更經典或更具代表性的桌遊或特定抽象棋,我也沒有明確的理由,只是把約五百天前的一個起心動念當作槍響,就或急或徐地走走停停起來,至今仍茫然不知終點線在何方。

該書,在之後的系列文當中,以參考書直接略稱。

不是沒有想過以 PathogenZero 或是 AlphaPathogen 來命名這個專案,但兩者都太狂妄了,完全沒有把握,也不認為合宜。排名第四的希臘字母 Delta 的話卻是剛剛好,代表這個專案只是小小的一些嘗試,與毫不嘗試略有不同,也就這樣而已。

我會偶爾混用這個專案DeltaPathogen

形式上,這個專案的程式碼大致上都涵蓋在 PathogenEngine repo 裡面。這是一個 Rust 專案,裡面實作了疫途遊戲基本規則,而真正對弈時使用的 server 以及強化學習的部份,各自存在 examples 裡面,符合一般函式庫型的 Rust 專案的做法。

雖然沒有具體的章節規劃,但涵蓋的重點大致如下:

  • 前半:拆解遊戲、對於遊戲本身的理解、實作遊戲系統的一些重點主題
  • 後半:實作 AlphaZero 演算法的過程、執行代理人訓練的一些潦草筆記
  • 附錄:與技術、與遊戲都些微相關的一些延伸想法

這個打算是,選擇較大的單一概念或主題當作一天的題目,而非按照時序或檔案序走過現有的程式碼。寫作力求教學意義的技術文章於我,一直有一個窒塞的感受,最近接觸到有人描述(抱歉,也不確定原典出自何處了),寫作只能對應到讀者的主觀時間感受而序列化(serialization)自己的材料,豁然開朗。大前年的拙作予焦啦系列花了非常多的力氣,先求技術上達到可接受的程度,於開賽前又重新整理程式碼,將完全非線性的開發、除錯經驗收編乾淨,好不容易才能夠理出一個順暢的敘事,於 DeltaPathogen,完全沒有這個餘裕。

目前狀況

想要增設每日的「目前狀況」一節,讓兩條並行的時間軸事件能夠有一個參照的機會。

第一條當然就是系列文,官方的話是 30 天,但有些延伸材料的話也可超過。這是表面上的。

第二條則是實際上的進行。往年我的作法會是在後記再當作幕後花絮論及,但這對這次的我來說又是額外的認知負擔,所以不如直接作為每日展示的部份。這應該可以算作是多重奏的一種拙劣模仿(相較於鋼琴詩人與這段影片的安迪老師本人)。總之,

  • 專案起始點:在 2023 年 2 月底入手這款遊戲之後。當時有幸在攤位上與設計師本人對弈疫途,實在是很難得的體驗。更早前在 2022 年農曆年間首次接觸 Tensorflow 和簡單的強化學習範例,當時也曾試圖修改 Katago 訓練九路圍棋變體,或是試圖將 Q-Learning 引用到非完全資訊遊戲(當時的對象是「The Crew:找尋第九行星」),但都是非常徒勞的嘗試,沒有成功可言。所以當這時候接觸到疫途這個抽象棋,感覺它的複雜度比圍棋小得多,但又比一般強化學習的代理人-環境大一些、有趣得多。這是事後詮釋這個專案的起源衝動。
  • 第一次轉向:衝刺一個 ncurse-based 的遊戲伺服器,並休止於 2023 年 9 月。學習 Rust 就耗費了可觀的腦力與時間,若不是 ChatGPT 在,真的不知道這一段時間會變成什麼樣子。但由於整個狀態難以維護,所以廢棄了。
  • 第一次訓練的嘗試:2023/11~2024/3 的區間,這段時間內沒有良好根基就開始嘗試,在沒有詳讀參考書的情況下就直接用全連接層的神經網路來訓練,毫無效果。
  • 照著參考書進行實作:整個 Q2 與 Q3 初,將我的架構轉換成適合蒙地卡羅模擬的過程跌跌撞撞,也又調整、修改了一些遊戲系統與伺服器的部份。
  • 終於開始認真訓練:八月中之後,這時候已經必須好好的準備鐵人賽的賽期,雖然文章的寫作可以和電腦訓練並行,但是這個機器學習的迴圈,我土法煉鋼,也需要時時介入。而且效果並不怎麼樣。其中還有些辛酸就在後續的文章展開描述。

那些厲害的研究者都會描述「訓練了幾個世代之後...」這樣的句子,但是我作為孵育員怎麼選擇親代?沒有明顯的優勢,還需要以該模型作為下階段的展開嗎?由於時常陷在這些猶豫之中,以至於現在我還沒有長出一個族譜,而還在非常早期從最低劣的隨機對局開始學習的狀態。

https://ithelp.ithome.com.tw/upload/images/20240901/20103524QPyQuDF8Fm.pnghttps://ithelp.ithome.com.tw/upload/images/20240901/20103524MI5TUiFJqG.png

而且生成這些對局資料並紀錄,也是著實考驗著我的程式能力,但無奈沒有太多力氣可以做效能最佳化,所以還是需要非常多時間收集,但又幾個 epoch 內就會過擬合(overfitting)。所以最誠實的開賽語就是,我沒有把握能夠在這三十天內訓練出一個真的有學會什麼遊戲策略(乃至於遊戲規則!!!)的代理人,但是我可以展現我在這個過程中的謙卑。

在寫作的此刻,訓練的進度仍然令人難以滿意。但總之,我自己會把這一系列當作夾帶不少資訊技術的遊記來寫,希望還能寫出一些第一手的困惑與疑問、咀嚼的過程中反覆的苦澀與微甘,其他就很難再多奢求什麼了。


下一篇
規則相關的雜談
系列文
DeltaPathogen:國產雙人不對稱抽象棋「疫途」之桌遊 AI 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言