【NLP模型】transformer:self-attention 自注意力機(jī)制

以下參考:http://www.itdecent.cn/p/d2ae158fc9e5

attention:輸入和輸出進(jìn)行比較,不同的輸出對(duì)不同輸入的關(guān)注不同。假設(shè)輸出y_1更關(guān)注輸入x_1,y_2更關(guān)注x_2,那么在句子翻譯中,語(yǔ)言x_1x_2 \cdots x_n翻譯成y_1y_2 \cdots y_n,那么很可能認(rèn)為單詞x_1翻譯成y_1,x_2翻譯成y_2。能夠使模型捕捉有用信息。

self-attention:輸入和輸入自己進(jìn)行比較(計(jì)算相似度),將輸入的與上下文無(wú)關(guān)的詞向量更新成上下文有關(guān)的詞向量。解決了RNN等的短時(shí)記憶問(wèn)題(即某個(gè)輸入的詞向量只與前幾個(gè)輸入有關(guān))。

self-attention 計(jì)算過(guò)程

self-attention計(jì)算過(guò)程1:嵌入詞向量,再由詞向量依次線性變換出queries keys values

Thinking 和 Machines是同一組輸入(同一句話)中的某兩個(gè)輸入(某兩個(gè)單詞),x是上下文無(wú)關(guān)的詞向量

1. 根據(jù)原詞向量依次計(jì)算queries,Keys,Values

Queries = X*W^Q

Keys = Queries*W^K

Values = Keys*W^V

其中,W^Q,W^K,W^V是待訓(xùn)練的參數(shù)

self-attention計(jì)算過(guò)程2

2. 計(jì)算scores

scores=\frac{q_i* keys}{\sqrt{d_{k}}}
每個(gè)q_i都算出n個(gè)score,即(1,n)的scores向量
其中,d_k是超參數(shù)(這里取64),為了讓后面的計(jì)算中具有穩(wěn)定的梯度

3. 計(jì)算(能句子中的長(zhǎng)依賴關(guān)系)的新向量

z_i=softmax(scores)*v

對(duì)于某個(gè)詞向量,softmax(scores)即為所有詞向量對(duì)該詞向量的權(quán)重,將這些權(quán)重分別乘以各向量得到新向量。運(yùn)算為(1,n)*(n,1)

那么最后能生成輸入句子中單詞與單詞直接的權(quán)重矩陣,即注意力矩陣


注意力矩陣

self-attention的優(yōu)點(diǎn)

  1. 傳統(tǒng)的RNN,LSTM網(wǎng)絡(luò),需要按順序進(jìn)行序列計(jì)算,所以距離越遠(yuǎn),關(guān)系越難捕捉。如果面對(duì)長(zhǎng)句子,這種距離較遠(yuǎn)的依賴關(guān)系相比之下很難捕獲到。而self-attention是針對(duì)句子中所有詞兩兩計(jì)算,不存在距離長(zhǎng)短的問(wèn)題
  2. 相比循環(huán)網(wǎng)絡(luò),self-attention能并行計(jì)算

以下參考:https://mp.weixin.qq.com/s/RLxWevVWHXgX-UcoxDS70w

transformer總體框架

輸入經(jīng)過(guò)transoformer得到輸出

transfromer內(nèi)部結(jié)構(gòu)總體框架

transformer模型框架

上述框架可抽象成Encoders和Decoders

transformer也是一個(gè)Encoder-Decoder模型

Encoders包含6個(gè)Encoder,Decoders包含6個(gè)Decoder
最后一個(gè)Encoder與6個(gè)Decoder建立連接,連接的意思是某種運(yùn)算,例如RNN是使用中間語(yǔ)義c作為中間連接

以最后的那個(gè)Encoder和其中一個(gè)Decoder的連接為例,繼續(xù)探究Encoder和Decoder的內(nèi)部
Encoder和Decoder都有Self-Attention和Feed Forward層,Decoder還有一個(gè) Encoder-Decoder Attention層,注意,Decoder中的注意力層其實(shí)是masked self-attention

Encoder和Decoder的內(nèi)部結(jié)構(gòu)

以下探究transformer模型的每個(gè)層

1.transformer的Self-Attention層:Scaled Dot-Product Attention

同樣,計(jì)算Self-Attention需要三個(gè)參數(shù)Q,K,V去計(jì)算注意力機(jī)制矩陣,這里重新定義了計(jì)算方式,如下

根據(jù)Q,K,V計(jì)算注意力機(jī)制矩陣

self-attention得到的注意力矩陣同上
masked self-attention得到的注意力矩陣與上面有點(diǎn)不同,這里的masked就是要在做翻譯的時(shí)候,不給模型看到未來(lái)的信息。

masked注意力矩陣

3. Multi-Head Attention

Multi-Head Attention就是把Scaled Dot-Product Attention的過(guò)程做h次,然后把輸出z合起來(lái)。它的結(jié)構(gòu)圖如下

h次Scaled Dot-Product Attention
重復(fù)率8次,生成8個(gè)z

輸出z合起來(lái)后乘以一個(gè)參數(shù)w^o矩陣聯(lián)合訓(xùn)練

8個(gè)z合起來(lái)

4. Position Embedding

因?yàn)樽⒁饬δP筒幌馬NN那樣無(wú)視了各輸入之間的距離,因此是無(wú)法捕捉到序列順序信息的,例如將K、V按行進(jìn)行打亂,Attention之后的結(jié)果是一樣的。為了保留序列信息,需要在embeddings得到的詞向量上在加上一個(gè)包含序列信息的向量,即Position Embedding得到的向量。

Position Embedding

Position Embedding計(jì)算方法:

Position Embedding的第偶數(shù)個(gè)元素
P E_{(\text {pos}, 2 i)}=\sin \left(\text {pos} / 10000^{2 i / d_{\text {model}}}\right)

Position Embedding的第奇數(shù)個(gè)元素
P E_{(\text {pos}, 2 i+1)}=\cos \left(\text {pos} / 10000^{2 i / d_{\text {model}}}\right)

5. Position-wise Feed-forward Networks

Relu激活函數(shù)和兩次線性變換
F F N(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2}

最后,總體框架采用殘差連接方式對(duì)各層進(jìn)行連接,參考ResNet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容