日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(二十四)——L2 Normalization, Attention(1)

發(fā)布時間:2023/12/20 pytorch 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(二十四)——L2 Normalization, Attention(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

L2 Normalization

L2 Normalization本身并不復(fù)雜,然而多數(shù)資料都只提到1維的L2 Normalization的計算公式:

x=[x1,x2,,xd]y=[y1,y2,,yd]y=xdi=1x2i=xxTxx=[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=0ZA2xyzCxyz=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維的向量。其中因子dkdk起到調(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。