一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何絲滑地入門神經(jīng)網(wǎng)絡(luò)?寫個AI賽車游戲,只訓(xùn)練4代就能安全駕駛

 黃爸爸好 2019-02-08
車?yán)踝?發(fā)自 凹非寺 
量子位 出品 | 公眾號 QbitAI

 訓(xùn)練前

要了解機器學(xué)習(xí)、了解神經(jīng)網(wǎng)絡(luò),一種非常有趣的方式,就是找個小游戲,自己實現(xiàn)一下。

游戲里的每一位AI玩家 (智能體) ,都是一個小小的神經(jīng)網(wǎng)絡(luò)。

一開始,它們什么都不懂,剛開局就GG。但有了進化算法 (Evolution) ,AI可以在一代一代更迭中,掌握強大的游戲技能。

 成效顯著

比如,在這個賽車游戲里,萌新車手跑出去不久便撞上了馬路牙子。不過,用不了幾代進化,就有AI車手可以毫發(fā)無損地跑完一周。

進化的賽車手

AI賽車手如何快速煉成?

首先,要有一個龐大的車隊。

賽車AI的開發(fā)者,是一位叫做Johan Eliasson的程序猿。他的訓(xùn)練計劃里,有650輛車同時訓(xùn)練。

第二,AI開車需要一些空間信息。

這5條黃線代表5個距離,指示離馬路牙子還有多遠(yuǎn);

除此之外,AI還需要知道自己當(dāng)前的速率,以及方向。

這樣算來,神經(jīng)網(wǎng)絡(luò)一共會接受7個輸入。

第三,就是讓神經(jīng)網(wǎng)絡(luò)不斷進化。

輸入七個值,處理一下,輸出兩個值

一個代表方向盤,按照數(shù)值大小,分為左轉(zhuǎn)、右轉(zhuǎn)方向不變三種操作;

一個代表油門/剎車,按照數(shù)值大小,分成加速、減速速率不變三種操作。

最開始,誰不知道游戲規(guī)則,輸出值很隨機。

 第一代,死得快

650輛車沖出去沒多久,路邊就出現(xiàn)了大批車輛的尸體。

但重要的是,依然有碩果僅存的汽車,不止通過了第一次的右轉(zhuǎn)考驗,也機智地發(fā)現(xiàn)下一處彎道應(yīng)該猛烈左轉(zhuǎn)

雖然,它并沒有成功掉頭,但依然是下一代的希望:進化算法就是要在每一代里,選出最優(yōu)秀的一只或者幾只智能體,繁育出色的后代。

(這里,程序猿沒有找到一種很好的方法,讓系統(tǒng)自動選擇出優(yōu)質(zhì)的個體,于是就手動馬克了,反正也沒有訓(xùn)練很多代。)

所以,第二代的650輛車,全是這一只智能體的子嗣,各自有些輕微的變異:神經(jīng)網(wǎng)絡(luò)的權(quán)重發(fā)生小小的變化。

變異是為了保持車隊的多樣性,期待從中生產(chǎn)出更加優(yōu)秀的個體,繁育下一代。

 第二代,馬克三只

由于繼承了優(yōu)良傳統(tǒng),第二代汽車大部分都完成了第一次右轉(zhuǎn),還有一小部分掉頭成功。

這一次,把沖到最前面的3輛車馬克一下,它們差一點就能達成兩次連續(xù)掉頭的S形操作。

既然,第三代的父母有3位,那么繁育過程中除了變異之外,還涉及雜交:就是把不同的神經(jīng)網(wǎng)絡(luò)揉到一起:

第三代的表現(xiàn)更加精進,有的智能體完成了多次連續(xù)轉(zhuǎn)彎,勝利在望。

第四代,便有智能體跑完一周,值得紀(jì)念:

程序猿說:這效果比想象的好多了,之前我還有點懷疑,現(xiàn)在只能說機器學(xué)習(xí)好厲害。

第四代車隊中的佼佼者,已經(jīng)不太撞到路肩,只是速度還很慢,就像一大波僵尸。

車隊的主人表示,后面的主要任務(wù)就是訓(xùn)練速度。畢竟,這是賽車。

到了第十代,速度已經(jīng)有了明顯的提升,不過依然不算快:

 第十代

