【NLP】 理解NLP中网红特征抽取器Tranformer
本篇介紹目前NLP領域的“網(wǎng)紅”特征抽取器Transformer。首先,作為引子,引入 Transformer是什么的問題;接著,詳細介紹了Transformer的結構和其內(nèi)部的機制;最后,再總結Transformer的本質和定義。
作者&編輯 | 小Dream哥
1 Transformer是什么?
很早就不斷的有讀者問小Dream哥什么時候介紹Transformer。確實,Transformer是現(xiàn)在NLP領域最大的網(wǎng)紅特征抽取器,基本現(xiàn)在所有的前沿研究都基于Transformer來做特征提取,不奇怪大家對他頗有興致。
但是,小Dream哥其實并不是很想寫Transformer,主要是網(wǎng)上寫它的文章真的太多太多了,基本上能說的,各路神仙都把它說了一遍,要寫出新意真的太難。
今天小Dream哥就在這里說說,我所理解的Transformer吧,如有不對的地方,請大家指正。
在《Attention is all you need》中,Transformer是一個用于機器翻譯的編解碼結構,這也是它為什么叫Transformer的原因。后來,因為在序列編碼中強大的特征抽取能力和高效的運算特性,Transformer被從編解碼結構里抽離出來,成為了在NLP領域,目前最流行的特征抽取器。
我們暫且把對Transformer的認知,停留在這個層面,看完Transformer里到底有什么之后,再來思考這個問題,看能不能有更多的收獲。
2?Transformer里有什么
安利一下,上圖來自http://jalammar.github.io/illustrated-transformer/該篇博客講tranformer的網(wǎng)絡結構講的非常細和形象,想要了解這方面的讀者開源仔細讀一下。
上圖是Transformer中,第一個sub-layer的結構示意圖。其特別之處只有輸入接收的為字向量和位置編碼的和,其他sub-layer的輸入為上一層sub-layer的輸出。每一個sub-layer,除上述差異之外,別無二致,所以我們只需要了解一個就可以。
通常,會有多層這樣的sub-layer,在Bert-base中,有12層,GPT-2.0則更深,所以參數(shù)量都很大。GPT-2.0的參數(shù)量達到了“喪心病狂”的3億之多,是名副其實的大模型了。曾經(jīng)剛入NLP坑的時候,會慶幸自己不用像CV的同學那樣,天天看著貴的顯卡乍舌嘆氣。不過小Dream哥現(xiàn)在也不用看了,訓練最新模型的顯卡,是一定買不起了。話說回來,NLP中,模型參數(shù)已經(jīng)大大超過了CV模型的參數(shù)量,正在朝著超大規(guī)模網(wǎng)絡的方向狂奔。真有點擔心,這樣下去,后面NLP的玩家就只剩下那幾個大玩家了。
好了,我們先看看sub-layer都有些什么內(nèi)容。
(1) self-attention
上圖是Transformer中self-attention的計算過程。其實在Transformer中,Q,K,V指的都是輸入序列乘上不同的權重W_Q,W_K,W_V。上述過程,可以用如下的公式概括:
看過我們上一篇Attention文章的同學,應該對這個公式很熟悉。在Transformer中,主要通過這樣一層self-Attention對輸入序列進行編碼。
該編碼過程的一個特點是,在編碼序列中的某一個詞時,讓該詞充分的與序列中的其他詞進行運算,從而能夠得到該詞與序列中所有詞的句法和語義關系編碼。
該編碼過程的另外一個重要的特點是,序列是并行輸入的,因此運算效率很高。
(2) Multi-head Attention
Multi-head Attention,即多頭注意力機制。大概的處理流程如下圖所示:
更多的細節(jié),讀者可以參考原文,這里不再詳述。總的來說,多頭機制就是8組權重,計算出了8個不同的輸出,再通過拼接和運算得到新的序列編碼。
那么,增加了8倍的參數(shù)和運算量。引入這樣的機制有什么好處呢?
1) 極大的增強了模型的序列編碼能力,特別是序列內(nèi)詞之間關系的語義表征能力。這個可以這樣去想,假如只有一個頭的話,因為是self-attention,在計算過程中,很有可能該詞與該詞的的計算結果可能會比較大,從而詞與自身的運算占據(jù)了很大的影響。如果引入多頭機制,不同的權重,則可以避免這種弊端,增強模型的編碼能力。
2) 實現(xiàn)了Attention的多個表征子空間。這樣的好處是,每個子空間可以表征序列不同方面語義信息。這方面小Dream哥也沒有看到相關論文的解釋和支撐,就不多說了,了解的小伙伴可以留言指教。
(3) Feed-forward
每一個sub-layer還會接一個Feed-forward Neural Network(FNN),FNN的計算公式如下:
即在每個sub-layer,針對self-Attention層的輸出,先使用一個線性變換,再針對該線性變換的輸出使用RELU函數(shù),最后再針對RELU函數(shù)的輸出使用一個線性變化。那么,做這么繁瑣的變換有什么意義呢?
我們將FNN與CNN做對比,其實可以發(fā)現(xiàn),其效果與加上一層卷積核大小為1*1的CNN是一樣的。那么這就好理解了,這層所謂的FNN其實也是做特征提取的。至于它為什么不直接取名為1*1CNN layer,這就要去問Tranformer的發(fā)明者了。
在Transformer中,還有其他的層,例如Poition-Encoding層,The Residuals殘差連接等,這些都好理解,讀者可以參考前面推薦的Jay Alammar的博客。
3 再說Transformer
前面大概講述了Transformer的結構及其每個sub-layer的組成。那么我們再來討論一下,Transformer到底是什么?
我們可不可以這樣說,Transformer其實是一個用于對序列輸入進行特征編碼的工具。它以self-Attention機制為基礎,從而能夠編碼序列輸入的語義信息,對序列輸入內(nèi)不同詞之間的關系也具有較強的編碼能力,特別是Multi-Attention的引入,極大的增強了其編碼能力。同時,Transformer內(nèi)其實還有CNN的影子,盡管原作者避免提及。并且,因為其結構上的優(yōu)勢,像CNN一樣,Transformer天然就能夠并行計算,這一點是RNN等模型無法具備的。
總結
Transformer中最重要的特點就是引入了Attention,特別是Multi-Head Attention。作為一個序列輸入的特征抽取器,其編碼能力強大,沒有明顯的缺點。短期內(nèi)難以看到可以匹敵的競爭對手。NLP領域的同學們,務必好好研究。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:說一說NLP領域的“當紅辣子雞”BERT
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內(nèi)容:
(1) 聊天機器人。考慮到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統(tǒng)的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。
(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。
(3) NLP預訓練模型。基于海量數(shù)據(jù),進行超大規(guī)模網(wǎng)絡的無監(jiān)督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發(fā)展高度。你怎么不深入的了解?
轉載文章請后臺聯(lián)系
侵權必究
往期精選
【NLP】自然語言處理專欄上線,帶你一步一步走進“人工智能技術皇冠上的明珠”。
【NLP】用于語音識別、分詞的隱馬爾科夫模型HMM
【NLP】用于序列標注問題的條件隨機場(Conditional Random Field, CRF)
【NLP】經(jīng)典分類模型樸素貝葉斯解讀
【NLP】 NLP專欄欄主自述,說不出口的話就交給AI說吧
【NLP】 深度學習NLP開篇-循環(huán)神經(jīng)網(wǎng)絡(RNN)
【NLP】 NLP中應用最廣泛的特征抽取模型-LSTM
【NLP】 聊聊NLP中的attention機制
【技術綜述】深度學習在自然語言處理中的應用發(fā)展
總結
以上是生活随笔為你收集整理的【NLP】 理解NLP中网红特征抽取器Tranformer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【知识星球】总有些骨骼轻奇,姿态妖娆的模
- 下一篇: 【每周NLP论文推荐】从预训练模型掌握N