天天看點

真正的頭号玩家——遊戲AI

從雅達利遊戲機到如今的手遊,電子遊戲已經走過了數十年的發展史,從青少年的“毒品”變成了社會主流的新娛樂。去年以來,《絕地求生》席卷了國内,似乎人人口中都念叨着“吃雞”兩個字。此後相關的手遊也層出不窮,但玩家們逐漸發現在低段位下,似乎一局中大部分都是AI機器人。它們槍法差反應遲鈍,看起來就是給玩家“送快遞”的。但這些或者處處阻撓玩家,或者與玩家并肩作戰而無所不在的AI,恰恰是遊戲中真正的“頭号玩家”。它們的發展伴随機器學習的進步,是人工智能在虛拟世界中的直接應用。如果把棋類也看做是遊戲,那麼前兩年出現的AlphaGo則代表了遊戲AI在未來的無限可能。

在早期的遊戲中,比如《超級瑪麗》、《魂鬥羅》等,AI控制的怪物遵循着固定的行為模式。玩家可以先觀察清楚它們的邏輯,再據此做出選擇。此時遊戲AI其實就是“腳本”,執行着一次性或者循環的指定行為,跟其他的遊戲背景環境也沒有太大差別。此後,為了給玩家增加更多的變數,“事件”被引入了。AI開始觀察環境或玩家,當出現了一定條件時,AI會改變自己的行為邏輯。典型的例子比如1987年的《合金裝備》,其中的遊戲AI原本處于巡邏模式,當遭遇玩家後會表示驚吓并進行報警。在後來的《帝國時代》、《星際争霸》、《魔獸争霸》系列的地圖編輯器中,事件也作為一個關鍵功能,可以讓玩家自己DIY出複雜的劇情。比如《帝國時代2》中,就有大神甚至制作了總計120張地圖的完整三國劇情。

真正的頭号玩家——遊戲AI

為了進一步複雜AI的邏輯,“狀态機”又出現了。遊戲機關會擁有多種狀态,每種狀态下表示出不同的行為,再通過一定的規則在各狀态間進行切換。一些足球遊戲中,明顯能感覺到AI會在比分落後、時間不多時瘋狂上搶。這是因為AI存有上百種隊伍狀态,根據比分、時間、球的位置、球隊的不同,AI的狀态和球隊打法都會不一樣。在戰術層面上AI使用的是“狀态機”,而在個體球員層面上選擇就更為複雜,需要使用“決策樹”。決策樹是機器學習中的常用算法,通過遞次判斷輸入資料中各特征的值來進行輸出。足球的球員AI是因為影響因素太多,比如球的距離、敵方距離、隊友距離、邊界距離等,用狀态機來表示的話狀态太多,故使用決策樹來對這些特征逐一判斷。比如防守時,球的距離太遠就盯人,球的距離很近敵方也很近又在禁區時就解圍。

上述的“腳本”、“事件”、“狀态機”、“決策樹”構成了絕大部分的遊戲AI,遊戲中你有時會覺得這樣的AI已經很聰明了,需要不停使用SL大法才能過關。但嚴格說起來它們還不算人工智能,并不具備真正的學習能力,實際上你對抗的是遊戲程式員。而真正能讓AI變的無可匹敵,讓AlphaGo得以擊敗人類的,是“強化學習”。強化學習說白了就跟訓練寵物似的,AI做的對就獎賞,做錯了就懲罰。所謂對與錯的判斷标準,可以是能否擊敗玩家,能否獲得高的分數等。而獎賞與懲罰,也就是增加或者削減此前行為的權值。遊戲中使用“強化學習”的還不多,有《黑與白》、《最高指揮官》等。貌似知名的《紅色警戒3》中AI也會根據玩家前幾局的常用戰術進行針對,但是否使用了強化學習并不确定。

真正的頭号玩家——遊戲AI

在深度學習出現後,Deepmind團隊(後加入Google)将其與強化學習結合起來,建構了深度強化學習,并以此來訓練AI玩經典的雅達利遊戲,獲得了比人類更好的成績。所謂深度強化學習,也就是先使用深度卷積神經網絡來對目前的遊戲圖像進行識别,自動提取出所需資訊,再根據這些資訊進行強化學習。在此基礎上,DeepMind開發了圍棋程式AlphaGo,先後戰勝了李世石與柯潔。圍棋可謂中國的傳統國技,是一個規則簡單、狀态數卻近乎無窮的遊戲。對于19*19的棋盤,共有361個點,每個點可以有白子、黑子、無子3種狀态,故棋盤有3^361種情況,約等于10^172。是以,無法靠搜尋或儲存每一種情況來編寫AI。

