【DL碎片4】深度學(xué)習(xí)中的的超參數(shù)調(diào)節(jié)

深度學(xué)習(xí)中的的超參數(shù)調(diào)節(jié)

我們平時一直都在說“調(diào)參、調(diào)參”,但實際上,不是調(diào)“參數(shù)”,而是調(diào)“超參數(shù)”。

一、參數(shù)(Parameter)和超參數(shù)(HyperParameter)是指什么呢?

參數(shù)是我們訓(xùn)練神經(jīng)網(wǎng)絡(luò) 最終要學(xué)習(xí)的目標(biāo),最基本的就是神經(jīng)網(wǎng)絡(luò)的權(quán)重 W和bias b,我們訓(xùn)練的目的,就是要找到一套好的模型參數(shù),用于預(yù)測未知的結(jié)果。這些參數(shù)我們是不用調(diào)的,是模型來訓(xùn)練的過程中自動更新生成的。

超參數(shù)是我們控制我們模型結(jié)構(gòu)、功能、效率等的 調(diào)節(jié)旋鈕,具體有哪些呢:

  • learning rate
  • epochs(迭代次數(shù),也可稱為 num of iterations)
  • num of hidden layers(隱層數(shù)目)
  • num of hidden layer units(隱層的單元數(shù)/神經(jīng)元數(shù))
  • activation function(激活函數(shù))
  • batch-size(用mini-batch SGD的時候每個批量的大小)
  • optimizer(選擇什么優(yōu)化器,如SGD、RMSProp、Adam)
  • 用諸如RMSProp、Adam優(yōu)化器的時候涉及到的β1,β2等等
  • ......

太多了,上面是一些最常見的超參數(shù),一般的深度學(xué)習(xí)框架就是調(diào)節(jié)這些玩意兒。

具體怎么調(diào)節(jié),在不同的場景中基本都不同,沒有統(tǒng)一的標(biāo)準(zhǔn)說learning rate取多少比較好、epochs多少比較好,都是在在實際情況中反復(fù)試驗的。當(dāng)然,如果我們可以借鑒一些知名的項目的超參數(shù)的選擇,來應(yīng)用到我們類似的項目中去。


二、用什么方法來選擇“(超)參數(shù)組合”呢?

hyperparameters眾多,每一個hyperparameter有多種取法,這就是一個 組合問題了。
比如我們需要對兩個超參數(shù)進(jìn)行調(diào)節(jié),可能會想到用 “網(wǎng)格法”

網(wǎng)格法

這種方法有個很大的缺陷,主要是由 “不同的超參數(shù)的重要性/作用效果有區(qū)別”導(dǎo)致的。

比如,假設(shè)在某個問題中,上面的Hyper1的作用其實微乎其微,而Hyper2的改變對模型的效果很明顯。那么,由網(wǎng)格法可知,H1和H2的組合有25種,我們需要試驗25次。但是實際上呢,由于H1基本不起作用,我們相當(dāng)于只進(jìn)行了5次試驗。
換句話說, 我們花了25次試驗的時間,只做了5次試驗。顯然效率低下。

事實上,不同超參數(shù)的效果有區(qū)別是很常見的,所以用網(wǎng)格法會浪費我們大量的時間和資源。

因此,我們最好在兩個參數(shù)構(gòu)成的矩形內(nèi),隨機(jī)取樣,理想狀態(tài)下,任何兩點都不同行不同列

隨機(jī)取樣法

具體方法為:

  1. 在大范圍內(nèi)隨機(jī)取樣
  2. 在效果較好的幾個點的附近,再劃分較小區(qū)域,在其中再進(jìn)行隨機(jī)取樣
  3. 重復(fù)上述過程

這樣做的好處是,可以保證沒有浪費的試驗,同時可以迅速鎖定最優(yōu)區(qū)域,更快地找到最佳的超參數(shù)組合。


三、用合適的尺度(scale)來選擇超參數(shù)

上面我們解決了如何選擇組合的方法問題,但是具體 對于每一個超參數(shù),應(yīng)該在怎樣的一個尺度上進(jìn)行劃分呢?

一般從經(jīng)驗上講,我們可能會直接 “均勻采樣(uniformly)”,就是用均勻分布去選擇各個候選的超參數(shù)。然而,這里直接給出結(jié)論,這樣 意義不大! 比如下面這種對學(xué)習(xí)率的在0~1上以0.1為尺度來采樣:

對learning rate均勻采樣,沒有意義

實際上效果是極差的。也許你會發(fā)現(xiàn),對所有的點,試驗的效果都是類似的。
為什么呢?(實際上,learning rate基本不會取大于0.1的值,因為太大了,梯度下降根本沒法有效進(jìn)行)

因為像這種超參數(shù),我們在調(diào)節(jié)的時候,更關(guān)注的不是實際的數(shù)值,而是變化的程度。

例如,learning rate 從0.001到0.1,擴(kuò)大了100倍,實際梯度下降中每一步都比之前增大了100倍。但是,從0.1到1雖然實際的數(shù)值差比0.001到0.1的距離要大的多,但是實際的變化量最多就10倍。

因此,我們做實驗就可以發(fā)現(xiàn),0.001到0.1這個范圍內(nèi),learning rate極為敏感,也許一個小小的改變就可以讓我們的梯度下降cost曲線大有不同,但是從0.1到1,cost曲線也許基本沒有變化。

更好的辦法,是 在對數(shù)尺度上隨機(jī)取樣

對數(shù)尺度上取樣

可以看到,這把“尺子”的每個刻度都是相差十倍的關(guān)系,我們的learning rate在這個尺度上進(jìn)行隨機(jī)采樣,就可以得到很好的效果,盡快地找到最佳的超參數(shù)。

