【ITBEAR】9月3日消息,機(jī)器之能報(bào)道
編輯:楊文
這算不算,買了個(gè)游戲給電腦玩?
最近,多少天命人,晚上握著金箍棒,直搗天宮;白天握著地鐵桿,直達(dá)公司。
就在萬(wàn)千網(wǎng)友為那只黑猴子打得昏天黑地時(shí),科技博主「圖靈的貓」整起花活兒,開(kāi)發(fā)了一個(gè) AI 嗎嘍,讓它直面天命。
據(jù)博主介紹,歇菜了 1000 次,AI 嗎嘍終于擊敗了首個(gè) BOSS—— 廣智。

這下子,社交媒體炸了鍋,網(wǎng)友怒贊:
花錢(qián)買游戲,再花個(gè)錢(qián)買 AI,然后坐著看電視。
AI 制作游戲,AI 玩游戲,拜拜嘞人類!
可以給我寫(xiě)個(gè) AI 嗎?我想讓它操控我那破敗不堪的人生。
AI 干這個(gè)相當(dāng)于上班吧。
把這個(gè) AI 當(dāng)作 Boss,讓玩家挑戰(zhàn)它,后期 AI 是不是就無(wú)敵了?
截至目前,該視頻在抖音已有 13.2 萬(wàn)次點(diǎn)贊,并一舉登上多個(gè)社交平臺(tái)的熱搜榜。
-1-
一個(gè)神奇的腦回路
事情的起因,源自一個(gè)神奇的「腦回路」。
兩個(gè)多月前,《黑神話?悟空》還沒(méi)上線,早已預(yù)購(gòu)的博主急得抓耳撓腮,撓著撓著,撓出一個(gè)想法:
孫悟空是從石頭縫里蹦出來(lái)的,屬于硅基,而 AI 依賴的芯片,也是硅基。
這四舍五入,AI 不就相當(dāng)于孫悟空的后代?

于是,博主嘗試開(kāi)發(fā)一個(gè) AI 嗎嘍,讓它參與到天命人的旅途中,找回自己的大圣神通,甚至通關(guān)整個(gè)游戲。
這個(gè)事兒吧,說(shuō)起來(lái)簡(jiǎn)單,干起來(lái)費(fèi)勁。
和現(xiàn)在幾行對(duì)話就能調(diào)用的 AI 不同,ARPG 這類實(shí)時(shí)決策且狀態(tài)極其復(fù)雜的三維空間游戲,屬于傳統(tǒng) AI 領(lǐng)域的逆天工程。
因?yàn)槿藗儫o(wú)法告訴 AI 哪是攻,哪是防,哪是葦名弦一郎,更無(wú)法指望它自己通關(guān)。
而且,這背后涉及大量特征和系統(tǒng)設(shè)計(jì),開(kāi)發(fā)都以月計(jì),再加上沒(méi)什么實(shí)際用途,因此幾乎沒(méi)人愿意干這費(fèi)力不討好的活兒。
不過(guò),該博主就是這么「閑得慌」,在游戲發(fā)布前的漫長(zhǎng)等待中,開(kāi)始手搓 AI 嗎嘍。
-2-
第一關(guān):跑圖
讓 AI 嗎嘍完成天命之旅,面臨的第一個(gè)挑戰(zhàn)就是跑圖。
為此,博主給它實(shí)裝了一套基于多模態(tài)大模型、可以自動(dòng)探索地圖的開(kāi)源框架,通過(guò)記憶、推理、技能和行動(dòng)規(guī)劃等模塊,AI 就能解析畫(huà)面,進(jìn)行基本的探索與交互。

對(duì)于第一個(gè)關(guān)卡黑風(fēng)山來(lái)說(shuō),整個(gè)流程趨近于線性,AI 基本可以完成。
而到了浮屠界這類逆天地圖,AI 兩眼一抹黑。
博主想到了一個(gè)解決方法,就是加入讓 AI 遠(yuǎn)離懸崖的地形約束,但大模型的作用也僅限于此。
因?yàn)橛邢薜妮斎胼敵鲎屇P蜔o(wú)法給出精準(zhǔn)的戰(zhàn)斗決策,而且,從接收信號(hào)到反回動(dòng)作,大模型需要好幾秒,相當(dāng)于頂著幾千延遲的高 ping 戰(zhàn)士。

在動(dòng)作游戲中,這顯然是不能接受的,即便有法術(shù),《黑神話》里的部分 boss 容錯(cuò)也并不比魂游低。
-3-
第二關(guān):斗戰(zhàn)神
為了解決大模型延遲問(wèn)題,博主為 AI 嗎嘍開(kāi)發(fā)了一套叫做「斗戰(zhàn)神」的實(shí)時(shí)戰(zhàn)斗系統(tǒng)。

人類玩游戲是通過(guò)眼睛觀察屏幕,再由大腦將指令信號(hào)傳遞到肢體,最后借助鍵盤(pán)、手柄等交互設(shè)備,與游戲進(jìn)行互動(dòng)。
AI 雖然不需要交互設(shè)備,但學(xué)習(xí)游戲的過(guò)程與人類是一致的,換句話說(shuō),它本就是根據(jù)生物的學(xué)習(xí)機(jī)制抽象演化來(lái)的智能算法。

「斗戰(zhàn)神」正是基于這一思路來(lái)構(gòu)建的。
它有幾個(gè)不同模塊,首先是視覺(jué)。
和風(fēng)靈月影這類程序不同,斗戰(zhàn)神并不會(huì)直接讀取或修改程序,而是和人一樣,通過(guò)畫(huà)面來(lái)判斷,需要先看清敵人是誰(shuí)、位置在哪。
博主的方法是,通過(guò)每 n 毫秒一次的眨眼頻率,來(lái)獲取屏幕上的幀畫(huà)面,Resize 后實(shí)時(shí)分割截取敵人的 RGB 圖像,喂給視覺(jué)網(wǎng)絡(luò),以獲得當(dāng)前幀的狀態(tài)。
通過(guò)它,AI 就能計(jì)算敵人的位置、姿態(tài)和可能的攻擊方式,并做出應(yīng)對(duì)。
而血條棍式和法術(shù) CD 等狀態(tài),則直接通過(guò)框定區(qū)域內(nèi)的像素值進(jìn)行識(shí)別。
比如法術(shù) CD 只有明暗兩種分類,而左下角的葫蘆則根據(jù)次數(shù)分為多類。

有了眼睛,接下來(lái)就是交互。
博主通過(guò)映射腳本模擬鍵盤(pán)按鍵信號(hào),讓 AI 可以和游戲交互。
最后就是重頭戲戰(zhàn)斗。
為了讓大家更好理解,博主舉了一只名叫「福福」的貓的例子。
這只名叫「福福」的貓,是怎么學(xué)習(xí)說(shuō)話的呢?
按下零食按鈕后獲得食物,對(duì)于福福來(lái)說(shuō)就是正反饋,而不聽(tīng)話被主人責(zé)備,就是負(fù)反饋。
這就是一種簡(jiǎn)單的學(xué)習(xí)機(jī)制,叫做 Reinforcement Learning(強(qiáng)化學(xué)習(xí))。

簡(jiǎn)單來(lái)說(shuō),就是讓智能體學(xué)習(xí),在不斷變化的環(huán)境中,通過(guò)采取不同行動(dòng)來(lái)最大化收益。
所謂收益,其實(shí)就是環(huán)境對(duì)智能體的動(dòng)作給出的獎(jiǎng)勵(lì)或懲罰。
比如,使 Boss 掉血或成功閃避,AI 就會(huì)獲得微獎(jiǎng)勵(lì),而自己掉血?jiǎng)t施加懲罰等。
根據(jù)這些反饋來(lái)更新模型,AI 就能學(xué)會(huì)如何更好地出招。