為了了解AlphaGo的算法,我們先來反思自己是如何下棋的:首先是開局,記住一些固定的套路,并根據對手的開局進行固定的應對;接下來是中盤,這時候的變化太多,經常得自己在心裡推演一下,“我這麼下,對方會怎麼下,我又再如何應對...”;甚至有時情況太複雜,我們推算幾步之後還是無法确定這麼下好不好,隻能再憑感覺(棋感)來判定好壞;根據推算的結果和所剩時間,決定就這麼落子,或者再來推演其它的下法;最後到了終盤時,能下的位置已經不多了,也許可以直接推算到比賽結束,完全不用依靠感覺了。AlphaGo的算法就恰恰完全重制了這一套思路,可以算是對人類下棋方式的徹底模仿。隻不過因為電腦的計算能力優勢,AlphaGo可以比人類算的更遠,進而在中盤奠定勝利。

真正的頭号玩家——遊戲AI

AlphaGo首先依靠一個卷積神經網絡,把目前的棋盤和過去幾步的落子等資訊輸入進去,輸出應該下在哪裡。這個決定落子的網絡被稱為“政策網絡”,其網絡參數由人類的棋譜訓練得到。由于人類的常見定式可能就那麼幾十種,政策網絡能很好的學會如何開局。中盤時,AlphaGo依靠“蒙特卡洛樹”結合政策網絡來進行推演,即:先依靠政策網絡下幾步,再根據之後的局面是好是壞,來修改這幾步的權值;如此反複推演成千上萬次,并在接下來的推演中綜合政策網絡的結果、各個位置的權值和推演次數來綜合決定下一次嘗試哪幾步。以機器學習的思想來看,需要這麼做本質上是因為政策網絡不夠強大(訓練用棋譜不夠多),因而無法完全用“判别式模型”(完全依靠訓練資料生成模型)直接解決問題。加上下棋時允許機器有一定的思考時間,故可以結合“生成式模型”的思想(模型的生成需要測試資料)。那麼在下了幾步之後,又如何判斷局面是好是壞呢?AlphaGo使用了兩種方法:“價值網絡”和“快速走子”,分别代表着棋感與推算到底。代表棋感的價值網絡,也是一個卷積神經網絡,結構其實和政策網絡一模一樣,就是在其基礎上又多使用了自我對弈的棋譜作為輸入(強化學習)。之是以政策網絡沒有使用自我對弈,可能是想保留人類的開局定式。而代表推算到底的“快速走子”,也是在政策網絡的基礎上進行簡化,提升了網絡的運作速度,進而可以快速的一直模拟到對局結束,再直接用輸赢結果作為回報。最終的局面判斷,則是對價值網絡與快速走子各進行1/2權重的綜合結果。

可以看到,AlphaGo就像“要你命3000”一樣是個大雜燴,其結合了“政策網絡”、“蒙特卡洛樹”、“價值網絡”和“快速走子”四種方法,包含“深度學習”、“判别式模型”、“生成式模型”、“強化學習”和“推演到底”五種思想。但上面也提到了,價值網絡和快速走子其實都是由政策網絡變化而來,那麼能不能把它們合并呢?AlphaGo的下個版本AlphaGo Master正是這麼做的——用價值網絡代替了政策網絡,并删掉了快速走子,完全用價值網絡來預估局勢。同時用最新的Resnet來建構價值網絡,并以AlphaGo的自我對局來對價值網絡進行訓練,進而大大提升了網絡的精确度。如此改進後的AlphaGo Master在對戰平台上橫掃了人類頂尖選手,并在烏鎮以3:0完勝柯潔。但DeepMind并沒有停下,他們繼續把網絡的輸入也精簡到隻有棋盤和此前幾步的落子資訊,并完全去掉了人類棋譜,從零開始隻通過純自我對弈來訓練網絡!後來的結果我們都知道了,AlphaGo Zero由此誕生,3天走過人類千年圍棋史,40天擊敗了AlphaGo Master,震撼了整個機器學習界。

真正的頭号玩家——遊戲AI

