深度學習中的Batch Normalization

2021-08-15 06:12:07 字數 2351 閱讀 3918

batch normalization

假設我們有兩組training data:x1

=[1,

2,3,

⋯]x 1=

[1,2

,3,⋯

],x2

=[100,

200,

300,⋯]

, x2

=[100,

200,

300,⋯]

當我們利用這組資料進行機器學習的時候,會發現對於第一筆資料x1

x

1,它的梯度會比第二筆資料x2

x

2的梯度要小得多,這時候的訓練的收斂過程大致可以由下圖表現出來。

兩個權重跨度範圍不一樣,如果使用相同的學習率,則在w1

w

1的學習過程會非常慢,可能w2

w

2都收斂了,而w1

w

1還沒有完成學習過程。

那如果我們對輸入進行調整,使它們的分布大致相同的話,它們的收斂速度就會變得一致,收斂過程大概如下圖:

這個時候兩個權重的收斂速度大致可以趨於一致。

上面介紹的這種將資料分布相似化的過程暫且稱為資料的規整化,它的做法其實很簡單就是將輸入資料減去資料的均值然後除掉資料的標準差,保證均值為0,標準差為1 xr

i←xr

i−μi

σix ir

←xir

−μiσ

i其中,i指的是向量的第i維,μi

μ

i指向量第i維的均值,σi

σ

i表示第i維的標準差

當然上面介紹只是訓練樣本的規整,那在神經網路中的規整又該如何進行呢?

神經網路中的batch normalization是將每一層網路中啟用函式之前的輸入看作是輸入資料,我們要規整的就是這一部分資料,做法和我們剛才提到的一樣,將資料減掉均值然後除掉標準差,總結來說就是下面的:

μσ現在我們已經解釋清楚了神經網路中資料規整的做法,那我們在這種情況下,訓練網路時候,如何去更新引數呢?

是否能把我們這裡的μ,

σ μ,

σ直接當作乙個常數保證下面的式子成立呢: ∂z

~i∂z

i=1σ

∂ z~

i∂zi

=1σ想一想,貌似是不能的,因為由於前面神經網路的影響,導致網路內部的輸入輸出會隨著引數的更新變化巨大,也會導致我們這裡的μ,

σ μ,

σ變化巨大,所以不能簡單地將這裡的均值和標準差當作乙個定值。

所以我們在做梯度遞減的時候需要考慮μ,

σ μ,

σ的變化 z~

i=zi

−1m∑

mk=1

zk1m

∑mi=

1(zi

−1m∑

mk=1

zk)2

−−−−

−−−−

−−−−

−−−−

−−−−

−√z ~i

=zi−

1m∑k

=1mz

k1m∑

i=1m

(zi−

1m∑k

=1mz

k)2求偏導的時候運用上面的式子進行求導。

現在還有乙個問題,我們的測試資料輸入到網路,如何去求解測試資料的μ,

σ μ,

σ,因為測試的時候是單筆資料,μ μ

和σσ

無從談起

我們理想的解決辦法是,找乙個能反應樣本整體的μ,

σ μ,

σ,但是我們神經網路中每一層的輸入輸出都千差萬別,很難找到每一層合適的μ,

σ μ,

σ,所以我們的做法是,在訓練的時候儲存下來每一層μ,

σ μ,

σ,測試網路的時候,將μ,

σ μ,

σ的均值作為測試資料的μ,

σ μ,σ。

深度學習中的大牛

只怪自己太貪玩,知道的少,不小心發現大牛都是一起的,圈子是真的小。大牛總是自帶光環與神秘感。最近一直晃蕩在學術圈,真的是很想志輝哥哥的,哼,思想太容易開小差。牛1 geoffrey hinton 傑弗里 辛頓 geoffrey hinton,被稱為 神經網路之父 深度學習鼻祖 他曾獲得愛丁堡大學人工...

深度學習中的Batch Normalization

batch normalization原理 為了減少深度神經網路中的internal covariate shift,中提出了batch normalization演算法,首先是對 每一層 的輸入做乙個batch normalization 變換 批標準化 bactch normalization,...

深度學習中的Batch normalization

批規範化 batch normalization 是深度學習中經常見到的一種訓練trick,指在採用梯度下降法訓練dnn時,對網路層中每個mini batch的資料進行歸一化,使其均值變為0,方差變為1,其主要作用是緩解dnn訓練中的梯度消失 現象,加快模型的訓練速度。下面是作者原 中的演算法介紹 ...