報頭中的偏移量作用 網路中BN層的作用

2021-10-12 21:24:16 字數 1137 閱讀 6762

bn層的作用主要有三個:

加快網路的訓練和收斂的速度

控制梯度**防止梯度消失

防止過擬合

以sigmoid函式為例,sigmoid函式使得輸出在[0,1]之間,實際上當x道了一定的大小,經過sigmoid函式後輸出範圍就會變得很小

梯度消失:在深度神經網路中,如果網路的啟用輸出很大,其對應的梯度就會很小,導致網路的學習速率就會很慢,假設網路中每層的學習梯度都小於最大值0.25,網路中有n層,因為鏈式求導的原因,第一層的梯度將會小於0.25的n次方,所以學習速率相對來說會變的很慢,而對於網路的最後一層只需要對自身求導一次,梯度就大,學習速率就會比較快,這就會造成在乙個很深的網路中,淺層基本不學習,權值變化小,而後面幾層網路一直學習,後面的網路基本可以表徵整個網路,這樣失去了深度的意義。(使用bn層歸一化後,網路的輸出就不會很大,梯度就不會很小)

梯度**:第一層偏移量的梯度=啟用層斜率1x權值1x啟用層斜率2x…啟用層斜率(n-1)x權值(n-1)x啟用層斜率n,假如啟用層斜率均為最大值0.25,所有層的權值為100,這樣梯度就會指數增加。(使用bn層後權值的更新也不會很大)

bn演算法防止過擬合:在網路的訓練中,bn的使用使得乙個minibatch中所有樣本都被關聯在了一起,因此網路不會從某乙個訓練樣本中生成確定的結果,即同樣乙個樣本的輸出不再僅僅取決於樣本的本身,也取決於跟這個樣本同屬乙個batch的其他樣本,而每次網路都是隨機取batch,這樣就會使得整個網路不會朝這乙個方向使勁學習。一定程度上避免了過擬合。

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

C 中struct成員的偏移量的計算

c 中,計算struct成員的偏移量,有如下三種方法可用。假設有定義如下 struct st test 現想要求 b 相對於 st test 的偏移位址。1 常用的方法 size t st test 0 b 2 使用stl的定義,要包含 標頭檔案 offsetof st test b offseto...

Pandas中的時間序列的頻率 偏移量

通常,預設生成的時間序列是按天計算的,即頻率為 d d 是乙個基礎頻率,通過用乙個字串的別名表示,比如 d 是 day 的別名。pandas中的頻率是由乙個基礎頻率和乙個乘數組成的,比如,5d 表示每5天。接下來,通過一張表來列舉時間序列的基礎頻率 例子1 設定 dateindex物件的頻率 imp...

ANSI C中取得結構體欄位偏移量的常用方法

假設在ansi c程式中定義了乙個名為mystruct的結構型別,其中有乙個名為myfield的字段,如何取得它在結構體中的偏移?typedef struct mystruct tag mystruct 最容易想到的方法應該與如下 差不多 size t getoffset 這段 確實能完成任務,但為...