為啥這個是對數(shù)尺度呢?
不妨將取樣的區(qū)間定義為[10a,10b],
但是,learning rate不是在上述區(qū)間均勻取樣,而是令 learning rate=10r,讓r在[a,b]內(nèi)均勻取樣。而r=log(learning rate).
因此稱這種取樣為log尺度取樣。

通常,像learning rate這種連續(xù)性的超參數(shù),都會在某一端特別敏感,learning rate本身在 靠近0的區(qū)間會非常敏感,因此我們一般在靠近0的區(qū)間會多采樣。

類似的,動量法梯度下降中(SGD with Momentum)有一個重要的超參數(shù) β,β越大,動量越大,因此 β在靠近1的時候非常敏感,因此一般取值在0.9~0.999.


四、訓(xùn)練模型的兩種方式

吳恩達(dá)很形象地用兩種動物來形容在實踐中我們訓(xùn)練一個模型的兩種方法:
熊貓法(Panda) VS. 魚子醬法(Caviar)

熊貓法:

當(dāng)我們訓(xùn)練一個很大的模型,但是計算資源又沒有那么多的時候,我們會很珍惜我們的訓(xùn)練機(jī)會,通常會像照顧一個熊貓一樣去照顧我們的模型的訓(xùn)練過程。

具體來說,我們先初始化一組超參數(shù),然后每訓(xùn)練一段時間,比如一天,就趕緊去看看進(jìn)展如何,是否按照我們預(yù)想的方向發(fā)展,然后做一定的微調(diào),接著訓(xùn)練,保持觀察;如果發(fā)現(xiàn)偏離了方向,趕緊對超參數(shù)進(jìn)行調(diào)整。就這樣,一天天地照看,直到最后達(dá)到我們的訓(xùn)練目標(biāo)。

可以用下面的圖來表示:


熊貓法

如圖所示,每一天我們觀察一次效果,并做微調(diào)??梢钥吹剑叭於疾诲e,第四天突然走偏了,于是我們趕緊退回到D3的節(jié)點,調(diào)整參數(shù)重新訓(xùn)練,讓它回到正軌。
這就跟熊貓的養(yǎng)成一樣,熊貓每次只能生一個,而且存活率也很低,所以我們必須特別小心地看護(hù)。

魚子醬法

魚產(chǎn)卵一次就是一大坨,成千上萬個小孩生出來,生死由命。
如果我們的計算資源足夠豐富,可以同時訓(xùn)練多個模型,那么我們就可以用魚子醬法:


魚子醬法

我們直接丟一堆超參數(shù)組合的模型去訓(xùn)練,然后不管了,最后看看誰的效果最好就選擇誰。

對于這兩種方式怎么選擇,當(dāng)然是看具體的情況了,一般情況話,訓(xùn)練一個大模型的時候,我們沒有那么壕,所以小心翼翼地去像照顧熊貓一樣去調(diào)節(jié)我們的模型可能更常見一些。


好了,關(guān)于超參數(shù)調(diào)節(jié)(Hyperparameters tuning)的內(nèi)容就差不多這些。具體的細(xì)節(jié)還是需要我們在實踐中不斷去嘗試,以及可以多看看一些成功的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)都是怎么設(shè)置的,作為借鑒。

歡迎關(guān)注我的專欄:
DeepLearning.ai學(xué)習(xí)筆記
和我一起一步步學(xué)習(xí)深度學(xué)習(xí)。
專欄其他文章:
【DL筆記1】Logistic回歸:最基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)
【DL筆記2】神經(jīng)網(wǎng)絡(luò)編程原則&Logistic Regression的算法解析
【DL筆記3】一步步親手用python實現(xiàn)Logistic Regression
【DL筆記4】神經(jīng)網(wǎng)絡(luò)詳解,正向傳播和反向傳播
【DL碎片1】神經(jīng)網(wǎng)絡(luò)參數(shù)初始化的學(xué)問
【DL碎片2】神經(jīng)網(wǎng)絡(luò)中的優(yōu)化算法
【DL碎片3】神經(jīng)網(wǎng)絡(luò)中的激活(Activation)函數(shù)及其對比

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章主要分為:一、深度學(xué)習(xí)概念;二、國內(nèi)外研究現(xiàn)狀;三、深度學(xué)習(xí)模型結(jié)構(gòu);四、深度學(xué)習(xí)訓(xùn)練算法;五、深度學(xué)習(xí)的優(yōu)點...
    艾剪疏閱讀 22,216評論 0 58
  • A 準(zhǔn)確率(accuracy) 分類模型預(yù)測準(zhǔn)確的比例。在多類別分類中,準(zhǔn)確率定義如下: 在二分類中,準(zhǔn)確率定義為...
    小小孩兒的碎碎念閱讀 2,765評論 0 9
  • 五、Deep Learning的基本思想 假設(shè)我們有一個系統(tǒng)S,它有n層(S1,…Sn),它的輸入是I,輸出是O,...
    dma_master閱讀 1,925評論 1 2
  • 隨著節(jié)奏起伏的身體,和音樂融為一體 踩著節(jié)拍,一起搖擺 看我玩世不恭 痛快一場 哪怕已經(jīng)重復(fù)一萬次,聽到熟悉的節(jié)奏...
    qu溜達(dá)溜達(dá)閱讀 259評論 1 0
  • 我們的小時候,沒有手機(jī),沒有電腦,沒有網(wǎng)絡(luò),卻依然玩得很開心。 抓迷藏想盡一切辦法,找到藏身的地方,心里默默竊喜:...
    逢生_a71e閱讀 1,031評論 0 0

友情鏈接更多精彩內(nèi)容