天天看點

進化算法可以不再需要計算叢集,開普敦大學的新方法用一塊GPU也能重新整理MNIST記錄

雷鋒網 AI 科技評論按:進化算法和生成式對抗性網絡GANs類似,提出時大家都覺得是很好的想法,可以幫人類極大地拓展行為和想象空間,然而找到好的、可控的實作方法卻沒那麼簡單。GANs方面現在已經有了許多的成果,但是進化算法仍然停留在較為初期的狀态,無法生成大規模、複雜的網絡,需要的計算資源也是在計算叢集的級别上。

不過,進化算法的研究也是一步步在“進化”的,最近這項來自南非開普敦大學的研究就帶來了新的發現,隻用單塊GPU的資源就進化出了理想的網絡結構,還重新整理了三項測試的結果。雷鋒網(公衆号:雷鋒網) AI 科技評論把背景和這篇論文的成果簡單介紹如下。

深度神經網絡是強大但是反直覺的野獸,要有豐富的經驗、反複試錯,才能駕馭它們得到好的表現。也有許多例子證明,神經網絡的表現會随着深度的增加不斷提高。這些特性加上深度學習在各個領域内越來越強的影響力都表明,能自動找到最優或者接近最優的網絡結構和超參數的方法越來越重要。

不過顯然,網絡中每一層的特性、層與層的順序、激活函數、全連接配接層裡的單元數量、卷積層裡卷積核的數量等等建立深度學習網絡需要的參數,挑選的時候每一項都不算容易。不過現在有一個好處是,我們有豐富的計算資源,一般來說都可以嘗試許多種不同的組合,找到效果比較好的。那有沒有可能隻用非常有限的計算資源,比如一塊GPU,就取得不錯的結果呢?

這篇論文就讨論了一種思路,通過進化算法,發展出優秀的神經網絡。這樣的神經進化算法并不是新鮮事物,大概三十年前就有人提出過,最開始是在一項跟神經網絡中的連接配接權重相關的研究中。

下面介紹一下神經進化算法方面的近期相關工作,跟這篇論文中的成果相比,它們都用到了很多的計算資源。E. Real 等在“Large-scale evolution of image classifiers”(arXiv:1703.01041, 2017)中提出了一種神經進化的方法,優化用于圖像分類的神經網絡,其中用到了含有250台計算機的并行計算叢集,而在CIFAR圖像資料集任務中取得了可觀的成果。B. Zoph 和 Q. V. Le 則在“Neural architecture search with reinforcement learning”(arXiv:1611.01578, 2016)中用了一個綜合了強化學習的循環神經網絡,用來學習優秀的架構,他們一共在800個GPU上訓練了800個網絡。

R. Miikkulainen 等人提出了CoDeepNEAT(“Evolving deep neural networks”,arXiv:1703.00548, 2017),其中産生了一大批模型和藍圖。這些藍圖是由數個節點組成的,節點指向表征了神經網絡的特定子產品。這樣一來,他們所提的方法就讓重複結構的進化變得可能,因為藍圖可以重複使用進化後的子產品。T. Desell 提出了 EXACT(“Large scale evolution of convolutional neural networks using volunteer computing” ,arXiv:1703.05422, 2017),這是一種用來部署在分布式計算叢集上的神經進化算法,他們當時使用了4500台志願參與者的計算機,進化出了12萬個網絡用來搞定MNIST資料集。他們的方法中沒有使用池化層,也僅限于使用2維的輸入和濾波器。

作者們還發現,近期有研究中隻用一個GPU就可以進化出能夠準确判斷出監督學習任務中需要的是回歸模型還是分類模型的深度神經網絡,在一系列不同的任務中獲得了96%的平均準确率。(E. Dufourq 和 B. A. Bassett, “Automated problem identification: Regression vs classification via evolutionary deep networks”,Annual Conference of the South African Institute of Computer Scientists and Information Technologists, ACM, 2017)這項成果是作者們的這篇論文的直接先驅,而且隻要有足夠的計算資源就可以無縫銜接到這篇論文中的網絡優化過程中來。

基因算法(genetic algorithm,GA)是一種可以用來解決優化問題的進化算法。首先初始化一群染色體,每個染色體都表征了優化問題的一個解決方案。然後通過一個比對度函數評價每個染色體,以确定哪個染色體可以解決這個問題。在疊代進化模型中,基因算法會疊代很多次,可以稱作“世代”(generations),一直疊代到預定義的條件達成為止(比如最大世代數目)。每一個染色體由很多個基因組成,這些基因就可以用基因操作器進行替換。經過基因操作器操作之後的染色體,就可以稱為原來染色體的子代(offspring)。根據染色體群落數目的不同,可以産生多個子代。每個世代中,子代染色體都會代替現有的染色體群落。

這篇論文中,作者們使用了傳統的基因算法。他們還額外增加了世代數目和網絡訓練中epoch的數目,用來探索最佳的epoch的數目。所用的基因算法如下圖。

作者們采用基因算法的原因是,染色體的複雜程度可以根據編碼的基因數目增大或者降低。基因算法相比其它進化算法還有一些好處:它們可以流暢地處理離散(比如層類型)和連續(比如學習速率)的連續空間,進行神經進化研究的時候這就是理想的選擇。

在這篇論文中,作者們提出了進化性深度網絡(Evolutionary DEep Networks,EDEN),這算一種結合了基因算法和深度神經網絡的的神經進化算法,用來探索神經網絡架構、相關的超參數以及epoch數目的搜尋空間。在這項研究中,作者們探索了例如嵌入層的優化這類的額外特征,并且提高了現有研究的複雜度。作者們希望通過EDEN解答兩個問題:1,能否通過進化的方法得出總體來說較為優秀的架構和超參數用來解決許多不同的問題(并不僅限于圖像識别)?2,與之前研究中使用的大規模計算叢集相反,他們能否用單個GPU就達到這一目标?

作者們将EDEN接入了TensorFlow,這樣新的層、函數以及其它的特征都可以輕松地被EDEN集合、應用,因為這些特征的表征函數都可以作為TensorFlow函數調用。而且,EDEN也不局限于TensorFlow,其它的現代深度神經網絡架構也可以用來實作EDEN。下圖就是一個EDEN的染色體在編碼後得到的神經網絡結構的例子。

每個EDEN染色體包含兩個基因,編碼學習速率和一個神經網絡。圖中展現的是一個用EDEN進化出的用于情緒分析的神經網絡。EDEN創造了一個輸出次元為120的嵌入層,其後有3個一維卷積層。EDEN進化出了濾波器的數目、每個濾波器的次元,以及每個濾波器響應的激活函數。對于最後一個層,EDEN決定使用的激活函數是sigmoid。這個染色體上的學習速率是0.0023。

下面這個動圖展示了EDEN執行的過程中染色體進化的過程,要解決的問題是一個MNIST圖像分類問題。這個過程中神經元群落向着一個高效的解決方案收斂,最終主要由二維卷積層組成。

運用EDEN,在10個世代和13個訓練epoch後,作者們在多項測試中分别得到的網絡結果如下。

對于不同的任務,網絡中進化出的學習速率和參數數目也不一樣。其中EMNIST-balanced、EMNIST-digits 和 Fashion-MNIST 三項任務中取得了最好的結果,重新整理了目前的最好成績。對于CIFAR-10中低很多的表現,作者們認為原因是,由于他們這項研究關注效率更多,是以對模型的深度做出了一定限制,也就限制了CIFAR-10任務中的表現。

這張圖是在MNIST任務中,網絡進化到不同世代的平均比對度變化圖。其中的豎線标出的是整個群落中5%到95%的比對度值。在進化剛開始時,群落中的比對度有很大的不同,然後随着解決方案變好、群落收斂,比對度的變化幅度開始減小。圖中也标出了自進化開始之後,最初、中間、最終三個世代時的網絡結構以及相關的超參數。

作者們表示,他們實驗中隻使用了一塊GTX1070 GPU,訓練時間6到24小時,就可以取得這樣的成果,他們覺得非常滿意。他們的研究也首次嘗試了把神經進化用在一維卷積網絡的創造中,用來解決情感分析、包括嵌入層的優化問題。

本文作者:楊曉凡

繼續閱讀