當(dāng)然,動(dòng)作游戲遠(yuǎn)比按按鈕要復(fù)雜得多,當(dāng)前節(jié)點(diǎn)的選擇,會(huì)對(duì)后續(xù)所有狀態(tài)產(chǎn)生影響,因此具備無(wú)窮多的可能性。算法要做的,就是在不更改游戲程序的前提下,找到最有可能獲勝的那條路。
那么,問(wèn)題來(lái)了,怎么找呢?
數(shù)學(xué)給出了答案,優(yōu)化目標(biāo)函數(shù)。
以博主使用的 DQN 和 PPO 模型為例。

我們不需要知道這些猶如鬼畫(huà)符一樣的公式的具體含義,而是可以把它想象成下山:
山間布滿迷霧,路徑無(wú)數(shù),我們只能每走幾步就駐足觀察。根據(jù)當(dāng)前走過(guò)的路,來(lái)推算下一次的方向和步數(shù),進(jìn)而找到最優(yōu)的下山之路。
這就是它的學(xué)習(xí)原理。

以上,AI 嗎嘍的架構(gòu)就搭載完畢。
它有 6 組解耦合的根模塊,分別是捕捉畫(huà)面的「識(shí)」、預(yù)測(cè)出招的「算」、負(fù)責(zé)交互的「觸」、用于跑圖的「探」、記錄數(shù)據(jù)的「聚」以及最核心的「斗戰(zhàn)」。

而從看到敵人再到做出動(dòng)作,中間經(jīng)過(guò)圖像識(shí)別、狀態(tài)計(jì)算、招式?jīng)Q策、參數(shù)更新和推理交互等環(huán)節(jié),斗戰(zhàn)神的反應(yīng)時(shí)間可以做到 0.2 秒,比大模型要快很多倍。

-4-
第三關(guān):AI 嗎嘍大戰(zhàn)首個(gè) Boss
六根合一,接下來(lái)就是它降妖除魔、踏碎凌霄的天命之旅。
但不幸的是,這位天命 AI 出師未捷身先死,殞命于西行路上的一只小妖。這說(shuō)明在訓(xùn)練初期,AI 并不比一只用腳玩電腦的嗎嘍好到哪里去。
但它的可怕之處在于自主學(xué)習(xí)的能力。
在經(jīng)歷了十幾次死亡后,AI 就自行掌握了基本的戰(zhàn)斗技巧,利用移動(dòng)、輕攻擊和閃避這三個(gè)有限動(dòng)作,和小怪打得有來(lái)有回。
有趣的是,博主試著調(diào)高了「保留血量」這個(gè)動(dòng)作的獎(jiǎng)勵(lì),AI 竟然還學(xué)會(huì)了如何逃課。

隨后的前進(jìn)路上,AI 嗎嘍遇到了第一個(gè)難題,精英怪。
精英怪的強(qiáng)度明顯更高,為了更快獲勝,博主在輕棍之上加入了多項(xiàng)閃避和重?fù)舻刃录寄埽@時(shí)出現(xiàn)了新問(wèn)題。
動(dòng)作變多后,模型收斂反而變差了。
于是,博主嘗試了 dropout,一種減少網(wǎng)絡(luò)復(fù)雜性給模型減負(fù)的方法。

之后,AI 順利擊殺了鴉香客。
隨著劇情推進(jìn),它遇到了西行路上的第一難,貨真價(jià)實(shí)的關(guān)卡 Boss—— 廣智。
毫無(wú)疑問(wèn),一開(kāi)始 AI 很快被廣智速通。
廣智的技能,無(wú)論是起手速度還是機(jī)制,都明顯上了一個(gè)臺(tái)階,原先的斗戰(zhàn)模組已經(jīng)不夠用了。
怎么優(yōu)化?
首先要改進(jìn)的是躲避能力,讓 AI 更好地應(yīng)對(duì)招式。
博主先試著加大了掉血的懲罰,結(jié)果滑稽的一幕出現(xiàn)了,AI 直接放棄了攻擊,開(kāi)始一直逃跑。

