AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

黃迴歸線發表於2021-05-25
AI的更新迭代和《空洞騎士》的敘事達成了奇妙的和諧:要不斷嘗試,不斷犯錯,直到戰勝敵人。

開始直播第五天,Ailec的直播間誕生了一場頗為精彩的戰鬥。

正在直播的遊戲是《空洞騎士》,玩家挑戰的BOSS是作品中的高人氣角色大黃蜂。小騎士先是用衝鋒的無敵幀躲過大黃蜂的衝刺,接著又在大黃蜂擲出飛針的同時下劈並靠近,攻擊得手後一個小跳,輕易躲過收回的飛針……

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

迅速靠近敵人,大黃蜂起跳瞬間預判使用法術,在BOSS做出衝鋒姿勢時一刀打出硬直,幾乎沒有停頓地位移靠近繼續輸出。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

耗時40秒,小騎士用最後一刀劈中正處於衝鋒狀態的大黃蜂,利落地結束了這場戰鬥。彈幕一時飄過好幾串代表著驚訝和振奮的“ohhhhhh”,而小騎士只是沉默,繼續開始與大黃蜂糾纏新的一局。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

不少觀眾感慨這位才剛開始玩遊戲沒幾天的新手已經擁有了遠超自己的水平,甚至認為其中某些精妙的操作已經超脫了正常人類的範疇——當然,其中完全沒有質疑小騎士舞弊的意思。

畢竟,這位幕後的玩家本來就不是人類。

1

老實說,AI打遊戲並不算是什麼稀罕事。

有以實力強著稱的,像橫掃圍棋界的AlphaGo和《星際爭霸2》達到宗師段位的AlphaStar,已經被不少人稱作人工智慧領域的里程碑。也有以實力差聞名的,日本一家AI公司的技術長曾經在推特上釋出一個“史上最弱”的黑白棋AI,即便是職業棋手上陣,想在它面前輸掉比賽也不得不絞盡一番腦汁。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?
勝率逼近0.5%

而且AI往往不按套路出牌。你讓它玩索尼克,他跑去牆角卡BUG走捷徑通關。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

你讓它學俄羅斯方塊,他迅速落下每一塊方塊並在遊戲即將Game Over的時候按下暫停鍵。因為每落下一塊方塊都能使AI獲得的更多獎勵分,而在輸掉遊戲前按下暫停就不會得到失敗的懲罰——你得承認,這對它來說確實是一種極具效率的得分方式。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

正在美國留學,且面臨著期末考核的Ailec在開始自己的作業前就已經做好了一定的心理預期,可即便是站在前人的肩膀上,直到真正開始調教AI打遊戲,他才切身感受到這是一項多麼充滿坎坷的挑戰。

之所以選擇《空洞騎士》,除了Ailec自己剛在去年年底通關了這款遊戲之外,更直接的原因是他恰巧點進了一位名叫“烽征戰”的up主的直播間。

烽征戰是一位國內的研究生,雖然平日學業繁忙,但偶爾也會在B站開直播,今年三月份的時候,他正在嘗試的專案是訓練AI擊敗《空洞騎士》中的大黃蜂。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

為什麼是《空洞騎士》,為什麼是大黃蜂,其中實際上包含了諸多考量。首先,《空洞騎士》是一款2D平面遊戲,且BOSS戰需要投入關注的物件只有自己和BOSS,這減輕了計算機的工作量,其次,大黃蜂的整體攻略難度不高,而且招式多變,相對來說是個難易程度適中的好老師。

Ailec和烽征戰一拍即合,與對方溝通交流一番後便開始了同樣內容的直播。他覺得這是個再合適不過的期末作業——創造一個能夠穩定戰勝大黃蜂的AI。

2

Ailec最初版本的AI框架基本繼承自一位名叫“藍魔digital”的up主。這位在2020年寫了一套AI學習打《只狼》的程式碼,借鑑其程式碼創作的AI擊敗葦名弦一郎的視訊還上過B站首頁。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

不出所料,在《只狼》中如魚得水的AI 立馬對《空洞騎士》呈現出水土不服的症狀。作為“只狼”,AI需要做出的判斷是鎖定弦一郎、揮刀、格擋、適時看破,而作為“小騎士”,“格擋”和“看破”這樣的機制在遊戲中並不存在,它得重新學習如何使用基本的揮砍和法術打敗敵人。

於是Ailec開始馬不停蹄地修改程式碼。白天對AI演算法進行更新迭代,睡前開啟直播,把AI扔進遊戲訓練學習——這時候國內正是上午。一覺醒來,審視一下學習成果,和觀眾們聊上兩句,然後緊接著投入新的更新迭代。

Ailec至今清楚記得第一次重大更新(事故)發生在容器7身上——容器,這是直播間的觀眾為AI取的名字。你知道,有關遊戲的具體版本,開發者往往會用上1.1、1.2甚至是尼爾那樣行為藝術的“1.22474487139”加以描述區分,但具體到《空洞騎士》中,AI的版本更迭和遊戲的敘事產生了奇妙的對映關係。根絕遊戲的設定,玩家操縱的小騎士是萬千容器中的一個,在他必然踏上的旅途中,無數容器曾經歷過與其相似卻又不同宿命, 就像一代代挑戰大黃蜂又倒在她針下的AI。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

容器7之所以與眾不同,主要在於這是Ailec第一次嘗試手把手教AI如何戰鬥。簡單來說,他將自己對陣大黃蜂的錄影演示給AI,希望它能從中學習到一些操作技巧,結果容器7受到教誨後,不僅沒有成長為武林高手,反而立地成佛,具體表現為只追著BOSS跑,靠近後卻一刀不砍——可惜大黃蜂不會因此手下留情。

事後反思時,Ailec找到了癥結所在。對人類來說,靠近BOSS是為了有效擊中BOSS,這點不言而喻。但AI不能理解人類的思路,它認為小騎士花了更多的操作和時間接近大黃蜂,最後卻只揮出一刀。如果進攻一次的得分是1,那麼靠近BOSS可能佔0.9,揮刀則佔0.1。既然如此,一個勁往BOSS身上靠就是十分合乎邏輯的操作……

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?
Ailec掛在直播間的FAQ

3

總結失敗經驗,不斷優化演算法,一個個容器因此誕生。進化到11號容器時,Ailec終於做出了大刀闊斧的改動。

具體的嘗試主要體現在兩方面:一是優化獎勵機制,降低移動在“得分”中的權重,杜絕只追著BOSS不砍這種現象的發生;二是將動作組合起來,命令AI一次性做出一組動作,比如在衝刺後銜接攻擊,從而更好地抓住輸出機會。

容器11的表現一度十分亮眼,文章開篇的那頓精彩操作就是它的閃光時刻之一。不過好景不長,威猛沒多久,11號就陷入了日牆狀態。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

病因和容器7類似,在不斷的練習過程中,容器11的進攻權重完全壓倒了移動權重,換句話說,這回只知道砍不知道動了。

除此之外,動作組合的弊端同樣顯現出來。原本Ailec為容器們設定的操作只有17項(例如左移動、右移動、左攻擊、右攻擊……),但在強行新增派生動作後,AI的學習難度陡然增加,根據BOSS行動作出的反饋延遲也劇增——小騎士一刀揮出最快只需要0.25秒,但AI的反應時間卻長達0.3、0.4甚至0.8秒。

Ailec最終找到的應對方法是放棄動作組合,將小騎士的移動和攻擊分別交給兩組模型管理,其中方向腦只負責移動,而行動腦則負責除移動之外的揮刀、法術、跳躍等等。

應用這套框架後,Ailec又在容器16身上嘗試削弱延遲獎勵機制對AI 影響。延遲獎勵機制的主要作用是讓AI認清長期利益,他用迷宮舉例,看上去離出口更近的岔路口可能是死路,延遲獎勵能夠讓AI意識到短時間內的繞路實際上會節省更多的時間。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

但《空洞騎士》不是迷宮,大黃蜂的攻擊方式是多變的,小騎士的一次操作也不會對後續戰鬥造成類似於迷宮選錯岔路口那麼嚴重的影響——降低延遲獎勵機制對AI的影響之後,容器16的勝率終於穩定在了30%左右。

Ailec幾乎以天為單位對演算法進行細緻的優化,容器們的勝率也因此來回波動不定。當然,也有做無用功的時候,比如一位觀眾曾建議他嘗試應用RNN(迴圈神經網路),結果花了兩天時間改的程式碼最終對小騎士毫無幫助。

但容器們總體上還是在一點點變得更強的。容器23,Ailec對獎勵機制做出細化,使得只能控制移動的方向腦即便無法通過“攻擊”行為得分,也能憑藉靠近BOSS獲得獎勵。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?
追著大黃蜂揍的23

容器24,Ailec進一步完善行動腦的獎勵機制,鼓勵AI做出諸如“在距離BOSS過遠時使用衝刺”之類的操作,同時完全去除了延遲獎勵機制——此時24號已經基本能夠以90%以上的勝率擊敗大黃蜂。

對整體神經網路結構進行最後一次大範圍改動優化,並“灌頂”容器24的經驗後,容器26達到了接近完美的狀態。起初它的表現一般,但用Ailec的話來說,就像學會了掛擋、把方向盤、控制離合剎車,卻沒適應怎麼開啟車門——開啟車門終究不是什麼難事,很快容器26就能夠以將近百分百的勝率戰勝敵人,即使是難度更高的進升級大黃蜂,勝率也在最後達到了90%。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?
一血險勝進升級大黃蜂

它已經是個足夠強大的小騎士了。

4

交流過程中,Ailec曾數次向我提起教授、朋友(烽征戰)以及直播間觀眾對他的幫助,於是我問:“你覺得為什麼會有這麼多人來看AI打大黃蜂?”

他想了想,覺得自己也不太能確定。可能是這部分觀眾本身對人工智慧感興趣,可能是AI的一點點強大帶給觀眾“兒子長大了”的快感,甚至可能只是因為AI與“容器”之間產生一種奇妙的對應關係。

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

寫到這裡,我對這個問題也大致有了自己的想法。讓AI訓練小騎士打敗大黃蜂即是對機器的挑戰,也是對人的挑戰,而《空洞騎士》,或者說“容器們”,用一種和諧而直觀的方式呈現出機器的成長,以及人的成長。

就像在淚水之城,大黃蜂告訴玩家操縱的小騎士:“你的靈魂出自兩個虛空,難怪你能到達這世界的中心。”

AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?

作者:黃迴歸線
來源:遊研社
地址:https://www.yystv.cn/p/7929


相關文章