看過了各式各樣的教程之后,你現(xiàn)在已經(jīng)了解了神經(jīng)網(wǎng)絡(luò)的工作原理,并且也搭建了貓狗識別器。你嘗試做了了一個不錯的字符級RNN。你離建立終端只差一個pip install tensorflow命令了對嗎?大錯特錯。
深度學(xué)習(xí)的一個非常重要的步驟是找到正確的超參數(shù),超參數(shù)是模型無法學(xué)習(xí)的。
在本文中,我將向你介紹一些最常見的(也是重要的)超參數(shù),這些參數(shù)是你抵達(dá)Kaggle排行榜#1的必經(jīng)之路。此外,我還將向你展示一些強(qiáng)大的算法,可以幫助你明智地選擇超參數(shù)。
深度學(xué)習(xí)中的超參數(shù)
超參數(shù)就像是模型的調(diào)節(jié)旋鈕。
如果您將AV接收機(jī)設(shè)置為立體聲,那么配備低音揚(yáng)聲器的7.1級杜比全景聲(Dolby Atmos)家庭影院系統(tǒng)將對你毫無用處,盡管它的超低音揚(yáng)聲器可以產(chǎn)生低于人耳可聽范圍的聲音。
同樣,如果你將超參數(shù)關(guān)閉,帶有萬億參數(shù)的inception_v3網(wǎng)絡(luò)甚至不會讓你在MNIST數(shù)據(jù)集上測試通過。
所以現(xiàn)在,讓我們?nèi)缓笤趯W(xué)會如何調(diào)“旋鈕”之前先看看這些“旋鈕”。
學(xué)習(xí)率
學(xué)習(xí)率可以說是最重要的超參數(shù),粗略地說,它可以控制神經(jīng)網(wǎng)絡(luò)“學(xué)習(xí)”的速度。
那么,為什么我們不把學(xué)習(xí)率設(shè)置得非常大,體驗飆車的樂趣呢?
事情不是那么簡單。請記住,在深度學(xué)習(xí)中,我們的目標(biāo)是盡量最小化損失函數(shù)。如果學(xué)習(xí)率太高,我們的損失函數(shù)將開始在某點來回震蕩,不會收斂。
如果學(xué)習(xí)率太小,模型將花費(fèi)太長時間來收斂,如上所述。
動量
由于本文側(cè)重于超參數(shù)優(yōu)化,我不打算解釋動量的概念。但簡而言之,動量常數(shù)可以被認(rèn)為是在損失函數(shù)表面滾動的球的質(zhì)量。
球越重,下落越快。但如果它太重,它可能會卡住或超過目標(biāo)。
丟棄
如果你了解這個概念,我會直接帶你去看Amar Budhiraja關(guān)于丟棄(dropout)的文章。
但我們做一個快速復(fù)習(xí),dropout是Geoff Hinton提出的一種正則化技術(shù),它將神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)隨機(jī)地設(shè)置為0,概率為p。這有助于防止神經(jīng)網(wǎng)絡(luò)過擬合數(shù)據(jù)而不是學(xué)習(xí)它。
p是一個超參數(shù)。
架構(gòu)——神經(jīng)網(wǎng)絡(luò)的層數(shù),每層神經(jīng)元的個數(shù)等
另一個(最近的)想法是使神經(jīng)網(wǎng)絡(luò)的架構(gòu)本身成為一個超參數(shù)。
雖然我們通常不會讓機(jī)器弄清楚我們模型的架構(gòu)(否則AI研究人員會丟失他們的工作),但是神經(jīng)架構(gòu)搜索(Neural Architecture Search)等一些新技術(shù)已經(jīng)實現(xiàn)了這個想法并取得了不同程度的成功。
如果你聽說過AutoML,那么Google基本上就是這樣做的:將所有內(nèi)容都設(shè)置為超參數(shù),然后扔大量TPU在這個問題上讓它自行解決。
但是對于我們絕大多數(shù)只想在黑色星期五銷售之后用經(jīng)濟(jì)型機(jī)器分類貓狗的人來說,現(xiàn)在是時候該弄清楚如何使這些深度學(xué)習(xí)模型真正起作用了。
超參數(shù)優(yōu)化算法
網(wǎng)格搜索
這是獲得良好超參數(shù)的最簡單方法。它實際上就是暴力解決。
算法:從一組給定的超參數(shù)中嘗試一堆超參數(shù),看看哪種方法效果最好。
優(yōu)點:五年級學(xué)生都很容易實現(xiàn),而且可以輕松并行化。
缺點:正如你可能猜到的那樣,它的計算成本非常高(因為所有暴力算法都是如此)。
我是否應(yīng)該使用它:可能不會。網(wǎng)格搜索非常低效。即使你想保持簡單,你也最好使用隨機(jī)搜索。
隨機(jī)搜索
正如它的本意,隨機(jī)搜索。完全隨機(jī)化。
算法:在一些超參數(shù)空間上從均勻分布中嘗試一堆隨機(jī)超參數(shù),看看哪種方法效果最好。
優(yōu)點:可以輕松并行化。就像網(wǎng)格搜索一樣簡單,但性能稍好一點,如下圖所示:
缺點:雖然它提供了比網(wǎng)格搜索更好的性能,但它仍然只是計算密集型。
我是否應(yīng)該使用它:如果瑣碎的并行化和簡單性是最重要的,那就去吧。但是,如果你愿意花費(fèi)時間和精力,那么通過使用貝葉斯優(yōu)化,你的模型效果將大大提升。
貝葉斯優(yōu)化
與我們迄今為止看到的其他方法不同,貝葉斯優(yōu)化使用了算法的先前迭代的知識。使用網(wǎng)格搜索和隨機(jī)搜索,每個超參數(shù)猜測都是獨(dú)立的。但是,使用貝葉斯方法,每次我們選擇并嘗試不同的超參數(shù)時,表現(xiàn)都在一點點提升。
貝葉斯超參數(shù)調(diào)整背后的想法歷史悠久且細(xì)節(jié)豐富。所以為了避免太多坑,我會在這里給你一個要點。但如果你感興趣,一定要仔細(xì)閱讀高斯過程和貝葉斯優(yōu)化。
請記住,我們使用這些超參數(shù)調(diào)整算法的原因是,單獨(dú)實際評估多個超參數(shù)選擇是不可行的。例如,假設(shè)我們想要手動找到一個好的學(xué)習(xí)率。這將涉及設(shè)置學(xué)習(xí)率,訓(xùn)練模型,評估它,選擇不同的學(xué)習(xí)率,再次訓(xùn)練你從頭開始模型,重新評估它,并繼續(xù)循環(huán)。
問題是,“訓(xùn)練你的模型”可能需要幾天時間(取決于問題的復(fù)雜性)才能完成。因此,在會議提交截止日期之前,您只能嘗試一些學(xué)習(xí)率。而你知道什么,你甚至沒有開始設(shè)置動量。糟糕極了。
算法:貝葉斯方法試圖建立一個函數(shù)(更準(zhǔn)確地說,是關(guān)于可能函數(shù)的概率分布),用于估計模型對于某個超參數(shù)選擇的好壞程度。通過使用這種近似函數(shù)(在文獻(xiàn)中稱為代理函數(shù)),您不必在設(shè)置、訓(xùn)練、評估的循環(huán)上花費(fèi)太多時間,因為你可以優(yōu)化代理函數(shù)的超參數(shù)。
例如,假設(shè)我們想要最小化此函數(shù)(將其視為模型損失函數(shù)的代理):
代理函數(shù)來自于高斯過程(注意:還有其他方法來模擬代理函數(shù),但我將使用高斯過程)。就像我提到的那樣,我不會做任何數(shù)學(xué)上的重要推導(dǎo),但是所有關(guān)于貝葉斯和高斯的討論歸結(jié)為:
公式看上去很復(fù)雜。但是,讓我們試著理解它。
左側(cè)告訴你涉及概率分布(假設(shè)存在P)。在括號內(nèi)看,我們可以看到它是P的概率分布,這是一個任意的函數(shù)。為什么?請記住,我們正在定義所有可能函數(shù)的概率分布,而不僅僅是特定函數(shù)。本質(zhì)上,左側(cè)表示將超參數(shù)映射到模型的度量的真實函數(shù)(如驗證準(zhǔn)確性,對數(shù)似然,測試錯誤率等)的概率為Fn(X),給定一些樣本數(shù)據(jù)Xn等于右側(cè)的式子。
現(xiàn)在我們有了優(yōu)化函數(shù),就開始進(jìn)行優(yōu)化吧。
以下是在開始優(yōu)化過程之前高斯過程的樣子?
在利用兩個數(shù)據(jù)點迭代之前的高斯過程。
使用你最喜歡的優(yōu)化器(大佬們一般喜歡最大化預(yù)期改善),但其實只需跟著信號(或梯度)引導(dǎo),你還沒有反應(yīng)過來的時候就已經(jīng)得到局部最小值。
經(jīng)過幾次迭代后,高斯過程在近似目標(biāo)函數(shù)方面變得更好:
在利用兩個數(shù)據(jù)點迭代三次之后的高斯過程。
無論你使用哪種方法,你現(xiàn)在都找到了代理函數(shù)最小化時的參數(shù)。那些最小化代理函數(shù)的參數(shù)居然是最優(yōu)超參數(shù)(的估計)哦!好極了。
最終結(jié)果應(yīng)如下所示:
在利用兩個數(shù)據(jù)點迭代七次之后的高斯過程。
使用這些“最佳”超參數(shù)你的神經(jīng)網(wǎng)絡(luò)上進(jìn)行訓(xùn)練,你應(yīng)該會看到一些改進(jìn)。但是,你也可以使用這些新信息重新一次又一次地重做整個貝葉斯優(yōu)化過程。你可以想跑多少次這一貝葉斯循環(huán)就跑多少次,但還是要謹(jǐn)慎行事。你實際上在“跑錢”。你不要忘了AWS又不是免費(fèi)的。
優(yōu)點:貝葉斯優(yōu)化比網(wǎng)格搜索和隨機(jī)搜索提供更好的結(jié)果。
缺點:并行化并不容易。
我應(yīng)該使用它嗎:在大多數(shù)情況下,是的!唯一的例外是如果:
你是一個深度學(xué)習(xí)專家,你不需要一個微不足道的近似算法幫忙。
你擁有龐大的計算資源,并可以大規(guī)模并行化網(wǎng)格搜索和隨機(jī)搜索。
如果你是一個頻率論者/反貝葉斯統(tǒng)計書呆子。
尋找良好學(xué)習(xí)率的可選方法
我們到目前為止看到的所有方法有一個隱含主題:自動化機(jī)器學(xué)習(xí)工程師的活兒。這確實很有用很厲害——直到你的老板聽說了之后決定用4個RTX Titan卡取代你。呵呵。你本應(yīng)該堅持用手動搜索的。
不過不要擔(dān)心啊,還是有些關(guān)于讓研究者少干點活但是多拿點錢的活躍研究呢。其中一個效果非常好的想法是學(xué)習(xí)率范圍測試,據(jù)我所知,這首先出現(xiàn)在Leslie Smith的論文中。
這篇論文實際上是關(guān)于一種隨時間調(diào)度(改變)學(xué)習(xí)率的方法。LR(Learning Rate,學(xué)習(xí)率)范圍測試只是個作者一不小心遺落在一旁的大寶貝。
當(dāng)你使用那種學(xué)習(xí)速率可以從最小值取到最大值的學(xué)習(xí)速率計劃時(例如循環(huán)學(xué)習(xí)速率或具有熱重啟動的隨機(jī)梯度下降),作者建議在每次迭代之后將學(xué)習(xí)速率從小數(shù)值線性增加到大數(shù)值(例如,1e-7到1e-1),評估每次迭代時的損失,并在對數(shù)刻度上繪制損失(或測試誤差,或準(zhǔn)確度)與學(xué)習(xí)率的關(guān)系。你的圖像看起來應(yīng)該是這樣的:
如圖所示,你可以設(shè)置學(xué)習(xí)率在最小和最大學(xué)習(xí)率之間變化,這可以通過在圖像上肉眼觀察最陡梯度區(qū)域來找到。
Colab Notebook上畫的LR范圍測試圖(CIFAR10上訓(xùn)練的DenseNet):
ColabNotebook
https://colab.research.google.com/gist/iyaja/988df5818fd887cc7542074ea2bfb74e/fastai-imagefolder-playground.ipynb
在CIFAR10數(shù)據(jù)集上訓(xùn)練的DenseNet 201的學(xué)習(xí)率范圍測試
根據(jù)經(jīng)驗,如果你沒有做任何花哨的學(xué)習(xí)率安排的話,那么只需將你的恒定學(xué)習(xí)率設(shè)置為低于繪圖上最小值的數(shù)量級即可。在這種情況下大約就是1e-2。
這種方法最酷地方在于,它很好用很省時省心省計算力,它幾乎不需要任何額外的計算。
其他算法——即網(wǎng)格搜索、隨機(jī)搜索和貝葉斯優(yōu)化——要求你運(yùn)行與訓(xùn)練良好神經(jīng)網(wǎng)絡(luò)目標(biāo)相關(guān)的整個項目。LR范圍測試只是執(zhí)行簡單定期的訓(xùn)練循環(huán),并保持跟蹤一些變量。
最佳學(xué)習(xí)率擬合的模型的損失與batch大小圖
LR范圍測試已經(jīng)由fast.ai團(tuán)隊實施過了。你一定要看看他們實現(xiàn)LR范圍測試的庫(他們稱之為學(xué)習(xí)速率查找器)以及許多其他算法。
對于更復(fù)雜的深度學(xué)習(xí)實踐者
當(dāng)然,所有這些算法——盡管它們都很好——并不總是在實踐中起作用。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時還有許多其他因素需要考慮,例如你將如何預(yù)處理數(shù)據(jù),定義模型,你還需要真的搞定足夠跑這一整個流程的計算力。
Nanonets提供易于使用的API來訓(xùn)練和部署自定義深度學(xué)習(xí)模型。它能負(fù)責(zé)所有的繁重工作,包括數(shù)據(jù)擴(kuò)充,轉(zhuǎn)移學(xué)習(xí),以及超參數(shù)優(yōu)化!
Nanonets在其龐大的GPU集群上使用貝葉斯搜索來找到正確的超參數(shù)集,你壓根不用擔(dān)心得在最新的顯卡上再大花一筆錢啦。
一旦找到最佳模型,Nanonets就會把它放在云端,以便你使用其Web界面測試模型,或使用兩行代碼將其集成到你的程序中。
跟不完美模型說拜拜吧。
結(jié)論
在本文中,我們討論了超參數(shù)和一些優(yōu)化它們的方法。但這一切意味著什么?
隨著人們越來越努力地使AI技術(shù)民主化,自動超參數(shù)調(diào)整可能是朝著正確方向邁出的一步。它允許像你我這樣的普通人在沒有數(shù)學(xué)博士學(xué)位的情況下構(gòu)建厲害的深度學(xué)習(xí)應(yīng)用程序。
雖然你可能會認(rèn)為,讓模型重度依賴于計算立會導(dǎo)致只有那些能夠承受如此計算力的人群獲得最好的模型,但像AWS和Nanonets這樣的云服務(wù)有助于實現(xiàn)我們普通民眾對強(qiáng)大機(jī)器計算力的訪問、使深度學(xué)習(xí)更容易普及。
但更重要的是,我們真正在這里做什么——用數(shù)學(xué)來解決更多的數(shù)學(xué)。這很有意思,不僅因為聽起來很酷炫啦,還因為它真的很容易被錯誤解釋。
從打孔卡和excel表時代,到我們”優(yōu)化優(yōu)化函數(shù)的函數(shù)以優(yōu)化函數(shù)“的時代,我們已經(jīng)走過了漫長的道路。但是,我們依然無法建造能夠自己“思考”的機(jī)器。
這一點都不令人沮喪,因為如果人類用這么少的東西就能夠做到這個高度的話,當(dāng)我們的愿景變成我們實際可以看到的東西時,想象一下未來會怎樣吧!
我們坐在一張襯墊網(wǎng)椅上,盯著一個空白的終端屏幕——每個按鍵都能給我們一個可以擦干凈磁盤的sudo指令。
我們會整天坐在那里一動不動——因為下一個重大突破和我們可能只差一條pip install哦。
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1867瀏覽量
33114 -
ai技術(shù)
+關(guān)注
關(guān)注
1文章
1308瀏覽量
25174
原文標(biāo)題:如何優(yōu)化深度學(xué)習(xí)模型
文章出處:【微信號:BigDataDigest,微信公眾號:大數(shù)據(jù)文摘】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
labview調(diào)用yolo 目標(biāo)檢測速度太慢?yolov4:速度和精度的完美結(jié)合,性能和精度碾壓yolov3
深度學(xué)習(xí)模型是如何創(chuàng)建的?
晶心科技和Deeplite攜手合作高度優(yōu)化深度學(xué)習(xí)模型解決方案
深度神經(jīng)網(wǎng)絡(luò)模型的壓縮和優(yōu)化綜述

什么是深度學(xué)習(xí)中優(yōu)化算法

大模型為什么是深度學(xué)習(xí)的未來?
基于深度學(xué)習(xí)的情感語音識別模型優(yōu)化策略
如何優(yōu)化深度學(xué)習(xí)模型?

評論