1. 介紹BN。
BN動(dòng)機(jī):神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程的本質(zhì)是學(xué)習(xí)數(shù)據(jù)分布
,如果訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同將大大降低網(wǎng)絡(luò)的泛化性能,因此我們需要在訓(xùn)練開(kāi)始前對(duì)所有輸入數(shù)據(jù)進(jìn)行歸一化處理。(參數(shù)變化后使得后一層的輸入發(fā)生變化色解,每一批次訓(xùn)練數(shù)據(jù)的分布不一致,致使網(wǎng)絡(luò)在每次迭代中都需要擬合不同的數(shù)據(jù)分布餐茵,增大訓(xùn)練的復(fù)雜度以及過(guò)擬合的風(fēng)險(xiǎn)。)
- 為了解決網(wǎng)絡(luò)中數(shù)據(jù)分布變化大述吸,學(xué)習(xí)過(guò)程慢的問(wèn)題忿族。
- 采用標(biāo)準(zhǔn)化,并引入兩個(gè)可學(xué)習(xí)的參數(shù)來(lái)重建淺層網(wǎng)絡(luò)學(xué)到的分布蝌矛。
(變換重構(gòu))
2. 了解BN嗎道批?
- 為了解決網(wǎng)絡(luò)中數(shù)據(jù)分布變化大,學(xué)習(xí)過(guò)程慢的問(wèn)題入撒。
- 采用標(biāo)準(zhǔn)化隆豹,并引入兩個(gè)可學(xué)習(xí)的參數(shù)來(lái)重建淺層網(wǎng)絡(luò)學(xué)到的分布
(變換重構(gòu))
。
3. BN的原理茅逮、作用以及訓(xùn)練測(cè)試時(shí)的不同璃赡。
# BN計(jì)算步驟:
1.計(jì)算樣本均值。
2.計(jì)算樣本方差献雅。
3.樣本數(shù)據(jù)標(biāo)準(zhǔn)化處理碉考。
4.進(jìn)行平移和縮放處理。引入了γ和β兩個(gè)參數(shù)挺身。來(lái)訓(xùn)練γ和β兩個(gè)參數(shù)侯谁。引入了這個(gè)可學(xué)習(xí)重構(gòu)參數(shù)γ、β章钾,讓我們的網(wǎng)絡(luò)可以學(xué)習(xí)恢復(fù)出原始網(wǎng)絡(luò)所要學(xué)習(xí)的特征分布墙贱。
作用:
- 加快訓(xùn)練速度,這樣我們就可以使用較大的學(xué)習(xí)率來(lái)訓(xùn)練網(wǎng)絡(luò)贱傀。
- 提高網(wǎng)絡(luò)的泛化能力惨撇。
訓(xùn)練測(cè)試的不同:
就是BN在訓(xùn)練階段每一個(gè)batch按照如上圖的算法流程計(jì)算每個(gè)batch的均值和方差,然后通過(guò)一個(gè)滑動(dòng)平均值方法保存窍箍,在pytorch中是通過(guò)一個(gè)參數(shù)momentum
保存每個(gè)連續(xù)計(jì)算的batch的均值和方差的串纺。
# 其中x'表示新的保存下來(lái)的值丽旅,x是之前舊的保存的值,x''是表示新的batch計(jì)算的當(dāng)前均值方差等纺棺。
x' = (1-momentum)*x + momentum*x''
其中的均值是每個(gè)batch的均值的均值榄笙,方差是每個(gè)batch的無(wú)偏估計(jì)量。但是在pytorch具體實(shí)現(xiàn)是采用以上所說(shuō)的滑動(dòng)平均值
方法計(jì)算的祷蝌,所以最后一旦整個(gè)訓(xùn)練階段完成茅撞,BN層中的所有參數(shù)也就固定下來(lái),然后直接用于test巨朦。
4. 手寫(xiě)softmax米丘、手寫(xiě)B(tài)N公式。
5. BN的缺點(diǎn)糊啡。
受
batch_size
大小的限制
BN是以batch為單位計(jì)算歸一化統(tǒng)計(jì)量的拄查,當(dāng)一個(gè)batch樣本數(shù)很少時(shí),少量樣本的均值和方差無(wú)法反映全局
的統(tǒng)計(jì)分布棚蓄,所以基于少量樣本的BN的效果會(huì)變得很差堕扶。在一些場(chǎng)景中,比如說(shuō)硬件資源受限梭依,在線(xiàn)學(xué)習(xí)等場(chǎng)景稍算,BN是非常不適用的。(在Transformer中使用的是Layer Normalization役拴,受硬件的限制糊探,Bert一般訓(xùn)練的批次都不大)
無(wú)法很好的應(yīng)用于RNN中
在一個(gè)batch中,通常各個(gè)樣本的長(zhǎng)度都是不同的
河闰,當(dāng)統(tǒng)計(jì)到比較靠后的時(shí)間片時(shí)科平,這時(shí)可能只有很少的樣本數(shù)據(jù)為非零值,基于這些仍有數(shù)據(jù)的少量樣本的統(tǒng)計(jì)信息不能反映全局分布淤击,所以這時(shí)BN的效果并不好匠抗。
另外如果在測(cè)試時(shí)我們遇到了長(zhǎng)度大于任何
一個(gè)訓(xùn)練樣本的測(cè)試樣本,我們無(wú)法找到保存的歸一化統(tǒng)計(jì)量
污抬,所以BN無(wú)法運(yùn)行汞贸。
6. LN的計(jì)算方法。
LN是一個(gè)獨(dú)立于batch size的算法印机,所以無(wú)論一個(gè)batch樣本數(shù)多少都不會(huì)影響參與LN計(jì)算的數(shù)據(jù)量矢腻,從而解決BN的兩個(gè)問(wèn)題。LN的做法是根據(jù)樣本的特征數(shù)做歸一化射赛。
7. BN和LN的不同多柑。
- Batch Normalization 的處理對(duì)象是對(duì)一批樣本, Layer Normalization 的處理對(duì)象是單個(gè)樣本楣责。
- Batch Normalization 是對(duì)這批樣本的同一維度特征(每個(gè)神經(jīng)元)做歸一化竣灌,Layer Normalization 是對(duì)這單個(gè)樣本的所有維度特征做歸一化聂沙。
LN不依賴(lài)于batch的大小和輸入sequence的深度,因此可以用于batch-size為1
和RNN
中對(duì)邊長(zhǎng)的輸入sequence的normalize操作初嘹。但在大批量的樣本訓(xùn)練時(shí)及汉,效果沒(méi)BN好。
實(shí)踐證明屯烦,LN用于RNN進(jìn)行Normalization時(shí)坷随,取得了比BN更好的效果。但用于CNN時(shí)驻龟,效果并不如BN明顯温眉。
1. dropout的原理、作用以及訓(xùn)練測(cè)試時(shí)的不同翁狐。
原理:訓(xùn)練時(shí)类溢,每個(gè)神經(jīng)元節(jié)點(diǎn)激活值以一定的概率被“丟棄”;測(cè)試時(shí)露懒,每個(gè)神經(jīng)元參數(shù)要預(yù)先乘以概率系數(shù)
豌骏,以恢復(fù)在訓(xùn)練中該神經(jīng)元只有
的概率被應(yīng)用到整個(gè)神經(jīng)網(wǎng)絡(luò)的前向傳播計(jì)算
(以使得在訓(xùn)練時(shí)和測(cè)試時(shí)每一層輸入有大致相同的期望。)
隐锭。
兩種方法處理:(通常采用第一種方案)
- 只在訓(xùn)練時(shí)對(duì)第二層的輸出數(shù)據(jù)除以
之后再傳給輸出層神經(jīng)元。
- 只在測(cè)試時(shí)對(duì)每一個(gè)神經(jīng)單元的權(quán)重參數(shù)要乘以概率
计贰。
# coding:utf-8
import numpy as np
# dropout函數(shù)的實(shí)現(xiàn)
def dropout(x, level):
if level < 0. or level >= 1: #level是概率值钦睡,必須在0~1之間
raise ValueError('Dropout level must be in interval [0, 1[.')
retain_prob = 1. - level
# 我們通過(guò)binomial函數(shù),生成與x一樣的維數(shù)向量躁倒。binomial函數(shù)就像拋硬幣一樣荞怒,我們可以把每個(gè)神經(jīng)元當(dāng)做拋硬幣一樣
# 硬幣 正面的概率為p,n表示每個(gè)神經(jīng)元試驗(yàn)的次數(shù)
# 因?yàn)槲覀兠總€(gè)神經(jīng)元只需要拋一次就可以了所以n=1秧秉,size參數(shù)是我們有多少個(gè)硬幣褐桌。
random_tensor = np.random.binomial(n=1, p=retain_prob, size=x.shape) #即將生成一個(gè)0、1分布的向量象迎,0表示這個(gè)神經(jīng)元被屏蔽荧嵌,不工作了,也就是dropout了
print(random_tensor)
x *= random_tensor
print(x)
x /= retain_prob
return x
#對(duì)dropout的測(cè)試砾淌,大家可以跑一下上面的函數(shù)啦撮,了解一個(gè)輸入x向量,經(jīng)過(guò)dropout的結(jié)果
x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)
dropout(x,0.4)
作用:
- Dropout 是在訓(xùn)練過(guò)程中以一定的概率的使神經(jīng)元失活汪厨,即輸出為0赃春,以提高模型的泛化能力,減少過(guò)擬合劫乱。
- 類(lèi)似于Bagging织中。
2. dropout為什么可以防止過(guò)擬合锥涕?
Dropout作用于每份小批量訓(xùn)練數(shù)據(jù),隨機(jī)丟棄部分神經(jīng)元狭吼,相當(dāng)于每次迭代都在訓(xùn)練不同的神經(jīng)網(wǎng)絡(luò)(對(duì)于包括N個(gè)神經(jīng)元節(jié)點(diǎn)的網(wǎng)絡(luò)层坠,在Dropout的作用下可看作為2^N個(gè)模型的集成。這2^N個(gè)模型可認(rèn)為是原始網(wǎng)絡(luò)的子網(wǎng)絡(luò)搏嗡,它們共享權(quán)值窿春,并且具有相同的網(wǎng)絡(luò)層數(shù),而模型整體的參數(shù)數(shù)目不變采盒,這就大大簡(jiǎn)化了運(yùn)算旧乞。)
。類(lèi)比于Bagging方法磅氨,Dropout可被認(rèn)為是一種實(shí)用的大規(guī)模深度神經(jīng)網(wǎng)絡(luò)的模型集成算法尺栖。對(duì)于任意神經(jīng)元,每次訓(xùn)練中都與一組隨機(jī)挑選的不同的神經(jīng)元集合共同進(jìn)行優(yōu)化烦租,這個(gè)過(guò)程會(huì)減弱全體神經(jīng)元之間的聯(lián)合適應(yīng)性延赌,減少過(guò)擬合的風(fēng)險(xiǎn),增強(qiáng)泛化能力叉橱。
3. Dropout了解嗎挫以,說(shuō)下作用,白板實(shí)現(xiàn)以下窃祝。
Dropout 是在訓(xùn)練過(guò)程中以一定的概率的使神經(jīng)元失活掐松,即輸出為0,以提高模型的泛化能力粪小,減少過(guò)擬合大磺。
-
沒(méi)有Dropout的網(wǎng)絡(luò)計(jì)算公式:
-
采用Dropout的網(wǎng)絡(luò)計(jì)算公式:
標(biāo)準(zhǔn)網(wǎng)絡(luò)和帶Dropout的網(wǎng)絡(luò)
4. 在Transformer模型中dropout主要用在哪里?看過(guò)源碼嗎探膊?
droput在每個(gè)子層(BertEmbeddings杠愧、BertAttention、BertOutput)
之間逞壁,設(shè)置為0.1
流济。
1. 正則化L1和L2正則化,區(qū)別是什么猾担?
L1(L1-Norm)
和L2(L2-Norm的平方)
都是正則化項(xiàng)袭灯,又叫做懲罰項(xiàng)
,是為了限制模型的參數(shù)
绑嘹,防止模型過(guò)擬合
而加在損失函數(shù)后面的一項(xiàng)稽荧。
- L1是模型各參數(shù)的絕對(duì)值之和;L2是模型各參數(shù)的平方和。
- L1會(huì)趨向于產(chǎn)生
少量的特征
姨丈,而其它的特征都是0(稀疏的)
畅卓。因?yàn)樽顑?yōu)的參數(shù)值很大概率出現(xiàn)在坐標(biāo)軸上,這樣就會(huì)導(dǎo)致某一維的權(quán)重為0蟋恬,產(chǎn)生稀疏權(quán)重矩陣翁潘。 - L2會(huì)選擇
更多的特征
,這些特征都會(huì)接近于0歼争。最優(yōu)的參數(shù)值很小概率出現(xiàn)在坐標(biāo)軸上拜马,因此每一維的參數(shù)都不會(huì)是0。當(dāng)最小化||w||時(shí)沐绒,就會(huì)使得每一項(xiàng)趨近于0俩莽。
2. L2正則化作用?
- 約束模型參數(shù)乔遮,防止過(guò)擬合扮超。
3. 為什么參數(shù)越小代表模型越簡(jiǎn)單?
- 越是復(fù)雜的模型蹋肮,越是會(huì)嘗試所有樣本進(jìn)行擬合出刷,包括
異常點(diǎn)
。這就會(huì)造成在較小的區(qū)間中產(chǎn)生較大的波動(dòng)坯辩,這個(gè)較大的波動(dòng)也會(huì)反應(yīng)在這個(gè)區(qū)間的導(dǎo)數(shù)
比較大馁龟。 - 只有
越大的參數(shù)
才可能產(chǎn)生較大的導(dǎo)數(shù)
。因此參數(shù)越小漆魔,模型就越簡(jiǎn)單屁柏。
4. 實(shí)現(xiàn)參數(shù)的稀疏有什么好處?
因?yàn)閰?shù)的稀疏有送,在一定程度上實(shí)現(xiàn)了特征的選擇
。一般而言僧家,大部分特征對(duì)模型是沒(méi)有貢獻(xiàn)的雀摘。這些沒(méi)有用的特征雖然可以減少訓(xùn)練集上的誤差
,但是對(duì)測(cè)試集的樣本八拱,反而會(huì)產(chǎn)生干擾
阵赠。稀疏參數(shù)的引入,可以將那些無(wú)用的特征的權(quán)重置為0.
5. 正則化有什么用肌稻,為什么有用清蚀,L1正則為什么能使參數(shù)稀疏,為什么能防止過(guò)擬合
- 約束模型參數(shù)爹谭,防止過(guò)擬合枷邪。
加入了正則化項(xiàng)就是在原來(lái)目標(biāo)函數(shù)的基礎(chǔ)上加入約束。當(dāng)目標(biāo)函數(shù)的等高線(xiàn)
和L1诺凡、L2范數(shù)函數(shù)的等高線(xiàn)
第一次相交時(shí)东揣,得到最優(yōu)解践惑。
- L1范數(shù)符合
拉普拉斯分布
,是不完全可微
的嘶卧。表現(xiàn)在圖像上會(huì)有很多角
出現(xiàn)尔觉。這些角和目標(biāo)函數(shù)的接觸機(jī)會(huì)遠(yuǎn)大于其他部分。就會(huì)造成最優(yōu)值出現(xiàn)在坐標(biāo)軸上
芥吟,因此就會(huì)導(dǎo)致某一維的權(quán)重為0侦铜,產(chǎn)生稀疏權(quán)重矩陣,進(jìn)而防止過(guò)擬合钟鸵。 - L2范數(shù)
符合高斯分布
钉稍,是完全可微
的。和L1相比携添,圖像上的棱角被圓滑
了很多嫁盲。一般最優(yōu)值不會(huì)在坐標(biāo)軸上
出現(xiàn)。在最小化正則項(xiàng)時(shí)烈掠,參數(shù)不斷趨向于0羞秤,最后獲得很小的參數(shù)。