neat算法——本質就是遺傳算法用於神經網絡的自動構建


基於NEAT算法的馬里奧AI實現

所謂NEAT算法即通過增強拓撲的進化神經網絡(Evolving Neural Networks through Augmenting Topologies),算法不同於我們之前討論的傳統神經網絡,它不僅會訓練和修改網絡的權值,同時會修改網絡的拓撲結構,包括新增節點和刪除節點等操作。
NEAT算法幾個核心的概念是:

  • 基因:網絡中的連接
  • 基因組:基因的集合
  • 物種:一批具有相似性基因組的集合
  • Fitness:有點類似於增強學習中的reward函數
  • generation:進行一組訓練的基因組集合,每一代訓練結束后,會根據fitness淘汰基因組,並且通過無性繁殖和有性繁殖來新增新的基因組
  • 基因變異:發生在新生成基因組的過程中,可能會出現改變網絡的權重,增加突出連接或者神經元,也有可能禁用突觸或者啟用突觸

下圖我們展示了算法從最一開始簡單的神經網絡,一直訓練到后期的網絡

利用NEAT算法實現馬里奧的只能通關的基本思想便是,利用上面NEAT算法的基本觀點,從游戲內存中獲取實時的游戲數據,判斷馬里奧是否死忙、計算Fitness值、判斷馬里奧是否通關等,從而將這些作為神經網絡的輸入,最后輸出對馬里奧的操作,包括上下左右跳躍等操作,如下圖:

大多數該算法實現馬里奧的智能通關都依賴於模擬器,運用lua語言編寫相應腳本,獲取游戲數據並操作馬里奧。NeuroEvolution with MarI/O。實現效果圖如下:

基於Deep Reinforcement Learning的馬里奧AI實現

NEAT算法是相對提出較早的算法,在2013年大名鼎鼎的DeepMind提出了一種深度增強學習的算法,該算法主要結合了我們上面討論的CNN和Q-Learning兩種算法,DeepMind的研究人員將該算法應用在Atari游戲機中的多種小游戲中進行AI通關。
其基本算法核心便是我們之前介紹的CNN和增強學習的Q-Learning,游戲智能通關的基本流程如下圖:

利用CNN來識別游戲總馬里奧的狀態,並利用增強學習算法做出動作選擇,然后根據新的返回狀態和歷史狀態來計算reward函數從而反饋給Q函數進行迭代,不斷的訓練直到游戲能夠通關。研究人員在訓練了一個游戲后,將相同的參數用在別的游戲中發現也是適用的,說明該算法具有一定的普遍性。下圖反映了一個學習的過程

而同樣的方法,將DRL應用在馬里奧上,github上有一個開源的實現方式:aleju/mario-ai
其最終的實現效果圖如下:

我們發現在CNN識別過程中,每4幀圖像,才會進行一次CNN識別,這是識別速率的問題,圖中曲線反映了直接回報函數和簡介回報函數。

 

摘自:http://www.cnblogs.com/Leo_wl/p/5852010.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM