中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

深度學(xué)習(xí)模型超參數(shù)搜索實(shí)用指南

2018-09-30    來源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

在文章開始之前,我想問你一個(gè)問題:你已經(jīng)厭倦了小心翼翼地照看你的深度學(xué)習(xí)模型嗎?

如果是的話,那你就來對(duì)地方了。

近日,F(xiàn)loydHub Blog發(fā)表了一篇文章,詳細(xì)討論了為深度學(xué)習(xí)模型尋找較佳超參數(shù)集的有效策略。

文章在一開頭就說,讀完之后能夠讓你在找較佳配置的過程中變得事半功倍。

要知道,與機(jī)器學(xué)習(xí)模型不同,深度學(xué)習(xí)模型里面充滿了各種超參數(shù)。而且,并非所有參數(shù)變量都能對(duì)模型的學(xué)習(xí)過程產(chǎn)生同樣的貢獻(xiàn)。

考慮到這種額外的復(fù)雜性,在一個(gè)多維空間中找到這些參數(shù)變量的較佳配置并不是件容易的事情。

每一位科學(xué)家和研究人員,都希望在現(xiàn)有的資源條件下(計(jì)算、金錢和時(shí)間),找到較佳的模型。

通常情況下,研究人員和業(yè)余愛好者會(huì)在開發(fā)的最后階段嘗試一種搜索策略。這可能會(huì)有助改進(jìn)他們辛辛苦訓(xùn)練出來的模型。

此外,在半自動(dòng)/全自動(dòng)深度學(xué)習(xí)過程中,超參數(shù)搜索也是的一個(gè)非常重要的階段。

說了這么久,你可能已經(jīng)等不及了吧?

好的,暖場(chǎng)結(jié)束,讓我們進(jìn)入正題~

超參數(shù)到底是什么?

先讓我們從最簡(jiǎn)單的定義開始:

超參數(shù)是在構(gòu)建機(jī)器/深度學(xué)習(xí)模型時(shí)可以轉(zhuǎn)動(dòng)的旋鈕。

 

 

或者這樣說:

超參數(shù)是開始訓(xùn)練前,用預(yù)先確定的值,手動(dòng)設(shè)置的所有訓(xùn)練變量。

我們應(yīng)該都會(huì)認(rèn)可Learning Rate和Dropout Rate是超參數(shù),但是模型設(shè)計(jì)變量呢?比如嵌入、層數(shù)、激活函數(shù)等。我們是否應(yīng)該將這些變量視為超參數(shù)?

 

 

模型設(shè)計(jì)變量 + 超參數(shù)→模型參數(shù)

簡(jiǎn)單起見,我們也將模型設(shè)計(jì)變量視為超參數(shù)集的一部分。

那么,從訓(xùn)練過程中獲得的參數(shù),以及從數(shù)據(jù)中獲得的變量應(yīng)該怎么考慮呢?這被稱為模型參數(shù)。我們將把它們排除在超參數(shù)集之外。

讓我們來舉個(gè)例子。請(qǐng)看下圖,用一個(gè)例子說明了深度學(xué)習(xí)模型中變量的不同分類。

 

 

變量分類示例

我們的下一個(gè)問題:搜索的代價(jià)很高

尋找超參數(shù)的較佳配置,通常會(huì)面臨的挑戰(zhàn)是,超參數(shù)搜索是一個(gè)受計(jì)算、金錢和時(shí)間約束的迭代過程。

 

 

超參數(shù)搜索周期

從一個(gè)有潛力的配置的猜測(cè)(步驟1 )開始,等到一次完整的訓(xùn)練(步驟2 )結(jié)束后,來獲得對(duì)相關(guān)有益度量的實(shí)際評(píng)估(步驟3 )。然后,我們將跟蹤搜索過程(步驟4 ),再根據(jù)我們的搜索策略,選擇新的猜測(cè)(步驟1 )。

我們會(huì)一直這樣下去,直到我們結(jié)束。通常情況下,是錢或者時(shí)間用完了。

讓我們來談?wù)劜呗?/font>

我們有四種主要策略可用于搜索較佳配置:

Babysitting,又名試錯(cuò)(Trial & Error)

網(wǎng)格搜索(Grid Search)

隨機(jī)搜索(Random Search)

貝葉斯優(yōu)化(Bayesian Optimization)

Babysitting

在學(xué)術(shù)領(lǐng)域,Babysitting也被稱為“試錯(cuò)”或“研究生下降”(Grad Student Descent)。這種方法是100%的手工操作,通常被研究人員、學(xué)生和業(yè)余愛好者采用。

流程非常簡(jiǎn)單:比如一個(gè)學(xué)生設(shè)計(jì)一個(gè)新的實(shí)驗(yàn)后,她會(huì)遵循學(xué)習(xí)過程的所有步驟,從數(shù)據(jù)收集到特征映射可視化,然后她會(huì)按照順序迭代超參數(shù),直到她到了截止日期或耗完了其他的驅(qū)動(dòng)力。

 

 

Babysitting

當(dāng)然,如果你上過deeplearning.ai的課程,你對(duì)這種方法應(yīng)該會(huì)很熟悉。這就是吳恩達(dá)教授所描述的熊貓工作流程。

這種方法非常有教育意義。但是,在一個(gè)團(tuán)隊(duì)或者一個(gè)公司里,這種方法并不適用,因?yàn)閿?shù)據(jù)科學(xué)家的時(shí)間是非常寶貴的。

這就給我們提出了一個(gè)問題:

“有沒有更好的方法來利用我們的時(shí)間?”

當(dāng)然有,我們可以通過定義一個(gè)自動(dòng)的超參數(shù)搜索策略來利用你的時(shí)間。

網(wǎng)格搜索

網(wǎng)格搜索,是一種簡(jiǎn)單嘗試所有可能配置的方法。

下面是工作流程:

在n維上定義一個(gè)網(wǎng)格,其中每一個(gè)映射代表一個(gè)超參數(shù)。例如,n= (learning_rate, dropout_rate, batch_size)

對(duì)于每個(gè)維度,定義可能值的范圍:例如batch _ size = [ 4、8、16、32、64、128、256 ]

搜索所有可能的配置并等待結(jié)果來建立較佳配置:例如 C1 = (0.1, 0.3, 4) -> acc = 92%, C2 = (0.1, 0.35, 4) -> acc = 92.3%, 等等……

下圖展示了一個(gè)簡(jiǎn)單的二維網(wǎng)格搜索的Dropout和Learning rate。

 

 

并行執(zhí)行兩個(gè)變量的網(wǎng)格搜索

通常情況下,這種并行策略會(huì)使人為難,因?yàn)樗鼪]有考慮到計(jì)算背景。使用網(wǎng)格搜索,你擁有的計(jì)算資源越多,你能同時(shí)嘗試的猜測(cè)就會(huì)越多。

這種方法的真正痛點(diǎn)被稱為維數(shù)災(zāi)難。即我們?cè)黾拥木S度越多,搜索就變得越困難,最終會(huì)導(dǎo)致這種策略難以為繼。

當(dāng)維度小于或等于4時(shí),可以使用這種方法。但在實(shí)踐中,即使它能保證最終找到較佳配置,它仍然是不可取的。相反,較好使用隨機(jī)搜索。

隨機(jī)搜索

幾年前,Bergstra和Bengio發(fā)表了一篇論文,論證了網(wǎng)格搜索的效率低下。

網(wǎng)格搜索和隨機(jī)搜索之間真正的區(qū)別是第一步:隨機(jī)搜索從配置空間中隨機(jī)選擇點(diǎn)。

讓我們使用下面的一些圖片,來展示研究人員的論證結(jié)果。

 

 

網(wǎng)格搜索 vs 隨機(jī)搜索

圖片中, 主要是通過在兩個(gè)超參數(shù)空間上搜索較佳配置來比較這兩種方法。它還假設(shè)一個(gè)參數(shù)比另一個(gè)更重要。

這是一個(gè)安全的假設(shè),正如開頭提到的那樣,深度學(xué)習(xí)模型中確實(shí)充滿了各種超參數(shù),通常研究者/科學(xué)家/學(xué)生知道哪些參數(shù)對(duì)訓(xùn)練的影響較大。

