一文看懂深度學習AutoML和NAS
原文:https://zhuanlan.zhihu.com/p/42924585
AutoML和神經架構搜索(NAS),是深度學習領域的新一代王者。
這些方法能快糙猛地搞定機器學習任務,簡單有效,高度符合當代科技公司核心價值觀。
它們背后原理如何,怎樣使用?
技術博客TowardDataScience有一篇文章,就全面介紹了關于AutoML和NAS你需要了解的一切。
NAS
要了解AutoML,還得從NAS說起。
在開發神經網絡的過程中,架構工程事關重大,架構先天不足,再怎么訓練也難以得到優秀的結果。
當然,提到架構,很多人會想到遷移學習:把ImageNet上訓練的ResNet拿來,換個我需要的數據集再訓練訓練更新一下權重,不就好了嘛!
這種方法的確也可行,但是要想得到最好的效果,還是根據實際情況設計自己的網絡架構比較靠譜。
設計神經網絡架構,能稱得上機器學習過程中門檻最高的一項任務了。想要設計出好架構,需要專業的知識技能,還要大量試錯。
NAS就為了搞定這個費時費力的任務而生。
這種算法的目標,就是搜索出最好的神經網絡架構。它的工作流程,通常從定義一組神經網絡可能會用到的“建筑模塊”開始。比如說Google Brain那篇NasNet論文,就為圖像識別網絡總結了這些常用模塊:
其中包含了多種卷積和池化模塊。
論文:Learning Transferable Architectures for Scalable Image Recognition
地址:https://arxiv.org/pdf/1707.07012.pdf
NAS算法用一個循環神經網絡(RNN)作為控制器,從這些模塊中挑選,然后將它們放在一起,來創造出某種端到端的架構。
這個架構,通常會呈現出和ResNet、DenseNet等最前沿網絡架構一樣的風格,但是內部模塊的組合和配置有所區別。一個架構的好壞,往往就取決于選擇的模塊和在它們之間構建的連接。
接下來,就要訓練這個新網絡,讓它收斂,得到在留出驗證集上的準確率。這個準確率隨后會用來通過策略梯度更新控制器,讓控制器生成架構的水平越來越高。
過程如下圖所示
這個過程很直觀了。簡單來說,很有小朋友搭積木的風范:讓一個算法挑出一些積木,然后把它們組裝在一起,做成一個神經網絡。訓練、測試,根據這個結果來調整選積木的標準和組裝的方式。這個算法大獲成功,NasNet論文展現出非常好的結果,有一部分原因是出于他們做出的限制和假設。
論文里訓練、測試NAS算法發現的架構,都用了一個比現實情況小得多的數據集。當然,這是一種折衷的方法,要在ImageNet那么大的數據集上訓練驗證每一種搜索結果,實在是太耗費時間了。
所以,他們做出了一個假設:如果一個神經網絡能在結構相似的小規模數據集上得到更好的成績,那么它在更大更復雜的數據集上同樣能表現得更好。
在深度學習領域,這個假設基本上是成立的。
上面還提到了一個限制,這指的是搜索空間其實很有限。他們設計NAS,就要用它來構建和當前最先進的架構風格非常類似的網絡。
在圖像識別領域,這就意味著用一組模塊重復排列,逐步下采樣,如下圖所示:
這些模塊也都是當前研究中常用的。NAS算法在其中所做的新工作,主要是給這些模塊換個連接方式。
下面,就是它發現的ImageNet最佳神經網絡架構:
架構搜索的進展
這篇NASNet論文帶動了行業內的一次進步,它為深度學習研究指出了一個全新方向。
但是,用450個GPU來訓練,找到一個優秀的架構也需要訓練3到4天。也就是說,對于除了Google之外的普通貧民用戶們,這種方法還是門檻太高、效率太低。
NAS領域最新的研究,就都在想方設法讓這個架構搜索的過程更高效。
2017年谷歌提出的漸進式神經架構搜索(PNAS),建議使用名叫“基于序列模型的優化(SMBO)”的策略,來取代NASNet里所用的強化學習。用SMBO策略時,我們不是隨機抓起一個模塊就試,而是按照復雜性遞增的順序來測試它們并搜索結構。
這并不會縮小搜索空間,但確實用更聰明的方法達到了類似的效果。SMBO基本上都是在講:相比于一次嘗試多件事情,不如從簡單的做起,有需要時再去嘗試復雜的辦法。這種PANS方法比原始的NAS效率高5到8倍,也便宜了許多。
論文:Progressive Neural Architecture Search
地址:https://arxiv.org/pdf/1712.00559.pdf
論文:Efficient Neural Architecture Search via Parameter Sharing
地址:https://arxiv.org/pdf/1802.03268.pdf
因此,ENAS就要通過改進模型訓練方式來提高效率。
在研究和實踐中已經反復證明,遷移學習有助在短時間內實現高精確度。因為為相似任務訓練的神經網絡權重相似,遷移學習基本只是神經網絡權重的轉移。
ENAS算法強制將所有模型的權重共享,而非從零開始訓練模型到收斂,我們在之前的模型中嘗試過的模塊都將使用這些學習過的權重。因此,每次訓練新模型是都進行遷移學習,收斂速度也更快。
深度學習新方法AutoML
很多人將AutoML稱為深度學習的新方式,認為它改變了整個系統。有了AutoML,我們就不再需要設計復雜的深度學習網絡,只需運行一個預先設置好的NAS算法。
最近,Google提供的Cloud AutoML將這種理念發揮到了極致。只要你上傳自己的數據,Google的NAS算法就會為你找到一個架構,用起來又快又簡單。
AutoML的理念就是把深度學習里那些復雜的部分都拿出去,你只需要提供數據,隨后就讓AutoML在神經網絡設計上盡情發揮吧。這樣,深度學習就變得像插件一樣方便,只要有數據,就能自動創建出由復雜神經網絡驅動的決策功能。
△?谷歌云的AutoML pipeline
不過,AutoML價格也并不算親民,每小時收費20美元。此外,一旦你開始訓練,則無法導出模型,并且得用谷歌提供的API在云上運行你的網絡,這些限制看起來都不是很方便,
AutoKeras也是一個使用了ENAS算法的GitHub項目,可以使用pip安裝。它是用Keras編寫的,因此很容易控制和使用,甚至可以自己深入研究ENAS算法并嘗試進行一些改動。
如果你喜歡用TensorFlow或者Pytorch,也有一些開源項目可用:
https://github.com/melodyguan/enas
https://github.com/carpedm20/ENAS-pytorch
總的來說,若你想使用AutoML,現在已經有很多不同的選擇,這完全取決于你是否會使用你想要的算法,以及你對這件事的預算如何。
AutoML和NAS未來會怎樣?
過去幾年,在深度學習工作的自動化上,整個領域都在大步向前,讓深度學習更貼近大眾、更易用。
不過,進步的空間永遠都有。
架構搜索已經越來越高效了,用ENAS,一個GPU一天就能找出一種新的網絡架構。的確鵝妹子嚶,但是這個搜索空間依然非常有限,而且,現在NAS算法所用的基本結構和模塊還是人工設計的,只是將組裝的過程自動化了。
將來要想取得重大突破,在更廣闊的搜索范圍里搜索真正的新架構是一個重要方向。
如果這樣的算法出現,甚至能為我們揭示龐大復雜深度神經網絡中隱藏的秘密。
當然,要實現這樣的搜索空間,需要設計出更高效的算法。
最后,附上原文傳送門:
https://towardsdatascience.com/the-end-of-open-ai-competitions-ff33c9c69846
這篇文章全面介紹了用來自動尋找神經網絡架構的AutoML,量子位之前還介紹過很多深度學習其他工作的自動化框架,比如自動特征工程、自動調參等等。
深度學習 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。