0
本文作者: 岑大師 | 2017-11-07 06:06 |
雷鋒網(wǎng)消息,最近,Youtube 上的知名游戲博主 SethBling 訓(xùn)練了一個叫 MariFlow 的神經(jīng)網(wǎng)絡(luò)來玩 Mario Kart 游戲。在進(jìn)行15個小時的游戲訓(xùn)練并做了一些針對性的改進(jìn)后,這個神經(jīng)網(wǎng)絡(luò)在 50cc Mushroom Cup 中獲得了金牌。
這并不是 SethBling 第一次在游戲中應(yīng)用神經(jīng)網(wǎng)絡(luò)“通關(guān)”。此前 SethBling 曾經(jīng)創(chuàng)建了另一個神經(jīng)網(wǎng)絡(luò)MarI/O,通過訓(xùn)練,這個神經(jīng)網(wǎng)絡(luò)自己演變成玩“超級馬里奧世界”(Super Mario World)的高手。SethBling還拍攝了一個六分鐘的視頻來解釋通過神經(jīng)網(wǎng)絡(luò)來進(jìn)行游戲的原理。他設(shè)計了一個四層的神經(jīng)網(wǎng)絡(luò),通過計算,程序會給出它認(rèn)為在某個點上應(yīng)該按下什么鍵的預(yù)測。通過這個視頻,或許你也可以舉一反三,做出更好的應(yīng)用例子(例如賽車游戲)。
和雷鋒網(wǎng)來看一下構(gòu)建這個神經(jīng)網(wǎng)絡(luò)中 SethBling 的思路吧:
游戲當(dāng)中,我們可以看到Mario在一直全速奔跑,全程沒有任何停頓,并能快速躲開類似上圖這樣高難度的子彈襲擊,最終到達(dá)終點的時候剩余時間為354秒。
讓我們重頭開始看看神經(jīng)網(wǎng)絡(luò)是如何進(jìn)行決策的:如上圖所示,這是一個只有4層的神經(jīng)網(wǎng)絡(luò)模型,通過對最左側(cè)的輸入圖像的計算(紅色的短線代表Mario、白色方塊代表不會移動的物體如地面,黑色方塊代表會移動的物體如敵人,等等),最終得出最右側(cè)的8個按鍵的輸出狀態(tài)(SethBling解釋說,神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元和神經(jīng)樹突并不總是被亮起的,這也是我們所說的只使用到了我們一小部分的大腦)。
而在一開始的時候,機(jī)器的表現(xiàn)非常笨拙,甚至不會按任何鍵。在這樣的過程中,系統(tǒng)會嘗試切換不同的模擬狀態(tài),通過嘗試了很久后才學(xué)會了向右移動;
在遇到子彈的時候也不會跳躍躲避;
那么神經(jīng)網(wǎng)絡(luò)是如何學(xué)習(xí)的呢?還是從最初的簡單狀況開始,綠色線代表正激勵連接,而紅色表示負(fù)激勵連接。只要從目前的狀態(tài)所激活的是綠色的正激勵連接,那么Mario就只管一直按右鍵狂奔;
當(dāng)紅色的負(fù)激勵連接被激活時,則切換到相應(yīng)的狀態(tài),如上圖中按下A鍵做一個跳躍動作;
如果沒有任何鏈接被激活,那么Mario就站在那里。這只是一個簡單的示意:如果神經(jīng)網(wǎng)絡(luò)中的節(jié)點和連接越復(fù)雜,系統(tǒng)能做出的選擇也更多,最終做出最合適的選擇;
那么神經(jīng)網(wǎng)絡(luò)是如何從簡單進(jìn)化到復(fù)雜的呢?我們設(shè)定一個函數(shù)Fitness,這個函數(shù)值取決于Mario奔跑的距離以及所用的時間,奔跑距離越大、所用時間越短,F(xiàn)itness值越大,而只有獲得最大值的模型才能被選為下一代演化的基礎(chǔ)模型,而在下一代演化中在關(guān)鍵節(jié)點上(如上圖吃到子彈游戲結(jié)束)會產(chǎn)生隨機(jī)突變(雷鋒網(wǎng)注:這和生物進(jìn)化的過程非常相似,只有最適應(yīng)環(huán)境的種類才能生存繁衍),在這樣不斷演變中達(dá)到最優(yōu)解。
在上圖的34代演化得分圖中,我們可以看到機(jī)器在進(jìn)化過程中也遇到了一些瓶頸,但最終克服了這些瓶頸取得了好成績。
這一方法,SethBling稱之為NEAT(Neuro Evolution of Augmenting Topologies,增強(qiáng)拓?fù)渖窠?jīng)演化),在 Kenneth Stanley 和 Ari 的論文中也有講述。
完整視頻見此。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。