在網(wǎng)格搜索中,我們很容易注意到,即使我們訓(xùn)練了9個(gè)模型,但每個(gè)變量只使用了3個(gè)值。

在隨機(jī)搜索中,多次地選擇相同變量的可能性微乎其微。如果使用第二種方法,每個(gè)變量會(huì)使用9個(gè)不同值來訓(xùn)練9個(gè)模型。

劃重點(diǎn):如果你的搜索空間包含3到4個(gè)維度,不要使用網(wǎng)格搜索。相反,使用隨機(jī)搜索,它會(huì)為每個(gè)搜索任務(wù)提供一個(gè)非常好的基準(zhǔn)。

 

 

網(wǎng)格搜索和隨機(jī)搜索的優(yōu)缺點(diǎn)

后退一步,前進(jìn)兩步

另外,當(dāng)你需要為每個(gè)維度設(shè)置空間時(shí),為每個(gè)變量設(shè)定正確的尺度是非常重要的。

 

 

批次大小和learning rate的通用比例空間

例如,使用批量大小的值作為2的冪,并且在日志中對(duì)learning rate進(jìn)行抽樣是很常見的。

 

 

放大!

另一個(gè)很常見的做法是,在一定次數(shù)的迭代中,從上面的一個(gè)布局開始,然后通過在每個(gè)變量范圍內(nèi)更密集地采樣,來放大有潛力的子空間,甚至用相同或不同的搜索策略開始新的搜索。

還有一個(gè)問題:獨(dú)立猜測(cè)

不幸的是,網(wǎng)格搜索和隨機(jī)搜索有一個(gè)共同的缺點(diǎn):

“每個(gè)新的猜測(cè)都獨(dú)立于之前的運(yùn)行!”

相比之下,Babysitting的優(yōu)勢(shì)就顯現(xiàn)出來了。Babysitting之所以有效,是因?yàn)榭茖W(xué)家有能力利用過去的猜測(cè),并將其作為改進(jìn)下一步工作的資源,來有效地推動(dòng)搜索和實(shí)驗(yàn)。

等一下,這聽起來很熟悉……如果我們?cè)囍鴮⒊瑓?shù)搜索作為一個(gè)機(jī)器學(xué)習(xí)任務(wù)來建模呢?會(huì)發(fā)生什么?

好了,請(qǐng)?jiān)试S我“請(qǐng)出”貝葉斯優(yōu)化。

貝葉斯優(yōu)化

這種搜索策略是建立一個(gè)代理模型,試圖從超參數(shù)配置中預(yù)測(cè)我們關(guān)心的度量指標(biāo)。

在每一次迭代中,代理將會(huì)變得越來越有信心,新的猜測(cè)會(huì)帶來新的改進(jìn)。像其他搜索策略一樣,它也會(huì)等到一切都耗盡的時(shí)候停止。

 

 

貝葉斯優(yōu)化工作流程

這好像聽起來讓人有點(diǎn)懵逼,不要擔(dān)心,我們?cè)賮砼e一個(gè)例子。

高斯過程

高斯過程( Gaussian Process )不僅會(huì)產(chǎn)生預(yù)測(cè)值,還會(huì)給我們一個(gè)不確定性的范圍,通常是均值和方差。

讓我們來深入研究一下這個(gè)很棒的教程提供的例子。

傳送門:https://www.iro.umontreal.ca/~bengioy/cifar/NCAP2014-summerschool/slides/Ryan_adams_140814_bayesopt_ncap.pdf

 

 

2點(diǎn)高斯過程

在上圖中,我們?cè)趩蝹(gè)變量上(橫軸上)遵循高斯過程優(yōu)化的第一步。在這個(gè)例子中,可以代表learning rate或dropout rate。

在縱軸上,我們將某個(gè)度量指標(biāo)繪制為單個(gè)超參數(shù)的函數(shù)。因?yàn)槲覀冊(cè)趯ふ冶M可能低的值,所以我們可以把它看作損失函數(shù)。

黑點(diǎn)代表迄今為止訓(xùn)練出來的模型。紅線是真實(shí)值(ground truth),換句話說,是我們?cè)噲D學(xué)習(xí)的函數(shù)。

黑線表示我們對(duì)真實(shí)值函數(shù)假設(shè)的平均值,灰色區(qū)域表示空間中的不確定性或方差。

