1. 程式人生 > >"人機"對戰:電腦太簡單了,我是射手 skr~skr~skr

"人機"對戰:電腦太簡單了,我是射手 skr~skr~skr

9月17日,2018 世界人工智慧大會在上海拉開帷幕。在 SAIL 榜單入圍專案中,我看到了小愛同學、小馬智行、微軟小冰、騰訊覓影等等,這不僅讓我大開了眼界,也不禁讓我感慨 AI 的發展神速。猶記得去年在中國烏鎮圍棋峰會上,AlphaGo 與排名世界第一的世界圍棋冠軍柯潔對戰,以 3 比 0 的總比分獲勝,那時候只感覺這條“狗”真牛。

這也讓我回想起了更年少打“人機”的時光——“人機”模式總是很簡單,電腦很弱,給玩家的體驗並不好。我也曾給設計師出過加強電腦實力的主意——這些主意聽起來不錯,但不足以延長遊戲體驗的時間。

直到最近,我覺得 AI 是一種能夠提高“人機”對戰體驗的途徑——讓電腦更聰明,而不是預先設定更多的套路。

人機對戰的不足:電腦太弱

我曾經有三個一起玩人機的室友。其中一個叫做二狗子,他提議週五晚上去雲蛟網咖開黑玩“人機”大戰。

“四瓶可樂,服務員。你和小胖都沒玩過,今天玩人機熟悉一下吧。”二狗子面板有點黑,頭轉過來一邊和我說著,一邊登上了自己的賬號。

“電腦都很傻的,你隨便打就好了,選個遠端,勾引過來用技能耗。這個輔助和射手就是等會和你對線的,小胖中路打這個法師,上路對這個,打野的話你就當他不存在吧,我等會會來幫你的。”按著二狗子說的,我選了一個看上去很厲害(漂亮)的打射手。

果然“人機”對戰裡的電腦都很傻。每盤射手和輔助都會固定前往三條路線中的下路,而且在遊戲難度模式不變的情況下,射手的英雄都是固定兩位更替,似乎電腦端只會使用這兩套技能。

英雄之間也幾乎看不出有任何配合,輔助和射手各自作戰,有技能放技能,血量低於一定量的時候會立刻“光速”釋放保命技能逃跑。對我這個不熟悉操作的倒是一個難題,每當殘血時的快速逃跑,讓我很難擊敗對面英雄獲得點數。

還有一個特點是,電腦從來不會冒險追擊,電腦控制的人物都有自己的巡邏範圍,設下陷阱後再引誘,往往會在中招前早早的折返回去。就像我找到了一個位置,剛好我能擊中對方,而對方準備還擊時,卻因為超出範圍,折返回去,以此慢慢消耗對方,但往往會觸發對方的逃跑機制。

二狗子把遊戲改到困難模式後,電腦的英雄變得多樣,釋放技能更加頻繁,甚至還有多人合作。開局我就被打得節節退敗,但失敗多次後簡單總結觀察,掌握了電腦方的套路後,簡簡單單又贏了。

並不靠譜的主意:多套路,加數值

“果然人機都很傻。”贏了之後,我總結道。“不過這人機的設計師,似乎還真的有點本事。許多看上去很傻的行為,現在想想都有點道理,”

我開了另一瓶可樂,發出哧溜的氣響,“要是我來設計,肯定不這樣。”

“首先,大量收集每場戰鬥的資料,作為一個樣本。之後,根據玩家選擇的英雄來選擇電腦英雄的作戰方式,比如碰到閃避型的玩家英雄,根據之前資料的統計,採取防禦守塔的方式,消磨對方的耐心,對面就算閃來閃去操作靈活,但短時間內也無法立即攻破。碰到防禦型的玩家英雄,則採取進攻慾望強的方式,搶佔先機。

之後就是套路,遇到玩家在固定地點埋伏等待時,立刻更改行軍路線,並根據失敗率較低的樣本來規劃路線。

最後就是加強電腦英雄的能力,在身體素質上壓制,畢竟在霸道的力量面前,大部分的策略都是以卵擊石。”

我講得似乎很來勁,但是二狗子只是敷衍地嗯嗯,然後說了一句:“我偷塔不就好了。”

