標籤:

用 TensorFlow 訓練 Doom 機器人

作者:Mark Litwintschik

本文地址:tech.marksblogg.com/ten

ViZDoom 是一個 AI 研究平台,允許你訓練機器人來玩 Doom,這是 1993 年最初由 id Software 發布的經典第一人稱視角射擊遊戲。ViZDoom 使用一款開源 Doom 引擎 ZDoom 與遊戲進行交互。

ViZDoom 包含了一系列用 C ++,Java,Lua 和 Python 編寫的示例機器人。在許多情況下,模型本身依賴於各種潛在的深度學習庫,如 TensorFlow 和 Theano。

使用 ViZDoom,機器人將針對場景進行訓練。ViZDoom 在發布源代碼中包含幾種場景。場景定義了 Doom 地圖,機器人可用的控制項(如左轉,攻擊等),玩家模式和技能水平。

在這篇博文中,我將通過設置 ViZDoom 和 TensorFlow,並訓練機器人在 Doom 中扮演惡魔。

ViZDoom 啟動運行

以下是在全新安裝的 Ubuntu Desktop 14.04.4 上運行。通常我使用了分散式伺服器,但是我想看到機器人在完成訓練後玩遊戲。

我將使用 Google 的深度學習框架 TensorFlow 進行機器人培訓。為了方便起見,我將描述如何使用 CPU 運行所有內容,但是如果要使用 GPU 進行訓練,那麼請進一步了解參閱基於 GTX 1080 的 TensorFlow 博客,以 GPU 為中心的安裝說明。在許多情況下,TensorFlow 將在 GPU 上比常規桌面 CPU 快一至二個數量級。

我正在使用的機器配置 Intel Core i5 4670K,頻率為 3.4 GHz,32 GB DDR3 內存,SanDisk SDSSDHII960G 960 GB SSD 驅動器和 Nvidia GeForce GTX 1080 顯卡。 首先,我將安裝各種包依賴。

然後我將設置 Java 的主文件夾。

ViZDoom 是用 Python 編寫的,所以我將創建一個虛擬環境並激活它。

然後我將安裝五個基於 Python 的依賴。其中包括 TensorFlow 的分散式 CPU 驅動的 wheel。如果要使用 CUDA 支持的 GPU 加速版本,有一個單獨的分散式。

然後,我將克隆 ViZDoom git 存儲庫,構建 Python 模塊並進行安裝。

基於 TensorFlow 的模型通常與 CPU 和 GPU 無關,但如果你使用 CPU 驅動的分散式 TensorFlow 進行訓練,則可能會看到警告:所使用的 wheel 沒有為你的 CPU 進行優化編譯。如果你正在運行第四代或更高版本的 Intel Core i5 CPU,則將缺乏對 SSE3,SSE4.1,SSE4.2,AVX 和 FMA 指令的支持。

訓練 Doom 機器人

有一個示例模型 「learning_tensorflow.py」 位於 examples/python 文件夾中,該文件夾將載入機器人在空房間的場景,一個敵人在另一端。機器人有能力左右移動攻擊。機器人基於在比賽時間結束之前能夠快速殺死對手的得分。

以下是此方案的配置文件:

下面花了 14 分鐘訓練機器人。

一旦訓練完成,底層的開源 Doom 引擎 ZDoom 開始並且可以看到機器人在 10 局不同的遊戲中對付敵人。

機器人每回合擁有 50 發彈藥,並給予 300 個遊戲動作來殺死單個惡魔。在這種情況下,惡魔並沒有反抗,也沒有太大的動作。不幸的是,即使有這麼好的設置,在超過 20% 的遊戲中,機器人很少殺死惡魔。以下是10場比賽的得分。

保衛中心

ViZDoom 附帶的其他場景是「保衛中心」場景,其中機器人在一個競技場中是靜止的,只允許左右轉動並進行攻擊。有一列的敵人會穩定地接近機器人,在敵人攻擊之前有時間殺死他們。ViZDoom 的主要開發者之一,Micha? Kempka 上傳了這種情況下視頻的到 YouTube。

在我的 GTX 1080 上使用 GPU 加速 TensorFlow 分散式來訓練機器人之前,我修改了以下五行代碼的示例 /python/ learning_tensorflow.py。訓練了41分鐘才能完成。

每殺死一個敵人,機器人獲得一分,並且如果死亡,它會失去一分。每輪有 26 發彈藥。在這過程中,我注意到機器人開始非常亂開槍,它的彈藥庫消耗有一點太快,遺漏一些惡魔。它值得在射擊時瞄準目標。

十次運行後,機器人死亡前平均每場殺死 5.9 名惡魔,


推薦閱讀:

機器學習領域,如何選擇研究方向?
如何評價 2017 年 IHMSC 上發表的探測流量的論文?
Boosting 和 Adaboost 的關係和區別是什麼?
如何評價演算法本身的理解不重要 ,只要會用現成的開源工具來實現就可以這種觀點?
怎麼從零實現車牌識別(LPR)?

TAG:机器学习 |