BN与神经网络调优
學(xué)習(xí)目標(biāo)
- 目標(biāo)
- 知道常用的一些神經(jīng)網(wǎng)絡(luò)超參數(shù)
- 知道BN層的意義以及數(shù)學(xué)原理
- 應(yīng)用
- 無(wú)
2.4.1 神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu)
我們經(jīng)常會(huì)涉及到參數(shù)的調(diào)優(yōu),也稱之為超參數(shù)調(diào)優(yōu)。目前我們從第二部分中講過(guò)的超參數(shù)有
-
算法層面:
-
學(xué)習(xí)率\alphaα
-
\beta1,\beta2, \epsilonβ1,β2,?: Adam 優(yōu)化算法的超參數(shù),常設(shè)為 0.9、0.999、10^{-8}10??8??
- \lambdaλ:正則化網(wǎng)絡(luò)參數(shù),
-
-
網(wǎng)絡(luò)層面:
- hidden units:各隱藏層神經(jīng)元個(gè)數(shù)
- layers:神經(jīng)網(wǎng)絡(luò)層數(shù)
2.4.1.1 調(diào)參技巧
對(duì)于調(diào)參,通常采用跟機(jī)器學(xué)習(xí)中介紹的網(wǎng)格搜索一致,讓所有參數(shù)的可能組合在一起,得到N組結(jié)果。然后去測(cè)試每一組的效果去選擇。
假設(shè)我們現(xiàn)在有兩個(gè)參數(shù)
\alphaα: 0.1,0.01,0.001,\betaβ:0.8,0.88,0.9
這樣會(huì)有9種組合,[0.1, 0.8], [0.1, 0.88], [0.1, 0.9]…….
- 合理的參數(shù)設(shè)置
- 學(xué)習(xí)率\alphaα:0.0001、0.001、0.01、0.1,跨度稍微大一些。
- 算法參數(shù)\betaβ, 0.999、0.9995、0.998等,盡可能的選擇接近于1的值
注:而指數(shù)移動(dòng)平均值參數(shù):β 從 0.9 (相當(dāng)于近10天的影響)增加到 0.9005 對(duì)結(jié)果(1/(1-β))幾乎沒(méi)有影響,而 β 從 0.999 到 0.9995 對(duì)結(jié)果的影響會(huì)較大,因?yàn)槭侵笖?shù)級(jí)增加。通過(guò)介紹過(guò)的式子理解S_{100} = 0.1Y_{100} + 0.1 * 0.9Y_{99} + 0.1 * {(0.9)}^2Y_{98} + ...S?100??=0.1Y?100??+0.1?0.9Y?99??+0.1?(0.9)?2??Y?98??+...
2.4.1.2 運(yùn)行
通常我們有這么多參數(shù)組合,每一個(gè)組合運(yùn)行訓(xùn)練都需要很長(zhǎng)時(shí)間,但是如果資源允許的話,可以同時(shí)并行的訓(xùn)練多個(gè)參數(shù)模型,并觀察效果。如果資源不允許的話,還是得一個(gè)模型一個(gè)模型的運(yùn)行,并時(shí)刻觀察損失的變化
所以對(duì)于這么多的超參數(shù),調(diào)優(yōu)是一件復(fù)雜的事情,怎么讓這么多的超參數(shù)范圍,工作效果還能達(dá)到更好,訓(xùn)練變得更容易呢?
2.4.2 批標(biāo)準(zhǔn)化(Batch Normalization)
Batch Normalization論文地址:https://arxiv.org/abs/1502.03167
其中最開(kāi)頭介紹是這樣的:
?
訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)很復(fù)雜,因?yàn)樵谟?xùn)練期間每層輸入的分布發(fā)生變化,因?yàn)榍耙粚拥膮?shù)發(fā)生了變化。這通過(guò)要求較低的學(xué)習(xí)率和仔細(xì)的參數(shù)初始化來(lái)減慢訓(xùn)練速度,并且使得訓(xùn)練具有飽和非線性的模型變得非常困難。我們將這種現(xiàn)象稱為** 內(nèi)部協(xié)變量偏移** ,并通過(guò) **標(biāo)準(zhǔn)化層** 輸入來(lái)解決問(wèn)題。我們的方法的優(yōu)勢(shì)在于使標(biāo)準(zhǔn)化成為模型體系結(jié)構(gòu)的一部分,并為每個(gè)培訓(xùn)小批量執(zhí)行標(biāo)準(zhǔn)化。批量標(biāo)準(zhǔn)化允許我們使用更高的學(xué)習(xí)率并且不太關(guān)心初始化。它還可以充當(dāng)調(diào)節(jié)器,在某些情況下可以消除對(duì)Dropout的需求。應(yīng)用于最先進(jìn)的圖像分類模型,批量標(biāo)準(zhǔn)化實(shí)現(xiàn)了相同的精度,培訓(xùn)步驟減少了14倍,并且顯著地超過(guò)了原始模型。使用批量標(biāo)準(zhǔn)化網(wǎng)絡(luò)的集合,我們改進(jìn)了ImageNet分類的最佳發(fā)布結(jié)果:達(dá)到4.9%的前5個(gè)驗(yàn)證錯(cuò)誤(和4.8%的測(cè)試錯(cuò)誤),超出了人類評(píng)估者的準(zhǔn)確性。
首先我們還是回到之前,我們對(duì)輸入特征 X 使用了標(biāo)準(zhǔn)化處理。標(biāo)準(zhǔn)化化后的優(yōu)化得到了加速。
對(duì)于深層網(wǎng)絡(luò)呢?我們接下來(lái)看一下這個(gè)公式,這是向量的表示。表示每Mini-batch有m個(gè)樣本。
- m個(gè)樣本的向量表示
Z^{[L]} = W^{[L]}A^{[L-1]}+b^{[L]}Z?[L]??=W?[L]??A?[L?1]??+b?[L]??
A^{[L]}=g^{[L]}(Z^{[L]})A?[L]??=g?[L]??(Z?[L]??)
輸入A^{[L-1]}A?[L?1]??, 輸出A^{[L]}A?[L]??
深層網(wǎng)絡(luò)當(dāng)中不止是初始的特征輸入,而到了隱藏層也有輸出結(jié)果,所以我們是否能夠?qū)﹄[層的輸入Z^{[L]}Z?[L]??進(jìn)行標(biāo)準(zhǔn)化,注意這里不是經(jīng)過(guò)激活函數(shù)之后的A^{[L]}A?[L]??
?
2.4.2.1 批標(biāo)準(zhǔn)化公式
所以假設(shè)對(duì)于上圖第二個(gè)四個(gè)神經(jīng)元隱層。記做Z^{[l]}Z?[l]??,那么這一層會(huì)涉及多個(gè)z,所以我們默認(rèn)用z^{[l]}_{[i]}z?[i]?[l]??,為了簡(jiǎn)單顯示去掉了ll層這個(gè)標(biāo)識(shí),所以對(duì)于標(biāo)準(zhǔn)化中的平均值,以及方差
\mu = \frac{1}{m} \sum_i z^{(i)}μ=?m??1??∑?i??z?(i)??
\sigma^2 = \frac{1}{m} \sum_i {(z_i - \mu)}^2σ?2??=?m??1??∑?i??(z?i???μ)?2??
z_{norm}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}}z?norm?(i)??=?√?σ?2??+??????z?(i)???μ??
其中\(zhòng)epsilon?是為了防止分母為0,取值10^{-8}10??8??。這樣使得所有的l層輸入z^{[l]}_{[i]}z?[i]?[l]??為 0,方差為 1。但是原文的作者不想讓隱藏層單元總是含有平均值 0 和方差 1,他認(rèn)為也許隱藏層單元有了不同的分布會(huì)更有意義。因此,我們會(huì)增加這樣的甲酸
\tilde z^{(i)} = \gamma z^{(i)}_{norm} + \beta?z?~???(i)??=γz?norm?(i)??+β
其中,\gammaγ和\betaβ都是模型的學(xué)習(xí)參數(shù)(如同W和b一樣),所以可以用各種梯度下降算法來(lái)更新 γ 和 β 的值,如同更新神經(jīng)網(wǎng)絡(luò)的權(quán)重一樣。
- 為什么要使用這樣兩個(gè)參數(shù)
如果各隱藏層的輸入均值在靠近0的區(qū)域,即處于激活函數(shù)的線性區(qū)域,不利于訓(xùn)練非線性神經(jīng)網(wǎng)絡(luò),從而得到效果較差的模型。因此,需要用 γ 和 β 對(duì)標(biāo)準(zhǔn)化后的結(jié)果做進(jìn)一步處理。
2.4.2.2 過(guò)程圖
?
每一層中都會(huì)有兩個(gè)參數(shù)\beta, \gammaβ,γ。
注:原論文的公式圖
?
2.4.2.2 為什么批標(biāo)準(zhǔn)化能夠是優(yōu)化過(guò)程變得簡(jiǎn)單
我們之前在原文中標(biāo)記了一個(gè)問(wèn)題叫做叫做"internal covariate shift"。這個(gè)詞翻譯叫做協(xié)變量偏移,但是并不是很好理解。那么有一個(gè)解釋叫做?在網(wǎng)絡(luò)當(dāng)中數(shù)據(jù)的分布會(huì)隨著不同數(shù)據(jù)集改變?。這是網(wǎng)絡(luò)中存在的問(wèn)題。那我們一起來(lái)看一下數(shù)據(jù)本身分布是在這里會(huì)有什么問(wèn)題。
?
也就是說(shuō)如果我們?cè)谟?xùn)練集中的數(shù)據(jù)分布如左圖,那么網(wǎng)絡(luò)當(dāng)中學(xué)習(xí)到的分布狀況也就是左圖。那對(duì)于給定一個(gè)測(cè)試集中的數(shù)據(jù),分布不一樣。這個(gè)網(wǎng)絡(luò)可能就不能準(zhǔn)確去區(qū)分。這種情況下,一般要對(duì)模型進(jìn)行重新訓(xùn)練。
Batch Normalization的作用就是減小Internal Covariate Shift 所帶來(lái)的影響,讓模型變得更加健壯,魯棒性(Robustness)更強(qiáng)。即使輸入的值改變了,由于 Batch Normalization 的作用,使得均值和方差保持固定(由每一層\gammaγ和\betaβ決定),限制了在前層的參數(shù)更新對(duì)數(shù)值分布的影響程度,因此后層的學(xué)習(xí)變得更容易一些。Batch Normalization 減少了各層 W 和 b 之間的耦合性,讓各層更加獨(dú)立,實(shí)現(xiàn)自我訓(xùn)練學(xué)習(xí)的效果
2.4.2.3 BN總結(jié)
Batch Normalization 也起到微弱的正則化效果,但是不要將 Batch Normalization 作為正則化的手段,而是當(dāng)作加速學(xué)習(xí)的方式。Batch Normalization主要解決的還是反向傳播過(guò)程中的梯度問(wèn)題(梯度消失和爆炸)。
2.4.3 總結(jié)
- 掌握基本的超參數(shù)以及調(diào)參技巧
- 掌握BN的原理以及作用
總結(jié)
- 上一篇: Lumen报class does not
- 下一篇: 图像数据与边缘检测