BN和Dropout在訓(xùn)練和測試時(shí)有哪些差別?
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
Batch Normalization
BN,Batch Normalization,就是在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中使得每一層神經(jīng)網(wǎng)絡(luò)的輸入保持相近的分布。
BN訓(xùn)練和測試時(shí)的參數(shù)是一樣的嗎?
對(duì)于BN,在訓(xùn)練時(shí),是對(duì)每一批的訓(xùn)練數(shù)據(jù)進(jìn)行歸一化,也即用每一批數(shù)據(jù)的均值和方差。
而在測試時(shí),比如進(jìn)行一個(gè)樣本的預(yù)測,就并沒有batch的概念,因此,這個(gè)時(shí)候用的均值和方差是全量訓(xùn)練數(shù)據(jù)的均值和方差,這個(gè)可以通過移動(dòng)平均法求得。
對(duì)于BN,當(dāng)一個(gè)模型訓(xùn)練完成之后,它的所有參數(shù)都確定了,包括均值和方差,gamma和bata。
BN訓(xùn)練時(shí)為什么不用全量訓(xùn)練集的均值和方差呢?
因?yàn)樵谟?xùn)練的第一個(gè)完整epoch過程中是無法得到輸入層之外其他層全量訓(xùn)練集的均值和方差,只能在前向傳播過程中獲取已訓(xùn)練batch的均值和方差。那在一個(gè)完整epoch之后可以使用全量數(shù)據(jù)集的均值和方差嘛?
對(duì)于BN,是對(duì)每一批數(shù)據(jù)進(jìn)行歸一化到一個(gè)相同的分布,而每一批數(shù)據(jù)的均值和方差會(huì)有一定的差別,而不是用固定的值,這個(gè)差別實(shí)際上也能夠增加模型的魯棒性,也會(huì)在一定程度上減少過擬合。
但是一批數(shù)據(jù)和全量數(shù)據(jù)的均值和方差相差太多,又無法較好地代表訓(xùn)練集的分布,因此,BN一般要求將訓(xùn)練集完全打亂,并用一個(gè)較大的batch值,去縮小與全量數(shù)據(jù)的差別。
Dropout
Dropout 是在訓(xùn)練過程中以一定的概率的使神經(jīng)元失活,即輸出為0,以提高模型的泛化能力,減少過擬合。
Dropout 在訓(xùn)練和測試時(shí)都需要嗎?
Dropout 在訓(xùn)練時(shí)采用,是為了減少神經(jīng)元對(duì)部分上層神經(jīng)元的依賴,類似將多個(gè)不同網(wǎng)絡(luò)結(jié)構(gòu)的模型集成起來,減少過擬合的風(fēng)險(xiǎn)。
而在測試時(shí),應(yīng)該用整個(gè)訓(xùn)練好的模型,因此不需要dropout。
Dropout 如何平衡訓(xùn)練和測試時(shí)的差異呢?
Dropout ,在訓(xùn)練時(shí)以一定的概率使神經(jīng)元失活,實(shí)際上就是讓對(duì)應(yīng)神經(jīng)元的輸出為0
假設(shè)失活概率為 p ,就是這一層中的每個(gè)神經(jīng)元都有p的概率失活,如下圖的三層網(wǎng)絡(luò)結(jié)構(gòu)中,如果失活概率為0.5,則平均每一次訓(xùn)練有3個(gè)神經(jīng)元失活,所以輸出層每個(gè)神經(jīng)元只有3個(gè)輸入,而實(shí)際測試時(shí)是不會(huì)有dropout的,輸出層每個(gè)神經(jīng)元都有6個(gè)輸入,這樣在訓(xùn)練和測試時(shí),輸出層每個(gè)神經(jīng)元的輸入和的期望會(huì)有量級(jí)上的差異。
因此在訓(xùn)練時(shí)還要對(duì)第二層的輸出數(shù)據(jù)除以(1-p)之后再傳給輸出層神經(jīng)元,作為神經(jīng)元失活的補(bǔ)償,以使得在訓(xùn)練時(shí)和測試時(shí)每一層輸入有大致相同的期望。


dropout部分參考:
https://blog.csdn.net/program_developer/article/details/80737724
BN和Dropout共同使用時(shí)會(huì)出現(xiàn)的問題
BN和Dropout單獨(dú)使用都能減少過擬合并加速訓(xùn)練速度,但如果一起使用的話并不會(huì)產(chǎn)生1+1>2的效果,相反可能會(huì)得到比單獨(dú)使用更差的效果。
相關(guān)的研究參考論文:
Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift
https://arxiv.org/abs/1801.05134
本論文作者發(fā)現(xiàn)理解 Dropout 與 BN 之間沖突的關(guān)鍵是網(wǎng)絡(luò)狀態(tài)切換過程中存在神經(jīng)方差的(neural variance)不一致行為。試想若有圖一中的神經(jīng)響應(yīng) X,當(dāng)網(wǎng)絡(luò)從訓(xùn)練轉(zhuǎn)為測試時(shí),Dropout 可以通過其隨機(jī)失活保留率(即 p)來縮放響應(yīng),并在學(xué)習(xí)中改變神經(jīng)元的方差,而 BN 仍然維持 X 的統(tǒng)計(jì)滑動(dòng)方差。這種方差不匹配可能導(dǎo)致數(shù)值不穩(wěn)定(見下圖中的紅色曲線)。而隨著網(wǎng)絡(luò)越來越深,最終預(yù)測的數(shù)值偏差可能會(huì)累計(jì),從而降低系統(tǒng)的性能。簡單起見,作者們將這一現(xiàn)象命名為「方差偏移」。事實(shí)上,如果沒有 Dropout,那么實(shí)際前饋中的神經(jīng)元方差將與 BN 所累計(jì)的滑動(dòng)方差非常接近(見下圖中的藍(lán)色曲線),這也保證了其較高的測試準(zhǔn)確率。

作者采用了兩種策略來探索如何打破這種局限。一個(gè)是在所有 BN 層后使用 Dropout,另一個(gè)就是修改 Dropout 的公式讓它對(duì)方差并不那么敏感,就是高斯Dropout。
第一個(gè)方案比較簡單,把Dropout放在所有BN層的后面就可以了,這樣就不會(huì)產(chǎn)生方差偏移的問題,但實(shí)則有逃避問題的感覺。
第二個(gè)方案來自Dropout原文里提到的一種高斯Dropout,是對(duì)Dropout形式的一種拓展。作者進(jìn)一步拓展了高斯Dropout,提出了一個(gè)均勻分布Dropout,這樣做帶來了一個(gè)好處就是這個(gè)形式的Dropout(又稱為“Uout”)對(duì)方差的偏移的敏感度降低了,總得來說就是整體方差偏地沒有那么厲害了。
該部分參考:
https://www.jiqizhixin.com/articles/2018-01-23-4
https://zhuanlan.zhihu.com/p/33101420
好消息!
小白學(xué)視覺知識(shí)星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。 下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