這背后原因很簡(jiǎn)單。由于進(jìn)攻獎(jiǎng)勵(lì)不夠,AI 自然更傾向于最低成本的方式 —— 跑路 —— 來(lái)避免懲罰。
對(duì)癥下藥,博主很快想到了解決辦法。
首先提高 boss 掉血的正向獎(jiǎng)勵(lì),讓 AI 更具攻擊性。
同時(shí)設(shè)定線性獎(jiǎng)勵(lì)衰減,就是每次逃跑的獎(jiǎng)勵(lì)都會(huì)減少,甚至變?yōu)樨?fù),直到成功攻擊到敵人后才會(huì)重置,以此來(lái)避免持續(xù)的躲避動(dòng)作。
幾十次迭代后,AI 已經(jīng)可以打掉廣智 30% 的血量了,雖然進(jìn)步斐然,但還是無(wú)法擊敗他。
博主又發(fā)現(xiàn),廣智的最大特點(diǎn),就是幾乎所有位移都是靠技能完成,會(huì)有明顯前搖,只要能捕捉到這個(gè)起手式,AI 就可以完美識(shí)別。
原本的視覺(jué)方案是 3 層 CNN 卷積 + 全連接,但現(xiàn)在有個(gè)問(wèn)題,淺層卷積網(wǎng)絡(luò)太小,無(wú)法充分提取細(xì)微的前搖信息,簡(jiǎn)單來(lái)說(shuō),就是「腦子不夠用了」。

一個(gè)辦法是直接給腦子擴(kuò)容,增加網(wǎng)絡(luò)深度,但這樣又會(huì)導(dǎo)致模型變慢,甚至影響擬合。
怎么辦?
博主又想到了預(yù)訓(xùn)練。
打個(gè)比方,我們?cè)谧鰯?shù)學(xué)題時(shí),需要從 1+1=2 開(kāi)始從頭學(xué)一遍嗎?當(dāng)然不用,因?yàn)槌醯葦?shù)學(xué)的知識(shí)我們已經(jīng)學(xué)過(guò)了。
同樣的,預(yù)訓(xùn)練就相當(dāng)于我們用一個(gè)大腦提前學(xué)習(xí)基礎(chǔ)知識(shí),考試時(shí)交給另一個(gè)小腦做題即可。
基于此,博主加入了更深層的殘差網(wǎng)絡(luò) ResNet,通過(guò)預(yù)訓(xùn)練讓它更好地提取招式,實(shí)際決策中由訓(xùn)練好的網(wǎng)絡(luò),得到當(dāng)前畫(huà)面的 embedding 向量表征。
通俗來(lái)說(shuō),就是把涵蓋大量信息的畫(huà)面,經(jīng)過(guò)壓縮后傳給可快速?zèng)Q策的小腦模型。
現(xiàn)在對(duì)于招數(shù)的識(shí)別,AI 已經(jīng)足夠強(qiáng)了,但攻擊效率還不夠高,經(jīng)常處于被動(dòng)挨打的局面,博主又想到一個(gè)優(yōu)化思路 —— 組合。
原本的攻擊方式只有輕棍、重棍,但可以打出更高傷害和硬直的組合技,顯然收益更高。
因此博主試著把組合技作為一個(gè)信號(hào),引導(dǎo) AI 去連擊,比如輕棍三式 + 翻滾,兩輕一重破棍式等,效果相當(dāng)不錯(cuò)。