不知訓(xùn)練了多少代,現(xiàn)在把每一代的優(yōu)質(zhì)選手放在一起跑。你看,好快:

 這才是賽車

成果斐然之余,程序猿還請大家注意一個重點:

AI不知道自己在開車,不知道有跑道。它只接收七個輸入的數(shù)值,不了解它們代表什么意思,也不知道自己輸出的每一個決策,產(chǎn)生了怎樣的效果。

就算這樣,它還是學(xué)會了怎樣在游戲世界里更好地生存。

不想開車?還有其他游戲

雖然,賽車游戲的視頻,沒有講到程序猿用了怎樣簡單的神經(jīng)網(wǎng)絡(luò)。不過,可以通過另一個簡單的游戲,來感受一下:

Flappy Bird

這個HTML 5實現(xiàn), 也是進化算法和神經(jīng)網(wǎng)絡(luò)共同的結(jié)晶。而且開源了。

它的作者ssusnic說,神經(jīng)網(wǎng)絡(luò)部分,用的是突觸神經(jīng)網(wǎng)絡(luò) (Synaptic Neural Network) 庫。

沒有650輛車那么多,種群里只有10只小鳥。每一只,都是一個三層的神經(jīng)網(wǎng)絡(luò):

輸入層:兩個神經(jīng)元
隱藏層:六個神經(jīng)元
輸出層:一個神經(jīng)元

輸入兩個值,代表小鳥當(dāng)前距離下一個障礙物的相對位置,分成水平距離 (x) 和豎直距離 (y) 。

經(jīng)過隱藏層的處理,輸出一個0-1之間的數(shù)值,決定下一步要不要扇翅膀:

如果大于0.5,就扇翅膀,反之就不操作。

 第一代

第一代的小鳥,都是隨機神經(jīng)網(wǎng)絡(luò) (Random Neural Networks) ,集體見光死。

全部陣亡之后,要選出四只最優(yōu)質(zhì)的小鳥去繁殖。問題來了,肉眼看去相差無幾,要選哪幾只?

并不需要手動選擇,而是用一個適應(yīng)度函數(shù) (Fitness Function) :

適應(yīng)度 = 小鳥存活的最遠(yuǎn)距離 - 小鳥到下一個障礙物的距離

 這里,討論水平距離

適應(yīng)度分?jǐn)?shù)排名前四的小鳥,按下面的規(guī)則繁殖10個后代:

· 前兩名,雜交出一個后代
· 4只中隨機選兩只,雜交出三個后代
· 4只中隨機選兩只,分別直接復(fù)制,生成兩個 (和上代一樣的) 后代
· 給每個后代加入一些變異

就這樣,來到第11代,已經(jīng)有小鳥飛出很遠(yuǎn)且毫發(fā)無傷:

第23代,完全碾壓,可以換個游戲了:

吃豆豆

當(dāng)然,不是所有游戲都像小鳥扇翅膀這樣簡單。

吃豆人 (Pacman) 就是個更復(fù)雜的栗子。比如,前面要躲避的障礙物都是靜止的,Pacman的敵人是移動的,窮追不舍。

重點是,為了抓到Pacman,四個敵人還有各自不同的運動規(guī)則:

紅色鬼,直接瞄準(zhǔn)Pacman的位置進發(fā);

粉色鬼,瞄準(zhǔn)Pacman前方的第四格;

藍(lán)色鬼,利用Pacman和紅色鬼的位置來搞伏擊;

橙色鬼,原本和紅色鬼一樣,但當(dāng)它和Pacman的距離近到8格以內(nèi),就會朝一個角落退縮,那是它出發(fā)的地方。

并且,Pacman吃到無敵大豆豆的時候,敵人還會從追擊模式轉(zhuǎn)成逃跑模式。

復(fù)雜的游戲,自然也需要更加精密的算法,來幫智能體進化。

名叫Code Bullet的程序猿,就用了一種叫做NEAT的神經(jīng)進化算法。

這種方法很特別,神經(jīng)網(wǎng)絡(luò)在迭代過程中,不止權(quán)重會變化,網(wǎng)絡(luò)結(jié)構(gòu)也會變復(fù)雜。

而網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜,就可以支持越復(fù)雜的行為,讓Pacman在險惡的世界里存活。