正如我們能注意到的,點(diǎn)周圍的不確定性減少了,因?yàn)槲覀儗?duì)這些點(diǎn)周圍的結(jié)果非常有信心,主要是因?yàn)槲覀円呀?jīng)在這里訓(xùn)練了模型。

因此,在信息較少的領(lǐng)域,不確定性會(huì)增加。

既然已經(jīng)定義了起點(diǎn),我們已經(jīng)準(zhǔn)備好選擇下一個(gè)有潛力的變量來訓(xùn)練模型。我們需要定義一個(gè)采集函數(shù),來告訴我們?cè)谀睦锊蓸酉乱粋(gè)配置。

在這個(gè)例子中,我們使用了Expected Improvement:如果我們使用不確定性區(qū)域中的推薦配置,這個(gè)函數(shù)的目的是為了找到盡可能低的值。

上面圖表中的藍(lán)點(diǎn)顯示了Expected Improvement函數(shù)為下一次訓(xùn)練選擇的點(diǎn)。

 

 

3點(diǎn)高斯過程

我們訓(xùn)練的模型越多,代理對(duì)下一個(gè)有潛力采樣的點(diǎn)就越有信心。以下是經(jīng)過8次訓(xùn)練后的模型圖表:

 

 

8點(diǎn)高斯過程

高斯過程屬于一類稱為基于序列模型的優(yōu)化(SMBO)的算法。正如我們剛剛看到的,這些算法為搜索較佳超參數(shù)提供了非常好的基準(zhǔn)。

但是,就像所有工具一樣,它們也有缺點(diǎn):

根據(jù)定義,這個(gè)過程是循序漸進(jìn)的

它只能處理數(shù)字參數(shù)

如果訓(xùn)練表現(xiàn)不佳,它也沒有任何機(jī)制來終止訓(xùn)練

請(qǐng)注意,對(duì)這個(gè)話題,我們只是淺嘗輒止,如果你想深入研究,并對(duì)如何擴(kuò)展SMBO感興趣,可以看看這篇論文。

傳送門:https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf

搜索策略比較

好了,具體的搜索策略已經(jīng)介紹完了,是時(shí)候總結(jié)一下了,這樣才能更好地了解每個(gè)方案的優(yōu)缺點(diǎn)。

 

 

總結(jié)

只要你或你的團(tuán)隊(duì)不受資源的約束,貝葉斯SMBO可能是較好的選擇,但是你也應(yīng)該考慮建立一個(gè)隨機(jī)搜索的基準(zhǔn)。

另一方面,如果你還在學(xué)習(xí)或處于開發(fā)階段,即使在空間探索方面不切實(shí)際,Babysitting也是可行的。

正如我在上一節(jié)中提到的,如果一個(gè)訓(xùn)練表現(xiàn)不佳,這些策略都不能提供節(jié)省資源的機(jī)制,我們必須等到計(jì)算結(jié)束。

這就引申出了這樣的一個(gè)問題:

“我們能優(yōu)化訓(xùn)練時(shí)間嗎?”

讓我們來研究研究。

提前停止的力量

 

 

提前停止,不僅是一種著名的正則化技術(shù),而且在訓(xùn)練方向不正確時(shí),它還是一種能夠防止資源浪費(fèi)的機(jī)制。

下面是最常用的停止標(biāo)準(zhǔn)的圖表:

 

 

前三個(gè)標(biāo)準(zhǔn)不用多說,大家都明白,所以讓我們把注意力集中在最后一個(gè)標(biāo)準(zhǔn)上。

通常情況下,研究者都會(huì)根據(jù)實(shí)驗(yàn)類別來限定訓(xùn)練時(shí)間。這可以優(yōu)化團(tuán)隊(duì)內(nèi)部的資源。

在訓(xùn)練模型的過程時(shí),可以手動(dòng)應(yīng)用這些標(biāo)準(zhǔn),或者通過最常見的框架中提供的鉤子/回調(diào)組件,將這些規(guī)則集成到實(shí)驗(yàn)中,你可以做得更好,比如說:

Keras提供了一個(gè)很好的提前停止功能,甚至還有一套回調(diào)組件。由于Keras最近已經(jīng)集成到了Tensorflow中,你可以使用Tensorflow代碼中的回調(diào)組件。

Tensorflow提供了訓(xùn)練鉤子,這些鉤子可能不像Keras回調(diào)那樣直觀,但是它們能讓你對(duì)執(zhí)行狀態(tài)有更多的控制。

Pytorch還沒有提供鉤子或回調(diào)組件,但是你可以在論壇上查看TorchSample報(bào)告。我不太清楚Pytorch 1.0的功能列表,這個(gè)功能可能會(huì)隨新版本一起發(fā)布。

Fast.ai庫(kù)也提供回調(diào)組件,即使它目前沒有提供任何類型的文檔( WIP ),你也可以在這里找到一個(gè)不錯(cuò)的教程。

傳送門:https://github.com/sgugger/Deep-Learning/blob/master/Using%20the%20callback%20system%20in%20fastai.ipynb

Ignite ( Pytorch的高級(jí)庫(kù))提供類似于Keras的回調(diào),雖然還在開發(fā)階段,但它看起來確實(shí)是一個(gè)不錯(cuò)的選擇。

這并不是結(jié)束

機(jī)器學(xué)習(xí)有一個(gè)子領(lǐng)域叫做“AutoML” (Automatic Machine Learning,自動(dòng)機(jī)器學(xué)習(xí)),目的是將模型選擇、特征提取和/或超參數(shù)優(yōu)化變得自動(dòng)化。

這就引申出了這個(gè)指南的最后一個(gè)問題:

“我們能了解整個(gè)過程嗎?”

你可以認(rèn)為,AutoML是一個(gè)解決了另一個(gè)機(jī)器學(xué)習(xí)任務(wù)的機(jī)器學(xué)習(xí)任務(wù)。本質(zhì)上是元機(jī)器學(xué)習(xí)。

研究:AutoML和PBT

你很可能聽說過谷歌的AutoML。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索是AutoML的子領(lǐng)域,目的是為給定任務(wù)找到較佳模型。關(guān)于這個(gè)主題的全面討論需要一系列文章。幸運(yùn)的是,F(xiàn)ast.ai的Rachel Thomas博士做了一份很棒的工作。

傳送門:http://www.fast.ai/2018/07/12/auto-ml-1/

我想和大家分享另一個(gè)來自 DeepMind 的有趣的研究成果,他們使用遺傳算法的一種變體來執(zhí)行超參數(shù)搜索,稱為基于群體的訓(xùn)練(Population Based Training)。

PTB 也是 DeepMind 的另一項(xiàng)令人驚訝的研究的基礎(chǔ),我強(qiáng)烈建議你去看看,(傳送門:https://deepmind.com/blog/capture-the-flag/)。 引用自DeepMind:

就像隨機(jī)搜索一樣,PBT首先需要以隨機(jī)超參數(shù)的方式訓(xùn)練許多并行的網(wǎng)絡(luò)。但是這些網(wǎng)絡(luò)并不是獨(dú)立訓(xùn)練的,而是使用其它網(wǎng)絡(luò)的訓(xùn)練信息來修正這些超參數(shù),并將計(jì)算資源分配到那些有潛力的模型上。這種方法的靈感來自于遺傳算法:其中一個(gè)群體中的每個(gè)個(gè)體(worker),可以利用除自身外其余個(gè)體的信息。例如,個(gè)體可能會(huì)從表現(xiàn)較好的個(gè)體那里復(fù)制模型參數(shù),它還能通過隨機(jī)改變當(dāng)前的值而探索新的超參數(shù)集。

當(dāng)然,在這一領(lǐng)域可能還有許多其他超級(jí)有趣的研究。在這里,我只是和大家分享了最近得到媒體關(guān)注的一些研究。

希望你能夠有所收獲~

原文鏈接:https://blog.floydhub.com/guide-to-hyperparameters-search-for-deep-learning-models/

標(biāo)簽: 安全 代碼 谷歌 媒體 搜索 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:遷移學(xué)習(xí)讓深度學(xué)習(xí)更容易

下一篇:Facebook遭黑客攻擊,5千萬用戶數(shù)據(jù)面臨風(fēng)險(xiǎn)