遊戲開發是一個複雜且勞動密集型的工作。 遊戲的環境、故事線和人物個性都需要被仔細地構建。 這需要視覺藝術家、編故事的人和軟體工程師一起密切協作才能完成。 通常, 在傳統程式設計的形式下, 遊戲會有一套專門編寫的行為;或是在有大量規則組合的形式下, 會以更加有回饋的行為來構成。 在過去的幾年間, 資料密集的機器學習解決方案已經在企業(比如 Amazon、Netflix 和 Uber)裡消滅掉了基於規則的系統。 在 Unity, 我們已經在探索使用這樣的一些機器學習的技術, 比如用深度學習做內容構建, 用深度增強學習來進行遊戲開發。
對於一些資料驅動的大型企業而言, 機器學習並不是什麼新東西。 2007 年, 當 Netflix 發起了著名的 Netflix Prize 競賽, 讓最好的協同過濾演算法來預測使用者對電影的評分時, 就是我們現在所體驗的對人工智慧的大量媒體報導的開端。 但是在 2000 年初, 一些大企業就已經在嘗試使用資料驅動的決策和機器學習來提升業務了。 Amazon 已經非常努力地開發他們自己的推薦演算法, 嘗試去發現使用者的偏好, 進而把這些偏好轉化成更高的銷售業績。 廣告業的技術則是另外一種早期採用機器學習者, 機器學習被用來提升點擊率(CTR)。 在過去的這些年裡, 機器學習技術已經成熟並擴散到非常多的行業。
例如, 推薦演算法已經從僅僅通過推薦來探求更多的資訊發展到了探索和搜索的組合。 這裡的挑戰是, 當 Amazon 和 Netflix 使用推薦系統來收集資料時, 如果他們僅僅是給用戶推薦高得分的物品, 而不是他們商品目錄裡的其他物品, 他們獲得的是一個不完整的用戶偏好。 這一問題的解決方案是微妙地從純搜索變化到添加一些因素來探索。
![](/images/lazyload.gif)
最近, 因為它們內在的可以探索和搜索的特性, 諸如上下文老虎機這樣的演算法變的流行起來。 這些演算法可以更好地學習到它們還不瞭解的客戶的東西。 相信我, 在你訪問的很多 Amazon 網頁的背後都潛伏著老虎機演算法。 我們在 Unity 的博客上有一篇不錯的文章介紹上下文老虎機演算法的威力。 裡面有一個對上下文老虎機演算法的交互展示。
在 2015 年初, DeepMind 將上下文老虎機演算法進一步發展, 並發表了一篇論文。 其中介紹了一個把深度神經網路和增強學習組合起來的大規模系統。 這個系統可以精通 Atari 的 2600 個遊戲裡的很多個,
在 Unity, 我們問自己如何才能讓一隻小雞學會穿過一條交通繁忙的道路而不被來往的卡車撞死, 同時還能收集禮物包。 我們用了一個通用的和 DeepMind 的試驗類似的增強學習演算法。 它會給小雞一個正分如果它收集了一個禮物包,
![](/images/lazyload.gif)
我們具體是怎麼實現這一切的?實際上很簡單。一套 Python 的 API 讓我們可以把 Unity 的遊戲與運行在 Amazon 雲服務(Amazon Web Services,AWS) 上的 TensorFlow 的服務連接起來。TensorFlow 是 Google 在 2015 年發佈的一個深度學習的框架。如你在這個視頻裡看到的,在訓練的早期階段,小雞主要是在進行探索。但隨著學習的深入,它逐漸地轉變到搜索了。可以看到這一學習系統的一個重要能力就是它能成功地應對“沒見過的”情形。卡車出現和禮物包的位置的組合是完全隨機的。當小雞被訓練了幾個小時候後,統計意義上它還是會持續地的碰到沒有見過的場景。我們的 Python API 能很容易地從遊戲裡讀取遊戲框架和內部狀態,並使用機器學習模型來反向控制遊戲裡的代理(比如小雞)。
現在讓我們對小雞和它超人的能力做一個反思。小雞遊戲自身只是提醒了我們 Amazon、Netflix 和 Uber 是如何使用相同的技術來更好地服務他們的客戶(不管是 Uber 的無縫載客體驗或是 Netflix 給我展示按照我的口味定制的內容),不過它的確打開了在遊戲開發中使用訓練而不是硬編碼的大門。
設想一下在遊戲裡訓練一個非玩家角色 (NPC, non-player character),而不是去編碼它的行為。遊戲開發人員需要做的會涉及到創建一個 NPC 需要被訓練的遊戲場景,他們會使用前面提到的 Python API 連接雲端的增強學習的環境來進行這個訓練。這個場景可以是完全人工設計的,或者是有 NPC 要去學習的一群人類玩家參與的。當 NPC 的表現令人滿意後,另外一套 Unity 的 API 會允許開發人員直接把 TensorFlow 的模型嵌入到他們的遊戲裡面去,從而消除了需要繼續把遊戲連接到雲端的 TensorFlow 服務的需求。
一些遊戲開發人員可能會說他們在 10 到 15 年前最後嘗試機器學習時“就已經這樣做了”。但那是一個不一樣的時代。那時候,通過富於表達的迴圈神經網路(RNN)——比如長短期記憶(LSTM)——來學習序列資料,以及通過卷積神經網路(CNN)來學習空間特徵等技術都已經被發明出來了。但缺乏計算能力以及缺乏可擴展和精細的軟體框架阻止了這些技術在實際中的成功應用,以及在諸如遊戲開發這樣有需求的行業裡被採用。
在遊戲開發裡使用深度增強學習依然處於它的早期階段。但對我們而言一切正在變得很清晰:類似於在其他大型企業裡被證明的一樣,這是一個潛在的顛覆性遊戲技術。諸如 TensorFlow 這樣成熟的、可擴展的、運行在雲端並有集成的 API 介面的機器學習框架正在降低遊戲開發人員和機器學習研究人員進入這個領域的門檻。正如機器學習正在進入企業的每個角落一樣,你應該也會期待在你的下一個遊戲裡面機器學習會無處不在。
我們具體是怎麼實現這一切的?實際上很簡單。一套 Python 的 API 讓我們可以把 Unity 的遊戲與運行在 Amazon 雲服務(Amazon Web Services,AWS) 上的 TensorFlow 的服務連接起來。TensorFlow 是 Google 在 2015 年發佈的一個深度學習的框架。如你在這個視頻裡看到的,在訓練的早期階段,小雞主要是在進行探索。但隨著學習的深入,它逐漸地轉變到搜索了。可以看到這一學習系統的一個重要能力就是它能成功地應對“沒見過的”情形。卡車出現和禮物包的位置的組合是完全隨機的。當小雞被訓練了幾個小時候後,統計意義上它還是會持續地的碰到沒有見過的場景。我們的 Python API 能很容易地從遊戲裡讀取遊戲框架和內部狀態,並使用機器學習模型來反向控制遊戲裡的代理(比如小雞)。
現在讓我們對小雞和它超人的能力做一個反思。小雞遊戲自身只是提醒了我們 Amazon、Netflix 和 Uber 是如何使用相同的技術來更好地服務他們的客戶(不管是 Uber 的無縫載客體驗或是 Netflix 給我展示按照我的口味定制的內容),不過它的確打開了在遊戲開發中使用訓練而不是硬編碼的大門。
設想一下在遊戲裡訓練一個非玩家角色 (NPC, non-player character),而不是去編碼它的行為。遊戲開發人員需要做的會涉及到創建一個 NPC 需要被訓練的遊戲場景,他們會使用前面提到的 Python API 連接雲端的增強學習的環境來進行這個訓練。這個場景可以是完全人工設計的,或者是有 NPC 要去學習的一群人類玩家參與的。當 NPC 的表現令人滿意後,另外一套 Unity 的 API 會允許開發人員直接把 TensorFlow 的模型嵌入到他們的遊戲裡面去,從而消除了需要繼續把遊戲連接到雲端的 TensorFlow 服務的需求。
一些遊戲開發人員可能會說他們在 10 到 15 年前最後嘗試機器學習時“就已經這樣做了”。但那是一個不一樣的時代。那時候,通過富於表達的迴圈神經網路(RNN)——比如長短期記憶(LSTM)——來學習序列資料,以及通過卷積神經網路(CNN)來學習空間特徵等技術都已經被發明出來了。但缺乏計算能力以及缺乏可擴展和精細的軟體框架阻止了這些技術在實際中的成功應用,以及在諸如遊戲開發這樣有需求的行業裡被採用。
在遊戲開發裡使用深度增強學習依然處於它的早期階段。但對我們而言一切正在變得很清晰:類似於在其他大型企業裡被證明的一樣,這是一個潛在的顛覆性遊戲技術。諸如 TensorFlow 這樣成熟的、可擴展的、運行在雲端並有集成的 API 介面的機器學習框架正在降低遊戲開發人員和機器學習研究人員進入這個領域的門檻。正如機器學習正在進入企業的每個角落一樣,你應該也會期待在你的下一個遊戲裡面機器學習會無處不在。