NLP经典论文:Layer Normalization 笔记
NLP經典論文:Layer Normalization 筆記
- 論文
- 介紹
- 模型結構
- batch normalization 和 layer normalization 的相同點
- batch normalization 和 layer normalization 的不同點
- 相關視頻
- 文章部分翻譯
- Abstract
- 1 Introduction
- 2 Background
- 3 Layer normalization
- 3.1 Layer normalized recurrent neural networks
- 5 Analysis
- 5.1 Invariance under weights and data transformations
- 5.2 Geometry of parameter space during learning
- 5.2.1 Riemannian metric
- 5.2.2 The geometry of normalized generalized linear models
- Supplementary Material
- Application of layer normalization to each experiment
- 相關的筆記
- 相關代碼
- pytorch
- tensorflow
- keras
- pytorch API:
- tensorflow API
論文
NLP論文筆記合集(持續更新)
原論文:《Layer Normalization》
CV經典論文:Batch Normalization 筆記
介紹
2016-07發表的文章,提出了 layer normalization 方法。batch normalization 是一種減少訓練時間的方法,詳細參考CV經典論文:Batch Normalization 筆記。在NLP任務中,如果將該方法應用于RNN網絡,則需要為每一個時間步訓練 batch normalization 的參數。但這樣會出現問題,因為輸入的句子長度并不固定,使得基于數據集計算用于 normalization 的均值 μ\muμ 和方差 σ\sigmaσ,在實際中效果并不好,而且預測時,對于輸入句子長度比訓練時要長的情況,在長了的句段,RNN在該時間步上也沒有用于normalization 的均值和方差。為解決這個問題,該文章提出了 layer normalization 方法。
模型結構
來源:mingo_敏 https://blog.csdn.net/shanglianlm/article/details/85075706
圖中 C 代表句子長度 seqlen,H,W 代表 embedding 的維度,N 代表 batch-size。
batch normalization 和 layer normalization 的相同點
batch normalization 和 layer normalization 都是先通過計算均值 μ\muμ 和方差 σ\sigmaσ 來 normalize 輸入 x∈Rseqlen×emb\rm x\in R^{ seqlen \times emb}x∈Rseqlen×emb,再將 normalized 輸入 x^\rm \hat{x}x^ 傳入仿射函數:y=γx+β\rm y =\gamma x + \betay=γx+β, 其中自適應增益 γ\gammaγ 和偏置 β\betaβ 是需要學習的2個參數。
normalization + 仿射的計算如下:
μ←1m∑i=1mxi//均值\mu \leftarrow \frac{1}{m}\sum\limits_{i=1}^mx_i \quad\quad\quad\quad\quad// \text{均值} μ←m1?i=1∑m?xi?//均值σ2←1m∑i=1m(xi?μ)2//方差\sigma^2 \leftarrow \frac{1}{m}\sum\limits_{i=1}^m(x_i-\mu)^2 \quad\quad\quad\quad\quad// \text{方差} σ2←m1?i=1∑m?(xi??μ)2//方差x^i←xi?μσ2+?//normalize\hat{x}_i \leftarrow \frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}} \quad\quad\quad\quad\quad// \text{normalize} x^i?←σ2+??xi??μ?//normalizeyi=γx^i+β//縮放和平移y_{i} = \gamma \hat{x}_i+\beta \quad\quad\quad\quad\quad// \text{縮放和平移} yi?=γx^i?+β//縮放和平移?\epsilon? 是一個加在方差上的常數,不需要學習,一般設為極小的值。
在RNN中,結構可參考NLP經典論文:Sequence to Sequence、Encoder-Decoder 、GRU 筆記,一層的隱藏單元數量為 HHH,對于 batch normalization 和 layer normalization 來說,需要學習的 γ\gammaγ 和 β\betaβ 的參數數量都為 HHH 個。
在 Transformer 中,結構可參考NLP經典論文:Attention、Self-Attention、Multi-Head Attention、Transformer 筆記,layer normalization 層需要學習的 γ\gammaγ 和 β\betaβ 的參數數量都為 dimembeddingdim_{embedding}dimembedding? 個。
batch normalization 和 layer normalization 的不同點
他們不同的地方在于計算均值 μ\muμ 和方差 σ\sigmaσ 的方式不一樣。batch normalization 按照綠色箭頭方向計算,共計算得到 seqlen×dimembeddingseqlen \times dim_{embedding}seqlen×dimembedding? 個均值 μ\muμ 和方差 σ\sigmaσ,這些值會保留在網絡當中用于預測;layer normalization 則按照紅色箭頭方向計算,共計算得到 batch-size×seqlenbatch\text{-}size \times seqlenbatch-size×seqlen 個均值 μ\muμ 和方差 σ\sigmaσ,這些值不會會保留在網絡當中,在預測時會重新計算。
相關視頻
文章部分翻譯
Abstract
(注:summed input 指的是 y=g(Wx+b)y=g(Wx+b)y=g(Wx+b) 中的 WxWxWx,其中 xxx 是該層的輸入,g(?)g(\cdot)g(?) 是激活函數。)
訓練最先進的深度神經網絡在計算上非常高成本的。減少訓練時間的一種方法是 normalize 神經元的激活。最近引入的一種稱為 batch normalization 的技術,使用 mini-batch 訓練樣例對一個神經元的 summed input 的分布,計算均值和方差,然后使用均值和方差 normalize 每個訓練樣例對該神經元的 summed input。這大大縮短了前饋神經網絡的訓練時間。然而,batch normalization 的效果取決于 mini-batch size,如何將其應用到RNN中也并不顯而易見。在本文中,我們從單個訓練樣例在一個層中對所有神經元的 summed inputs,計算出用于 normalization 的均值和方差,來將 batch normalization 轉換為 layer normalization。與 batch normalization 一樣,我們也為每個神經元提供其自身的自適應偏置和增益,這些偏置和增益應用于 normalization 之后,于非線性激活之前。與 batch normalization 不同,layer normalization 在訓練和測試時執行完全相同的計算。通過在每個時間步分別計算 normalization 統計量,也可以直接應用于RNN。layer normalization 對于穩定循環網絡中的隱藏狀態的動態過程非常有效。實驗上,我們表明,與先前發布的技術相比,layer normalization 可以顯著減少訓練時間。
1 Introduction
在計算機視覺[Krizhevsky et al.,2012]和語音處理[Hinton et al.,2012]的各種監督學習任務中,使用某種形式的隨機梯度下降訓練的深度神經網絡已被證明大大優于以前的方法。但是最先進的深層神經網絡通常需要很多天的訓練。通過在不同機器上計算不同訓練樣例子集的梯度或將神經網絡本身拆分到多臺機器上,可以加快學習速度[Dean等人,2012],但這可能需要大量通信和復雜軟件。隨著并行化程度的增加,它也會導致訓練收益的迅速減少。正交方法是修改在神經網絡前向傳遞中執行的計算,以使學習更容易。最近,提出了 batch normalization [Ioffe和Szegedy,2015],通過在深度神經網絡中加入額外的 normalization 階段來減少訓練時間。normalization 使用訓練數據中的平均值和標準偏差對每個 summed input 進行 normalization。使用 batch normalization 訓練的前饋神經網絡,即使使用簡單的SGD也能更快地收斂。除了訓練時間的改進外,batch 的統計量的隨機性在訓練期間也起到了正則化的作用。
盡管 batch normalization 很簡單,但它需要 summed input 的統計量的運行平均值。在具有固定深度的前饋網絡中,每個隱藏層很容易存儲各自的統計量。然而,在循環神經網絡(RNN)中,循環神經元的 summed input 通常隨序列長度的變化而變化,因此對RNN應用 batch normalization 似乎需要不同時間步的不同統計信息。此外,batch normalization 不能應用于在線學習任務,也不能應用于 mini-batch 必須很小的超大分布式模型。
本文介紹了一種簡單的 normalization 方法——layer normalization,以提高各種神經網絡模型的訓練速度。與 batch normalization 不同,該方法直接從隱層神經元的 summed inputs 估計 normalization 統計量,因此 normalization 不會在訓練樣例之間引入任何新的依賴關系。我們證明了 layer normalization 對于RNN非常有效,并且改進了現有幾種RNN模型的訓練時間和泛化性能。
2 Background
前饋神經網絡是從輸入樣例 x\mathrm{x}x 到輸出向量 yyy 的非線性映射。考慮深度前饋神經網絡中的第 lll 個隱藏層,并且讓 ala^lal 為該層中對所有神經元的 summed inputs 的矢量表示。通過線性投影計算 summed inputs,加權矩陣 WlW^lWl 和自底向上輸入 hlh^lhl 如下所示:ail=wil?hlhil+1=f(ail+bil)a^l_i={w^l_i}^\top h^l \quad\quad h_i^{l+1}=f(a_i^l+b_i^l) ail?=wil??hlhil+1?=f(ail?+bil?)其中 f(?)f(\cdot)f(?) 是對應元素逐個相乘的非線性函數,wilw^l_iwil? 是第 iii 個隱藏單元的傳入權重,bilb_i^lbil? 是標量偏置參數。使用基于梯度的優化算法學習神經網絡中的參數,梯度通過反向傳播計算。
(注:我們將訓練過程中深層網絡內部節點分布的變化稱為 Internal Covariate Shift。)
深度學習的挑戰之一是,一層中權重的梯度高度依賴于前一層神經元的輸出,特別是當這些輸出以高度相關的方式變化時。batch normalization [Ioffe和Szegedy,2015]是為了減少這種不希望得到的“covariate shift”。該方法 normalize 了訓練樣例中每個隱藏單元的 summed inputs。具體地說,對于第 lll 層中的第 iii 個 summed input,batch normalization 方法根據其在數據分布下的方差重新縮放 summed inputaˉil=gilσil(ail?μil)μil=Ex~P(x)[ail]σil=Ex~P(x)[(ail?μil)2](2)\bar{a}_i^l=\frac{g_i^l}{\sigma _i^l}(a_i^l-\mu _i^l)\quad\quad \mu_i^l=\underset{\mathbf{x}\sim P(\mathbf{x})}{\mathbb{E}}[a_i^l]\quad\quad \sigma _i^l=\sqrt{\underset{\mathbf{x}\sim P(\mathbf{x})}{\mathbb{E}}[(a_i^l-\mu _i^l)^2]}\quad\quad(2) aˉil?=σil?gil??(ail??μil?)μil?=x~P(x)E?[ail?]σil?=x~P(x)E?[(ail??μil?)2]?(2)其中,aˉil\bar{a}_i^laˉil? 是第 lll 層中的第 iii 個隱藏單元的 normalized summed input,gig_igi? 是在非線性激活函數之前縮放 normalized 激活的增益參數。注:期望值是在整個訓練數據集分布下的。準確計算公式(2)中的期望值通常是不切實際的,因為它需要使用當前這組權重的整個訓練數據集的向前傳播。相反,使用當前 mini-batch 的實驗樣本估算 μ\muμ 和 σ\sigmaσ。這就限制了 mini-batch 的大小,很難應用于循環神經網絡。
3 Layer normalization
我們現在考慮 layer normalization 方法,其目的是克服 batch normalization 的缺點。
請注意,一層輸出的變化往往會導致下一層的 summed inputs 發生高度相關的變化,特別是那些使用ReLU的單元,它的輸出可能發生很大變化。這表明,可以通過固定各層內 summed inputs 的平均值和方差來減少“covariate shift”問題。因此,我們計算同一層中所有隱藏單元的 layer normalization 統計量,如下所示:μl=1H∑i=1Hailσl=1H∑i=1H(ail?μl)2(3)\mu^l =\frac{1}{H}\sum\limits_{i=1}^Ha_i^l\quad\quad \sigma^l =\sqrt {\frac{1}{H}\sum\limits_{i=1}^H(a_i^l-\mu^l)^2}\quad\quad (3) μl=H1?i=1∑H?ail?σl=H1?i=1∑H?(ail??μl)2?(3)其中 HHH 表示層中隱藏單元的數量。等式(2)和等式(3)之間的區別在于,在 layer normalization 下,層中的所有隱藏單元共享相同的歸一化項 μ\muμ 和 σ\sigmaσ,但不同的訓練樣例具有不同的 normalization 項。與 batch normalization 不同,layer normalization 不會對 mini-batch 的大小施加任何約束,它可以用于 batch size 為1的純在線系統。
3.1 Layer normalized recurrent neural networks
最近的 sequence to sequence 模型[Sutskever等人,2014]利用緊湊的循環神經網絡來解決自然語言處理中的序列預測問題。在NLP任務中,對于不同的訓練樣例,有不同的句子長度是很常見的。這在RNN中很容易處理,因為在每個時間步使用相同的權重。但是,當我們以明顯的方式對RNN應用 batch normalization 時,我們需要為序列中的每個時間步計算和存儲單獨的統計信息。如果測試序列比任何訓練序列都長,這是有問題的。layer normalization 沒有這樣的問題,因為它的 normalization 項只依賴于當前時間步對于層的 summed inputs。它也只有一組在所有時間步上共享的增益和偏置參數。
在標準RNN中,根據當前輸入 xtx^txt 和先前隱藏狀態向量 ht?1h^{t?1}ht?1 計算循環層中的 summed inputs,計算為 at=Whhht?1+Wxhxta^t=W_{hh}h^{t?1}+W_{xh}x^tat=Whh?ht?1+Wxh?xt。該層使用類似于等式(3)的額外歸一化項重新中心化與縮放其激活:ht=f[gσt⊙(at?μt)+b]μt=1H∑i=1Haitσt=1H∑i=1H(ait?μt)2(4)\mathrm{h}^t=f\Big [\frac{\mathrm{g}}{\sigma^t}\odot(\mathrm{a}^t-\mu^t)+\mathrm{b}\Big ]\quad\quad \mu^t=\frac{1}{H}\sum\limits_{i=1}^Ha_i^t\quad\quad \sigma^t =\sqrt {\frac{1}{H}\sum\limits_{i=1}^H(a_i^t-\mu^t)^2}\quad\quad (4) ht=f[σtg?⊙(at?μt)+b]μt=H1?i=1∑H?ait?σt=H1?i=1∑H?(ait??μt)2?(4)其中 WhhW_{hh}Whh? 是循環的 hidden-to-hidden 的權重,WxhW_{xh}Wxh? 是自底向上 input-to-hidden 的權重。⊙\odot⊙ 是兩個向量之間的元素相乘。b\mathrm{b}b 和 g\mathrm{g}g 定義為與 ht\mathrm{h}^tht 尺寸相同的偏置和增益參數。
在標準RNN中,循環單元的 summed inputs 的平均幅度在每個時間步都有增長或收縮的趨勢,導致梯度爆炸或消失。在 layer normalized RNN中,normalization 項使得在一個層中的對所有 summed inputs 的重新縮放保持不變,從而產生更穩定的 hidden-to-hidden 的動態過程。
5 Analysis
在本節中,我們將研究不同 normalization 方案的不變性。
5.1 Invariance under weights and data transformations
提出的 layer normalization 與 batch normalization 和權重 normalization 有關。盡管它們的 normalization 標量的計算方式不同,但這些方法可以概括為通過兩個標量 μ\muμ 和 σ\sigmaσ對神經元的總輸入 aia_iai? 進行 normalization。在 normalization 后,他們還學習每個神經元的自適應偏置 bbb 和增益 ggg。hi=f(giσi(ai?μi)+bi)h_i = f(\frac{g_i}{\sigma_i} (a_i-\mu_i) + b_i) hi?=f(σi?gi??(ai??μi?)+bi?)注意,對于 layer normalization 和 batch normalization,μ\muμ 和 σ\sigmaσ 根據公式2和3計算。在權重 normalization 中,μ\muμ 為0,σ=∥w∥2\sigma = \Vert w\Vert _2σ=∥w∥2?。
表1突出顯示了三種 normalization 方法的不變性結果。
Weight re-scaling and re-centering:首先,觀察在 batch normalization 和權重 normalization 下,對單個神經元傳入權重 wiw_iwi? 的任何重新縮放對神經元的 normalized summed inputs 沒有影響。精確地說,在 batch normalization 和權重 normalization 下,如果權重向量按 δ\deltaδ 縮放,那么兩個標量 μ\muμ 和 σ\sigmaσ aia_iai? 也將按 δ\deltaδ 縮放。normalized summed inputs 在縮放前后保持不變。因此,batch normalization 和權重 normalization 對權重的重新縮放是不變的。另一方面,layer normalization 對于單個權重向量的單獨縮放不是不變的。相反,layer normalization 對整個權重矩陣的縮放是不變的,對權重矩陣中所有傳入權重的平移量是不變的。假設有兩組模型參數 θ\thetaθ,θ′\theta'θ′,其權重矩陣為 WWW 和 W′W'W′ 是不一樣的,W′W'W′ 通過比例因子 δ\deltaδ 縮放并且所有傳入權重也被一個常數向量 γ\gammaγ 平移,即 W′=δW+1γ?W'=\delta W+ 1\gamma ^{\top}W′=δW+1γ?. 在 layer normalization 下,兩個模型有效地計算相同的輸出:h′=f(gσ′(W′x?μ′)+b)=f(gσ′((δW+1γ?)x?μ′)+b)=f(gσ(Wx?μ)+b)=h.\mathrm{h}' = f(\frac{\mathrm{g}}{\sigma'} (W'\mathrm{x}-\mu') + \mathrm{b}) = f(\frac{\mathrm{g}}{\sigma'} ((\delta W+ 1\gamma ^{\top})\mathrm{x}-\mu') + \mathrm{b}) \\ = f(\frac{\mathrm{g}}{\sigma} (W\mathrm{x}-\mu) + \mathrm{b}) =h. h′=f(σ′g?(W′x?μ′)+b)=f(σ′g?((δW+1γ?)x?μ′)+b)=f(σg?(Wx?μ)+b)=h.請注意,如果 normalization 僅應用于權重之前的輸入,那么模型將不會對權重的重新縮放和重新居中保持不變。
Data re-scaling and re-centering:通過證實神經元的 summed inputs 在變化下保持不變,我們可以證明所有的 normalization 方法對重新縮放數據集是不變的。此外,layer normalization 對于單個訓練樣例的重新縮放是不變的,因為等式(3)中的 normalization 標量 μ\muμ 和 σ\sigmaσ aia_iai? 僅依賴于當前輸入數據。讓 x′\mathrm{x}'x′ 是一個新的數據點,通過 δ\deltaδ 重新縮放 x\mathrm{x}x 獲得。那么我們有,hi′=f(giσ′(wi?x′?μ′)+bi)=f(giδσ(δwi?x?δμ)+bi)=hih_i' = f(\frac{g_i}{\sigma'} (w_i^{\top} \mathrm{x}'-\mu') + b_i) = f(\frac{g_i}{\delta \sigma} (\delta w_i^{\top} \mathrm{x}-\delta \mu) + b_i) =h_i hi′?=f(σ′gi??(wi??x′?μ′)+bi?)=f(δσgi??(δwi??x?δμ)+bi?)=hi?很容易看出,在 layer normalization 下,重新縮放單個數據點不會改變模型的預測。與 layer normalization 中權重矩陣的重新中心化類似,我們還可以證明 batch normalization 對數據集的重新中心化是不變的。
5.2 Geometry of parameter space during learning
我們研究了模型預測在參數重新中心化和縮放下的不變性。然而,在不同的參數化下,學習的行為可能會非常不同,即使模型表達了相同的底層功能。在本節中,我們將通過參數空間的幾何和流形來分析學習行為。我們證明了 normalization 標量 σ\sigmaσ 可以隱式地降低學習率,使學習更加穩定。
5.2.1 Riemannian metric
統計模型中的可學習參數形成一個光滑流形,由模型的所有可能輸入輸出關系組成。對于輸出為概率分布的模型,度量此流形上兩點的分隔的自然方法是其模型輸出分布之間的 Kullback-Leibler 散度。在 KL 散度度量下,參數空間是黎曼流形。
黎曼流形的曲率完全由其黎曼度量所獲得,黎曼度量的二次型表示為 ds2ds^2ds2。這是參數空間中某一點在切線空間中的無窮小距離。直觀地說,它沿切線方向測量參數空間中模型輸出的變化。之前曾研究過 KL 下的黎曼度量[Amari,1998],并使用 Fisher 信息矩陣證明其在二階泰勒展開下具有良好的近似性:
其中,δ\deltaδ 是參數的微小變化。上面的黎曼度量給出了參數空間的幾何視圖。下面對黎曼度量的分析為 normalization 方法如何幫助訓練神經網絡提供了一些見解。
5.2.2 The geometry of normalized generalized linear models
我們將幾何分析的重點放在廣義線性模型上。以下分析的結果可以很容易地應用于理解深度神經網絡,該網絡具有 Fisher 信息矩陣的塊對角近似,其中每個塊對應于單個神經元的參數。
廣義線性模型(GLM)可被視為使用權重向量 www 和偏置標量 bbb 對指數族的輸出分布進行參數化。為與前面章節一致,GLM 的對數似然可使用 summed inputs aaa 寫成如下:
式中,f(?)f(\cdot)f(?) 是神經網絡中模擬非線性的傳遞函數,f′(?)f'(\cdot)f′(?) 是傳遞函數的導數,η(?)\eta (\cdot)η(?) 是實值函數,c(?)c (\cdot)c(?) 是對數配分函數。?\phi? 是縮放輸出方差的常數。假設 HHH 維輸出向量 y=[y1,y2,???,yH]\mathrm{y}=[y_1,y_2,···,y_H]y=[y1?,y2?,???,yH?] 使用 HHH 個獨立的 GLM 和 log?P(y∣x;W,b)=∑i=1Hlog?P(yi∣x;wi,bi)\log P(\mathrm{y}|\mathrm{x};W,\mathrm{b})=\sum_{i=1}^H \log P(y_i |\mathrm{x};w_i,b_i)logP(y∣x;W,b)=∑i=1H?logP(yi?∣x;wi?,bi?) 建模。設 WWW 為權重矩陣,其行為單個 GLM 的權重向量,b\mathrm{b}b 表示長度 HHH 的偏置向量,vec(?)\rm vec (\cdot)vec(?)表示 Kronecker 向量算子。多維 GLM 關于其參數 θ=[w1?,b1,?,wH?,bH]?=vec([W,b]?)\theta =[w_1^{\top},b_1,\cdots,w_H^{\top},b_H]^{\top} = \mathrm{vec}([W,\mathrm{b}]^{\top})θ=[w1??,b1?,?,wH??,bH?]?=vec([W,b]?) 的 Fisher 信息矩陣只是數據特征和輸出協方差矩陣的預期 Kronecker 乘積:
我們通過將 normalization 方法獲得多個 normalized GLM,該方法通過 μ\muμ 和 σ\sigmaσ 應用于原始模型中的 summed inputs aaa 。在不喪失一般性的情況下,我們將 Fˉ\bar{F}Fˉ 表示為 normalized 多維GLM下的 Fisher 信息矩陣,帶有額外增益參數θ=vec([W,b]?)\theta = \mathrm{vec}([W,\mathrm{b}]^{\top})θ=vec([W,b]?):
Implicit learning rate reduction through the growth of the weight vector:請注意,與標準 GLM 相比,沿權重向量 wiw_iwi? 方向的塊 Fˉij\bar{F}_{ij}Fˉij?由增益參數和 normalization 標量 σi\sigma_iσi? 縮放。如果權重向量 wiw_iwi? 的范數增長兩倍大,即使模型的輸出保持不變,Fisher 信息矩陣也將不同。沿 wiw_iwi? 方向的曲率將變為1/2倍,因為 σi\sigma_iσi? 也將是兩倍大。因此,對于 normalized 模型中相同參數的更新,權重向量的范數有效地控制了權重向量的學習率。在學習過程中,很難改變范數較大的權重向量的方向。因此,normalization 方法對權重向量具有隱含的“提前停止”效應,并有助于穩定學習,使其趨于收斂。
Learning the magnitude of incoming weights:在標準化模型中,傳入權重的大小由增益參數顯式參數化。在學習過程中,我們比較了在 normalized GLM 中更新增益參數和在原始參數化下更新等效權重的大小之間模型輸出的變化。沿 Fˉ\bar{F}Fˉ 中增益參數的方向可獲得傳入權重大小的幾何視圖。我們表明,標準 GLM 沿輸入權重大小的黎曼度量通過其輸入的范數進行縮放,而 batch normalized 和 layer normalized 模型的增益參數的學習僅取決于預測誤差的大小。因此,在標準化模型中學習傳入權重的大小比在標準模型中對輸入及其參數的縮放更具魯棒性。詳細推導見附錄。
Supplementary Material
Application of layer normalization to each experiment
本節描述了如何將 layer normalization 應用到每一篇論文的實驗中。為了便于記法,我們將 layer normalization 定義為具有兩組自適應參數(增益 α\alphaα 和偏差 β\betaβ)的函數映射 LN:RD→RDLN:R^D \rightarrow R^DLN:RD→RD 。
LN(z:α,β)=z?μσ⊙α+βLN(\mathrm{z}:\alpha,\beta)=\frac{\mathrm{z}-\mu}{\sigma}\odot \alpha+\beta LN(z:α,β)=σz?μ?⊙α+βμ=1D∑i=1Dzi,σ=1D∑i=1D(zi?μ)2,\mu =\frac{1}{D}\sum\limits_{i=1}^Dz_i,\quad\quad \sigma =\sqrt {\frac{1}{D}\sum\limits_{i=1}^D(z_i-\mu)^2}, μ=D1?i=1∑D?zi?,σ=D1?i=1∑D?(zi??μ)2?,其中,ziz_izi? 是向量 z\mathrm{z}z 的第 iii 個元素。
相關的筆記
模型優化之Layer Normalization
相關代碼
pytorch
Docs > torch.nn > LayerNorm
torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, device=None, dtype=None)
如本文Layer Normalization所述,對一個 mini-batch 的輸入應用 Layer Normalization
計算最后 D 個維度的均值和標準差,其中 D 是 normalized_shape 的維度。例如,如果 normalized_shape 為(3,5)(二維形狀),則計算輸入的最后兩個維度的均值和標準差(即 input.mean((-2, -1)) )。如果 elementwise_affine = True,則 γ\gammaγ 和 β\betaβ 是 normalized_shape 的仿射變換參數。標準偏差通過偏差估計計算,相當于 torch.var(input, unbiased=False)。
注意:
與 Batch Normalization 和 Instance Normalization 不同,Batch Normalization 和 Instance Normalization 使用 affine 選項為每個通道/平面應用標量比例因子和偏置,Layer Normalization 使用 elementwise_affine 選項為每個元素應用比例因子和偏置。
該層使用從訓練和 evaluation 模式中的輸入數據計算的統計量。
Parameters:
?\bullet \quad?normalized_shape (int or list or torch.Size) —— 輸入形狀從預期輸入的大小為 [?×normalized_shape[0]×normalized_shape[1]×…×normalized_shape[?1]][?×normalized\_shape[0]×normalized\_shape[1]×…×normalized\_shape[?1]][?×normalized_shape[0]×normalized_shape[1]×…×normalized_shape[?1]]。如果使用單個整數,它將被視為一個單例列表,并且該模塊將在最后一個維度上進行 normalization,該維度預計是該特定大小的維度。
?\bullet \quad?eps —— 為數值穩定性增加分母的值。默認值:1e-5,公式中的 ?\epsilon?
?\bullet \quad?elementwise_affine —— 一個布爾值,當設置為 True 時,此模塊將每元素的可學習的仿射參數初始化為1(用于權重)和0(用于偏置)。默認值:True。
Variables:
?\bullet \quad?~LayerNorm.weight —— 形狀為 normalized_shape 的模塊的可學習權重當 elementwise_affine 設為 True。這些值被初始化為1。
?\bullet \quad?~LayerNorm.bias —— 形狀為 normalized_shape 的模塊的可學習偏置當 elementwise_affine 設為 True。這些值被初始化為0。
Shape:
?\bullet \quad?Input: (N, *)
?\bullet \quad?Output: (N, *)(same shape as input)
tensorflow
keras
pytorch API:
tensorflow API
總結
以上是生活随笔為你收集整理的NLP经典论文:Layer Normalization 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL DATENAME(month,g
- 下一篇: 树莓派 linux 私有云,树莓派搭建私