大數據文摘出品
作者:牛婉楊
馬里奧的系列遊戲自打誕生以來就風靡全球,同時也陪伴了無數人的童年。
人工智慧出現後,不少技術咖都開始嘗試,能不能利用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