天天看點

乘風破浪的馬裡奧!這個AI帶你一口氣通29關,你猜連AI都過不去的是哪3關?

馬裡奧的系列遊戲自打誕生以來就風靡全球,同時也陪伴了無數人的童年。

人工智能出現後,不少技術咖都開始嘗試,能不能利用AI完成馬裡奧的一次通關夢?

比如,這裡有一位馬裡奧遊戲瘋狂愛好者uvipen就在GitHub上貢獻了兩種不同的方法,都能讓馬裡奧輕松遊走在障礙之間!去年6月,uvipen從2016年的論文《Asynchronous Methods for Deep Reinforcement Learning》中得到了啟發,用異步優勢Actor-Critic算法(A3C)讓馬裡奧順利通過了32關中的9關。

顯然,他對之前的方法不夠滿意,于是經過一年多的鑽研,他帶着新方法來了!這次,他用 OpenAI 公布的近端政策優化 (Proximal Policy Optimization,簡稱PPO) 算法,成功助力馬裡奧通過32關中的29關,近乎通關!

效果大概是這樣👇

強迫症表示這也太舒适了吧,快來和文摘菌一起看看uvipen是如何做到的吧~

用PPO算法順利通過29關!如果不行,那就換一個學習率

這個PPO是何來頭?文摘菌也去了解了一下。

PPO全稱是近端政策優化,聽這個名字你可能覺得陌生,但是在人工智能圈,這個算法可是早就用于各種遊戲對抗中了。

早在2017年,OpenAI 2017年提出的用于訓練OpenAI Five的算法就是PPO,也正是在它的幫助下,人工智能OpenAI Five首次在電子競技遊戲 DOTA 2 國際邀請賽中打敗世界冠軍Dendi。

Dendi 在第一局比賽中以 2:0 告負,而第二局僅開始十分鐘 Dendi 就選擇了直接認輸。

由此看來,PPO的強大之處可想而知,它不僅具備超強的性能,且實作和調優要簡單得多。這也正是uvipen選擇使用PPO訓練馬裡奧通關政策的原因。接下來文摘菌就為你介紹一下PPO~

近端政策優化(PPO),是對政策梯度(Policy Graident)的一種改進算法。Policy Gradient是一種基于政策疊代的強化學習算法,PPO的一個核心改進是将Policy Gradient中On-policy的訓練過程轉化為Off-policy,即從線上學習轉化為離線學習。

舉一個比較通俗的例子,On-policy就好比你在下棋;而Off-policy就相當于你在看别人下棋。

而這個從線上到離線的轉化過程被稱為Importance Sampling,是一種數學手段。

https://openai.com/blog/openai-baselines-ppo/

uvipen把代碼都放在了Github上,如果你也想成為馬裡奧的開挂式玩家,可以運作python train.py來訓練你的模型。例如:python train.py --world 5 --stage 2 --lr 1e-4 。

然後通過運作python test.py來測試訓練後的模型。例如:python test.py --world 5 --stage 2。

如果在訓練過程中遇到問題,可以嘗試換一個學習率。uvipen通常把學習率設為1e-3,1e-4或1e-5,但是也有一些比較難的關卡,比如第1-3關,就連uvipen都失敗了70次,不過當他最後将學習率調整為7e-5後,終于過了這關~

那既然一共完成了29關,剩下的3關分别是哪些呢?作者表示,隻有4-4、7-4和8-4這三關沒過去,因為這些關都比較難,要求按一定規律才能過去,玩家必須選擇正确的道路前進,如果你選錯了路就會陷入“死循環”,進而無法過關。

比如7-4這一關就要先從下面走一次再從上面走才能過,否則就會一直重複,是以在行進過程中一旦發現重複就一定是錯了,需要趕緊換路線。

這一關也被不少玩家稱為,馬裡奧世界中最難迷宮。

不得不說,這對于AI确實十分有挑戰性,隻通過PPO算法是無法完成的,還需要進一步研究。在這裡文摘菌就坐等uvipen更新啦,相信未來他一定能夠利用AI完美通關馬裡奧~

Github指路:

https://github.com/uvipen/Super-mario-bros-PPO-pytorch

去年嘗試用A3C通關失敗,但是科普很成功

