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