玩轉「馬里奧」的算法能搞定「口袋妖怪」嗎?

雷鋒網 AI 科技評論:現在機器人玩遊戲的水平甚至已經超過了人類,然而對於不同的遊戲,一個算法是否全部搞定呢?軟件開發者 Shayaan Jagtap 就以「馬里奧」這款遊戲的算法無法適用於另一款遊戲「口袋妖怪」為例,來說明這一問題並分析其中的原因。雷鋒網 AI 科技評論全文編譯如下。

現在,你很可能已經聽說過機器人玩遊戲的水平超過人類了吧。這些機器人的一種設計方法是給它們明確地編程,設定一組輸入和一組輸出之間的對應關係;或者也可以讓它們自主學習、進化,它們就可以對同樣的輸入做出不同的反應,以期找到最優的對策。

一些聞名遐邇的機器人有:

  • AlphaZero:它是一個象棋機器人,經過 24 個小時的訓練成為了世界最佳棋手。

  • AlphaGo:它是一個圍棋機器人,因打敗世界級棋手李世石和柯潔而聞名世界。

  • MarI/O:它是一個超級馬里奧機器人,可以自學快速通過任意馬里奧關卡。

這些遊戲是複雜的,想要訓練會玩這些遊戲的機器就需要聰明地組合複雜的算法、反覆的模擬,以及大量的時間。這裡我重點談談 MarI/O,談一下為什麼我們不能採用相似的方法去玩轉「口袋妖怪」這款遊戲。(如果你不熟悉這款遊戲的玩法,點擊這裡 https://www.youtube.com/watch?v=qv6UVOQ0F44去觀看視頻。)

「馬里奧」和「口袋妖怪」之間存在的三個關鍵差異點,可用來解釋其原因:

  • 第一,目標的數量

  • 第二,分支乘數

  • 第三,局部優化 VS 全局優化

下面,讓我們就這三個因素來比較這兩款遊戲吧。

目標的數量

機器學習的方式是通過優化某種目標函數。無論是將(增強學習和遺傳算法中的)反饋函數或者適應度函數最大化,還是將(監督學習中的)價值函數最小化,它的目標都是相似的:儘可能獲得最佳成績。

「馬里奧」有一個目標:到達最後的關卡。簡單來說,就是你在死之前到達的地方越遠,你就玩得越棒。這是你唯一的目標函數,並且你的模型能力可以直接用這一數值來評估。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

然而,「口袋妖怪」卻有很多個目標。讓我們嘗試著去確定我們的目標。它是要打敗「四大金剛」?抓住所有的口袋妖怪?訓練一隻最強大的隊伍?我們的目標是剛才提到的所有這些,還是一切別的完全不同的東西?僅僅問到這個問題就很奇怪,因為答案可能是它們的個人主觀性組合。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

我們不僅僅需要去明確最終的目標,還要明確遊戲的進程是什麼樣的,因此每一個動作帶來的到底是獎勵還是損失,都要對應到那一刻的許許多多中可能的選擇中的某一種才知道。

這就引導我們進入到下一個論題。

分支乘數

簡單來說,這個分支因子就是你在任意一步,能夠做多少個選擇。在象棋中,平均的分支乘數是 35;在圍棋中,分支乘數是 250。對於之後每增加的一步,你有(分支乘數^步數)個選擇來進行評估。

在「馬里奧」中,你或者向左走、向右走、跳躍,或者啥也不做。機器需要評估的選擇數量少,而且這個分支乘數越小,機器人通過計算能夠預測到的未來就越遠。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

「口袋妖怪」是一個具有開放性世界的遊戲,這意味著你在任一時間,都有大量的選擇。簡單地向上、下、左、右移動,對於計算分支乘數並不是一個有用的衡量標準。相反地,我們看重下一個有意義的動作。下一個動作是打仗,跟一個非玩家角色(NPC)交談,又或者前往左、右、上下的下一個局部區域?當你在遊戲中前進時,可能面臨的選擇數量會從多變到非常多。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

一個能計算出最佳選擇的機器,要求它考慮到它的短期和長期目標,這又帶我們進入到最後一個論題。

局部優化 VS 全局優化

局部優化和全局優化可被看作兼有空間和時間上的意義。短期的目標和當前的地理區域被視為局部的,而長期目標和相對較大的區域例如城市甚至整個地圖,被視為全局的。

將每一次移動分解成它的構成部分,會是將口袋妖怪問題分解成一個個小問題的方法。優化局部以實現從一個區域的點 A 到點 B 是簡單的,但是決定哪個目的地是最佳的點 B,是一個更難得多的問題。在這裡,貪婪算法就失效了,因為局部優化的決策步驟並不一定帶來全局最優。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

「馬里奧」的地圖小,並且是線性的,而「口袋妖怪」的地圖卻是大的、錯綜複雜的以及非線性的。當你追求更高階的目標時,你的優先級在變化,並且將全局目標轉變為優先的局部優化問題也不是一個簡單的任務。這不是僅僅依靠我們當前配備的模型就能夠應對的事情。

最後一件事

從機器人角度,「口袋妖怪」不僅僅是一個遊戲。機器人都是單一任務的專家,而當遇到一個想要對戰的 NPC 時,一個幫助你在地圖中到處移動的機器人將無能為力。對它們而言,這是兩個完全不一樣的任務。

玩转「马里奥」的算法能搞定「口袋妖怪」吗?

在對戰時,每個回合都有很多個選擇。選擇使用哪個動作,換入哪個口袋妖怪以及什麼時候使用不同的道具,都是它要獨立處理的複雜的優化問題。經過查找,我找到了這篇文章 Gotta Code'em all! Machine Learning in Pokemon(文章地址:https://realworldcoding.io/machine-learning-in-pokemon-db32dcd96f33),文中作者闡述了其建立一個對戰模擬器的過程。它是經過深思熟慮的,並且有著難以置信的複雜度,甚至不考慮道具的使用——而這是決定對戰結果的一個關鍵因素。

目前為止,對於打造了在遊戲中比我們的表現更好的機器人這一現實,我們應該感到欣慰。現在,這些遊戲雖然涉及到了複雜的數學,但是其目標是簡單的。隨著 AI 的發展進步,我們將創造出這樣的機器:它們能完全通過自己對複雜優化問題的學習,解決影響力日益增強的現實世界問題。請放心,還有一些事情是機器尚未打敗人類的,其中就包括我們的童年遊戲——至少現在是這樣。

via:Shayaan Jagtap(Why Can a Machine Beat Mario but not Pokemon? ),雷鋒網 AI 科技評論編譯


分享到:


相關文章: