問耕 編譯整理 量子位 出品 | 公眾號 QbitAI震驚!《Flappy Bird》火了這么多年,竟然沒有中文名字。 沒事。這不妨礙各路AI大觸用這款游戲練手。比方說今天這個HTML5教程,就是教你使用神經(jīng)網(wǎng)絡+遺傳算法,搭建一個玩轉小鳥的AI。 提前說一下,教程最后有這個AI的代碼下載。所有的代碼都是使用Phaser框架使用HTML5完成的。另外,神經(jīng)網(wǎng)絡使用了突觸神經(jīng)網(wǎng)絡(Synaptic Neural Network)庫,而不是從零開始搭建。 Demo上面是Demo演示的截圖,訪問下面這個網(wǎng)址,能夠看到這套算法的實際效果。 不方便觀看上面在線Demo,或者沒有耐心的同學,可以選擇觀看下面這個視頻演示短片,中間有幾倍速度的畫面快進。 算法這套系統(tǒng)的算法,主要是基于NeuroEvolution(神經(jīng)進化)。這種機器學習方法,使用遺傳算法(GA)等進化方法來訓練人工神經(jīng)網(wǎng)絡(ANN)。 也就是說,這個例子中的機器學習=遺傳算法+神經(jīng)網(wǎng)絡 人工神經(jīng)網(wǎng)絡人工神經(jīng)網(wǎng)絡是機器學習算法的一個子集,它受到生物神經(jīng)網(wǎng)絡結構和功能的啟發(fā),這些網(wǎng)絡是由很多彼此發(fā)送信號的神經(jīng)元組成。 一個神經(jīng)網(wǎng)絡由輸入層,一個或多個隱藏層,以及輸出層組成。每層都有一些神經(jīng)元,輸入和輸出層的神經(jīng)元直接與外部環(huán)境相連。 在這個項目中,每個智能體(也就是小鳥)都有自己的神經(jīng)網(wǎng)絡作為闖關的AI大腦。這些大腦由三層組成,結構如下: 一個輸入層,兩個神經(jīng)元,代表小鳥到豁口的水平距離和垂直距離 一個隱藏層,六個神經(jīng)元 一個輸出層,一個神經(jīng)元,執(zhí)行如下動作:如果輸出>0.5就飛一下
上述文字,也可以用下面這張圖表示: 遺傳算法 我們在這里使用遺傳算法,來訓練和改進神經(jīng)網(wǎng)絡。 遺傳算法顧名思義,是一種借鑒了自然選擇和遺傳過程的基于搜索的優(yōu)化技術。這種算法使用相同的選擇、組合交叉和變異的組合,來進行初始的隨機演化。 以下是我們遺傳算法實現(xiàn)的主要步驟: 使用隨機神經(jīng)網(wǎng)絡創(chuàng)建10個初始的小鳥(種群) 讓小鳥使用他們自己的神經(jīng)網(wǎng)絡,同時起飛玩游戲 對于每個小鳥,計算適應度函數(shù)來衡量飛行質量 當所有小鳥死亡時,使用遺傳算子把當前種群評估到下一代 重復步驟2 適應度函數(shù)對于上面的第3步,我們深入談一下適應度函數(shù)的細節(jié),以及如何定義。 由于我們想要使用最好的個體(小鳥)來進化種群,所以需要定義一個適應度函數(shù)。 一般來說,適應度函數(shù)用來衡量對象的質量。我們隊每一只小鳥都進行測量,并從中選擇合適的個體,用以生成下一代種群。 在這個項目中,我們按照小鳥的飛行距離給予獎勵。另外,我們會根據(jù)小鳥和下一個豁口的距離給予懲罰。按照這種方式,就可以區(qū)別哪些飛行了同樣距離的小鳥。 替代策略 對于上面第4步中遺傳算法,下面是實現(xiàn)的步驟?;旧?,最好的小鳥個體會生存下來,它們的后代會取代表現(xiàn)最差的那些。 現(xiàn)有種群的個體按照適應度進行排序 選擇前四名給予獎勵,直接把它們傳給下一代種群 排名最高的兩個個體,進行交叉組合,生成一個后代 前四名中隨機選擇兩個個體,交叉組合產(chǎn)生三個后代 前四名中隨機選擇兩個個體,生成兩個直接復制的后代 對于每個后代,施加一些隨機變異 代碼上述代碼,可以訪問如下地址獲?。?/p>結論 在這個教程中,我們成功的讓AI學會玩Flappy Bird這個游戲。在幾次迭代之后,我們可以得到一個幾乎無敵的小鳥。為了實現(xiàn)這一目標,我們采用了兩種機器學習算法:人工神經(jīng)網(wǎng)絡+遺傳算法。 如果你對這個項目感興趣,未來可以嘗試改變代碼中的一些參數(shù),看看會發(fā)生什么。例如,可以改變隱藏層中的神經(jīng)元數(shù)量或者每一代種群的個體數(shù)量。當然還可以對適應度函數(shù)進行修改,比方加入障礙物之間的距離、重力等等因素。 以及,你可以嘗試把類似的理念應用到其他游戲中去! 祝好運~ 量子位AI社群7群開始招募啦,歡迎對AI感興趣的同學,加小助手微信qbitbot2入群; 此外,量子位專業(yè)細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。 量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節(jié),)對話界面,回復“招聘”兩個字。 ?'?' ? 追蹤AI技術和產(chǎn)品新動態(tài)
|