normalization

Covariate shift:
在learning algorithm學習的過程中, input values的改變的現象.
這種問題也存在與train和test數據不一樣源的問題.
因爲當input distribution改變的時候, machine learning algorithm的表現會改變,這就是這個問題影響性能緣由.網絡

Basic reason: 當變量中間高階相關的時候, 合適的學習率變化很大.(the appropriate learning rate changes wildly when there are high-order interactions between variables)app

從convex optimization解釋:
loss function: f(w), 進行二階泰勒展開, g表示梯度, H表示Hessian矩陣關於(f(w))的dom

利用梯度降低, 朝着梯度的方向走, 學習率是, 更新weight以後的loss function爲ide

若是上述的公式當中, 沒有後面的二階項的時候, 獲得的loss function是嚴格降低的. 可是, 若是後面的二階項的值很大的時候, 最後獲得的loss function可能會增大, 也就是說在二階影響超過一階影響的時候, 會起到反的效果.函數

當loss曲面很陡的時候, 若是說學習率很大, 那麼,可能會讓loss增長.可是若是loss曲面光滑, 就能夠利用相對而言比較大的學習率
「ill-conditioning」 Hessian Matrix:
當梯度是H的最大特徵值的特徵向量的時候, H=P^(inverP). 這個時候Hg = lambda*g, 由於Hessian矩陣須要是非奇異的對稱陣.在這裏, 若是學習率足夠大的化,loss就多是朝着正向方向發展的.性能

因此按照上面的狀況分析, 只有小的學習率尺度才能保證loss穩步降低.學習

這裏只是引入了二階分析, 當更高階的影響引入的時候, 梯度的更新會帶來更加沒法預期的變化.優化

從這個角度理解Batch Normalization:
BN讓每一層的輸入和他們自己的值無關, 這就抑制了高階項的影響.
原博文做者在這裏的解釋:
多是因爲NN當中的激活函數, 以及激活函數的量級(magnitudes)(magnitudes of activations decided by the mean and variance).由於這個range of magnitudes, 讓梯度的更新的表現比較好.(我也覺着這裏很懵逼, 這個解釋讓我很方).ui

BN最大的優勢是讓mean和variance不是讓多層的交互決定的, 而是由gamma和beta這兩個參數決定的. 這也是BN最大的特性以及提高性能的主要緣由.code

BN的侷限性: 對mini-batch的依賴性.
這個依賴性會致使兩個主要問題:(這裏的mean和variance在不一樣的mini-batch之間會變化)

a. mini-batch的size越小, 會增大方差的估計, 在BN當中用SGD的時候, 須要當心的選擇batch_size

b. 這致使了, 這個在RNN當中很難將這個應用到recurrent connections當中.
在RNN當中, 每一個時間步有不一樣的統計值. 也就是說, 必須在不一樣的時間步分開計算BN. 並且根據BPTT的更新, 咱們必須在每一個時間步都記錄這些統計量.

這裏, mini-batch的值不能過小, 致使了在online learning(每次處理一個樣本)以及對噪聲極度敏感的reinfocement learning不大使用, 也讓它在RNN當中不使用.

WEIGHT NORMALIZATION:(openai)
對每一層的權重進行normalization:

weight normalizaton: separates the norm of the weight vector from its direction, 這裏是對weight的各個不一樣的方向分別進行歸一化.
這裏利用梯度降低對g和v同時進行優化.

優勢:
weight normalization比BN的速度快.
在CNN當中, CNN的權重數量遠小於輸入數量, 因此weight normalization的計算損耗比較小.

在論文當中(本身沒有看論文):
做者在WN以後加了mean-only BN(雖然比單純的WN損耗大, 可是不用除以std, 因此計算損耗要小一點)

做者說他這樣作的優勢有:

  1. 讓activations的mean和v無關:
    單獨的(independently) WN不可以讓每一層層從weights中計算獲得的activations的均值互相隔離, 會致使不一樣層間的high-level的相關性, Mean-only batch normalization能夠解決這個問題.

  2. 在activations加入」gentle noise」:
    BN的一個很差的地方是, 因爲在mini-batch計算利用了noisy estimates, 因此在activations引入了隨機噪聲.
    這個在一些應用當中有regularization effect, 可是在某一些noise-sensitive domain會有潛在的壞處, 相似於reinforcement learning.這個噪聲因爲均值估計產生.因爲大數定理,activations祭祀與normally distributed, 因此能夠說是gentler noise.

(感受仍是對weight normalization略懵逼,)

Layer Normalization:(Geoffery Hinton)
BN是在batch dimension的維度上面normalize the input features;
LN 是在features’ dimensions上面normalize輸入.
Xij 是輸入的第i,j-th元素, 第一個維度表示batch, 第二個維度表示features.
BN:

LN:

區別:
layer normalization的統計計算在不一樣的樣本之間不相關. 因此LN不是簡單的從新參數化網絡(reparameterization of the network).
LN通常用於RNN.

參考文獻:  
圖見這裏吧, 之後補.天知道爲啥我加了weight normalization個人網絡爲何那麼渣
http://mlexplained.com/2018/01/10/an-intuitive-explanation-of-why-batch-normalization-really-works-normalization-in-deep-learning-part-1/
http://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/
相關文章
相關標籤/搜索