雖有強大的算法,訓(xùn)練還是要由淺入深。

先不加無敵大豆豆,也不加敵人,給AI一個簡單的世界。

這樣它就能吃光所有豆豆?不存在的。

第一代最優(yōu)秀的智能體,也只會右轉(zhuǎn)不會左轉(zhuǎn),還把自己困在一處,永遠(yuǎn)走不出去。

第二代,有的選手學(xué)會了左轉(zhuǎn),但依然會困住。

……

第十八代,眼看快要吃光豆豆,AI還是困死了自己。

在平靜中訓(xùn)練20代之后,趁AI不注意把敵人放出來,又要從手忙腳亂開始重新適應(yīng):

不過好在,智能體學(xué)以很快便學(xué)會了躲避敵人:

又過了40代,是時候加入無敵大豆豆了。

這一層防護令A(yù)I如有神助,就像在經(jīng)歷了40代臥薪嘗膽之后,開啟了復(fù)仇模式,瘋狂追擊。

終于,有智能體在第七十三代通關(guān)成功:

視頻的畫外音里,程序猿的聲音都激昂了起來,這場戰(zhàn)役的勝利他期待已久。

除了發(fā)表獲獎感言,謝過各路親友的支持,他也沒忘在GitHub上分享代碼 (傳送門見文底) 。

動手吧,少年

同學(xué),你也去搭個神經(jīng)網(wǎng)絡(luò)打游戲吧,呆萌的游戲也能打出熱血的氣質(zhì)。

以后,神經(jīng)網(wǎng)絡(luò)可能就是你朋友了。

(友情提示:雖然賽車游戲沒有開源代碼,但OpenAI Gym里面有賽車場,也可以去試試。)

賽車游戲視頻傳送門:
https://www./watch?v=wL7tSgUpy8w

OpenAI Gym賽車場:
https://gym./envs/CarRacing-v0/

Flappy Bird代碼傳送門:
https://github.com/ssusnic/Machine-Learning-Flappy-Bird

Pacman代碼傳送門:
https://github.com/Code-Bullet/PacNeat (NEAT算法)
https://github.com/Code-Bullet/PacmanGame (搭建游戲環(huán)境)

加入社群

為給AI從業(yè)者提供更好的交流平臺,量子位現(xiàn)開放「AI+行業(yè)」社群,將會不定期邀請AI大咖、知名企業(yè)家、技術(shù)大牛進群分享,福利多多,歡迎小伙伴入群交流。


面向人群:AI相關(guān)從業(yè)者,技術(shù)、產(chǎn)品等人員,根據(jù)所在行業(yè)可選擇相應(yīng)行業(yè)社群;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    午夜久久精品福利视频| 亚洲午夜精品视频观看| 亚洲国产成人av毛片国产| 麻豆一区二区三区精品视频| 日韩精品一区二区三区av在线| 五月婷婷六月丁香在线观看 | 69老司机精品视频在线观看| 国产精品免费视频视频| 久久综合亚洲精品蜜桃| 国产中文另类天堂二区| 欧美日韩亚洲综合国产人| 精品国产av一区二区三区不卡蜜 | 欧美一区二区口爆吞精| 国产精品伦一区二区三区在线| 欧美午夜一级艳片免费看| 九九热在线视频精品免费| 欧美日韩乱一区二区三区| 神马午夜福利免费视频| 国产精品一区欧美二区| 欧美日韩一区二区午夜| 日韩欧美黄色一级视频| 视频一区二区三区自拍偷| 中文字幕免费观看亚洲视频| 丰满的人妻一区二区三区| 色一情一乱一区二区三区码| 欧美一级内射一色桃子| 国产在线日韩精品欧美| 日本女优一区二区三区免费| 一区二区三区日韩中文| 色婷婷中文字幕在线视频| 亚洲伦片免费偷拍一区| 国产又粗又长又爽又猛的视频| 日韩精品一区二区毛片| 99亚洲综合精品成人网色播| 亚洲一区二区欧美激情| 日韩精品在线观看完整版| 久草视频在线视频在线观看| 邻居人妻人公侵犯人妻视频| 欧美日韩精品久久第一页| 五月婷婷缴情七月丁香| 精品人妻久久一品二品三品 |