基於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.sohu.com/a/161598493_633698

原文鏈接:https://www.cnblogs.com/Leo_wl/p/5852010.html#_label1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章