摘要:近日,發表了一篇文章,詳細討論了為深度學習模型尋找較佳超參數集的有效策略。要知道,與機器學習模型不同,深度學習模型里面充滿了各種超參數。此外,在半自動全自動深度學習過程中,超參數搜索也是的一個非常重要的階段。
在文章開始之前,我想問你一個問題:你已經厭倦了小心翼翼地照看你的深度學習模型嗎?
如果是的話,那你就來對地方了。
近日,FloydHub Blog發表了一篇文章,詳細討論了為深度學習模型尋找較佳超參數集的有效策略。
文章在一開頭就說,讀完之后能夠讓你在找較佳配置的過程中變得事半功倍。
要知道,與機器學習模型不同,深度學習模型里面充滿了各種超參數。而且,并非所有參數變量都能對模型的學習過程產生同樣的貢獻。
考慮到這種額外的復雜性,在一個多維空間中找到這些參數變量的較佳配置并不是件容易的事情。
每一位科學家和研究人員,都希望在現有的資源條件下(計算、金錢和時間),找到較佳的模型。
通常情況下,研究人員和業余愛好者會在開發的最后階段嘗試一種搜索策略。這可能會有助改進他們辛辛苦訓練出來的模型。
此外,在半自動/全自動深度學習過程中,超參數搜索也是的一個非常重要的階段。
說了這么久,你可能已經等不及了吧?
好的,暖場結束,讓我們進入正題~
超參數到底是什么?
先讓我們從最簡單的定義開始:
超參數是在構建機器/深度學習模型時可以轉動的旋鈕。
或者這樣說:
超參數是開始訓練前,用預先確定的值,手動設置的所有訓練變量。
我們應該都會認可Learning Rate和Dropout Rate是超參數,但是模型設計變量呢?比如嵌入、層數、激活函數等。我們是否應該將這些變量視為超參數?
模型設計變量 + 超參數→模型參數
簡單起見,我們也將模型設計變量視為超參數集的一部分。
那么,從訓練過程中獲得的參數,以及從數據中獲得的變量應該怎么考慮呢?這被稱為模型參數。我們將把它們排除在超參數集之外。
讓我們來舉個例子。請看下圖,用一個例子說明了深度學習模型中變量的不同分類。
變量分類示例
我們的下一個問題:搜索的代價很高
尋找超參數的較佳配置,通常會面臨的挑戰是,超參數搜索是一個受計算、金錢和時間約束的迭代過程。
超參數搜索周期
從一個有潛力的配置的猜測(步驟1 )開始,等到一次完整的訓練(步驟2 )結束后,來獲得對相關有益度量的實際評估(步驟3 )。然后,我們將跟蹤搜索過程(步驟4 ),再根據我們的搜索策略,選擇新的猜測(步驟1 )。
我們會一直這樣下去,直到我們結束。通常情況下,是錢或者時間用完了。
讓我們來談談策略
我們有四種主要策略可用于搜索較佳配置:
Babysitting,又名試錯(Trial & Error)
網格搜索(Grid Search)
隨機搜索(Random Search)
貝葉斯優化(Bayesian Optimization)
Babysitting
在學術領域,Babysitting也被稱為“試錯”或“研究生下降”(Grad Student Descent)。這種方法是100%的手工操作,通常被研究人員、學生和業余愛好者采用。
流程非常簡單:比如一個學生設計一個新的實驗后,她會遵循學習過程的所有步驟,從數據收集到特征映射可視化,然后她會按照順序迭代超參數,直到她到了截止日期或耗完了其他的驅動力。
Babysitting
當然,如果你上過deeplearning.ai的課程,你對這種方法應該會很熟悉。這就是吳恩達教授所描述的熊貓工作流程。
這種方法非常有教育意義。但是,在一個團隊或者一個公司里,這種方法并不適用,因為數據科學家的時間是非常寶貴的。
這就給我們提出了一個問題:
“有沒有更好的方法來利用我們的時間?”
當然有,我們可以通過定義一個自動的超參數搜索策略來利用你的時間。
網格搜索
網格搜索,是一種簡單嘗試所有可能配置的方法。
下面是工作流程:
在n維上定義一個網格,其中每一個映射代表一個超參數。例如,n= (learning_rate, dropout_rate, batch_size)
對于每個維度,定義可能值的范圍:例如batch _ size = [ 4、8、16、32、64、128、256 ]
搜索所有可能的配置并等待結果來建立較佳配置:例如 C1 = (0.1, 0.3, 4) -> acc = 92%, C2 = (0.1, 0.35, 4) -> acc = 92.3%, 等等……
下圖展示了一個簡單的二維網格搜索的Dropout和Learning rate。
并行執行兩個變量的網格搜索
通常情況下,這種并行策略會使人為難,因為它沒有考慮到計算背景。使用網格搜索,你擁有的計算資源越多,你能同時嘗試的猜測就會越多。
這種方法的真正痛點被稱為維數災難。即我們增加的維度越多,搜索就變得越困難,最終會導致這種策略難以為繼。
當維度小于或等于4時,可以使用這種方法。但在實踐中,即使它能保證最終找到較佳配置,它仍然是不可取的。相反,較好使用隨機搜索。
隨機搜索
幾年前,Bergstra和Bengio發表了一篇論文,論證了網格搜索的效率低下。
網格搜索和隨機搜索之間真正的區別是第一步:隨機搜索從配置空間中隨機選擇點。
讓我們使用下面的一些圖片,來展示研究人員的論證結果。
網格搜索 vs 隨機搜索
圖片中, 主要是通過在兩個超參數空間上搜索較佳配置來比較這兩種方法。它還假設一個參數比另一個更重要。
這是一個安全的假設,正如開頭提到的那樣,深度學習模型中確實充滿了各種超參數,通常研究者/科學家/學生知道哪些參數對訓練的影響較大。
在網格搜索中,我們很容易注意到,即使我們訓練了9個模型,但每個變量只使用了3個值。
在隨機搜索中,多次地選擇相同變量的可能性微乎其微。如果使用第二種方法,每個變量會使用9個不同值來訓練9個模型。
劃重點:如果你的搜索空間包含3到4個維度,不要使用網格搜索。相反,使用隨機搜索,它會為每個搜索任務提供一個非常好的基準。
網格搜索和隨機搜索的優缺點
后退一步,前進兩步
另外,當你需要為每個維度設置空間時,為每個變量設定正確的尺度是非常重要的。
批次大小和learning rate的通用比例空間
例如,使用批量大小的值作為2的冪,并且在日志中對learning rate進行抽樣是很常見的。
放大!
另一個很常見的做法是,在一定次數的迭代中,從上面的一個布局開始,然后通過在每個變量范圍內更密集地采樣,來放大有潛力的子空間,甚至用相同或不同的搜索策略開始新的搜索。
還有一個問題:獨立猜測
不幸的是,網格搜索和隨機搜索有一個共同的缺點:
“每個新的猜測都獨立于之前的運行!”
相比之下,Babysitting的優勢就顯現出來了。Babysitting之所以有效,是因為科學家有能力利用過去的猜測,并將其作為改進下一步工作的資源,來有效地推動搜索和實驗。
等一下,這聽起來很熟悉……如果我們試著將超參數搜索作為一個機器學習任務來建模呢?會發生什么?
好了,請允許我“請出”貝葉斯優化。
貝葉斯優化
這種搜索策略是建立一個代理模型,試圖從超參數配置中預測我們關心的度量指標。
在每一次迭代中,代理將會變得越來越有信心,新的猜測會帶來新的改進。像其他搜索策略一樣,它也會等到一切都耗盡的時候停止。
貝葉斯優化工作流程
這好像聽起來讓人有點懵逼,不要擔心,我們再來舉一個例子。
高斯過程
高斯過程( Gaussian Process )不僅會產生預測值,還會給我們一個不確定性的范圍,通常是均值和方差。
讓我們來深入研究一下這個很棒的教程提供的例子。
傳送門:https://www.iro.umontreal.ca/~bengioy/cifar/NCAP2014-summerschool/slides/Ryan_adams_140814_bayesopt_ncap.pdf
2點高斯過程
在上圖中,我們在單個變量上(橫軸上)遵循高斯過程優化的第一步。在這個例子中,可以代表learning rate或dropout rate。
在縱軸上,我們將某個度量指標繪制為單個超參數的函數。因為我們在尋找盡可能低的值,所以我們可以把它看作損失函數。
黑點代表迄今為止訓練出來的模型。紅線是真實值(ground truth),換句話說,是我們試圖學習的函數。
黑線表示我們對真實值函數假設的平均值,灰色區域表示空間中的不確定性或方差。
正如我們能注意到的,點周圍的不確定性減少了,因為我們對這些點周圍的結果非常有信心,主要是因為我們已經在這里訓練了模型。
因此,在信息較少的領域,不確定性會增加。
既然已經定義了起點,我們已經準備好選擇下一個有潛力的變量來訓練模型。我們需要定義一個采集函數,來告訴我們在哪里采樣下一個配置。
在這個例子中,我們使用了Expected Improvement:如果我們使用不確定性區域中的推薦配置,這個函數的目的是為了找到盡可能低的值。
上面圖表中的藍點顯示了Expected Improvement函數為下一次訓練選擇的點。
3點高斯過程
我們訓練的模型越多,代理對下一個有潛力采樣的點就越有信心。以下是經過8次訓練后的模型圖表:
8點高斯過程
高斯過程屬于一類稱為基于序列模型的優化(SMBO)的算法。正如我們剛剛看到的,這些算法為搜索較佳超參數提供了非常好的基準。
但是,就像所有工具一樣,它們也有缺點:
根據定義,這個過程是循序漸進的
它只能處理數字參數
如果訓練表現不佳,它也沒有任何機制來終止訓練
請注意,對這個話題,我們只是淺嘗輒止,如果你想深入研究,并對如何擴展SMBO感興趣,可以看看這篇論文。
傳送門:https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf
搜索策略比較
好了,具體的搜索策略已經介紹完了,是時候總結一下了,這樣才能更好地了解每個方案的優缺點。
總結
只要你或你的團隊不受資源的約束,貝葉斯SMBO可能是較好的選擇,但是你也應該考慮建立一個隨機搜索的基準。
另一方面,如果你還在學習或處于開發階段,即使在空間探索方面不切實際,Babysitting也是可行的。
正如我在上一節中提到的,如果一個訓練表現不佳,這些策略都不能提供節省資源的機制,我們必須等到計算結束。
這就引申出了這樣的一個問題:
“我們能優化訓練時間嗎?”
讓我們來研究研究。
提前停止的力量
提前停止,不僅是一種著名的正則化技術,而且在訓練方向不正確時,它還是一種能夠防止資源浪費的機制。
下面是最常用的停止標準的圖表:
前三個標準不用多說,大家都明白,所以讓我們把注意力集中在最后一個標準上。
通常情況下,研究者都會根據實驗類別來限定訓練時間。這可以優化團隊內部的資源。
在訓練模型的過程時,可以手動應用這些標準,或者通過最常見的框架中提供的鉤子/回調組件,將這些規則集成到實驗中,你可以做得更好,比如說:
Keras提供了一個很好的提前停止功能,甚至還有一套回調組件。由于Keras最近已經集成到了Tensorflow中,你可以使用Tensorflow代碼中的回調組件。
Tensorflow提供了訓練鉤子,這些鉤子可能不像Keras回調那樣直觀,但是它們能讓你對執行狀態有更多的控制。
Pytorch還沒有提供鉤子或回調組件,但是你可以在論壇上查看TorchSample報告。我不太清楚Pytorch 1.0的功能列表,這個功能可能會隨新版本一起發布。
Fast.ai庫也提供回調組件,即使它目前沒有提供任何類型的文檔( WIP ),你也可以在這里找到一個不錯的教程。
傳送門:https://github.com/sgugger/Deep-Learning/blob/master/Using%20the%20callback%20system%20in%20fastai.ipynb
Ignite ( Pytorch的高級庫)提供類似于Keras的回調,雖然還在開發階段,但它看起來確實是一個不錯的選擇。
這并不是結束
機器學習有一個子領域叫做“AutoML” (Automatic Machine Learning,自動機器學習),目的是將模型選擇、特征提取和/或超參數優化變得自動化。
這就引申出了這個指南的最后一個問題:
“我們能了解整個過程嗎?”
你可以認為,AutoML是一個解決了另一個機器學習任務的機器學習任務。本質上是元機器學習。
研究:AutoML和PBT
你很可能聽說過谷歌的AutoML。神經網絡結構搜索是AutoML的子領域,目的是為給定任務找到較佳模型。關于這個主題的全面討論需要一系列文章。幸運的是,Fast.ai的Rachel Thomas博士做了一份很棒的工作。
傳送門:http://www.fast.ai/2018/07/12/auto-ml-1/
我想和大家分享另一個來自 DeepMind 的有趣的研究成果,他們使用遺傳算法的一種變體來執行超參數搜索,稱為基于群體的訓練(Population Based Training)。
PTB 也是 DeepMind 的另一項令人驚訝的研究的基礎,我強烈建議你去看看,(傳送門:https://deepmind.com/blog/capture-the-flag/)。 引用自DeepMind:
就像隨機搜索一樣,PBT首先需要以隨機超參數的方式訓練許多并行的網絡。但是這些網絡并不是獨立訓練的,而是使用其它網絡的訓練信息來修正這些超參數,并將計算資源分配到那些有潛力的模型上。這種方法的靈感來自于遺傳算法:其中一個群體中的每個個體(worker),可以利用除自身外其余個體的信息。例如,個體可能會從表現較好的個體那里復制模型參數,它還能通過隨機改變當前的值而探索新的超參數集。
當然,在這一領域可能還有許多其他超級有趣的研究。在這里,我只是和大家分享了最近得到媒體關注的一些研究。
希望你能夠有所收獲~
原文鏈接:https://blog.floydhub.com/guide-to-hyperparameters-search-for-deep-learning-models/
聲明:文章收集于網絡,如有侵權,請聯系小編及時處理,謝謝!
歡迎加入本站公開興趣群商業智能與數據分析群
興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識
QQ群:81035754
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/4823.html
摘要:值得一提的是每篇文章都是我用心整理的,編者一貫堅持使用通俗形象的語言給我的讀者朋友們講解機器學習深度學習的各個知識點。今天,紅色石頭特此將以前所有的原創文章整理出來,組成一個比較合理完整的機器學習深度學習的學習路線圖,希望能夠幫助到大家。 一年多來,公眾號【AI有道】已經發布了 140+ 的原創文章了。內容涉及林軒田機器學習課程筆記、吳恩達 deeplearning.ai 課程筆記、機...
摘要:在這堂課中,學生將可以學習到深度學習的基礎,學會構建神經網絡,包括和等。課程中也會有很多實操項目,幫助學生更好地應用自己學到的深度學習技術,解決真實世界問題。 深度學習入門首推課程就是吳恩達的深度學習專項課程系列的 5 門課。該專項課程最大的特色就是內容全面、通俗易懂并配備了豐富的實戰項目。今天,給大家推薦一份關于該專項課程的核心筆記!這份筆記只能用兩個字形容:全面! showImg(...
摘要:在計算機視覺領域,對卷積神經網絡簡稱為的研究和應用都取得了顯著的成果。文章討論了在卷積神經網絡中,該如何調整超參數以及可視化卷積層。卷積神經網絡可以完成這項任務。 在深度學習中,有許多不同的深度網絡結構,包括卷積神經網絡(CNN或convnet)、長短期記憶網絡(LSTM)和生成對抗網絡(GAN)等。在計算機視覺領域,對卷積神經網絡(簡稱為CNN)的研究和應用都取得了顯著的成果。CNN網絡最...
摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...
閱讀 1998·2021-09-30 09:53
閱讀 1841·2021-09-24 09:48
閱讀 1755·2019-08-30 14:01
閱讀 2170·2019-08-29 18:35
閱讀 1249·2019-08-26 18:27
閱讀 2979·2019-08-26 12:12
閱讀 942·2019-08-23 17:16
閱讀 931·2019-08-23 15:31