矩池云 | 訓(xùn)練AI智能體,實現(xiàn)童年《超級瑪麗》通關(guān)夢想

在你的童年記憶里,是否有一個蹦跳、頂蘑菇的小人?

這個頭戴紅色帽子身穿藍色背帶褲的“中年大叔”叫做馬里奧,來自任天堂出版的游戲《超級瑪麗》?!冻壃旣悺芬唤?jīng)發(fā)行便火爆全球,成為全民級游戲。然而,隨著關(guān)卡的不斷推進,游戲難度逐漸攀升,讓不少玩家望而卻步。
不過,通過強化學(xué)習(xí)訓(xùn)練出來的 AI 智能體,可以降低超級瑪麗通關(guān)的門檻,玩家能夠一鍵通關(guān),并且不損失任何生命值。在Github上有一個名為Super-Mario-RL的項目(地址:https://github.com/jiseongHAN/Super-Mario-RL),能幫助玩家實現(xiàn)童年的通關(guān)夢想。整個項目用 Python完成,在矩池云 www.matpool.com上就可以輕松復(fù)現(xiàn)。
一、關(guān)于強化學(xué)習(xí)
本次項目依托強化學(xué)習(xí)(Reinforcement Learning, RL)開展。強化學(xué)習(xí)是學(xué)習(xí)樣本數(shù)據(jù)的內(nèi)在規(guī)律和表示層次,最終目標是讓機器能夠像人一樣具有分析學(xué)習(xí)能力。
以小貓咪為例,我們可以在撫養(yǎng)小貓咪初始,就預(yù)設(shè)好規(guī)則。什么樣的行為能夠得到貓糧、什么樣的行為能夠得到小魚干,從而訓(xùn)練小貓咪更加符合我們的期望,進而成為一只更加適配人類社會的小貓咪。

而落實到算法層面,在《超級瑪麗》游戲中,吃蘑菇可以取得較高的分數(shù),那么算法就進一步「強化」這種策略,以期繼續(xù)取得較好的結(jié)果。
《超級瑪麗》的強化學(xué)習(xí)場景可以這么拆解:
機器有一個明確的馬里奧角色——代理
需要控制馬里奧走得更遠——目標
整個游戲過程中需要躲避各種反派角色——環(huán)境
躲避反派角色的方法是讓馬里奧向上跳——行動
走得越遠,就會獲得越多的積分——獎勵
以下內(nèi)容即為 Super-Marioa-RL項目的復(fù)現(xiàn),不需要繁雜的程序調(diào)試,只要跟著教程走下來就能輕松體會通關(guān)的樂趣。
二、分析項目依賴,租用機器
2.1 分析項目依賴環(huán)境
由于項目有圖像的輸出,所以運行過程中還需要VNC server(需要先下載并安裝使用,教程如下?https://matpool.com/supports/doc-vnc-connect-matpool/ )。
2.2 在矩池云租用合適的機器
我們進入矩池云,如果你還沒有注冊過賬號,可以先注冊一個賬號,新注冊用戶關(guān)注并綁定矩池云微信公眾號可獲贈5元體驗金,體驗金在租用機器時直接抵扣(本次訓(xùn)練就可以使用)。
矩池云的主機市場提供了非常豐富的GPU選項,今天的項目就選NVIDIA Tesla K80。

點擊租用按鈕后,我們可以對機器進行配置:
選擇基礎(chǔ)鏡像,我們直接搜索 Pytorch ,大于1.6即可
選擇好鏡像后,我們可以進行其他配置,閱讀了文檔之后,了解到有圖像的輸出,所以這時我們要開啟 VNC 功能

3.3. VNC 相關(guān)配置
機器租借完成后,將 VNC 鏈接的這部分內(nèi)容復(fù)制

粘貼到建立的新鏈接的 VNC Server中,點擊continue

隨后會彈出一個需要填寫密碼的窗口。

密碼就是ssh連接的密碼,在租用機器頁面可以直接點擊復(fù)制密碼進行復(fù)制。

VNC service即可打開,但在使用 VNC之前,我們還需要在網(wǎng)頁上進行其他準備工作。
三、下載代碼、數(shù)據(jù)及模型
租用好機器后,我們先使用最簡單的使用方法,直接點擊租用界面的JupyterLab連接,快速使用服務(wù)器(在我的租用頁面也可以找到類似窗口哦)。

進入JupyterLab頁面后,我們先點擊Terminal進入終端,并輸入下面指令。

我們可以了解一下剛才輸入這段代碼的含義,它代表著
先進入/mnt目錄(矩池云網(wǎng)盤掛載目錄)
新建一個文件夾MyCode并進入文件夾(用于存放項目文件)
git clone下載開源項目Super-Mario-RL
進入 Super-Mario 項目目錄中
這一步為安裝所需依賴
四、使用模型和訓(xùn)練
4.1 使用預(yù)訓(xùn)練模型測試
我們進入到項目目錄。具體方式為,找到名為 mnt 的文件夾,再找到 Super Mario-RL文件夾。

然后點擊左上角+新建一個Launcher,點擊Notebook中的myconda。即可新建一個jupyter notebook文件。
我們可以先使用預(yù)訓(xùn)練好的模型來測試使用,測試使用代碼官方已經(jīng)給我們提供好了,可以在官方代碼上進行嘗試。
在官方的代碼版本上,我們在原代碼基礎(chǔ)上,做了一些調(diào)整,duel_dqn 文件的調(diào)整情況具體如下
(1)我們使用的 enviroment 為 SuperMarioBros-v2。demo 用的是 v0 ,但是 v0 跑的時間非常長,運行期間系統(tǒng)會提示 v3 是最新版本,但是 v3 非常像素化不太適合本次展示;
(2)設(shè)置運行 2000 次;
(3)增加了輸出 loss 和 epoch 等信息。
即:
與此相對,eval 文件中涉及的 Bros-v0 也變成 Bros-v2,具體改動點,即在 eval 文件中的本段代碼中。
訓(xùn)練代碼我們打開 VNC ,打開代碼所在的文件夾

右鍵 打開 Terminal

運行 duel _dqn 文件

運行后,可無視這一條 warning

運行過程比較漫長,前期調(diào)試可以適當(dāng)減少運行步數(shù),查看訓(xùn)練過程則可在文件夾中,右鍵打開 Terminal。
運行 eval 文件
?
以下是訓(xùn)練了1460步之后的一個結(jié)果,已經(jīng)跑完了第一關(guān)。?
