6. 文本分类——transformer模型
文章目錄
- 一、簡介
- 二、transformer結構
- 三、用于文本分類的transformer
- 1. embedding layer(嵌入層)
- 2. positional encoding(位置編碼)
- 3. Scaled dot-product attention(縮放的點乘注意力機制)
- 4. Multi-head attention(多頭注意力)
- 5. Padding mask
- 6. 殘差連接
- 7. Layer Normalization
- 8.Position-wise Feed-Forward network
 
- 四、代碼實現
- 五、參考
文章:Attention is all you need
 文章鏈接:https://arxiv.org/abs/1706.03762
一、簡介
Transformer 是谷歌在 17 年做機器翻譯任務的 “Attention is all you need” 的論文中提出的,引起了相當大的反響。 每一位從事 NLP 研發的同仁都應該透徹搞明白Transformer,它的重要性毫無疑問,尤其是你在看完我這篇文章之后,我相信你的緊迫感會更迫切,我就是這么一位善于制造焦慮的能手。不過這里沒打算重點介紹它,想要入門 Transformer 的可以參考以下三篇文章:一個是 Jay Alammar 可視化地介紹 Transformer 的博客文章 The Illustrated Transformer ,非常容易理解整個機制,建議先從這篇看起, 這是中文翻譯版本;第二篇是 Calvo 的博客:Dissecting BERT Part 1: The Encoder ,盡管說是解析 Bert,但是因為 Bert 的 Encoder 就是 Transformer,所以其實它是在解析 Transformer,里面舉的例子很好;再然后可以進階一下,參考哈佛大學 NLP 研究組寫的 “The Annotated Transformer. ”,代碼原理雙管齊下,講得也很清楚。
對于Transformer來說,需要明確加入位置編碼學習position Embedding。因為對于self Attention來說,它讓當前輸入單詞和句子中任意單詞進行相似計算,然后歸一化計算出句子中各個單詞對應的權重,再利用權重與各個單詞對應的變換后V值相乘累加,得出集中后的embedding向量,此間是損失掉了位置信息的。因此,為了引入位置信息編碼,Transformer對每個單詞一個Position embedding,將單詞embedding和單詞對應的position embedding加起來形成單詞的輸入embedding。
Transformer中的self Attention對文本的長距離依賴特征的提取有很強的能力,因為它讓當前輸入單詞和句子中任意單詞進行相似計算,它是直接進行的長距離依賴特征的獲取的,不像RNN需要通過隱層節點序列往后傳,也不像CNN需要通過增加網絡深度來捕獲遠距離特征。此外,對應模型訓練時的并行計算能力,Transformer也有先天的優勢,它不像RNN需要依賴前一刻的特征量。
張俊林大佬在https://blog.csdn.net/malefactor/article/details/86500387中提到過,在Transformer中的Block中不僅僅multi-head attention在發生作用,而是幾乎所有構件都在共同發揮作用,是一個小小的系統工程。例如Skip connection,LayerNorm等也是發揮了作用的。對于Transformer來說,Multi-head attention的head數量嚴重影響NLP任務中Long-range特征捕獲能力:結論是head越多越有利于捕獲long-range特征。
二、transformer結構
詳見我的博客總結《Attention is all you need》
三、用于文本分類的transformer
Transformer結構有兩種:Encoder和Decoder,在文本分類中只使用到了Encoder,Decoder是生成式模型,主要用于自然語言生成的。
1. embedding layer(嵌入層)
獲得詞的分布式表示
2. positional encoding(位置編碼)
由于attention沒有包含序列信息(即語句順序并不影響結構),因此需要加入位置的信息,在transformer中選擇將順序的信息加入到embedding中。
設某個詞在句子中的位置為pos,詞的embeding維度為dmodeld_{model}dmodel?,我們需要產生一個關于pos的維度為dmodeld_{model}dmodel?的向量。因此可以使用公式:PE(pos,i)=pos100002i/dmodelP{E_{(pos,i)}} = \frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}}PE(pos,i)?=100002i/dmodel?pos?, 來計算pos對應的位置向量的各個維度的值。
以pos=1pos=1pos=1來舉例,[1100000,1100002/dmodel,1100004/dmodel,...,1100002][\frac{1}{10000^0},\frac{1}{10000^{2/d_{model}}} ,\frac{1}{10000^{4/d_{model}}},...,\frac{1}{10000^{2}} ][1000001?,100002/dmodel?1?,100004/dmodel?1?,...,1000021?];但是這種方式的編碼并沒有考慮到相對位置,因此在論文中使用了三角函數對奇偶維進行變化,下面是論文中的位置編碼公式:
PE(pos,2i)=sin?(pos100002i/dmodel)PE(pos,2i+1)=cos?(pos100002i/dmodel)\begin{array}{l} P{E_{(pos,2i)}} = \sin (\frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}})\\\\ P{E_{(pos,2i + 1)}} = \cos (\frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}}) \end{array}PE(pos,2i)?=sin(100002i/dmodel?pos?)PE(pos,2i+1)?=cos(100002i/dmodel?pos?)?
3. Scaled dot-product attention(縮放的點乘注意力機制)
在attention中query、key、value的來源各不相同,但是在該attention中query、key、value均是從同一個輸入中產生。如下圖中query、key、value均是將輸入的embedding乘以一個矩陣產生的:
 
 (可以觀測到q,k,vq,k,vq,k,v的維度是由權重矩陣的維度決定的,因此維度的大小由設計者決定)
有了q,k,vq,k,vq,k,v后,我們先通過點積計算kkk與qqq的相似度,并且為了防止相似度放入softmaxsoftmaxsoftmax中太大,因此將點積結果除以dk\sqrt{d_k}dk??,其中dkd_kdk?是kkk的維度。在將結果放入到softmaxsoftmaxsoftmax中輸出當前qqq與各個kkk的相似度,如下圖:
 有了qqq與各個kkk的相似度以后,使用這些相似度對vvv進行加權求和,得到當前queryqueryquery的輸出:
 上面介紹了Scaled dot-product attention的向量計算方式,但是在實際中為了加速計算需要使用矩陣的計算方式。下面介紹矩陣計算:
 首先對于所有的輸出計算對應的q、k、vq、k、vq、k、v,如下圖:
 
 (這樣可以一次計算出所有輸入的q、k、vq、k、vq、k、v,并記輸出的矩陣為Q、K、VQ、K、VQ、K、V)
計算相似度并加權求和
 
 論文中的計算公式:
4. Multi-head attention(多頭注意力)
在論文中他們發現將Q、K、VQ、K、VQ、K、V在dq,dk,dvd_q,d_k,d_vdq?,dk?,dv?, (即每個q、k、vq、k、vq、k、v的維度)維度上切成hhh份,然后分別進行scaled dot-product attention,并將最終的結果合并在一起,其中超參數hhh就是headheadhead的數量。
 論文中的公式:
 
5. Padding mask
因為文本的長度不同,所以我們會在處理時對其進行padding。但是在進行attention機制時,注意力不應該放在padding的部分。因此將這些位置設置為非常大的負數,這樣經過softmax后的概率接近0。
對于矩陣QKTQK^TQKT的第iii行第jjj列的元素表示的是第iii個queryqueryquery與第jjj個keykeykey的相似度,為了進行padding mask,那么必須要將所有與padding key的相似度設為負無窮。因此生成一個形狀與QKTQK^TQKT相同的padding 矩陣,其中所有padding key對應的列設為false,其余為true。
 
6. 殘差連接
 假設網絡中某個層對輸入xxx作用后的輸出是F(x)F(x)F(x),那么增加殘差連接后為F(x)+xF(x)+xF(x)+x。當對該層求偏導時,
7. Layer Normalization
Batch Normalization:設某個batch中的樣本均值為μB\mu_BμB?,樣本方差為σB2\sigma^2_BσB2?,那么BN的公式就是BN(xi)=α×xi?μBσB2+?+βBN(x_i)=\alpha\times\frac{x_i-\mu_B}{\sqrt{\sigma^2_B+\epsilon}}+\betaBN(xi?)=α×σB2?+??xi??μB??+β。其主要是沿著batch方向進行的。
Layer Normalization:BN是在batch上計算均值和方差,而LN則是對每個樣本計算均值和方差;LN(xi)=α×xi?μLσL2+?+βLN(x_i)=\alpha\times\frac{x_i-\mu_L}{\sqrt{\sigma^2_L+\epsilon}}+\betaLN(xi?)=α×σL2?+??xi??μL??+β。可以方向公式中只是均值和方差不同而已。
8.Position-wise Feed-Forward network
這是一個全連接層,包含兩個線性變換和一個非線性激活函數ReLU,公式為FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_{1}+b_1)W_{2}+b_2FFN(x)=max(0,xW1?+b1?)W2?+b2?。這個公式還可以用兩個大小為111的一維卷積來實現,其中中間層的維度為204820482048。
四、代碼實現
詳情參考:https://www.cnblogs.com/jiangxinyang/p/10210813.html
五、參考
總結
以上是生活随笔為你收集整理的6. 文本分类——transformer模型的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 企业建站系统大全
- 下一篇: chrome全屏模式书签栏/工具栏消失如