徹底征服圍棋後,DeepMind開始向《星際争霸2》進軍,這一決定令無數遊戲玩家感到興奮。《星際争霸》在1998年由大名鼎鼎的暴雪推出,奠定了如今火爆的電子競技産業,被譽為“上帝借暴雪之手賜予玩家的神作”。因為它變化豐富,機關和機制衆多,卻又擁有“完美”的平衡性,當然星際的機關模型、配音和劇情也都堪稱頂級。星際在南韓幾乎是國民遊戲,出現了衆多頂級職業選手,特别是“Boxer”,其開創的“微操”概念讓人們驚歎不已,極大的擴充了星際的複雜性和生命力。《星際争霸》的AI已經有很多了,它們戰術打的有模有樣,微操更是沒話說(參見“悍馬2000”),但大多都還是用腳本、狀态機、決策樹寫成。2017年10月31日,南韓選手stork(人稱“總司令”)在世宗大學舉辦的對抗賽中輕松吊打了三大最強星際AI,包括Facebook開發的使用了機器學習的“Cherry Pi”,讓人們看到星際确實比圍棋難以征服的多。這主要是因為:1.衆多的機關、屬性、技能、規則、地圖。2.戰争迷霧,并且有幻象和隐形機關,建築也可以取消建造。3.人族星軌、神族傳兵、蟲族蟲洞等宏機制。4.Apm(每分鐘操作數)限制,如果存在限制,則需詳細計算每個操作的長短期收益。

《星際争霸2》本質上和《星際争霸》其實也差別不大,主要是機關的尋路更加智能化,部隊也更容易聚團。星際2本來在國内一度陷入低谷,但依靠星際老男孩scboy7年來的堅持,如今看的人還是挺多的(因為想玩好比較難..)。scboy最早由黃旭東、MsJoy、F91、周甯組成,特長是天南地北的海聊(相聲),以真摯的情感喚起了80後90初的集體記憶。後來黃旭東和F91等人又一步步犧牲自己成為了“諧星”,以“毒奶”和“智障”(又稱“守護者”)著稱,又吸引了很多90後00後加入到星際2中。我很有幸見證了這一段歡樂而“偉大”的曆史,細節先在此不表。DeepMind很清楚《星際争霸2》無法在短期内用AI征服,他們去年和暴雪共同釋出了星際2AI研究環境SC2LE,并且DeepMind将其進一步封裝成了PySC2,希望通過開放平台來加速星際2 AI的研究。PySC2基于python,使用資源數、人口數和數個遊戲畫面層等作為輸入,與人類玩家獲得的資訊一樣,各個畫面層包括機關歸屬、機關血量、是否選中、地形高度等。而輸出的指令包括框選、移動、攻擊、建造、使用技能等,并且指令輸出的頻率受apm限制以保證公平性;另外每類指令又有相應參數要給定,總的可能指令數達到了10^8左右,遠超過圍棋(19*19)。為了降低任務的複雜性,DeepMind基于PySC2先嘗試解決了7個小遊戲,分别是坐标尋路、尋找收集礦物、尋找消滅跳蟲、槍兵vs蟑螂、槍兵vs毒爆跳蟲、采集礦物和瓦斯、建造槍兵,這相當于對一局比賽的常見情況做了分解。DeepMind在這些小遊戲裡得到了較高的得分,但顯然這離完整的比賽還有相當距離。

真正的頭号玩家——遊戲AI
真正的頭号玩家——遊戲AI

數十年來,人工智能科學家們努力分析和模仿人類的行為模式,并把成果應用在各類遊戲中。雖說可以與人交流的網遊充滿魅力,也能讓遠方的朋友仿佛近在咫尺。但年少時,那些或簡單或宏大的單機遊戲,就像一個個神秘而别緻的世界,其中的NPC或者讓我們恨的咬牙切齒,或者充當引路人帶我們探索世界,有許多角色令人難以忘懷。後來,我們逐漸清楚了他們的行為邏輯,知道他們隻是按部就班不會改變,看起來其實傻乎乎的。但新的未來正在展開,古老的角色有望展現出全新的生命力。過去遊戲AI的進步,就像人類中一個呱呱墜地的嬰兒到學會了分辨物體學會了爬行,而如今,它們正要開始學習拼積木,去真正領悟創造力,《星際争霸2》正是下一個美妙而複雜的積木。當然,要等到AI真正與《星際争霸2》頂尖職業選手登上比賽舞台的那一天,相信還需要更多突破性的進步,就讓我們共同期待吧~ 

繼續閱讀