一隻AI嗎嘍,單挑《黑神話》,歇菜1000次,終於擊敗首個Boss

机器之能發表於2024-09-04
機器之能報導
編輯:楊文
這算不算,買了個遊戲給電腦玩?

最近,多少天命人,晚上握著金箍棒,直搗天宮;白天握著地鐵桿,直達公司。

圖片

就在萬千網友為那隻黑猴子打得昏天黑地時,科技博主「圖靈的貓」整起花活兒,開發了一個 AI 嗎嘍,讓它直面天命。

據博主介紹,歇菜了 1000 次,AI 嗎嘍終於擊敗了首個 BOSS—— 廣智。

圖片

這下子,社交媒體炸了鍋,網友怒贊:

花錢買遊戲,再花個錢買 AI,然後坐著看電視。

AI 製作遊戲,AI 玩遊戲,拜拜嘞人類!

可以給我寫個 AI 嗎?我想讓它操控我那破敗不堪的人生。

AI 幹這個相當於上班吧。

把這個 AI 當作 Boss,讓玩家挑戰它,後期 AI 是不是就無敵了?


截至目前,該影片在抖音已有 13.2 萬次點贊,並一舉登上多個社交平臺的熱搜榜。


-1-

一個神奇的腦回路

事情的起因,源自一個神奇的「腦回路」。

兩個多月前,《黑神話・悟空》還沒上線,早已預購的博主急得抓耳撓腮,撓著撓著,撓出一個想法:

孫悟空是從石頭縫裡蹦出來的,屬於矽基,而 AI 依賴的晶片,也是矽基。

這四捨五入,AI 不就相當於孫悟空的後代?

圖片

於是,博主嘗試開發一個 AI 嗎嘍,讓它參與到天命人的旅途中,找回自己的大聖神通,甚至通關整個遊戲。

這個事兒吧,說起來簡單,幹起來費勁。

和現在幾行對話就能呼叫的 AI 不同,ARPG 這類實時決策且狀態極其複雜的三維空間遊戲,屬於傳統 AI 領域的逆天工程。

因為人們無法告訴 AI 哪是攻,哪是防,哪是葦名弦一郎,更無法指望它自己通關。

而且,這背後涉及大量特徵和系統設計,開發都以月計,再加上沒什麼實際用途,因此幾乎沒人願意幹這費力不討好的活兒。

不過,該博主就是這麼「閒得慌」,在遊戲釋出前的漫長等待中,開始手搓 AI 嗎嘍。


-2-

第一關:跑圖

讓 AI 嗎嘍完成天命之旅,面臨的第一個挑戰就是跑圖。

圖片

為此,博主給它實裝了一套基於多模態大模型、可以自動探索地圖的開源框架,透過記憶、推理、技能和行動規劃等模組,AI 就能解析畫面,進行基本的探索與互動。

圖片

對於第一個關卡黑風山來說,整個流程趨近於線性,AI 基本可以完成。

而到了浮屠界這類逆天地圖,AI 兩眼一抹黑。

博主想到了一個解決方法,就是加入讓 AI 遠離懸崖的地形約束,但大模型的作用也僅限於此。

因為有限的輸入輸出讓模型無法給出精準的戰鬥決策,而且,從接收訊號到反回動作,大模型需要好幾秒,相當於頂著幾千延遲的高 ping 戰士。

圖片

在動作遊戲中,這顯然是不能接受的,即便有法術,《黑神話》裡的部分 boss 容錯也並不比魂遊低。


-3-

第二關:鬥戰神

為了解決大模型延遲問題,博主為 AI 嗎嘍開發了一套叫做「鬥戰神」的實時戰鬥系統。

圖片

人類玩遊戲是透過眼睛觀察螢幕,再由大腦將指令訊號傳遞到肢體,最後藉助鍵盤、手柄等互動裝置,與遊戲進行互動。

AI 雖然不需要互動裝置,但學習遊戲的過程與人類是一致的,換句話說,它本就是根據生物的學習機制抽象演化來的智慧演算法。

圖片

「鬥戰神」正是基於這一思路來構建的。

它有幾個不同模組,首先是視覺。

和風靈月影這類程式不同,鬥戰神並不會直接讀取或修改程式,而是和人一樣,透過畫面來判斷,需要先看清敵人是誰、位置在哪。

博主的方法是,透過每 n 毫秒一次的眨眼頻率,來獲取螢幕上的幀畫面,Resize 後實時分割擷取敵人的 RGB 影像,餵給視覺網路,以獲得當前幀的狀態。

透過它,AI 就能計算敵人的位置、姿態和可能的攻擊方式,並做出應對。

而血條棍式和法術 CD 等狀態,則直接透過框定區域內的畫素值進行識別。

比如法術 CD 只有明暗兩種分類,而左下角的葫蘆則根據次數分為多類。