考慮到技能形態(tài)的變化,AI 在前期一直使用的是劈棍式,而隨著技能點(diǎn)增長(zhǎng),流派增多后,AI 還會(huì)學(xué)習(xí)到大量不同組合。
當(dāng) boss 被打出硬直(硬直是指角色在受到攻擊或使用特定技能時(shí),暫時(shí)無(wú)法進(jìn)行正常操作或移動(dòng)的狀態(tài)),通常會(huì)有好幾秒輸出空間,博主也試著加入了硬直判定的邏輯,如此一來(lái),AI 就能結(jié)合連擊穩(wěn)定進(jìn)行追擊,打出更多傷害。
據(jù)博主介紹,優(yōu)化后的 AI 嗎嘍有好幾次都差點(diǎn)通關(guān)。
進(jìn)一步分析后,他發(fā)現(xiàn)由于動(dòng)作變多,體力條消耗盡后,AI 還是會(huì)嘗試攻擊,影響后續(xù)的狀態(tài)判定。
因此博主又加入了針對(duì)體力條的優(yōu)化,讓 AI 在體力條接近為空時(shí),主動(dòng)拉開(kāi)距離恢復(fù)體力。
最后為了戰(zhàn)斗更優(yōu)雅,博主還為斗戰(zhàn)神加入了一個(gè)法術(shù)模組 —— 定身術(shù)。
定身和閃避都屬于非攻擊類的正向收益,但定身完成后可以接一套連擊,顯然能讓 AI 獲得更高的獎(jiǎng)勵(lì)。
經(jīng)過(guò)多次優(yōu)化的 AI 嗎嘍,在被虐 N 次后,終于打敗了廣智。
據(jù)博主介紹,在《黑神話?悟空》發(fā)售前的一個(gè)多月里,他們?cè)谥焕呛头ōh(huán)這兩款類猴游戲上,做了大量開(kāi)發(fā)測(cè)試。
從一開(kāi)始的被虐,到跟弦一郎拼刀,再到挑戰(zhàn)大樹(shù)守衛(wèi),這個(gè)過(guò)程中積累了很多踩坑經(jīng)驗(yàn),所以 AI 才能在這么短時(shí)間內(nèi)完成訓(xùn)練,并通關(guān)廣智。
截至視頻發(fā)布前,AI 嗎嘍已經(jīng)開(kāi)始與白衣和大頭鏖戰(zhàn)。
看完博主制作 AI 嗎嘍全流程,干貨滿滿,正如網(wǎng)友所說(shuō),這就是純純的一篇大論文。

-5-
網(wǎng)友的評(píng)論「亮」了
有著《黑神話》和 AI 的雙重流量加持,該博主的 AI 嗎嘍,一舉登上各大社交平臺(tái)的熱搜,吸引萬(wàn)千網(wǎng)友圍觀。
有交流技術(shù)的。
網(wǎng)友 plusSeven 詢問(wèn)博主的硬件配置和訓(xùn)練時(shí)間,要立個(gè)項(xiàng)目給學(xué)生試試。

據(jù)博主「圖靈的貓」介紹,他們沒(méi)有 A100 這種高算卡,基本在 3070 附近。RESNET 效果不錯(cuò),但黑神話的畫(huà)面偏暗,加上虛幻五的一些小毛病,所以還是會(huì)有識(shí)別錯(cuò)誤,導(dǎo)致很難無(wú)傷。
博主還提出一個(gè)優(yōu)化思路,是加 openpose 這類姿態(tài)識(shí)別,不過(guò)由于時(shí)間原因,他們并未嘗試。
至于投入的成本,主要是時(shí)間和顯卡,還有買游戲的錢(qián)。
有網(wǎng)友好奇打廣智的模型是否能泛化到虎先鋒上,對(duì)于這個(gè)答案,大家眾說(shuō)紛紜,莫衷一是。

還有網(wǎng)友爭(zhēng)論這到底算是 AI 還是游戲外掛。




也有網(wǎng)友雖然聽(tīng)不懂博主的科普,但仍不明覺(jué)厲:


博主表示,如果時(shí)間允許,他們會(huì)讓 AI 嗎嘍走完這趟西行之旅,并將代碼開(kāi)源出來(lái)。
雖然目前 AI 只擊敗了一個(gè) boss,但它的成長(zhǎng)過(guò)程以及未來(lái)的潛力,遠(yuǎn)比游戲進(jìn)度更有意思。
以后我們會(huì)帶來(lái)更多好玩的AI用例,也歡迎大家進(jìn)群交流。

?THE END
投稿或?qū)で髨?bào)道:[email protected]






