閱讀443 返回首頁    go 技術社區[雲棲]


教機器寫代碼:增強拓撲進化網絡(NEAT)

教機器寫代碼:增強拓撲進化網絡(NEAT)

1.gif

在這篇文章中,我將向大家介紹一種名為**增強拓撲進化網絡(NEAT)**的機器學習方法。

介紹

我喜歡學習。每當遇到從未接觸過的書籍或論文,並開始閱讀的時候,我都會感到非常興奮。有些人喜歡在空閑時間玩填字遊戲、數獨或者猜謎語,以刺激自己的意識。而我喜歡閱讀論文並嚐試實現文中所提到的算法。而且,由於喜歡學習,我一直對自己無法學到所有想要學的東西而感到難過。我特別感興趣的是學習如何讓電腦為我而學習,讓電腦為我提供一些有趣的信息,從而最大限度地提高學習的效率和有效性。這些用於構建複雜信息的算法屬於“專家係統”這個領域。因此,我的目標就是“創造”一個“專家”,在需要做決定的時候可以向他谘詢。讓我們來看一下這個被稱為NEAT的“專家”模型吧,本文將介紹有關這方麵的一些概念。在以後的文章中,我可能會給出一些實現代碼。

什麼是NEAT?

NEAT的意思是“增強拓撲進化網絡”,它描述了在進化過程中受遺傳修飾啟發的自學習機器的算法概念。

2.gif

生活本身非常迷人。每當我觀察大自然的時候,我都會去關注所有生物的共同點,也就是信息。信息似乎是繁殖的核心遺產。大自然能夠對過去37億年的信息傳遞進行優化,並創造出各種不同的物種。查爾斯·達爾文有關適者生存的概念讓我們理解了是什麼使得一些物種能夠生存,而其他物種隻能滅亡的。進化計算機科學家的目標是通過模仿自然進化來構建係統解決複雜問題。

描述NEAT原理最簡單的方法就是舉例子。如果你打算設計一個能以最優方式玩遊戲的專家係統,那麼你需要考慮哪些相關的因素呢?

首先,定義“玩家”所有可執行的動作。例如,超級馬裏奧能夠跳、躲避、向左走、向右走、旋轉、快跑等等。如果我們將機器與這些變量相關聯,並允許機器執行這些動作,那麼機器才有可能完成某件事。

其次,為計算機定義一個目標。這裏要引入“適應度評分”這個概念。適應度評分是一個對成功進行獎勵的數學函數。在像馬裏奧這樣的遊戲中,適應度評分表示了玩家邁向終點線的進度。 適應度評分函數中可以包含很多的變量,如收集到的硬幣、被擊敗的敵人或整體完成時間。

第三,定義進化規則。 NEAT允許節點的突變、節點之間的新連接,以及通過產生後代來繼承父輩。此外,NEAT能夠確保不同種類的“物種”之間共存,直到他們被允許相互競爭,產生新的更優的後代。為了確保適者生存,已經嚐試過的網絡在未來不會重試,而現有的網絡可以自我優化,NEAT會為每一個作為曆史標記的基因添加一個創新數字。

3.png

上圖顯示了添加節點和添加連接這兩種突變。在圖的上半部分,2到4的連接被禁用了,取而代之的是新創建了一個從3到5的連接。在下半部分的節點突變中可以看到2到4的連接被禁用了,新引入了節點6,並創建了3到6和6到4這兩個新的連接。

4.png

上圖展示了進化是如何發生的。父輩1和父輩2在節點和連接上有相似點,但它們之間也存在區別。該機器使用二元邏輯來包含或者排除一個節點/連接。基本的判斷機製是:true與true得true,true與false得false,false與false得false。這樣就確保了後代繼承過來的信息對於適應度評分是有效的,而進化得到的新的節點和連接會出現在後代中,如果在父節點中是禁用的,則後代中也是禁用的。“*匹配基因是隨機遺傳的,而不相交的基因(中間不匹配的基因)和多餘的基因(最終不匹配的基因)會從更合適的父輩那繼承。在這種情況下,假設適應度相等,不相交和多餘的基因也會隨機遺傳。禁用的基因可能會在後代中再次啟用:如果一個遺傳基因在雙親中被禁用,那麼它就有可能被遺傳的基因所禁用。*”[Stanley,Miikkulainen,第109頁,NEAT]

現在,一切都清楚了,NEAT可以通過迭代和進化新的神經網絡來達到最佳的適應度評分,這可在遊戲上實現。我強烈推薦這篇論文,它寫得非常好,初學者也可以理解。但是如果你想要快速入門的話,可以在YouTube上觀看這個精彩的視頻:https://youtu.be/qv6UVOQ0F44(需科學上網)

NEAT能很好地解決複雜的問題,因為它可以把大問題分解為多個可優化的小問題。 NEAT代理可用於多個不同的獨立任務,然後將其結合起來解決更複雜的問題。這裏有一個利用NEAT發明藥品的例子,首先確定好所有需要用到的微量元素,然後定義一個適應度函數,使得模擬係統能夠理解獎勵製度,最後定義進化規則。而另一個NEAT可用於選擇新藥品的生產技術。一旦這兩個係統結合起來,就能產生一個為成本效益而優化的新的適應度函數,此函數可以為這個新設計的藥品創造出最優的生產方法。這雖然在理論上聽起來不錯,但顯然是一項非常複雜任務,需要大量的研究和實驗才可能實現。

文章原標題《How do we teach a machine to program itself ? — NEAT learning》,作者:Murat Vurucu,譯者:夏天,審校:主題曲。

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-09-11 22:04:02

  上一篇:go  人工智能在細分及新興領域的應用
  下一篇:go  關於機器學習你必須了解的十個真相