圖片

有了眼睛,接下來就是互動。

博主透過對映指令碼模擬鍵盤按鍵訊號,讓 AI 可以和遊戲互動。

最後就是重頭戲戰鬥。

為了讓大家更好理解,博主舉了一隻名叫「福福」的貓的例子。

這隻名叫「福福」的貓,是怎麼學習說話的呢?

按下零食按鈕後獲得食物,對於福福來說就是正反饋,而不聽話被主人責備,就是負反饋。

這就是一種簡單的學習機制,叫做 Reinforcement Learning(強化學習)。

圖片

簡單來說,就是讓智慧體學習,在不斷變化的環境中,透過採取不同行動來最大化收益。

所謂收益,其實就是環境對智慧體的動作給出的獎勵或懲罰。

比如,使 Boss 掉血或成功閃避,AI 就會獲得微獎勵,而自己掉血則施加懲罰等。

根據這些反饋來更新模型,AI 就能學會如何更好地出招。

圖片

當然,動作遊戲遠比按按鈕要複雜得多,當前節點的選擇,會對後續所有狀態產生影響,因此具備無窮多的可能性。演算法要做的,就是在不更改遊戲程式的前提下,找到最有可能獲勝的那條路。

那麼,問題來了,怎麼找呢?

數學給出了答案,最佳化目標函式

以博主使用的 DQN 和 PPO 模型為例。

圖片

我們不需要知道這些猶如鬼畫符一樣的公式的具體含義,而是可以把它想象成下山:

山間佈滿迷霧,路徑無數,我們只能每走幾步就駐足觀察。根據當前走過的路,來推算下一次的方向和步數,進而找到最優的下山之路。

這就是它的學習原理。

圖片

以上,AI 嗎嘍的架構就搭載完畢。

它有 6 組解耦合的根模組,分別是捕捉畫面的「識」、預測出招的「算」、負責互動的「觸」、用於跑圖的「探」、記錄資料的「聚」以及最核心的「鬥戰」。

圖片

而從看到敵人再到做出動作,中間經過影像識別、狀態計算、招式決策、引數更新和推理互動等環節,鬥戰神的反應時間可以做到 0.2 秒,比大模型要快很多倍。

圖片


-4-

第三關:AI 嗎嘍大戰首個 Boss

六根合一,接下來就是它降妖除魔、踏碎凌霄的天命之旅。

但不幸的是,這位天命 AI 出師未捷身先死,殞命於西行路上的一隻小妖。這說明在訓練初期,AI 並不比一隻用腳玩電腦的嗎嘍好到哪裡去。

但它的可怕之處在於自主學習的能力。

在經歷了十幾次死亡後,AI 就自行掌握了基本的戰鬥技巧,利用移動、輕攻擊和閃避這三個有限動作,和小怪打得有來有回。

有趣的是,博主試著調高了「保留血量」這個動作的獎勵,AI 竟然還學會了如何逃課。

圖片

隨後的前進路上,AI 嗎嘍遇到了第一個難題,精英怪。

精英怪的強度明顯更高,為了更快獲勝,博主在輕棍之上加入了多項閃避和重擊等新技能,但這時出現了新問題。

動作變多後,模型收斂反而變差了。

於是,博主嘗試了 dropout,一種減少網路複雜性給模型減負的方法。

圖片

之後,AI 順利擊殺了鴉香客。

隨著劇情推進,它遇到了西行路上的第一難,貨真價實的關卡 Boss—— 廣智。

毫無疑問,一開始 AI 很快被廣智速通。

廣智的技能,無論是起手速度還是機制,都明顯上了一個臺階,原先的鬥戰模組已經不夠用了。

怎麼最佳化?

首先要改進的是躲避能力,讓 AI 更好地應對招式。

博主先試著加大了掉血的懲罰,結果滑稽的一幕出現了,AI 直接放棄了攻擊,開始一直逃跑。

圖片

這背後原因很簡單。由於進攻獎勵不夠,AI 自然更傾向於最低成本的方式 —— 跑路 —— 來避免懲罰。

對症下藥,博主很快想到了解決辦法。

首先提高 boss 掉血的正向獎勵,讓 AI 更具攻擊性。

同時設定線性獎勵衰減,就是每次逃跑的獎勵都會減少,甚至變為負,直到成功攻擊到敵人後才會重置,以此來避免持續的躲避動作。

幾十次迭代後,AI 已經可以打掉廣智 30% 的血量了,雖然進步斐然,但還是無法擊敗他。

博主又發現,廣智的最大特點,就是幾乎所有位移都是靠技能完成,會有明顯前搖,只要能捕捉到這個起手式,AI 就可以完美識別。

原本的視覺方案是 3 層 CNN 卷積 + 全連線,但現在有個問題,淺層卷積網路太小,無法充分提取細微的前搖資訊,簡單來說,就是「腦子不夠用了」。