到現在我還是沒有辦法反駁二狗子的話,因為人類玩家總有辦法靠套路獲勝,縱使電腦端不斷採取獲勝概率較大的方案——電腦在“吸取教訓”後,也就是所謂的機器學習,給玩家會有很直觀的體驗,覺得電腦變聰明瞭,但這一學習方法很快就會遇到瓶頸,玩家也會隨機固定出一套打法,人機遊戲體驗也就到了盡頭。

直到最近,我覺得似乎有理由反駁二狗子的話了,雖然都到了喝輕怡可樂的年數。

人機對戰的進階:人工神經網路

“你開啟這個視訊看看,DOTA 2 國際賽上這個 OpenAI,就很強。才過去這麼幾年,現在拿來虐虐我一點問題都沒有。”

二狗子直接丟了一句“懶得看”,並立馬貼了一篇文章給我。

“筆記記得再厚,概率算得再準是沒用的,你那一套思路最多隻能把遊戲從困難變成超級困難,之後提升難度只能靠改名字來唬人,人家大廠幾年前就用‘人工神經網路’來優化 AI 了。”

“也就是,人造英雄對抗人?”

“是的,我給你講講大概原理,你聽不聽?“二狗子發了個“大兵”表情,並處於“正在輸入中”:

“人工神經網路通過前向傳播對輸入值,進行權值運算,最後一層層傳下去得到最終輸出預測的值。再通過反向傳播,與真實值做對比修正前向傳播的權值和偏置。你看看這個圖理解一下。”二狗子馬上發了一個奇怪的圖——

“不懂。你再說詳細一點。”

二狗子:“上面這圖提到的就是反向傳播,反向傳播在不斷的更新引數 W 和 B 通過梯度下降的演算法,運用梯度下降的演算法可以找出一組 W 和 B,使得函式 C 最小,在樣本上找到最優或者近似最優的 W 和 B ,之後使用 W 和 B 進行預測。你再看看這個圖理解一下。”

“哦!哦!!原來是這樣啊,也就是比賽 AI 那邊還坐著一排遊戲選手對吧。“

二狗子繼續:“差不多,您是不是感覺視訊裡就跟真人玩家互相競賽一樣呢?這種體驗才是能延長人機遊戲生命週期的關鍵。首先從資料上,樣本採集自然是不可或缺的,但是樣本採集後不是死的,得活用起來,你就好比用樣本來塑造一個職業選手的形象,紅色樣本代表進攻較強並取得勝利的對戰資料,再用這個紅色樣本堆砌成一名紅色選手,命名為好戰的斯巴達,然後此基礎上,讓斯巴達有一定計算能力,分析遊戲開始 15 分鐘這一時間段的各類資料,再接著比較使用特洛伊還是長阪坡等方案的勝率。”

“我更喜歡沉穩的傑尼龜。”我總覺得得說點什麼,不然顯得我不如二狗子,“那就是電腦計算能力夠強,5 分鐘總結一次,1 分鐘總結一次,那豈不是天下第一了。我還可以預知一下人類玩家的策略,這類競技遊戲套路全都輸入到資料庫後,比如一看見三名玩家聚在一起,我先綜合比較一下戰局的優劣勢,AI 優勢則 4 人圍剿,一人守家,AI 劣勢則 4 人防守,一人偷塔。AI 也要你嚐嚐被偷塔的滋味。”

深度學習三要素:資料、模型、計算

“恩,反正差不多這個意思,深度學習實際上就這三點:資料、模型、計算。競技遊戲像 DOTA 這種就十分考究這三點的綜合程度。但往往日常功能裡,按照這個框架走,就有很好的效果。你看又拍雲的這個內容識別功能,就是深度學習的經典案例。你看看這個,我先去開瓶可樂。”二狗子發了一張圖給我,我彷彿聽見電腦的那一段,“哧溜”的氣泡聲。

圖片中的內容,應該就是他所說的經典三點式:

  1. 視訊直播,視訊點播,圖片,文字,就是資料;
  2. 人工處理,訓練平臺得到模型;
  3. 內容識別系統,就是計算的過程;

我嘗試上傳幾張圖片之後,馬上就能得出結果了,像這樣:

不知道二狗子可樂喝光了沒有,我還是挺想和他有空再去玩人機對戰的。對,就像那天在雲蛟網咖裡面的一局,電腦英雄斯維因拿了我和小胖 25 個擊殺後,又輕鬆把二狗子秒殺的神奇局。

“要不是你們這兩個豬隊友,送成這樣我會打不過?晚上可樂你買單。”