電腦網(wǎng)頁設(shè)計(jì)代碼模板百度推廣優(yōu)化怎么做的
encoder-decoder
分心模型:沒有引入注意力的模型在輸入句子比較短的時(shí)候問題不大,但是如果輸入句子比較長,此時(shí)所有語義完全通過一個(gè)中間語義向量來表示,單詞自身的信息已經(jīng)消失,可想而知會(huì)丟失很多細(xì)節(jié)信息,這也是為何要引入注意力模型的重要原因。
attention中encoder-decoder特點(diǎn)
Encoder將輸入編碼成一個(gè)向量的序列,而在解碼的時(shí)候,每一步都會(huì)選擇性的從向量序列中挑選一個(gè)子集進(jìn)行輸出預(yù)測,這樣,在產(chǎn)生每一個(gè)輸出的時(shí)候,都能找到當(dāng)前輸入對應(yīng)的應(yīng)該重點(diǎn)關(guān)注的序列信息,也就是說,每一個(gè)輸出單詞在計(jì)算的時(shí)候,參考的語義編碼向量c都是不一樣的,所以說它們的注意力焦點(diǎn)是不一樣
預(yù)測結(jié)果中的每個(gè)詞匯的時(shí)候,每個(gè)語義向量c中的元素具有不同的權(quán)重
attention 優(yōu)點(diǎn)
- Attention大大提高了機(jī)器翻譯的表現(xiàn)
Decoder在每一步都更加關(guān)注源語言的不同部分 - Attention 解決了bottleneck problem
Decoder 可以直接關(guān)注到源語言的每個(gè)詞,而不需要用一個(gè)向量來表示源句子 - Attention 可以緩解梯度消失問題
類似skip-connection - Attention 增加了可解釋性
可以直觀的看出來decoder在每一步更關(guān)注源語言的哪些部分
-只能在Decoder階段實(shí)現(xiàn)并行運(yùn)算,Encoder部分依舊采用的是RNN,LSTM這些按照順序編碼的模型,Encoder部分還是無法實(shí)現(xiàn)并行運(yùn)算
Q K V 介紹
在注意力機(jī)制中,Q(Query)、K(Key)和V(Value)是三個(gè)重要的輸入向量,它們在計(jì)算注意力權(quán)重時(shí)起到不同的作用。
-
Query(Q):Query是用來表示當(dāng)前位置或當(dāng)前時(shí)間步的輸入信息,它用來計(jì)算注意力權(quán)重,決定模型在當(dāng)前位置需要關(guān)注的信息。Query向量通常是通過對當(dāng)前位置的輸入進(jìn)行線性變換得到的。
-
Key(K):Key用來表示其他位置或其他時(shí)間步的輸入信息,它用來計(jì)算當(dāng)前位置與其他位置之間的關(guān)聯(lián)程度。Key向量通常也是通過對其他位置的輸入進(jìn)行線性變換得到的。
-
Value(V):Value用來表示其他位置或其他時(shí)間步的輸入信息的實(shí)際值,它在計(jì)算注意力權(quán)重后被加權(quán)求和,得到最終的加權(quán)表示。Value向量通常也是通過對其他位置的輸入進(jìn)行線性變換得到的。
在計(jì)算注意力權(quán)重時(shí),Query向量與Key向量之間的相似度決定了當(dāng)前位置與其他位置之間的關(guān)聯(lián)程度。相似度可以通過點(diǎn)積、縮放點(diǎn)積、加性等方式計(jì)算得到。然后通過對相似度進(jìn)行歸一化,得到注意力權(quán)重。最后,將注意力權(quán)重與對應(yīng)位置的Value向量相乘并求和,得到當(dāng)前位置的加權(quán)表示。
Q、K、V的引入使得注意力機(jī)制能夠根據(jù)不同位置之間的關(guān)聯(lián)程度,選擇性地關(guān)注與當(dāng)前任務(wù)相關(guān)的信息,提高模型的性能和泛化能力。
Q K V計(jì)算
注意力機(jī)制說白了就是要通過訓(xùn)練得到一個(gè)加權(quán),自注意力機(jī)制就是要通過權(quán)重矩陣來自發(fā)地找到詞與詞之間的關(guān)系。
因此肯定需要給每個(gè)input定義tensor,然后通過tensor間的乘法來得到input之間的關(guān)系。
那這么說是不是給每個(gè)input定義1個(gè)tensor就夠了呢?不夠啊!如果每個(gè)input只有一個(gè)相應(yīng)的q,那么q1和q2之間做乘法求取了a1和a2的關(guān)系之后,這個(gè)結(jié)果怎么存放怎么使用呢?而且a1和a2之間的關(guān)系是對偶的嗎?如果a1找a2和a2找a1有區(qū)別怎么辦?只定義一個(gè)這模型是不是有點(diǎn)太簡單了
定義這3個(gè)tensor,一方面是為了學(xué)習(xí)輸入之間的關(guān)系、找到和記錄誰和誰的關(guān)系權(quán)重,一方面也是在合理的結(jié)構(gòu)下引入了可學(xué)習(xí)的參數(shù),使得網(wǎng)絡(luò)具有更強(qiáng)的學(xué)習(xí)能力
將Source中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對構(gòu)成,此時(shí)給定Target中的某個(gè)元素Query,通過計(jì)算Query和各個(gè)Key的相似性或者相關(guān)性,得到每個(gè)Key對應(yīng)Value的權(quán)重系數(shù),然后對Value進(jìn)行加權(quán)求和,即得到了最終的Attention數(shù)值
本質(zhì)上Attention機(jī)制是對Source中元素的Value值進(jìn)行加權(quán)求和,而Query和Key用來計(jì)算對應(yīng)Value的權(quán)重系數(shù)
計(jì)算過程
第一個(gè)過程是根據(jù)Query和Key計(jì)算權(quán)重系數(shù)
第二個(gè)過程根據(jù)權(quán)重系數(shù)對Value進(jìn)行加權(quán)求和。
而第一個(gè)過程又可以細(xì)分為兩個(gè)階段:
第一個(gè)階段根據(jù)Query和Key計(jì)算兩者的相似性或者相關(guān)性;
第二個(gè)階段對第一階段的原始分值進(jìn)行歸一化處理;
這樣,可以將Attention的計(jì)算過程抽象為如圖10展示的三個(gè)階段:
第一階段
在第一個(gè)階段,可以引入不同的函數(shù)和計(jì)算機(jī)制,根據(jù)Query和某個(gè)Key_i,計(jì)算兩者的相似性或者相關(guān)性,
最常見的方法包括:求兩者的向量點(diǎn)積、求兩者的向量Cosine相似性或者通過再引入額外的神經(jīng)網(wǎng)絡(luò)來求值,即如下方式:
矩陣 是一個(gè)方陣,我們以行向量的角度理解,里面保存了每個(gè)向量與自己和其他向量進(jìn)行內(nèi)積運(yùn)算的結(jié)果
向量的內(nèi)積表征兩個(gè)向量的夾角,表征一個(gè)向量在另一個(gè)向量上的投影
第二階段
第二階段引入類似SoftMax的計(jì)算方式對第一階段的得分進(jìn)行數(shù)值轉(zhuǎn)換,
一方面可以進(jìn)行歸一化,將原始計(jì)算分值整理成所有元素權(quán)重之和為1的概率分布;
另一方面也可以通過SoftMax的內(nèi)在機(jī)制更加突出重要元素的權(quán)重
第三階段
a_i即為value_i對應(yīng)的權(quán)重系數(shù),然后進(jìn)行加權(quán)求和即可得到Attention數(shù)值
每一個(gè)維度的數(shù)值都是由三個(gè)詞向量在這一維度的數(shù)值加權(quán)求和得來的
為什么attention可以產(chǎn)生聚焦的功能
Attention機(jī)制可以產(chǎn)生聚焦的功能,主要有以下幾個(gè)原因:
-
選擇性加權(quán):Attention機(jī)制通過對輸入序列中的不同位置進(jìn)行加權(quán),可以選擇性地關(guān)注與當(dāng)前任務(wù)相關(guān)的信息,而忽略與任務(wù)無關(guān)的信息。這樣可以提高模型對于重要信息的關(guān)注程度,從而實(shí)現(xiàn)聚焦的效果。
-
上下文關(guān)聯(lián):Attention機(jī)制可以根據(jù)上下文關(guān)聯(lián)性動(dòng)態(tài)地調(diào)整加權(quán),使得模型能夠更好地理解輸入序列中不同位置之間的關(guān)系。通過上下文關(guān)聯(lián),模型可以更準(zhǔn)確地聚焦于與當(dāng)前任務(wù)相關(guān)的信息,提升模型的性能。
-
多頭注意力:在一些復(fù)雜的任務(wù)中,單一的注意力機(jī)制可能無法滿足需求。多頭注意力機(jī)制可以同時(shí)關(guān)注輸入序列中的不同部分,從而實(shí)現(xiàn)多個(gè)聚焦點(diǎn)的功能。通過多頭注意力,模型可以同時(shí)關(guān)注多個(gè)相關(guān)的信息,提高模型的表達(dá)能力和泛化能力。
總的來說,Attention機(jī)制通過選擇性加權(quán)和上下文關(guān)聯(lián)的方式,可以使模型更好地聚焦于與當(dāng)前任務(wù)相關(guān)的信息,提高模型的性能和泛化能力。
怎么樣選擇性加權(quán)
選擇性加權(quán)是通過計(jì)算注意力權(quán)重來實(shí)現(xiàn)的。常見的計(jì)算注意力權(quán)重的方法有以下幾種:
-
點(diǎn)積注意力(Dot Product Attention):將查詢向量與鍵向量進(jìn)行點(diǎn)積操作,然后經(jīng)過softmax函數(shù)得到注意力權(quán)重。這種方法適用于序列長度相對較短的情況,計(jì)算效率高。
-
縮放點(diǎn)積注意力(Scaled Dot Product Attention):在點(diǎn)積注意力的基礎(chǔ)上,通過除以一個(gè)縮放因子,可以控制注意力權(quán)重的分布范圍,提高模型的穩(wěn)定性和泛化能力。
-
加性注意力(Additive Attention):將查詢向量和鍵向量通過全連接層映射到一個(gè)共同的特征空間,然后計(jì)算特征之間的相似度,再經(jīng)過softmax函數(shù)得到注意力權(quán)重。這種方法可以處理更復(fù)雜的注意力權(quán)重計(jì)算,但計(jì)算復(fù)雜度較高。
-
多頭注意力(Multi-head Attention):將輸入序列通過多個(gè)不同的查詢、鍵和值映射矩陣進(jìn)行線性變換,然后分別計(jì)算多個(gè)注意力權(quán)重。最后將多個(gè)注意力權(quán)重進(jìn)行拼接或加權(quán)求和,得到最終的加權(quán)表示。多頭注意力可以同時(shí)關(guān)注多個(gè)相關(guān)的信息,提高模型的表達(dá)能力。
在選擇性加權(quán)時(shí),可以根據(jù)具體任務(wù)和數(shù)據(jù)的特點(diǎn)選擇合適的注意力計(jì)算方法。不同的注意力計(jì)算方法可能適用于不同的場景,需要根據(jù)具體情況進(jìn)行選擇和調(diào)整。
self attention
在一般任務(wù)的Encoder-Decoder框架中,輸入Source和輸出Target內(nèi)容是不一樣的,比如對于英-中機(jī)器翻譯來說,Source是英文句子,Target是對應(yīng)的翻譯出的中文句子,Attention機(jī)制發(fā)生在Target的元素Query和Source中的所有元素之間。
本質(zhì)上是目標(biāo)語單詞和源語單詞之間的一種單詞對齊機(jī)制
而Self-Attention顧名思義,指的不是Target和Source之間的Attention機(jī)制,而是Source內(nèi)部元素之間或者Target內(nèi)部元素之間發(fā)生的Attention機(jī)制,也可以理解為Target=Source這種特殊情況下的注意力計(jì)算機(jī)制
self-attention優(yōu)點(diǎn)
-
引入Self-Attention后會(huì)更容易捕獲句子中長距離的相互依賴的特征,
因?yàn)槿绻荝NN或者LSTM,需要依次序序列計(jì)算,對于遠(yuǎn)距離的相互依賴的特征,要經(jīng)過若干時(shí)間步步驟的信息累積才能將兩者聯(lián)系起來,而距離越遠(yuǎn),有效捕獲的可能性越小 -
Self-Attention在計(jì)算過程中會(huì)直接將句子中任意兩個(gè)單詞的聯(lián)系通過一個(gè)計(jì)算步驟直接聯(lián)系起來,所以遠(yuǎn)距離依賴特征之間的距離被極大縮短,有利于有效地利用這些特征。
-
除此外,Self-Attention對于增加計(jì)算的并行性也有直接幫助作用
https://mp.weixin.qq.com/s/RFLPII-1gQAa8hjuULyEjw
非常好的解釋
Attention 和 self-attention 的區(qū)別是什么
- 在神經(jīng)網(wǎng)絡(luò)中,通常來說你會(huì)有輸入層(input),應(yīng)用激活函數(shù)后的輸出層(output),在RNN當(dāng)中你會(huì)有狀態(tài)(state)。如果attention (AT) 被應(yīng)用在某一層的話,它更多的是被應(yīng)用在輸出或者是狀態(tài)層上,而當(dāng)我們使用self-attention(SA),這種注意力的機(jī)制更多的實(shí)在關(guān)注input上。
- Attention (AT) 經(jīng)常被應(yīng)用在從編碼器(encoder)轉(zhuǎn)換到解碼器(decoder)。比如說,解碼器的神經(jīng)元會(huì)接受一些AT從編碼層生成的輸入信息。在這種情況下,AT連接的是兩個(gè)不同的組件(component),編碼器和解碼器。但是如果我們用SA,它就不是關(guān)注的兩個(gè)組件,它只是在關(guān)注你應(yīng)用的那一個(gè)組件。那這里他就不會(huì)去關(guān)注解碼器了,就比如說在Bert中,使用的情況,我們就沒有解碼器。
- SA可以在一個(gè)模型當(dāng)中被多次的、獨(dú)立的使用(比如說在Transformer中,使用了18次;在Bert當(dāng)中使用12次)。但是,AT在一個(gè)模型當(dāng)中經(jīng)常只是被使用一次,并且起到連接兩個(gè)組件的作用。
- SA比較擅長在一個(gè)序列當(dāng)中,尋找不同部分之間的關(guān)系。比如說,在詞法分析的過程中,能夠幫助去理解不同詞之間的關(guān)系。AT卻更擅長尋找兩個(gè)序列之間的關(guān)系,比如說在翻譯任務(wù)當(dāng)中,原始的文本和翻譯后的文本。這里也要注意,在翻譯任務(wù)重,SA也很擅長,比如說Transformer。
- **AT可以連接兩種不同的模態(tài),**比如說圖片和文字。**SA更多的是被應(yīng)用在同一種模態(tài)上,**但是如果一定要使用SA來做的話,也可以將不同的模態(tài)組合成一個(gè)序列,再使用SA。