所謂NEAT算法即通過增強拓撲的進化神經網絡(Evolving Neural Networks through Augmenting Topologies),算法不同于我們之前讨論的傳統神經網絡,它不僅會訓練和修改網絡的權值,同時會修改網絡的拓撲結構,包括新增節點和删除節點等操作。
NEAT算法幾個核心的概念是:
基因:網絡中的連接配接
基因組:基因的集合
物種:一批具有相似性基因組的集合
Fitness:有點類似于增強學習中的reward函數
generation:進行一組訓練的基因組集合,每一代訓練結束後,會根據fitness淘汰基因組,并且通過無性繁殖和有性繁殖來新增新的基因組
基因變異:發生在新生成基因組的過程中,可能會出現改變網絡的權重,增加突出連接配接或者神經元,也有可能禁用突觸或者啟用突觸
下圖我們展示了算法從最一開始簡單的神經網絡,一直訓練到後期的網絡

利用NEAT算法實作馬裡奧的隻能通關的基本思想便是,利用上面NEAT算法的基本觀點,從遊戲記憶體中擷取實時的遊戲資料,判斷馬裡奧是否死忙、計算Fitness值、判斷馬裡奧是否通關等,進而将這些作為神經網絡的輸入,最後輸出對馬裡奧的操作,包括上下左右跳躍等操作,如下圖:
NEAT算法是相對提出較早的算法,在2013年大名鼎鼎的DeepMind提出了一種深度增強學習的算法,該算法主要結合了我們上面讨論的CNN和Q-Learning兩種算法,DeepMind的研究人員将該算法應用在Atari遊戲機中的多種小遊戲中進行AI通關。
其基本算法核心便是我們之前介紹的CNN和增強學習的Q-Learning,遊戲智能通關的基本流程如下圖:
利用CNN來識别遊戲總馬裡奧的狀态,并利用增強學習算法做出動作選擇,然後根據新的傳回狀态和曆史狀态來計算reward函數進而回報給Q函數進行疊代,不斷的訓練直到遊戲能夠通關。研究人員在訓練了一個遊戲後,将相同的參數用在别的遊戲中發現也是适用的,說明該算法具有一定的普遍性。下圖反映了一個學習的過程
其最終的實作效果圖如下:
我們發現在CNN識别過程中,每4幀圖像,才會進行一次CNN識别,這是識别速率的問題,圖中曲線反映了直接回報函數和簡介回報函數。
摘自:http://www.cnblogs.com/Leo_wl/p/5852010.html
本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/7725264.html,如需轉載請自行聯系原作者