日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BN层

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BN层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

論文名字:Batch Normalization: Accelerating Deep Network Training by ?Reducing Internal Covariate Shift

論文地址:https://arxiv.org/abs/1502.03167

?

BN被廣泛應用于深度學習的各個地方,由于在實習過程中需要修改網絡,修改的網絡在訓練過程中無法收斂,就添加了BN層進去來替換掉LRN層,網絡可以收斂。現在就講一下Batch Normalization的工作原理。

BN層和卷積層,池化層一樣都是一個網絡層。

?

首先我們根據論文來介紹一下BN層的優點

1)加快訓練速度,這樣我們就可以使用較大的學習率來訓練網絡。

2)提高網絡的泛化能力。

3)BN層本質上是一個歸一化網絡層,可以替代局部響應歸一化層(LRN層)。

4)可以打亂樣本訓練順序(這樣就不可能出現同一張照片被多次選擇用來訓練)論文中提到可以提高1%的精度。

?

前向計算和反向求導

在前向傳播的時候:

從論文中給出的偽代碼可以看出來BN層的計算流程是:

1.計算樣本均值。

2.計算樣本方差。

3.樣本數據標準化處理。

4.進行平移和縮放處理。引入了γ和β兩個參數。來訓練γ和β兩個參數。引入了這個可學習重構參數γ、β,讓我們的網絡可以學習恢復出原始網絡所要學習的特征分布。

?

在反向傳播的時候,通過鏈式求導方式,求出γ與β以及相關權值?

?

怎么使用BN層

先解釋一下對于圖片卷積是如何使用BN層。?
?
這是文章卷積神經網絡CNN(1)中5x5的圖片通過valid卷積得到的3x3特征圖(粉紅色)。特征圖里的值,作為BN的輸入,也就是這9個數值通過BN計算并保存γ與β,通過γ與β使得輸出與輸入不變。假設輸入的batch_size為m,那就有m*9個數值,計算這m*9個數據的γ與β并保存。正向傳播過程如上述,對于反向傳播就是根據求得的γ與β計算梯度。?
這里需要著重說明2個細節:?
1.網絡訓練中以batch_size為最小單位不斷迭代,很顯然,新的batch_size進入網絡,即會有新的γ與β,因此,在BN層中,有總圖片數/batch_size組γ與β被保存下來。?
2.圖像卷積的過程中,通常是使用多個卷積核,得到多張特征圖,對于多個的卷積核需要保存多個的γ與β。

結合論文中給出的使用過程進行解釋?
?
輸入:待進入激活函數的變量?
輸出:?
1.對于K維的輸入,假設每一維包含m個變量,所以需要K個循環。每個循環中按照上面所介紹的方法計算γ與β。這里的K維,在卷積網絡中可以看作是卷積核個數,如網絡中第n層有64個卷積核,就需要計算64次。?
需要注意,在正向傳播時,會使用γ與β使得BN層輸出與輸入一樣。?
2.在反向傳播時利用γ與β求得梯度從而改變訓練權值(變量)。?
3.通過不斷迭代直到訓練結束,求得關于不同層的γ與β。如網絡有n個BN層,每層根據batch_size決定有多少個變量,設定為m,這里的mini-batcherB指的是特征圖大小*batch_size,即m=特征圖大小*batch_size,因此,對于batch_size為1,這里的m就是每層特征圖的大小。?
4.不斷遍歷訓練集中的圖片,取出每個batch_size中的γ與β,最后統計每層BN的γ與β各自的和除以圖片數量得到平均直,并對其做無偏估計直作為每一層的E[x]與Var[x]。?
5.在預測的正向傳播時,對測試數據求取γ與β,并使用該層的E[x]與Var[x],通過圖中11:所表示的公式計算BN層輸出。?
注意,在預測時,BN層的輸出已經被改變,所以BN層在預測的作用體現在此處

?

?

BN層原理分析

1 訓練數據為什么要和測試數據同分布?

看看下圖,如果我們的網絡在左上角的數據訓練的,已經找到了兩者的分隔面w,如果測試數據是右下角這樣子,跟訓練數據完全不在同一個分布上面,你覺得泛化能力能好嗎??

2 為什么白化訓練數據能夠加速訓練進程

如下圖,訓練數據如果分布在右上角,我們在初始化網絡參數w和b的時候,可能得到的分界面是左下角那些線,需要經過訓練不斷調整才能得到穿過數據點的分界面,這個就使訓練過程變慢了;如果我們將數據白化后,均值為0,方差為1,各個維度數據去相關,得到的數據點就是坐標上的一個圓形分布,如下圖中間的數據點,這時候隨便初始化一個w,b設置為0,得到的分界面已經穿過數據了,因此訓練調整,訓練進程會加快?

3、為什么BN層可以改善梯度彌散

下面xhat到x的梯度公式,可以表示為正常梯度乘一個系數a,再加b,這里加了個b,整體給梯度一個提升,補償sigmod上的損失,改善了梯度彌散問題。?

4、為什么BN層一般用在線性層和卷積層后面,而不是放在非線性單元后

原文中是這樣解釋的,因為非線性單元的輸出分布形狀會在訓練過程中變化,歸一化無法消除他的方差偏移,相反的,全連接和卷積層的輸出一般是一個對稱,非稀疏的一個分布,更加類似高斯分布,對他們進行歸一化會產生更加穩定的分布。其實想想也是的,像relu這樣的激活函數,如果你輸入的數據是一個高斯分布,經過他變換出來的數據能是一個什么形狀?小于0的被抑制了,也就是分布小于0的部分直接變成0了,這樣不是很高斯了。

5、BN起作用的原因

通過使得批量數據歸一化具有0均值1方差的統計分布,避免數據處于激活函數的飽和區,具有較大的梯度,從而加速網絡的訓練過程。

減少了網絡輸入變化過大的問題,使得網絡的輸入穩定,減弱了與前層參數關系之間的作用,使得當前層獨立于整個網絡

BN具有輕微正則化的效果,可以和dropout一起使用

主要是歸一化激活值前的隱藏單元來加速訓練,正則化是副作用

6、BN具有正則化效果的原因

每個批量的數據僅根據當前批量計算均值和標準差,然后縮放

這就為該批量的激活函數帶來了一些噪音,類似于dropout向每一層的激活函數帶來噪音

若使用了較大的batch_size如512,則減小了噪音,減少了正則化帶來的效果

參考文獻:

https://blog.csdn.net/donkey_1993/article/details/81871132

https://blog.csdn.net/qq_29573053/article/details/79878437

https://www.cnblogs.com/kk17/p/9693462.html

https://blog.csdn.net/u012151283/article/details/78154917?

轉載于:https://www.cnblogs.com/CJT-blog/p/10424058.html

總結

以上是生活随笔為你收集整理的BN层的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。