
這個算是在課程學習之外的探索,不過希望能盡快用到項目實踐中。在文章里會引用較多的博客,文末會進行reference。
搜索Transformer機制,會發(fā)現(xiàn)高分結(jié)果基本上都源于一篇論文Jay Alammar的《The Illustrated Transformer》(圖解Transformer),提到最多的Attention是Google的《Attention Is All You Need》。
- 對于Transformer的運行機制了解即可,所以會基于這篇論文來學習Transformer,結(jié)合《Sklearn+Tensorflow》中Attention注意力機制一章完成基本的概念學習;
- 找一個基于Transformer的項目練手
3.Transformer的一些筆記
本節(jié)內(nèi)容學習自大佬張俊林的《放棄幻想,全面擁抱Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較》,當時也是看到這篇文章才想看看Transformer
上一節(jié)對Transformer有了一個簡單的認識,但是太耗腦細胞了,今天把這篇舊文拿出來復習一下,只是讀書筆記。
開篇就是,在NLP領(lǐng)域CNN改改還能用,RNN遲早要被放棄,Transformer將是未來的重點。然后就是一頓論證,知道大概意思就行了,RNN改造之后成為SRNN具備并行計算的能力,SRNN速度比GRU模型快5到15倍;CNN改造之后增加深度。
了解Transformer的三篇論文:
- Jay Alammar可視化地介紹Transformer的博客文章The Illustrated Transformer ,非常容易理解整個機制,建議先從這篇看起,有中文譯本https://zhuanlan.zhihu.com/p/54356280;
- Calvo的博客:Dissecting BERT Part 1: The Encoder ,盡管說是解析Bert,但是因為Bert的Encoder就是Transformer,所以其實它是在解析Transformer,里面舉的例子很好;
- 哈佛大學NLP研究組寫的“The Annotated Transformer. ”,代碼原理雙管齊下,講得也很清楚。
進一步介紹Transformer的機制,作者認為Transformer核心并不僅僅是Self Attention,還有它自身的Block中的所有元素Multi-head self attention,Skip connection,LayerNorm,F(xiàn)eedForward。
針對NLP任務的特點來說下Transformer的對應解決方案
- 如何解決自然語言不定長問題?
使用Padding填充,和之前Seq2seq類似,找到最長的那句話,其他句子用空來填補到那么長。 - 如何保留輸入句子中詞與詞之間的位置相對信息?
Transformer不像RNN或CNN,必須明確的在輸入端將Positon信息編碼,Transformer是用位置函數(shù)來進行位置編碼的,而Bert等模型則給每個單詞一個Position embedding,將單詞embedding和單詞對應的position embedding加起來形成單詞的輸入embedding。 - 如何解決NLP句子中長距離依賴特征的問題?
Self attention天然就能解決這個問題,因為在集成信息的時候,當前單詞和句子中任意單詞都發(fā)生了聯(lián)系,所以一步到位就把這個事情做掉了。不像RNN需要通過隱層節(jié)點序列往后傳,也不像CNN需要通過增加網(wǎng)絡深度來捕獲遠距離特征,Transformer在這點上明顯方案是相對簡單直觀的。
Transformer的兩個版本
Transformer base和Transformer Big。兩者結(jié)構(gòu)其實是一樣的。主要區(qū)別是包含的Transformer Block數(shù)量不同,Transformer base包含12個Block疊加,而Transformer Big則擴張一倍,包含24個Block。
無疑Transformer Big在網(wǎng)絡深度,參數(shù)量以及計算量相對Transformer base翻倍,所以是相對重的一個模型,但是效果也最好。
CNN/RNN/Transformer作為特征抽取器的比較
在句法特征抽取方面,文獻較少,之前的對比是CNN要優(yōu)于RNN。
作者從四個方面進行了對比
-
語義特征提取能力;
從語義特征提取能力來說,目前實驗支持如下結(jié)論:Transformer在這方面的能力非常顯著地超過RNN和CNN(在考察語義類能力的任務WSD中,Transformer超過RNN和CNN大約4-8個絕對百分點),RNN和CNN兩者能力差不太多。
image.png -
長距離特征捕獲能力;
在長距離特征捕獲能力方面,目前在特定的長距離特征捕獲能力測試任務中(主語-謂語一致性檢測,比如we……..are…),實驗支持如下結(jié)論:原生CNN特征抽取器在這方面極為顯著地弱于RNN和Transformer,Transformer微弱優(yōu)于RNN模型(尤其在主語謂語距離小于13時),能力由強到弱排序為Transformer>RNN>>CNN; 但在比較遠的距離上(主語謂語距離大于13),RNN微弱優(yōu)于Transformer,所以綜合看,可以認為Transformer和RNN在這方面能力差不太多,而CNN則顯著弱于前兩者。
CNN弱于RNN的原因就是之前所述,卷積神經(jīng)網(wǎng)絡是依靠堆積深度來實現(xiàn)覆蓋更長的輸入長度,所以在對長距離的處理上會弱于RNN。
對于Transformer來說,Multi-head attention的head數(shù)量嚴重影響NLP任務中Long-range特征捕獲能力:結(jié)論是head越多越有利于捕獲long-range特征。
image.png -
任務綜合特征抽取能力;
使用機器翻譯MT作為綜合任務,BLEU作為評判指標。Transformer綜合能力要明顯強于RNN和CNN(你要知道,技術(shù)發(fā)展到現(xiàn)在階段,BLEU絕對值提升1個點是很難的事情),而RNN和CNN看上去表現(xiàn)基本相當,貌似CNN表現(xiàn)略好一些。
image.png 并行計算能力及運行效率
RNN在并行計算方面天生缺陷,Transformer優(yōu)于CNN。
所以,綜上可以看到,Transformer在NLP領(lǐng)域是優(yōu)于RNN和CNN的,而RNN和CNN由于自身結(jié)構(gòu)特點,在不同的領(lǐng)域具有各自的優(yōu)勢。
向Transformer靠攏
就是對CNN和RNN進行各種魔改,Transformer Block其實不是只有一個構(gòu)件,而是由multi-head attention/skip connection/Layer Norm/Feed forward network等幾個構(gòu)件組成的一個小系統(tǒng),如果把RNN或者CNN塞到Transformer Block里會發(fā)生什么事情呢?這就是寄居蟹策略的基本思路。


將CNN和RNN替換掉Block中的Multi-head attention。有論文這么搞了之后,性能也有不同幅度的提升。但是是和Transformer性能還是存在一些差距。



