如何檢測(cè)網(wǎng)站開(kāi)發(fā)商留有后門(mén)網(wǎng)站seo是什么
時(shí)間:2015
網(wǎng)絡(luò)中的亮點(diǎn):
- 超深的網(wǎng)絡(luò)結(jié)構(gòu)(突破1000層)
- 提出residual模塊
- 使用Batch? Normalization加速訓(xùn)練(丟棄dropout)
層數(shù)越深效果越好?
是什么樣的原因?qū)е赂畹木W(wǎng)絡(luò)導(dǎo)致的訓(xùn)練效果更差呢?
梯度消失和梯度爆炸
隨著網(wǎng)絡(luò)層數(shù)的不斷加深,梯度消失和梯度爆炸的現(xiàn)象會(huì)越來(lái)越明顯,
梯度消失:假設(shè)每一層的誤差梯度是一個(gè)小于1的數(shù),那么在我們反向傳播過(guò)程中,每向前傳播一次,都要乘以小于1的誤差梯度。那么當(dāng)我們網(wǎng)絡(luò)越來(lái)越深的時(shí)候,所乘的小于1的系數(shù)越多,那么久越趨近于0,這樣梯度就會(huì)越來(lái)越小,造成梯度消失現(xiàn)象。
梯度爆炸:假設(shè)每一層的誤差梯度是一個(gè)大于1的數(shù),那么在我們反向傳播過(guò)程中,每向前傳播一次,都要乘以大于1的誤差梯度。那么當(dāng)我們網(wǎng)絡(luò)越來(lái)越深的時(shí)候,所乘的大于1的系數(shù)越多,,這樣梯度就會(huì)越來(lái)越大,造成梯度爆炸現(xiàn)象。
退化問(wèn)題
解決了梯度消失和梯度爆炸的問(wèn)題后,仍存在層數(shù)深的效果還是沒(méi)有層數(shù)小的效果好。怎樣解決呢,在我們的resnet當(dāng)中提出了一個(gè)叫做“殘差”的結(jié)構(gòu)。
梯度消失和梯度爆炸現(xiàn)象怎么解決呢?
數(shù)據(jù)標(biāo)準(zhǔn)化處理,權(quán)重初始化,以及BN(Batch Normalization).
residual結(jié)構(gòu)
?shotcut:捷徑的意思。主分支和側(cè)分支要相加,兩個(gè)的shape一定要相同。
Batch Normalization
參考鏈接:Batch Normalization詳解以及pytorch實(shí)驗(yàn)_pytorch batch normalization-CSDN博客
Bath Normalization的目的是使我們的一批(Batch)feature map滿足均值為0,方差為1的分布規(guī)律。通過(guò)該方法能夠加速網(wǎng)絡(luò)的收斂并提升準(zhǔn)確率。
?如下圖所示,對(duì)于Conv1來(lái)說(shuō)輸入的就是滿足某一分布的特征矩陣,但對(duì)于Conv2而言輸入的feature map就不一定滿足某一分布規(guī)律了(注意這里所說(shuō)滿足某一分布規(guī)律并不是指某一個(gè)feature map的數(shù)據(jù)要滿足分布規(guī)律,理論上是指整個(gè)訓(xùn)練樣本集所對(duì)應(yīng)feature map的數(shù)據(jù)要滿足分布規(guī)律)。而我們Batch Normalization的目的就是使我們的feature map滿足均值為0,方差為1的分布規(guī)律。
?使用BN時(shí)需要注意的問(wèn)題
(1)訓(xùn)練時(shí)要將traning參數(shù)設(shè)置為T(mén)rue,在驗(yàn)證時(shí)將trainning參數(shù)設(shè)置為False。在pytorch中可通過(guò)創(chuàng)建模型的model.train()和model.eval()方法控制。因?yàn)樵谖覀冇?xùn)練過(guò)程當(dāng)中,需要我們不斷去統(tǒng)計(jì)均值和方差,而在我們的驗(yàn)證或者預(yù)測(cè)過(guò)程當(dāng)中使用的是我們歷史統(tǒng)計(jì)的均值和方差,而不是當(dāng)前所計(jì)算的均值和方差。
(2)batch size盡可能設(shè)置大點(diǎn),設(shè)置小后表現(xiàn)可能很糟糕,設(shè)置的越大求的均值和方差越接近整個(gè)訓(xùn)練集的均值和方差。值設(shè)置得越大,越接近我們整個(gè)樣本訓(xùn)練集的均值和方差,效果也會(huì)越好。設(shè)置得很小的時(shí)候,比如說(shuō)它的極限狀況也就是batch size設(shè)置為1,這種情況使用BN是沒(méi)有什么作用的,效果可能還會(huì)變差。
(3)建議將bn層放在卷積層(Conv)和激活層(例如Relu)之間,且卷積層不要使用偏置bias,因?yàn)闆](méi)有用,參考下圖推理,即使使用了偏置bias求出的結(jié)果也是一樣的。
遷移學(xué)習(xí)
使用遷移學(xué)習(xí)的優(yōu)勢(shì):
- 能夠快速的訓(xùn)練處一個(gè)理想的結(jié)果
- 當(dāng)數(shù)據(jù)集較小時(shí)也能訓(xùn)練處理想的效果
什么是遷移學(xué)習(xí)
?對(duì)于淺層的卷積層而言,所學(xué)習(xí)到的角點(diǎn)信息和紋理信息等是比較通用的信息,這些信息不僅是在本網(wǎng)絡(luò)中適用,在其他網(wǎng)絡(luò)中也同樣適用。所以就會(huì)有遷移的這么一個(gè)概念。就是將我們學(xué)習(xí)好的一些淺層網(wǎng)絡(luò)的參數(shù)遷移到我們新的網(wǎng)絡(luò)中去,這樣我們新的網(wǎng)絡(luò)就也擁有了識(shí)別底層通用特征的能力了,新的網(wǎng)絡(luò)擁有了這些底層通用的檢測(cè)識(shí)別能力之后,我們就能更加快速地去學(xué)習(xí)新的數(shù)據(jù)集的高維特征。
常見(jiàn)的遷移學(xué)習(xí)方式:
- 載入權(quán)重后訓(xùn)練所有參數(shù)
- 最后一層無(wú)法載入預(yù)訓(xùn)練模型參數(shù)
- 載入權(quán)重后只訓(xùn)練最后幾層參數(shù)
- 載入所有模型參數(shù)后,固定全連接之前的所有模型參數(shù),只去訓(xùn)練最后三層全連接層,這樣我們所需訓(xùn)練的參數(shù)就會(huì)變少,訓(xùn)練速度也會(huì)變快。
- 載入權(quán)重后在原網(wǎng)絡(luò)基礎(chǔ)上再添加一層全連接層,進(jìn)訓(xùn)練最后一個(gè)全連接層。
- 由于我們訓(xùn)練集的分類個(gè)數(shù)和原預(yù)訓(xùn)練集的分類個(gè)數(shù)不一樣,所以最后一層是無(wú)法載入的。當(dāng)我們使用第三個(gè)方法,也可以將最后一層的參數(shù)載入進(jìn)去,只不過(guò)我們?cè)谧詈蟮娜B接層之后再加上新的全連接層,這個(gè)新的全連接層的節(jié)點(diǎn)個(gè)數(shù)也就是我們所采用的訓(xùn)練集的分類個(gè)數(shù),然后僅僅去訓(xùn)練最后一層的參數(shù)。
自己的硬件條件有限或者訓(xùn)練時(shí)間有要求,第二種第三種方法都適合。對(duì)于硬件參數(shù)不受限,而且希望得到一個(gè)最優(yōu)的結(jié)果,那就要采用第一種方法,這種方法相比于后面的兩種方法訓(xùn)練時(shí)間稍微長(zhǎng)一點(diǎn),但最終達(dá)到的效果也要比后兩種方法的好。但相比不用遷移學(xué)習(xí)的方法,還是要快很多的。