神經網路也能進化? Neuro-Evolution
在進化演算法這系列的內容中我做了很久鋪墊, 現在總算到了比較前沿先進的技術了. 我們知道機器學習, 深度學習很多時候都和神經網路是分不開的. 那將進化和神經網路結合也在近些年有了突破. 我們在這裡對比一下這種基於進化的神經網路和基於梯度的神經網路究竟有什麼優勢, 又存在哪些劣勢?
數學是達成目的的工具, 理解才是達成目的橋樑, 所以這篇文章用淺顯易懂的動畫闡述了複雜的機器學習概念.
強烈推薦通過動畫的形式了解.
所以首先放視頻鏈接: Youtube 或者 優酷.
更多通熟易懂的知識請訪問: 莫煩 PythonPython 的實踐: Python Evolutionary Strategies 進化演算法教程
什麼是神經網路進化? What is Neuro-Evolution?
視頻
人工神經網路和生物神經網路
你大多數時候所見到的人工神經網路是一種計算機能理解的數學模型, 這個模型將觀測到的信息通過類似電信號的方式正向傳播, 獲取深程度的理解, 然後輸出自己的判斷. 最後通過對比自己的判斷和真是數據, 將誤差反向傳播, 更新自己的網路參數. 但是生物中的神經網路卻沒有這一套反向傳播的系統, 它往往是只產生正向傳播, 然後通過刺激產生新的神經聯結, 用這些產生的聯結理解事物. 這就是大家為什麼都在說人工神經網路是和生物神經網路不同的原因之一. 但是早在二十一世紀初, 科學家們已經將生物神經網路的這套系統用程序給實現了, 我們就來看看他們是如何應用的, 他們的優勢和劣勢各是什麼?如果用進化理論來實現神經網路的更新
遺傳演算法/進化策略 + 神經網路
我們之前提過了兩種方式, 遺傳演算法 (Genetic Algorithm) 和 進化策略 (Evolution Strategy). 這兩種方式的神經網路都有了突破性的發展. 像這部影片一樣, 我也製作過遺傳演算法和進化策略的短簡介, 確保你已經觀看過了以上兩部簡介視頻, 因為在這部影片中, 我們會基於之前兩部影片來理解. 不管是遺傳演算法還是進化策略, 他們都是採取了進化理論中的某些重要部分. 比如遺傳演算法中我們會有來自父母的兩組神經網路, 通過將這兩個神經網路交叉配對, 產生寶寶的神經網路, 然後將寶寶的神經網路變異, 來獲取新的能力[1]. 最後將所有寶寶們放入殘酷的現實, 讓他們適者生存不適者淘汰. 而如果使用進化策略, 我們更偏向於先固定神經網路的結構, 讓這個結構蠶卵, 生出很多和原始神經網路結構相同, 但聯結強度稍稍不同的網路. 這些寶寶網路中肯定有好有壞, 進化策略中有趣的一步就來了, 下一代的爸爸是所有寶寶的綜合體, 這個綜合體中, 好寶寶的聯結會佔有更多比例, 壞寶寶佔有更少比例. 通過這種形式讓好寶寶漸漸主宰這個生存環境[2]. 我們知道, 反向傳播, 靠計算梯度的神經網路非常適合做監督學習, 比如讓計算機識別圖片, 在這方面, 使用進化理論的神經網路的確暫時比不上這些梯度的神經網路. 原因很簡單.
梯度 or 進化
在梯度下降中, 我們需要的只是梯度, 讓這個神經網路的參數滑到梯度躺平的地方就好了, 因為梯度給你指明了一個優化的方向, 所以如果是監督學習, 優化起來會非常快. 而神經網路的進化, 使用的卻是另一種手段. 用原始的點創造出很多新的點, 然後通過新的點來確定下一代的起點在哪. 這樣的循環再不斷地繼續. 可以想像, 如果在監督學習中, 我們需要不斷產生非常多新的網路, 測試新的網路, 這將比梯度法慢很多. 但是不使用梯度的方法還有一個好處, 那就是有效避免局部最優.
局部/全局最優
大家知道, 在梯度下降中, 神經網路很容易會走到一個局部最優, 但是如果是使用基於遺傳演算法的神經網路, 這個優化過程雖然慢, 我們的寶寶網路卻可以隨時跳出局部最優, 因為它完全不受梯度的限制. 而且除了監督學習, 我們還能用進化理論的神經網路做強化學習, 在這點上, 已經有最新的研究指出[2], 基於進化策略的神經網路完全有能力替代傳統的基於梯度的強化學習方法.
並行強化學習
因為涉及到了很多的寶寶, 我們大可將這些寶寶利用計算機強大的並行能力有效的計算. 研究指出, 如果合理的運用這種能力, 他們的訓練效果可比傳統的強化學習快多了[2]. 或許當基於梯度的方法達到瓶頸後, 這些基於進化的方法或許能為我們打開另一扇窗.
莫煩 Python 里還有很多Python實踐和有趣的機器學習內容.
相關文獻:
遺傳演算法+神經網路=NEAT
[1] Stanley, K. O. & Miikkulainen, R. 2002. Evolving Neural Networks through Augmenting Topologies. Evolutionary Computation, 10, 99-127.
ES 進化策略+神經網路 (OpenAI的演算法)
[2] Salimans, T., Ho, J., Chen, X. & Sutskever, I. 2017. Evolution Strategies as a Scalable Alternative to Reinforcement Learning.
NEAT 升級版
[3] Stanley, K. O., Dambrosio, D. B. & Gauci, J. 2009. A hypercube-based encoding for evolving large-scale neural networks. Artificial life, 15, 185-212.
[4] Risi, S. & Stanley, K. O. 2012. An enhanced hypercube-based encoding for evolving the placement, density, and connectivity of neurons. Artificial life, 18, 331-363.
推薦閱讀:
※初學機器學習必備10大演算法
※實現屬於自己的TensorFlow(一) - 計算圖與前向傳播
※走進谷歌大腦建立者的思維:生活、創新和失敗
※《淺析感知機(三)--收斂性證明與對偶形式以及python代碼講解》