深度学习(二十四)——L2 Normalization, Attention(1)
L2 Normalization
L2 Normalization本身并不復(fù)雜,然而多數(shù)資料都只提到1維的L2 Normalization的計算公式:
x=[x1,x2,…,xd]y=[y1,y2,…,yd]y=x∑di=1x2i ̄ ̄ ̄ ̄ ̄ ̄ ̄√=xxTx ̄ ̄ ̄ ̄√x=[x1,x2,…,xd]y=[y1,y2,…,yd]y=x∑i=1dxi2=xxTx
對于多維L2 Normalization幾乎未曾提及,這里以3維tensor:A[width, height, channel]為例介紹一下多維L2 Normalization的計算方法。
多維L2 Normalization有一個叫axis(有時也叫dim)的參數(shù),如果axis=0的話,實際上就是將整個tensor flatten之后,再L2 Normalization。這個是比較簡單的。
這里說說axis=3的情況。axis=3意味著對channel進(jìn)行Normalization,也就是:
Bxy=∑z=0ZA2xyz ̄ ̄ ̄ ̄√Cxyz=AxyzBxyDxyz=Cxyz?SzBxy=∑z=0ZAxyz2Cxyz=AxyzBxyDxyz=Cxyz?Sz
一般來說,求出C被稱作L2 Normalization,而求出D被稱作L2 Scale Normalization,S被稱為Scale。
Attention
概述
眾所周知,RNN在處理長距離依賴關(guān)系時會出現(xiàn)問題。理論上,LSTM這類結(jié)構(gòu)能夠處理這個問題,但在實踐中,長距離依賴關(guān)系仍舊是個問題。例如,研究人員發(fā)現(xiàn)將原文倒序(將其倒序輸入編碼器)產(chǎn)生了顯著改善的結(jié)果,因為從解碼器到編碼器對應(yīng)部分的路徑被縮短了。同樣,兩次輸入同一個序列似乎也有助于網(wǎng)絡(luò)更好地記憶。
倒序句子這種方法屬于“hack”手段。它屬于被實踐證明有效的方法,而不是有理論依據(jù)的解決方法。
大多數(shù)翻譯的基準(zhǔn)都是用法語、德語等語種,它們和英語非常相似(即使?jié)h語的詞序與英語也極其相似)。但是有些語種(像日語)句子的最后一個詞語在英語譯文中對第一個詞語有高度預(yù)言性。那么,倒序輸入將使得結(jié)果更糟糕。
還有其它辦法嗎?那就是Attention機(jī)制。
上圖是Attention機(jī)制的結(jié)構(gòu)圖。y是編碼器生成的譯文詞語,x是原文的詞語。上圖使用了雙向遞歸網(wǎng)絡(luò),但這并不是重點(diǎn),你先忽略反向的路徑吧。重點(diǎn)在于現(xiàn)在每個解碼器輸出的詞語ytyt取決于所有輸入狀態(tài)的一個權(quán)重組合,而不只是最后一個狀態(tài)。a是決定每個輸入狀態(tài)對輸出狀態(tài)的權(quán)重貢獻(xiàn)。因此,如果a3,2a3,2的值很大,這意味著解碼器在生成譯文的第三個詞語時,會更關(guān)注于原文句子的第二個狀態(tài)。a求和的結(jié)果通常歸一化到1(因此它是輸入狀態(tài)的一個分布)。
Attention機(jī)制的一個主要優(yōu)勢是它讓我們能夠解釋并可視化整個模型。舉個例子,通過對attention權(quán)重矩陣a的可視化,我們能夠理解模型翻譯的過程。
我們注意到當(dāng)從法語譯為英語時,網(wǎng)絡(luò)模型順序地關(guān)注每個輸入狀態(tài),但有時輸出一個詞語時會關(guān)注兩個原文的詞語,比如將“l(fā)a Syrie”翻譯為“Syria”。
如果再仔細(xì)觀察attention的等式,我們會發(fā)現(xiàn)attention機(jī)制有一定的成本。我們需要為每個輸入輸出組合分別計算attention值。50個單詞的輸入序列和50個單詞的輸出序列需要計算2500個attention值。這還不算太糟糕,但如果你做字符級別的計算,而且字符序列長達(dá)幾百個字符,那么attention機(jī)制將會變得代價昂貴。
attention機(jī)制解決的根本問題是允許網(wǎng)絡(luò)返回到輸入序列,而不是把所有信息編碼成固定長度的向量。正如我在上面提到,我認(rèn)為使用attention有點(diǎn)兒用詞不當(dāng)。換句話說,attention機(jī)制只是簡單地讓網(wǎng)絡(luò)模型訪問它的內(nèi)部存儲器,也就是編碼器的隱藏狀態(tài)。在這種解釋中,網(wǎng)絡(luò)選擇從記憶中檢索東西,而不是選擇“注意”什么。不同于典型的內(nèi)存,這里的內(nèi)存訪問機(jī)制是彈性的,也就是說模型檢索到的是所有內(nèi)存位置的加權(quán)組合,而不是某個獨(dú)立離散位置的值。彈性的內(nèi)存訪問機(jī)制好處在于我們可以很容易地用反向傳播算法端到端地訓(xùn)練網(wǎng)絡(luò)模型(雖然有non-fuzzy的方法,其中的梯度使用抽樣方法計算,而不是反向傳播)。
論文:
《Learning to combine foveal glimpses with a third-order Boltzmann machine》
《Learning where to Attend with Deep Architectures for Image Tracking》
《Neural Machine Translation by Jointly Learning to Align and Translate》
Neural Turing Machines
以下章節(jié)主要翻譯自下文:
https://distill.pub/2016/augmented-rnns/
Attention and Augmented Recurrent Neural Networks
distill.pub雖然blog數(shù)量不多,但篇篇都是經(jīng)典。背后站臺的更有Yoshua Bengio、Ian Goodfellow、Andrej Karpathy等大牛。
該文主要講述了Attention在RNN領(lǐng)域的應(yīng)用。
NTM是一種使用Neural Network為基礎(chǔ)來實現(xiàn)傳統(tǒng)圖靈機(jī)的理論計算模型。利用該模型,可以通過訓(xùn)練的方式讓系統(tǒng)“學(xué)會”具有時序關(guān)聯(lián)的任務(wù)流。
圖靈機(jī)的詳細(xì)定義可參見:
https://baike.baidu.com/item/圖靈機(jī)
和傳統(tǒng)圖靈機(jī)相比,這里的memory中保存的是向量,我們的目標(biāo)是根據(jù)輸入序列,確定讀寫操作。具體的步驟如下圖所示:
1.計算query vector和memory中每個vector的相似度。
2.將相似度softmax為一個分布。
3.用之前訓(xùn)練好的attention模型調(diào)整分布值。
4.圖靈機(jī)的Shift操作也可以引入attention模型。
5.sharpen分布值,選擇最終的讀寫操作。sharpen操作,實際上就是選擇較大的概率值,而忽略較小的概率值。
Attentional Interfaces
以下是另外的一些Attention的用例。
上圖中,一個RNN模型可以輸入另一個RNN模型的輸出。它在每一步都會關(guān)注另一個RNN模型的不同位置。
這是一個和NTM非常類似的模型。RNN模型生成一個搜索詞描述其希望關(guān)注的位置。然后計算每條內(nèi)容與搜索詞的點(diǎn)乘得分,表示其與搜索詞的匹配程度。這些分?jǐn)?shù)經(jīng)過softmax函數(shù)的運(yùn)算產(chǎn)生聚焦的分布。
上圖是語言翻譯方面的模型。若用傳統(tǒng)的序列到序列模型做翻譯,需要把整個輸入詞匯串縮簡為單個向量,然后再展開恢復(fù)為序列目標(biāo)語言的詞匯串。Attention機(jī)制則可以避免上述操作,RNN模型逐個處理輸入詞語的信息,隨即生成相對應(yīng)的詞語。
RNN模型之間的這類聚焦還有許多其它的應(yīng)用。它可以用于語音識別,其中一個RNN模型處理語音信號,另一個RNN模型則滑動處理其輸出,然后關(guān)注相關(guān)的區(qū)域生成文本內(nèi)容。
Adaptive Computation Time
標(biāo)準(zhǔn)的RNN模型每一步所消耗的計算時間都相同。這似乎與我們的直覺不符。我們在思考難題的時候難道不需要更多的時間嗎?
適應(yīng)性計算時間(Adaptive Computation Time)是解決RNN每一步消耗不同計算量的方法。籠統(tǒng)地說:就是讓RNN模型可以在每個時間片段內(nèi)進(jìn)行不同次數(shù)的計算步驟。
上圖是ACT的網(wǎng)絡(luò)結(jié)構(gòu)圖。下面來分步講解一下。
這一步就是典型的RNN+輸出各個狀態(tài)的帶權(quán)重組合。
每一步的權(quán)重值由“halting neuron”決定。這個神經(jīng)元事實上是一個sigmoid函數(shù),輸出一個終止權(quán)重,可以理解為需要在當(dāng)前步驟終止的概率值。
停止權(quán)重值的總和等于1,每一步結(jié)束后要減去相應(yīng)的值。一旦這個值小于了epsilon,我們就停止計算。
當(dāng)訓(xùn)練Adaptive Computation Time模型時,可以在損失函數(shù)添加一項“ponder cost”,用來懲罰模型的累積計算時間。這一項的值越大,就更不傾向于降低計算時間。
Scaled Dot-Product Attention
以下內(nèi)容摘自:
https://kexue.fm/archives/4765
《Attention is All You Need》淺讀
《Attention is All You Need》是Google 2017年的作品。論文中提出了若干Attention的變種。比如下圖所示的Scaled Dot-Product Attention。
上圖用公式表述就是:
Attention(Q,K,V)=softmax(QK?dk ̄ ̄√)VAttention(Q,K,V)=softmax(QK?dk)V
如果忽略激活函數(shù)softmax的話,那么事實上它就是三個n×dk,dk×m,m×dvn×dk,dk×m,m×dv的矩陣相乘,最后的結(jié)果就是一個n×dvn×dv的矩陣。于是我們可以認(rèn)為:這是一個Attention層,將n×dkn×dk的序列Q編碼成了一個新的n×dvn×dv的序列。
那怎么理解這種結(jié)構(gòu)呢?我們不妨逐個向量來看。
Attention(qt,K,V)=∑s=1m1Zexp(?qt,ks?dk ̄ ̄√)vsAttention(qt,K,V)=∑s=1m1Zexp?(?qt,ks?dk)vs
其中Z是歸一化因子。事實上q,k,v分別是query,key,value的簡寫,K,V是一一對應(yīng)的,它們就像是key-value的關(guān)系,那么上式的意思就是qtqt這個query,通過與各個ksks內(nèi)積的并softmax的方式,來得到qtqt與各個vsvs的相似度,然后加權(quán)求和,得到一個dvdv維的向量。其中因子dk ̄ ̄√dk起到調(diào)節(jié)作用,使得內(nèi)積不至于太大(太大的話softmax后就非0即1了,不夠“soft”了)。
概括的說就是:比較Q和K的相似度,以得到合適的V。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的深度学习(二十四)——L2 Normalization, Attention(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(三十)——Model-Free
- 下一篇: 深度学习(二十五)——Attention