圖片

一個辦法是直接給腦子擴容,增加網路深度,但這樣又會導致模型變慢,甚至影響擬合。

怎麼辦?

博主又想到了預訓練。

打個比方,我們在做數學題時,需要從 1+1=2 開始從頭學一遍嗎?當然不用,因為初等數學的知識我們已經學過了。

同樣的,預訓練就相當於我們用一個大腦提前學習基礎知識,考試時交給另一個小腦做題即可。

基於此,博主加入了更深層的殘差網路 ResNet,透過預訓練讓它更好地提取招式,實際決策中由訓練好的網路,得到當前畫面的 embedding 向量表徵。

通俗來說,就是把涵蓋大量資訊的畫面,經過壓縮後傳給可快速決策的小腦模型。

現在對於招數的識別,AI 已經足夠強了,但攻擊效率還不夠高,經常處於被動挨打的局面,博主又想到一個最佳化思路 —— 組合。

原本的攻擊方式只有輕棍、重棍,但可以打出更高傷害和硬直的組合技,顯然收益更高。

因此博主試著把組合技作為一個訊號,引導 AI 去連擊,比如輕棍三式 + 翻滾,兩輕一重破棍式等,效果相當不錯。

圖片

考慮到技能形態的變化,AI 在前期一直使用的是劈棍式,而隨著技能點增長,流派增多後,AI 還會學習到大量不同組合。

當 boss 被打出硬直(硬直是指角色在受到攻擊或使用特定技能時,暫時無法進行正常操作或移動的狀態),通常會有好幾秒輸出空間,博主也試著加入了硬直判定的邏輯,如此一來,AI 就能結合連擊穩定進行追擊,打出更多傷害。

據博主介紹,最佳化後的 AI 嗎嘍有好幾次都差點通關。

進一步分析後,他發現由於動作變多,體力條消耗盡後,AI 還是會嘗試攻擊,影響後續的狀態判定。

因此博主又加入了針對體力條的最佳化,讓 AI 在體力條接近為空時,主動拉開距離恢復體力。

最後為了戰鬥更優雅,博主還為鬥戰神加入了一個法術模組 —— 定身術。

定身和閃避都屬於非攻擊類的正向收益,但定身完成後可以接一套連擊,顯然能讓 AI 獲得更高的獎勵。

經過多次最佳化的 AI 嗎嘍,在被虐 N 次後,終於打敗了廣智。

一隻AI嗎嘍,單挑《黑神話》,歇菜1000次,終於擊敗首個Boss

影片連結:https://mp.weixin.qq.com/s/DvvnxI_wpv3lpA6AOwRFVQ

據博主介紹,在《黑神話・悟空》發售前的一個多月裡,他們在只狼和法環這兩款類猴遊戲上,做了大量開發測試。

從一開始的被虐,到跟弦一郎拼刀,再到挑戰大樹守衛,這個過程中積累了很多踩坑經驗,所以 AI 才能在這麼短時間內完成訓練,並通關廣智。

截至影片釋出前,AI 嗎嘍已經開始與白衣和大頭鏖戰。

看完博主製作 AI 嗎嘍全流程,乾貨滿滿,正如網友所說,這就是純純的一篇大論文。

圖片


-5-

網友的評論「亮」了

有著《黑神話》和 AI 的雙重流量加持,該博主的 AI 嗎嘍,一舉登上各大社交平臺的熱搜,吸引萬千網友圍觀。

有交流技術的。

網友 plusSeven 詢問博主的硬體配置和訓練時間,要立個專案給學生試試。

圖片

據博主「圖靈的貓」介紹,他們沒有 A100 這種高算卡,基本在 3070 附近。RESNET 效果不錯,但黑神話的畫面偏暗,加上虛幻五的一些小毛病,所以還是會有識別錯誤,導致很難無傷。

博主還提出一個最佳化思路,是加 openpose 這類姿態識別,不過由於時間原因,他們並未嘗試。

至於投入的成本,主要是時間和顯示卡,還有買遊戲的錢。

有網友好奇打廣智的模型是否能泛化到虎先鋒上,對於這個答案,大家眾說紛紜,莫衷一是。

圖片

還有網友爭論這到底算是 AI 還是遊戲外掛。

圖片

圖片

圖片

圖片

也有網友雖然聽不懂博主的科普,但仍不明覺厲:

圖片

圖片

博主表示,如果時間允許,他們會讓 AI 嗎嘍走完這趟西行之旅,並將程式碼開源出來。

雖然目前 AI 只擊敗了一個 boss,但它的成長過程以及未來的潛力,遠比遊戲進度更有意思。

以後我們會帶來更多好玩的AI用例,也歡迎大家進群交流。
圖片

相關文章