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