網易雷火UX在GDC演講:卡牌遊戲機器人的訓練與提升,以及為何我們需要它
網易雷火UX使用者體驗中心的高階資料分析師周壹
周壹畢業於清華大學,獲博士學位,目前是網易雷火UX使用者體驗中心的高階資料分析師,負責分析遊戲資料、研究建模、呈現結果並給出建議。他主要的研究興趣包括資料探勘和機器學習,涉及推薦策略、遊戲AI等。他專注於在網易的幾款遊戲中使用資料和演算法來改善使用者體驗,並設計和使用A/B測試平臺來驗證這些改進與進行更深度的分析。
以下是他本次GDC報告內容的簡單總結:
一、背景介紹
在電子遊戲中,人工智慧(AI)主要用於產生非玩家角色(NPC)的響應性、適應性或智慧行為。
在一定程度上,我們希望遊戲AI(Game AI)可以表現出類似人類的行為,但更廣泛地說,遊戲內所有非玩家角色的行為的控制,都可以說是由遊戲AI來設計--這意味著遊戲AI的目的並不僅僅是模擬人類的行為。
遊戲AI的目的在於改善遊戲玩家的體驗,而不是如“AI”這個詞在某些場景下所說的那樣力圖獲得一個通過圖靈測試的通用人工智慧。
遊戲AI在遊戲中的應用大致有如下幾種:
NPC -- 在傳統的RPG遊戲裡,這類NPC是非常重要的一個部分,他們扮演遊戲世界裡生活的人們,塑造著世界感,以及提供各種遊戲機制,例如商店、任務系統等等。隨著遊戲技術的進步,我們不僅希望他們作為背景或功能而存在,更希望他們可以仿照遊戲所描繪的世界裡的人們的正常活動,例如閒時散步、下雨時打傘等等。
敵人 -- 在大量的遊戲裡,戰鬥是非常重要的一個部分。相比靜態的沙包木樁,玩家顯然喜歡更有挑戰性、更加聰明、更加多變的敵人。而對敵人、尤其是BOSS的刻畫,以及BOSS戰鬥所帶來的震撼感,也成為了遊戲設計裡越來越重要的一個環節。
隊友 -- 無論是單機遊戲還是網路遊戲,由遊戲AI控制的機器人隊友始終都是遊戲設計的非常重要的部分。在單機遊戲裡,尤其是網路技術尚有侷限的年代,機器人隊友給玩家提供了非常重要的陪伴體驗;而隨著競技類多人線上遊戲的發展,玩家對機器人隊友的要求也越來越高。
環境 -- 各種各樣的環境互動,當環境,比如小飛蟲等等,能對玩家角色和NPC的行為做出互動的環境,能更加提高遊戲塑造的世界的生動程度。隨著硬體技術的發展,越來越細緻的世界描繪也逐漸被引入到遊戲工業中來。
可以看到所有的這些機制,都有遊戲AI的參與。本質上說,一個生動、活躍、可以根據玩家的不同行為做出不同的反應的遊戲世界,能帶給玩家良好的體驗。需要注意的是上述這種分類方法並不是唯一的,考慮到遊戲裡需要具備一定的行為、或者說我們需要其表現出一定的“聰明”的物體是如此之多,遊戲AI包含的含義是非常廣泛的。
當前,隨著網路技術和硬體技術、包括移動端裝置和移動網際網路的發展,多人線上遊戲正成為更多玩家的選擇。在這裡面,遊戲AI也發揮著重要的作用。
在多人匹配的線上遊戲裡,當新手玩家進入遊戲時,如果直接把他們和熟練玩家進行匹配,往往導致這批玩家的體驗不佳。雖然可以通過以遊戲技術匹配的方式來解決一部分問題,但也可能造成新手玩家等待時間過長等負面體驗。而通過遊戲AI驅動的機器人(Bots),可以調整遊戲節奏和難度等級,順滑玩家的體驗,令玩家獲得成就感,避免尚未熟悉遊戲導致的挫折流失。並且可以通過設計好的遊戲機器人,提供體驗順滑的新手教程,令玩家的訓練和匹配無縫銜接。
同時,對於各個等級段的玩家,機器人都可以在匹配時間上起到調節作用,提供隊友或者匹配對手,提升玩家的長期遊戲體驗。
當然,現在很多多人線上遊戲也具有單人劇情模式或者組隊PVE模式,在這種情況下,遊戲機器人和傳統的單人遊戲裡那樣,發揮了扮演隊友、敵人的作用。
二、遊戲AI的實現方式
從機器人是否基於遊戲產品設計者編寫的確定規則來區分,可以分為靜態機器人和動態機器人。
其中,靜態機器人,基於確定的程式規則實現,歷史非常久遠,在工業界有大量而廣泛的應用。靜態遊戲機器人需要很多幫助才能適當地採取行動,它們的存在通常是為了提供線性功能。
而動態遊戲機器人,基於機器學習與人工智慧的法實現,可以參與學習關卡布局、學習新策略等。當前相關的演示和成果非常多,也是學術界的熱點,有一些基於星際爭霸、Dota的非常著名的前沿探索,展現了非常強大的潛力。這些機器人在一些遊戲裡已經有了應用。
1、靜態機器人 - 有限狀態機
實現靜態的機器人,主要有兩種方案:有限狀態機和行為樹。
有限狀態機的原理示意圖
有限狀態自動機 (Finite State Machine,FSM)是表示有限多個狀態以及在這些狀態(State)之間轉移(Transition)和動作(Action)的數學模型。有限狀態機的模型體現了兩點:
一個有限狀態機是一個模型,具有有限數量的狀態。它可以在任何給定時間根據輸入進行操作,使得系統從一個狀態轉換到另一個狀態,或者是一個輸出或者一種行為,一個有限狀態機在任何瞬間只能處於一種狀態。
並且,其狀態是離散的:某一時刻只能處於某種狀態之下,且需要滿足某種條件才能從一種狀態轉移到另一種狀態。
這樣,這個模型,通過狀態機這個物件狀態的管理器,就可以實現物件在滿足某些特定條件後在不同狀態之下的轉換,並且可以根據定義好的規則,在不同的狀態下產生不同的行為、具有不同的屬性。
有限狀態機的應用範圍非常廣泛,尤其是在遊戲領域。各種各樣的遊戲內的活動物件都可以通過有限狀態機來驅動。
但是,儘管有限狀態機在實現原理上非常便於理解從而使得它可以很好地完成一些較為簡單的遊戲AI任務,但是,在面對較為複雜的AI邏輯需求時,這種方案就會越來越顯出其過於繁瑣的缺點。除了系統的可讀性會成倍下降之外,當需要對現有AI的邏輯進行擴充套件的時候,就會發現要維護的狀態量會極快地增加--每多加一個狀態,則需要增加幾條轉換線,越多狀態,需要增加的轉換線越多。
有限狀態機的複雜度隨著狀態數增多而陡增
總體來說,有限狀態機在應用中的問題是:各個狀態類之間互相依賴很嚴重,耦合度很高;結構不靈活,可擴充套件性不高,難以指令碼化/視覺化。
在以前,遊戲AI的實現基本都是有限狀態機,而隨著遊戲的進步,遊戲AI的複雜性要求越來越高,傳統的有限狀態機實現很難維護越來越複雜的AI需求。
分層狀態機一定程度上緩解了這個問題,但並沒有徹底解決。而且隨著狀態的增加,各個層也會出現上述的困難。也由於這個原因,比較多的開發者投入了行為樹的懷抱。
2、靜態機器人 - 行為樹
行為樹(Behavior Tree,BT)模型是由行為節點組成的樹狀結構,通過類似於決策樹的樹形結構,來讓AI可以根據當前所處的環境來選擇出應該做出的行為。
不同於前面提及的限狀態機或其他用於 AI 程式設計的系統,行為樹使用樹結構來控制 AI 決策行為。這種結構包含了各個型別、各個層級的節點,節點的最末端是葉子節點,也即是最終 AI 執行的行為或者輸出的狀態。而各個節點間的連線和這些中間節點的特性,決定了 AI 的邏輯的實現方式--即如何從樹的頂端,根據當前所處於的不同的狀況和環境,沿著各種路徑最終來到確定的末端葉節點並輸出行為的過程。
行為樹方案在遊戲AI實現的有很明顯的優點,其可讀性、條實行、複用性都很強,這使得它逐漸成為當前遊戲領域的較為主流的AI實現方案。
行為樹的原理示意圖
很多遊戲引擎都自帶這個功能。如unreal和unity,都具有很多行為樹相關的開發工具和擴充套件外掛。
行為樹可以通過一層一層的樹結構向下延伸,這種延伸具有可迭代性。大型專案中,可以建立行為樹庫,通過各種邏輯的連線來實現非常複雜、能夠在不同場景下做出有深度的行為、且具有複用性的遊戲AI。
由此可見,行為樹的主要優勢之一就是其封裝性、模組性和擴充套件性,配合各種優秀的開發工具,可以讓遊戲AI的邏輯實現更加直觀,而不用想有限狀態機那樣面對一個龐雜的網狀結構。
當然,使用行為樹進行遊戲AI的開發,在初期會比有限狀態機能需要一些技巧。後者可以直接進行狀態的羅列定義以及設計轉移條件,而前者需要在一開始就設計好一個更為全面的樹形結構框架,來把遊戲AI所面臨的各種情況抽象為各種型別的節點。雖然在抽象邏輯的時候需要技巧,尤其是在專案預計比較複雜的時候,但後續的維護、可讀性都很高,對於複雜專案而言這種優勢是巨大的。
總的來說,行為樹在複雜的情況比有限狀態機更清晰,更可擴充,行為樹有利於邏輯的重用。並且當前已經有很多視覺化模組工具便於設計師使用,使得行為樹方案具有很高的可讀性,也便於調整,熟練之後設計的效率會很高。
3、動態機器人 - 強化學習
上述傳統的遊戲AI實現方式,基於規則驅動,來用人為定義好的條件來觸發預先設計好的遊戲行為。一個直接的表現就是,人為設計投入的力量越多,模型的條件越多,產出的行為就會越複雜,遊戲角色就會相應的更加“智慧”。
但用這種方案實現複雜AI時,對於人力的需求往往過大,並且現實中總是不可能以規則覆蓋所有的情況,而使得遊戲機器人或多或少在某些情況下顯得機械而呆板。
針對這些問題,以強化學習為代表的人工智慧技術展現出了非常強大的潛力。原理上說,當我們把遊戲狀態作為輸入,把遊戲AI的行為作為輸出,那麼就可以構建一個典型的神經網路模型,如此,便可以通過訓練的方式擺脫對人工設計好的規則驅動的依賴,來通過模型的自我訓練獲得一個更加聰明、更加全面的機器人。
越來越多的遊戲宣稱他們使用神經網路等方法來提高遊戲AI,使得更有挑戰性,這裡麵包含大型遊戲也包含小巧精緻的卡牌遊戲。
強化學習是機器學習領域的一類學習問題,它與常見的有監督學習、無監督學習等的最大不同之處在於,它是通過與環境之間的互動和反饋來學習的。
它關注的是軟體代理如何在一個環境中採取行動以便最大化某種累積的回報。正如一個初學的棋手,它通過試探各個位置的下子來對環境--這裡指他的對手的反擊--進行探索,並且慢慢地積累起對於環境的感知,通過和不同的對手一盤一盤得對弈,慢慢積累起來我們對於每一步落子的判斷,從而慢慢地提高自身的圍棋水平。
AlphaGo圍棋程式在訓練學習的過程中就用到了強化學習的技術,還有dota2的Open AI,星際2的AlphaStar。
強化學習的基本模型,就是個體與環境的互動,並在互動過程中,訓練使得個體可以採取的策略讓其獲得最大的獎勵--不僅僅是當前這一次行動對應的獎勵(也就是說,並不是貪心演算法),而是長期角度的最大獎勵。而能夠獲得這個最大獎勵的個體所採取的行為方案,就是強化學習的目標結果,即策略。
強化學習的原理示意圖
可以看到,和傳統的監督學習或非監督學習不同,強化學習任務依賴於不斷和環境互動並得到反饋,這對於傳統的預先收集的資料集來說往往是不現實的,比如,對於複雜一些的任務,我們不可能預先把所有的個體可能面對的環境的可能與採取的可能的行動與對應的獎勵記錄在資料中然後用以訓練模型。也就是而很多現實的環境下強化學習的應用會受限於標註的資料集--總體上其反饋資訊是較為稀疏的。
而遊戲AI,則是強化學習的一個非常完美的平臺,基於程式實現的遊戲流程,可以通過個體間的自我對局,快速產生海量的訓練資料,並能夠極快地實施測試與記錄。而遊戲AI的任務目標也與強化學習的模型特性高度契合。這種可行性與價值上的意義,使得強化學習在一段時間內湧現了大量的成果。
但現實世界的遊戲AI裡,強化學習的應用也並非如模型本身那樣簡單,具體的應用中存在這樣的幾個問題:
首先,強化學習的獎勵函式並不好設計。有些機制複雜的遊戲,獎勵函式的設計非常困難,且比較依賴主觀判斷,又缺少一種絕對的評判標準。固然在棋牌類遊戲下,可以用最終的勝負來作為目標,但實際的多人線上遊戲裡,機器人的勝率不代表遊戲工業對機器人的需求。可以這麼問:玩家是否真的希望AI非常強大?體驗和勝率能否劃等號?事實上目前的遊戲裡,尤其是PVE內容裡,還有大量的時間軸和簡單行為觸發的敵人,對這樣的場景,似乎玩家並不希望敵人過於智慧。
同時,複雜的遊戲機制會帶來很高的模型複雜度。例如說,很多遊戲因為戰爭迷霧、觀察視野、手牌互相不可見等因素,所有遊戲參與者都只能獲得一部分資訊;同時,不少遊戲存在非常普遍地隨機性的影響,典型如同有抽牌因素的很多卡牌遊戲,這些都對強化學習模型在工程中的應用提出了更高的要求。
並且,因為計算空間的過於龐大,這導致在有限的資源內,容易陷入區域性最優而產出平庸方案。比如純粹依賴強化學習互相博弈來訓練的機器人,很容易得出一種人類看來非常愚蠢、呆板,但又可以起到一定作用的粗暴策略。這個問題一方面通過加大計算資源來解決,另一方面可以結合有監督學習解決一部分問題。當然這需要標籤資料,也即是人類的遊戲行為,這又增加了資料獲取、資料處理的難度。
三、關於卡牌遊戲AI
當前,隨著使用者時間碎片化的加劇和移動端裝置和網際網路效能的提升,在移動端的、單局遊戲時間較短的多人線上卡牌遊戲的市場份額也在不斷提升。
這類遊戲的核心玩法非常統一,即進行卡牌對戰。這樣,玩家的牌局體驗就對於產品的留存與收入至關重要。而在現實的產品運營中,基於各種考慮,機器人牌手總是這類卡牌遊戲的一個非常重要的組成部分。它可以用來解決類似於冷門時段內匹配時間過長,新手玩家因為水平層次較低而體驗差等一系列問題。
卡牌遊戲因為其本身的特性,玩家的狀態顯然是離散的,相對動作類遊戲、RTS遊戲來說,當前的狀態更容易被精確描述。同時,因為其回合制的特點,使得遊戲裡各個玩家的行為更加的容易被描述和記錄。這一些使得卡牌遊戲是研究遊戲AI的非常好的平臺,可以更接近AI的本質。
同時,卡牌類遊戲普遍節奏較快,資訊也更容易獲取,有些流行的遊戲擁有非常龐大的線上玩家,可以提供海量的資料。並且,對於快節奏的靠遊戲來說,玩家和Agent做出的行為也更容易做出直觀的解釋。這對於研究AI是有利的。
並且,卡牌遊戲中,AI和人類進行的是公平的、純粹的決策博弈。這一點非常重要。典型如RTS遊戲的AI訓練中,人類玩家顯然存在各種生理限制,比如每秒鐘的點選次數、螢幕切換的最小所需觀察時間等等。而機器人選手則沒有這樣的限制,但如果機器人被允許每秒鐘點選上萬次,或者每秒鐘可以切換螢幕上百次觀察所有細節,那麼顯然是不公平的,基於這樣的設定訓練出的AI可能並沒有、也不需要任何高明的戰略,而僅需要強大的單位操作就可以擊敗一切人類選手。這樣就完全偏離了研究的本意。所以當前的這類專案都會對AI的能力做出限制,但這種限制需要考慮的方面太多,並且人類選手的水平也存在巨大的層次差異,這使得在這類遊戲裡,如何限制AI能力並不是一個可以被徹底論證的事情。
而卡牌遊戲的模型則非常純粹,也同樣有利於研究AI。
最後,大量的線上卡牌遊戲的產品,和卡牌遊戲本身相對簡單的互動機制,使得這型別的AI成果較容易被實際應用,卡牌類遊戲的大使用者基數也使得其AI的應用更容易被驗證成果。
如前所述,卡牌類遊戲中,因為狀態是離散的,加之存在回合的機制,玩家和機器人往往是交替出牌,那麼相比其他遊戲,在卡牌遊戲中玩家更容易感受到局勢,更容易感受到機器人的策略的細節。
並且,玩家也會對機器人的行為有更高的要求。比如,機器人作為敵人時,如果在明明可以取勝的情況下沒有擊敗玩家,或者在作為隊友時做出失誤導致隊伍遭受損失,這類情況在即時的、觀察受限的FPS遊戲或者動作類遊戲裡,往往不為玩家所知,或者被玩家歸結為偶然因素或者說好運氣、壞運氣。但在非常容易觀察到局勢細節和機器人動作細節的卡牌遊戲裡,則會令玩家感受到很明顯的不良體驗。
同時,雖然卡牌遊戲的狀態相對來說比較容易描述,但因為有強烈的隨機因素--最典型的就是抽牌--深入介入了遊戲機制,甚至在很大程度上決定了一局遊戲的勝負。這樣強烈而決定性很強的隨機因素使得卡牌遊戲的強化學習模型也並不是很容易訓練。
最終,卡牌遊戲裡的,comb是一個非常重要的組成部分。通過各種戰術,形成特定的局面,使用一系列特定的卡牌的特殊效果,實現較為複雜而強大的效果,一直是卡牌遊戲裡玩家體驗的一個重要組成部分。而這就對卡牌機器人的訓練提出了非常高的要求。因為在大量的卡牌組合下,僅有特定的若干組合能夠形成comb,並且其使用的時機也非常講究。這就使得單純要訓練出這種行為需要極其龐大的計算資源,否則機器人只會更傾向於使用簡單粗暴的戰術。
當前,通過卡牌遊戲研究AI已經成為一個熱門的領域,很多的論文工作都以當前的流行卡牌遊戲為例進行了強化學習或其他人工智慧專案的探索。
四、討論與思考
很多學術界的成果都在探討如何訓練與提高Agent,強大的技術發展也產出了很多矚目的成果。但這裡,我們需要回過頭看一下這個本質的問題:為什麼我們需要機器人?
對於具體的遊戲產品而非抽象的學術研究來說,這個當然應該從玩家體驗出發去看待。
但是,玩家喜歡什麼樣的體驗?這並不是一個容易回答的問題。
比如說,玩家某些情況下需要掌控感,某些情況下需要驚喜,更多時候是兩者都需要。對於某些遊戲來說,玩家其實更期待機器人隊友的表現是可以預期的,即使其表現並不高明。玩家會習慣與把機器人的邏輯特點納入自己的戰術體系之中,來決定自己的行為。此時機器人如果表現的過於多變、儘管可能更符合人類的行為,但可能並不是玩家樂意看到的。
同時,玩家的體驗也需要在挑戰性和成就感之間尋求平衡。過於機械簡單的敵人會令玩家的遊戲過程非常枯燥,但過於強大的敵人也可能使得玩家在反覆失敗之後快速流失。
尤其是還存在一種情況,新手玩家被過於高明的機器人擊敗後,可能並不能感受到機器人的策略的強大,這樣不僅無法藉此提升自己的技術,甚至可能誤以為是機器人設計了不平衡的遊戲機制,從而帶來非常不良的體驗。
本質上說,和學術上不同,實際遊戲產品的機器人最終的目的並不是追求最高的勝率,而是提高玩家的遊戲體驗。而在某些情況下,這個目標是與擬真或者博弈強度是相悖的。
實際的訓練過程中,這些困難導致強化學習模型在學術上那些成功案例裡所體現的巨大優勢(通過大量自我對弈快速產生海量標籤資料)被削弱了,因為agents的自我對局固然可以很方便定義勝負,但卻不能代替我們回答怎樣的遊戲體驗更好的這個問題。解決以上這些困難需要花費大量的時間和精力,需要有對玩家行為和遊戲機制的非常深層次的理解。
這也說明了,演算法的前沿進展,可以在遊戲工業中發揮重大的價值,但也必須和深入的使用者行為研究結合起來。
相關文章
- 網易雷火UX在GDC演講:大資料視角下的多人線上開服策略UX大資料
- 【GDC2023首日】開門紅!四場雷火UX演講來了!UX
- 我們為什麼需要模擬服務機器人?機器人
- 網易GDC2022演講實錄:《永劫無間》的UX設計——從原型到成品UX原型
- 進擊的WebRTC:我們為什麼需要它?Web
- 自主移動機器人的隱性成本-以及如何避免它們機器人
- 不久我們將不用計算機程式設計,只需像狗一樣訓練它們計算機程式設計
- 我的機器人朋友們機器人
- 網易雷火GDC:讓玩家在等待復活時忙起來-戰意的死亡系統設計
- C#:我們需要它嗎? (轉)C#
- 深度學習在視覺上的侷限性以及我們如何對付它們深度學習視覺
- 機器人能為我們做點什麼?人類不必恐慌機器人
- 在未來給我們看病的將是醫療機器人?機器人
- 講道理,React中,我們為什麼需要寫 super(props)?React
- 人工智慧訓練師:用資料“餵養”AI,教它們“更懂”人類人工智慧AI
- 機器人也有“道德”了,它們學會了拒絕機器人
- 為什麼我們需要 VuexVue
- 如何用 TensorFlow 訓練聊天機器人(附github)機器人Github
- 我們對技術的依賴有多強?程式設計師為何關注它?程式設計師
- GDC演講翻譯——看門狗2的載具同步
- 如何充分利用電話機器人為我們帶來利益?機器人
- 深度神經網路為何很難訓練?神經網路
- 我們為什麼需要獲取器(Getter)和設定器(Setter)?
- GDC暴雪演講:如何設計遊戲裡的獎勵系統?遊戲
- 換種方式學程式設計:如何訓練你的機器人程式設計機器人
- 記一次講故事機器人的開發-我有故事,讓機器人來讀機器人
- 巨量AI模型,為何微軟、浪潮、英偉達們都盯著它?AI模型微軟
- 專項訓練們
- 丘成桐演講全文:幾何與計算數學的關係
- 我們需要怎樣的遊戲編輯器遊戲
- 使用Pytorch訓練分類器詳解(附python演練)PyTorchPython
- 【譯】為何我們要寫super(props)?
- 為何我們都會喜歡App Store?APP
- 我們什麼時候才能信賴機器人機器人
- 何時需要做urlEncode,以及為什麼要做
- 邊緣計算是什麼以及為什麼需要它
- 提升直播app開發質量,我們需要掌握的二三事APP
- 在遊戲中,我們是否需要彈幕?遊戲