其實uvipen想要用人工智能通關馬裡奧也沒有那麼容易。在去年他就開始了嘗試,當時,uvipen使用的是異步優勢Actor-Critic算法(A3C),雖然隻過了9關,但還是在當時引起了一番讨論。

uvipen自稱是受到2016年這篇論文《Asynchronous Methods for Deep Reinforcement Learning》的啟發,于是就想用其中提到的異步優勢Actor-Critic算法(A3C)來嘗試一番。

論文連結:

https://arxiv.org/pdf/1602.01783.pdf

uvipen發現,在他去年實作這個項目之前,已經有幾個存儲庫在不同的常見深度學習架構(如Tensorflow、Keras和Pytorch)中可以很好地重制論文的結果。他認為這些架構都很好,隻不過在圖像預處理、環境設定和權重初始化等很多方面都過于複雜,會分散使用者的注意力。

是以,他決定寫一個更幹淨的代碼,簡化那些不重要的部分,同時仍然嚴格遵循論文中的方法。

來看看在A3C的加持下馬裡奧是怎麼過關的:

這簡直就是“乘風破浪的馬裡奧”啊~ 不過也有網友打趣道,馬裡奧裡的各種隐藏彩蛋這下就都不能被發現啦,“不吃掉所有蘑菇的馬裡奧沒的靈魂”~“應該研究一下如何順利通關的同時拿到所有分”~

雖然通關沒成功,但是uvipen還是特意為了照顧那些不熟悉強化學習的朋友,在他的Github上将A3C分解為更小的部分,并用通俗的語言解釋了什麼是A3C算法,以及是如何通過這一算法實作的。

文摘菌也借此機會幫大家複習下什麼是Actor-Critic算法。

我們不如這樣想,你的agent有兩個部分,Actor(演員)和Critic(評論家),Actor就好比一個淘氣的小男孩正在大膽探索着他周圍奇妙的世界,而Critic就像是他的爸爸一樣需要監督着他,隻要孩子做了好事,爸爸就會表揚和鼓勵他以後再做同樣的事。當然,當孩子做錯事時,爸爸也會警告他。孩子與世界的互動越多,采取的行動也越多,他從父親那裡得到的正面和負面的回報也越多。

孩子的目标是,從父親那裡收集盡可能多的積極回報,而父親的目标是更好地評價兒子的行為。換句話說,在Actor和Critic之間,有一種雙赢的關系。

那麼優勢Actor-Critic算法就相當于為了讓孩子學得更快、更穩定,父親不會告訴兒子他的行為有多好,而是會舉例告訴他,與其他行為相比,他這樣做好在哪裡。有時候一個例子往往勝過千言萬語。

接下來要說的就是讓馬裡奧通關的關鍵所在了!對于異步Actor-Critic優勢算法而言,就像是為孩子提供了一所“學校”,有了“老師”和“同學”孩子可以學的更快、更全面。而且,在學校裡孩子們還可以合作完成一個項目,他們每個人都可以做着不同的任務,目标卻是相同的,這樣豈不是效率更高。

同樣,uvipen把他用到的相關代碼都放在了Github上,感興趣的小夥伴可以前去了解:

https://github.com/uvipen/Super-mario-bros-A3C-pytorch

讀到這裡,同學們是不是也和文摘菌一樣好奇這位同學是何許人也,文摘菌還真查到了~

Viet Nguyen,一位熱愛NLP和CV遊戲小能手

這位Github使用者uvipen正是Viet Nguyen。

https://www.gitmemory.com/uvipen

原來這位同學擁有計算機科學碩士學位,主修人工智能和機器人技術。主要的研究方向是自然語言處理和計算機視覺。目前身處德國柏林。

在他的個人項目中,一個叫“QuickDraw”的項目獲得了684顆星,是他衆多項目中最受歡迎的一個。

這是他用Python開發的一款線上小遊戲,你可以直接在攝像頭前畫一些簡筆畫,比如門、衣服、褲子等容易識别的物體,系統首先能夠識别出你在畫畫,其次能夠根據你隔空畫的輪廓識别出你畫的是什麼。

比如,小哥随手就畫了個衣服:

最後,文摘菌給出項目位址,感興趣的小夥伴可以前去了解:

https://github.com/uvipen/QuickDraw