2.3)深度学习笔记:超参数调试、Batch正则化和程序框架
目錄
1)Tuning Process
2)Using an appropriate scale to pick hyperparameters
3)Hyperparameters tuning in practice: Pandas vs. Caviar
4)Normalizing activations in a network(重點(diǎn))
5)Fitting Batch Norm into a neural network
6)Why does Batch Norm work?
7)Batch Norm at test time
8)?Softmax Regression
9)?Training a softmax classifier
10)Deep learning frameworks
11)TensorFlow
12)Summary
以下筆記是吳恩達(dá)老師深度學(xué)習(xí)課程第二門課第三周的的學(xué)習(xí)筆記:Hyperparameter tuning。筆記參考了黃海廣博士的內(nèi)容,在此表示感謝。
本周課程,重點(diǎn)介紹了三個(gè)方面的內(nèi)容:超參數(shù)調(diào)試、Batch正則化和深度學(xué)習(xí)程序框架。
1)Tuning Process
深度神經(jīng)網(wǎng)絡(luò)調(diào)試時(shí)會遇到許多超參數(shù)(Hyperparameters),具體有:
:學(xué)習(xí)因子(第一重要)
β:動量梯度下降算法參數(shù)(默認(rèn)為0.9)
:Adam算法參數(shù)(默認(rèn)為0.9,0.999,)
layers:神經(jīng)網(wǎng)絡(luò)層數(shù)
hidden units:隱藏層神經(jīng)元個(gè)數(shù)
learning rate decay:學(xué)習(xí)因子下降參數(shù)
mini-batch size:批量訓(xùn)練樣本包含的樣本個(gè)數(shù)
在實(shí)際訓(xùn)練模型中如何選擇和調(diào)試超參數(shù)呢?傳統(tǒng)做法為對每個(gè)參數(shù)等距離選取任意個(gè)數(shù)的點(diǎn),然后,分別使用不同點(diǎn)對應(yīng)的參數(shù)組合進(jìn)行訓(xùn)練,最后根據(jù)驗(yàn)證集上的表現(xiàn)好壞,來選定最佳的參數(shù)。例如有兩個(gè)待調(diào)試的參數(shù),分別在每個(gè)參數(shù)上選取5個(gè)點(diǎn),這樣構(gòu)成了5x5=25中參數(shù)組合,如下圖所示:
這種做法在參數(shù)比較少的時(shí)候效果較好。但是在深度神經(jīng)網(wǎng)絡(luò)模型中,一般不采用這種均勻取點(diǎn)的方法,比較好的做法是使用隨機(jī)選擇。也就是說,對于上面這個(gè)例子,隨機(jī)選擇25個(gè)點(diǎn),作為待調(diào)試的超參數(shù),如下圖所示:
隨機(jī)化選擇參數(shù)的目的是為了盡可能地得到更多種參數(shù)組合。如果使用均勻采樣的話,每個(gè)參數(shù)只有5種情況;而使用隨機(jī)采樣的話,每個(gè)參數(shù)有25種可能的情況,因此更有可能得到最佳的參數(shù)組合。
這種做法帶來的另外一個(gè)好處就是對重要性不同的參數(shù)之間的選擇效果更好。假設(shè)hyperparameter1為α,hyperparameter2為ε,顯然二者的重要性是不一樣的。如果使用第一種均勻采樣的方法,εε的影響很小,相當(dāng)于只選擇了5個(gè)α值。而如果使用第二種隨機(jī)采樣的方法,ε和α都有可能選擇25種不同值。這大大增加了α調(diào)試的個(gè)數(shù),更有可能選擇到最優(yōu)值。
在經(jīng)過隨機(jī)采樣之后,我們可能得到某些區(qū)域模型的表現(xiàn)較好。然而,為了得到更精確的最佳參數(shù),我們應(yīng)該繼續(xù)對選定的區(qū)域進(jìn)行由粗到細(xì)的采樣(coarse to fine sampling scheme)。也就是放大表現(xiàn)較好的區(qū)域,再對此區(qū)域做更密集的隨機(jī)采樣。
2)Using an appropriate scale to pick hyperparameters
隨機(jī)取值可以提升你的搜索效率。但隨機(jī)取值并不是在有效范圍內(nèi)的隨機(jī)均勻取值,而是選擇合適的標(biāo)尺,用于探究這些超參數(shù),這很重要。
對于像神經(jīng)網(wǎng)絡(luò)層數(shù)和隱藏層神經(jīng)元個(gè)數(shù)這樣的超參數(shù)可以采用隨機(jī)均勻取值的方法,但是對于學(xué)習(xí)率這樣的超參數(shù),假設(shè)其取值范圍在(0.0001,1)之間,畫一條數(shù)軸的話,其90%的數(shù)值將會落在(0.1,1)之間,而在(0.0001,0.1)之間只占有10%的資源,這看上去不太合理。
反而,使用對數(shù)標(biāo)尺搜索超參數(shù)的方式會更合理,分別依次抽取0.0001,0.001,0.01,0.1,1,在對數(shù)軸上隨機(jī)取點(diǎn)。在Python中我們可以將對數(shù)坐標(biāo)下最小值設(shè)為a,最大值設(shè)為b,在a,b間隨意均勻的選取r(random)值,再將超參數(shù)設(shè)為,代碼如下:
r = np.random.rand() r = a + (b-a)*r r = np.power(10,r)除了α之外,動量梯度因子β也是一樣,在超參數(shù)調(diào)試的時(shí)候也需要進(jìn)行非均勻采樣。一般β的取值范圍在(0.9, 0.999)之間,那么1?β的取值范圍就在[0.001, 0.1]之間。那么直接對1?β在[0.001, 0.1]區(qū)間內(nèi)進(jìn)行l(wèi)og變換即可。
3)(Hyperparameters tuning in practice: Pandas vs. Caviar)
經(jīng)過調(diào)試選擇完最佳的超參數(shù)并不是一成不變的,一段時(shí)間之后(例如一個(gè)月),需要根據(jù)新的數(shù)據(jù)和實(shí)際情況,再次調(diào)試超參數(shù),以獲得實(shí)時(shí)的最佳模型。
在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí),一種情況是受計(jì)算能力所限,我們只能對一個(gè)模型進(jìn)行訓(xùn)練,調(diào)試不同的超參數(shù),使得這個(gè)模型有最佳的表現(xiàn)。我們稱之為Babysitting one model。另外一種情況是可以對多個(gè)模型同時(shí)進(jìn)行訓(xùn)練,每個(gè)模型上調(diào)試不同的超參數(shù),根據(jù)表現(xiàn)情況,選擇最佳的模型。我們稱之為Training many models in parallel。使用哪種模型是由計(jì)算資源、計(jì)算能力所決定的。
4)Normalizing activations in a network(重點(diǎn))
在深度學(xué)習(xí)興起后,最重要的一個(gè)思想是它的一種算法,叫做 Batch 歸一化,由 Sergey loffe 和 Christian Szegedy 兩位研究者創(chuàng)造。Batch 歸一化會使你的參數(shù)搜索問題變得很容易,使神經(jīng)網(wǎng)絡(luò)對超參數(shù)的選擇更加穩(wěn)定,超參數(shù)的范圍會更加龐大,工作效果也很好。
當(dāng)訓(xùn)練一個(gè)模型,比如 logistic 回歸時(shí),你也許會記得,歸一化輸入特征可以加快學(xué)習(xí)過程。首先計(jì)算平均值,從訓(xùn)練集中減去平均值,再計(jì)算方差,接著根據(jù)方差歸一化數(shù)據(jù)集。但是對于深度神經(jīng)網(wǎng)絡(luò)來說,不僅需要?dú)w一化輸入特征值,而且每層還有激活值,是否歸一化激活值可以加快參數(shù)的訓(xùn)練?在實(shí)際應(yīng)用中,一般是對進(jìn)行標(biāo)準(zhǔn)化處理而不是。
Batch Normalization對第層隱藏層的輸入做如下標(biāo)準(zhǔn)化處理,這里忽略上標(biāo):
這里為了防止為0,我們引入一個(gè)常數(shù)。但是,大部分情況下并不希望所有的均值都為0,方差都為1。通常需要對進(jìn)行進(jìn)一步處理:
式中為學(xué)習(xí)參數(shù),也可以通過梯度下降算法等求得。這里,的作用是讓的均值和方差為任意值,只需調(diào)整其值就可以了。例如,令
則?。但是輸入層的標(biāo)準(zhǔn)化處理和隱藏層的標(biāo)準(zhǔn)化處理是有區(qū)別的,一般輸入層的標(biāo)準(zhǔn)化處理后均值為0,方差為1,而隱藏層我們希望得到非線性輸出,則希望歸一化處理后不再線性區(qū)域內(nèi)。
5)Fitting Batch Norm into a neural network
對于L層神經(jīng)網(wǎng)絡(luò),經(jīng)過Batch Norm的作用,整體流程如下:
Batch 歸一化是發(fā)生在計(jì)算之間的。和等參數(shù)一樣,我們也可以用前面學(xué)到梯度下降算法,RMSprop和Adam等優(yōu)化算法來迭代。
6)Why does Batch Norm work?
我們可以把輸入特征做均值為0,方差為1的規(guī)范化處理,來加快學(xué)習(xí)速度。而Batch Norm也是對隱藏層各神經(jīng)元的輸入做類似的規(guī)范化處理。總的來說,Batch Norm不僅能夠提高神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度,而且能讓神經(jīng)網(wǎng)絡(luò)的權(quán)重W的更新更加“穩(wěn)健”,尤其在深層神經(jīng)網(wǎng)絡(luò)中更加明顯。
舉個(gè)例子來說明,假如用一個(gè)淺層神經(jīng)網(wǎng)絡(luò)來訓(xùn)練識別貓的模型。如下圖所示,提供的所有貓的訓(xùn)練樣本都是黑貓。然后,用這個(gè)訓(xùn)練得到的模型來對各種顏色的貓樣本進(jìn)行測試,測試的結(jié)果可能并不好。其原因是訓(xùn)練樣本不具有一般性(即不是所有的貓都是黑貓),這種訓(xùn)練樣本(黑貓)和測試樣本(貓)分布的變化稱之為covariate shift。
對于這種情況,如果實(shí)際應(yīng)用的樣本與訓(xùn)練樣本分布不同,即發(fā)生了covariate shift,則一般是要對模型重新進(jìn)行訓(xùn)練的。在神經(jīng)網(wǎng)絡(luò),尤其是深度神經(jīng)網(wǎng)絡(luò)中,covariate shift會導(dǎo)致模型預(yù)測效果變差。而Batch Norm的作用恰恰是減小covariate shift的影響,讓模型變得更加健壯,魯棒性更強(qiáng)。Batch Norm減少了各層之間的耦合性,讓各層更加獨(dú)立,實(shí)現(xiàn)自我訓(xùn)練學(xué)習(xí)的效果。也就是說,如果輸入發(fā)生covariate shift,那么因?yàn)锽atch Norm的作用,對個(gè)隱藏層輸出進(jìn)行均值和方差的歸一化處理。
從另一個(gè)方面來說,Batch Norm也起到輕微的正則化(regularization)效果。具體表現(xiàn)在:
- 每個(gè)mini-batch都進(jìn)行均值為0,方差為1的歸一化操作
- 每個(gè)mini-batch中,對各個(gè)隱藏層的添加了隨機(jī)噪聲,效果類似于Dropout
- mini-batch越小,正則化效果越明顯
但是,Batch Norm的正則化效果比較微弱,正則化也不是Batch Norm的主要功能。
7)Batch Norm at test time
Batch 歸一化將你的數(shù)據(jù)以 mini-batch 的形式逐一處理,但在測試時(shí),你可能需要對每個(gè)樣本逐一處理,我們來看一下怎樣調(diào)整你的網(wǎng)絡(luò)來做到這一點(diǎn)。
首先,回顧一下訓(xùn)練過程中Batch Norm的主要過程:?
在測試時(shí),如果你只有一個(gè)樣本,一個(gè)樣本的均值和方差沒有意義。那么實(shí)際上,為了將你的神經(jīng)網(wǎng)絡(luò)運(yùn)用于測試,就需要單獨(dú)估算,在典型的 Batch 歸一化運(yùn)用中,你需要用一個(gè)指數(shù)加權(quán)平均來估算,這個(gè)平均數(shù)涵蓋了所有 mini-batch。
指數(shù)加權(quán)平均的做法很簡單,對于第層隱藏層,考慮所有mini-batch在該隱藏層下的和,然后用指數(shù)加權(quán)平均的方式來預(yù)測得到當(dāng)前單個(gè)樣本的和。這樣就實(shí)現(xiàn)了對測試過程單個(gè)樣本的均值和方差估計(jì)。最后再用訓(xùn)練時(shí)得到的參數(shù)值來計(jì)算各層的輸出值。
8)?Softmax Regression
目前我們介紹的都是二分類問題,神經(jīng)網(wǎng)絡(luò)輸出層只有一個(gè)神經(jīng)元。
對于多分類問題,用C表示種類個(gè)數(shù),神經(jīng)網(wǎng)絡(luò)中輸出層就有C個(gè)神經(jīng)元,即,其中,每個(gè)神經(jīng)元的輸出依次對應(yīng)屬于該類的概率,即。了處理多分類問題,我們一般使用Softmax回歸模型。Softmax回歸模型輸出層的激活函數(shù)如下所示:
輸出層每個(gè)神經(jīng)元的輸出對應(yīng)屬于該類的概率,滿足:,典型分類例子如下圖所示:
9)?Training a softmax classifier
Softmax classifier的訓(xùn)練過程與我們之前介紹的二元分類問題有所不同。先來看一下softmax classifier的損失函數(shù)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中,單個(gè)樣本的代價(jià)函數(shù)為:
softmax的反向傳播過程也可以使用梯度下降算法。推到結(jié)果與二元分類結(jié)果一樣。
10)Deep learning frameworks
深度學(xué)習(xí)框架有很多,本課程用到了以下兩類框架:
TensorFlow
Keras
11)TensorFlow
關(guān)于TensorFlow更多的原理和編程技巧這里就不在贅述了,現(xiàn)在最新版TensorFlow2.0已經(jīng)發(fā)布了,感興趣的朋友可以關(guān)注更詳細(xì)的TensorFlow相關(guān)文檔。
12)Summary
本周課程主要介紹了:
- 超參數(shù)的的調(diào)試處理,參數(shù)選擇的優(yōu)先級,以及選擇合適的區(qū)間范圍;
- 隱藏層的歸一化處理;
- Softmax分類器;
- 以及介紹了本課程中用到的深度學(xué)習(xí)框架。
總結(jié)
以上是生活随笔為你收集整理的2.3)深度学习笔记:超参数调试、Batch正则化和程序框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: plauto.exe是什么进程 plau
- 下一篇: 4.4)深度卷积网络:人脸识别和神经风格