所謂的「internal covariate shift」,internal指的是深層網路的隱藏層,是發生在網路內部的事情,而不是covariate shift問題只發生在輸入層。
訓練集的資料分布和**集的資料分布不一致,這樣的情況下如果我們在訓練集上訓練出乙個分類器,肯定在**集上不會取得比較好的效果。這種訓練集和**集樣本分佈不一致的問題就叫做「covariate shift」現象。
就是對輸入資料分布變換到0均值,單位方差的正態分佈
深層神經網路在做非線性變換前的啟用輸入值(就是那個x=wu+b,u是輸入)隨著網路深度加深或者在訓練過程中,
其分布逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分布逐漸往非線性函式的取值區間的上下限兩端靠
近(對於sigmoid函式來說,意味著啟用輸入值wu+b是大的負值或正值),所以這導致反向傳播時低層神經網路的
梯度消失,這是訓練深層神經網路收斂越來越慢的本質原因,而bn就是通過一定的規範化手段,把每層神經網路任
意神經元這個輸入值的分布強行拉回到均值為0方差為1的標準正態分佈,其實就是把越來越偏的分布強制拉回比較
標準的分布,這樣使得啟用輸入值落在非線性函式對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函式較
大的變化,意思是這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味著學習收斂速度快,能大大加快訓
練速度。
對於每個隱層神經元,把逐漸向非線性函式對映後向取值區間極限飽和區靠攏的輸入分布強制拉回到均值為0方差
為1的比較標準的正態分佈,使得非線性變換函式的輸入值落入對輸入比較敏感的區域,以此避免梯度消失問題。
這裡t層某個神經元的x(k)不是指原始輸入,就是說不是t-1層每個神經元的輸出,而是t層這個神經元的線性啟用x=wu+b,這裡的u才是t-1層神經元的輸出。某個神經元對應的原始的啟用x通過減去mini-batch內m個例項獲得的m個啟用x求得的均值e(x)並除以求得的方差var(x)來進行轉換。
我們訓練過程中採用batch 隨機梯度下降,上面的e(xk)指的是每一批訓練資料神經元xk的平均值;然後分母就是每一批資料神經元xk啟用度的乙個標準差了。
變換後某個神經元的啟用x形成了均值為0,方差為1的正態分佈,目的是把值往後續要進行的非線性變換的線性區拉動,增大導數值,增強反向傳播資訊流動性,加快訓練收斂速度
。但是這樣會導致網路表達能力下降,為了防止這一點,每個神經元增加兩個調節引數(scale和shift),這兩個引數是通過訓練來學習到的,用來對變換後的啟用反變換,使得網路表達能力增強,即對變換後的啟用進行如下的scale和shift操作,這其實是變換的反操作:
mcc(matthews correlation coefficient),這個指標本質上是用乙個訓練集資料和**集資料之間的相關係數,取值在[-1,1]之間,如果是1就是強烈的正相關,0就是沒有相關性,-1就是強烈的負相關。
在使用sigmoid啟用函式的時候,如果把資料限制到0均值單位方差,那麼相當於只使用了啟用函式中近似線性的部分,這顯然會降低模型表達能力。
可能學完了上面的演算法,你只是知道它的乙個訓練過程,乙個網路一旦訓練完了,就沒有了min-batch這個概念了。測試階段我們一般只輸入乙個測試樣本,看看結果而已。因此測試樣本,前向傳導的時候,上面的均值u、標準差σ 要**來?其實網路一旦訓練完畢,引數都是固定的,這個時候即使是每批訓練樣本進入網路,那麼bn層計算的均值u、和標準差都是固定不變的。我們可以採用這些數值來作為測試樣本所需要的均值、標準差,於是最後測試階段的u和 σ 計算公式如下:
對於均值來說直接計算所有batch u值的平均值;然後對於標準偏差採用每個batch σb的無偏估計。最後測試階段,bn的使用公式就是:
對於均值來說直接計算所有batch u值的平均值;然後對於標準偏差採用每個batch σb的無偏估計。最後測試階段,bn的使用公式就是:
1、不僅僅極大提公升了訓練速度,收斂過程大大加快;
2、還能增加分類效果,一種解釋是這是類似於dropout的一種防止過擬合的正則化表達方式,所以不用dropout也能達到相當的效果;
3、另外調參過程也簡單多了,對於初始化要求沒那麼高,而且可以使用大的學習率等。
啟用函式包含飽和啟用函式與非飽和啟用函式。常見的sigmoid 和tanh 屬於「飽和啟用函式」,而relu及其變體則屬於「非飽和啟用函式」。通常情況下,使用「非飽和啟用函式」的優勢在於兩點:
1.首先,「非飽和啟用函式」能解決所謂的「梯度消失」問題。
2.其次,它能加快收斂速度。
層數比較多的神經網路模型在訓練的時候會出現梯度消失(gradient vanishing problem)和梯度**(gradient exploding problem)問題。梯度消失問題和梯度**問題一般會隨著網路層數的增加變得越來越明顯。
對於下圖所示中含有3個隱藏層的神經網路:
產生的梯度消失問題:隱藏層中靠近輸出層的hidden layer 3的權值更新相對正常,但是靠近輸入層的hidden layer1的權值更新會變得很慢,導致靠近輸入層的隱藏層權值幾乎不變,扔接近於初始化的權值。這就導致hidden layer 1 相當於只是乙個對映層,對所有的輸入做了乙個函式對映,這時此深度神經網路的學習就等價於只有後幾層的隱藏層網路在學習。
梯度**的情況:當初始的權值過大,靠近輸入層的hidden layer 1的權值變化比靠近輸出層的hidden layer 3的權值變化更快,就會引起梯度**的問題。
梯度消失和梯度**問題都是因為網路太深,網路權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮一下三種方案解決:
1、用relu、leaky-relu、p-relu、r-relu、maxout等替代sigmoid函式。
2、用批量標準化,即batch normalization。
3、lstm的結構設計也可以改善rnn中的梯度消失問題。
歸一化與標準化
特點 對不同特徵維度的伸縮錶換的目的是使各個特徵維度對目標函式的影響權重是一致的,即使得那些扁平分布的資料伸縮變換成類圓形。這也就改變了原始資料的乙個分布。好處 1 提高迭代求解的收斂速度 2 提高迭代求解的精度 方法 1 min max標準化 也成為離差標準化,對原始資料的的線性變換,結果值對映到...
歸一化與標準化
1 提公升訓練的速度 2 提公升模型的精度 3 深度模型中能夠防止梯度 min max 歸一化 x x x min x max x min 將x 對映到 0,1 之間的乙個數 z score 標準化 均值為0 標準差為1 當有新的樣本加入時,min max 計算量小,z score 需要重新計算均值...
軟體復用與標準化
1 引言 1.1 基本概念 軟體復用是指重複使用 為了復用目的而設計的軟體 的過程 tracz 95 相應地,可復用軟體是指為了復用目的而設計的軟體.與軟體復用的概念相關,傳統產業的發展,其基本模式均是符合標準的零部件 構件 生產以及基於標準構件的產品生產 組裝 其中,構件是核心和基礎,復用 是必需...