這一節的標題是
11.2 Evolving Neural Networks Is NEAT!
因為方格子標題字數限制,所以沒完整顯現
在訓練模型時,神經演化技術是利用GA的原理及自然選擇的方式來調整類神經網路的權重;這種做法與使用傳統的倒傳遞、政策、獎勵函數等做法截然不同。因此,神經演化技術可以同時使用多個類神經網路來解決問題。在神經演化技術中,單個類神經網路被視為是組成GA族群的個體,而其權重就是基因。在演化的過程中,會定期挑出表現好的類神經網路個體,讓其基因結合、突變,以產生下一代的類神經網路個體。在沒有明確定義的學習規則或任務複雜、存在眾多潛在解方的環境中,神經演化技術會特別有效。
Edmund Ronald及Marc Schoenauer在1994年所發表的論文〈Genetic Lander: An Experiment in Accurate Neuro-genetic Control〉中所使用的例子,是關於神經演化的早期例證之一。在1990年代,類神經網路的訓練方法還處於萌芽的階段,這篇論文提出了另一種不同的訓練方法。他們的論文利用神經演化技術來解決「登月器問題」(lunar lander problem)。登月器問題主要是在探討要怎麼控制,才能讓太空船安全地降落月球表面。這個問題不僅是個工程上的問題,它也催生了許多電玩遊戲。Ronald及Schoenauer在論文中指出,由於缺乏足夠的數據,所以傳統的監督式學習法並不適合用來解決登月器問題,而GA這種非監督式的學習法,則可以毫無困難地演化出讓登月器安全降落的控制器。針對模擬一艘簡化過的登月小艇(lunar module)的著陸控制問題,他們以GA來演化、訓練類神經網路數個世代,從而得到所需的控制器。模擬的結果顯示,他們提出的方法的確可行。在2002年,Kenneth O. Stanley及Risto Miikkulainen在他們的論文〈Evolving Neural Networks through Augmenting Topologies〉中,擴展了早期的神經演化法。不像在解決登月器問題時僅專注於演化類神經網路的權重,他們在論文中所提出的增強拓撲神經演化(NeuroEvolution of Augmenting Topologies)法,可以在演化神經網路的權重時,也同時演化其結構。增強拓撲神經演化,簡稱NEAT,其做法是從結構簡單的類神經網路開始,藉由演化來逐步完善類神經網路的拓樸結構。利用這樣子的方式,NEAT可以找到針對特定任務所量身訂製的類神經網路架構,從而得到更好、更有效的解決方案。
原書對於NEAT的介紹就到此為止,並沒有再繼續深入下去,而是把目標放在利用《Flappy Bird》這個遊戲來重現Ronald及Schoenauer原始論文的研究成果。之所以如此,主要的原因在於,要將NEAT應用於實作上,除了必須對類神經網路的架構有更深入的了解之外,受限於原書所使用的ml5.js功能上之不足,還必須使用如TensorFlow.js等功能更強大的機器學習程式庫才能辦到。
如果想要更深入地了解NEAT,可以參考Neat-Python這個可以用來實作NEAT演算法的python程式庫網站:














