這個算是在課程學(xué)習(xí)之外的探索撒蟀,不過希望能盡快用到項目實踐中虽风。在文章里會引用較多的博客咆瘟,文末會進(jìn)行reference嚼隘。
搜索Transformer機(jī)制,會發(fā)現(xiàn)高分結(jié)果基本上都源于一篇論文Jay Alammar的《The Illustrated Transformer》(圖解Transformer)袒餐,提到最多的Attention是Google的《Attention Is All You Need》飞蛹。
- 對于Transformer的運(yùn)行機(jī)制了解即可须肆,所以會基于這篇論文來學(xué)習(xí)Transformer,結(jié)合《Sklearn+Tensorflow》中Attention注意力機(jī)制一章完成基本的概念學(xué)習(xí)桩皿;
- 找一個基于Transformer的項目練手
3.Transformer的一些筆記
本節(jié)內(nèi)容學(xué)習(xí)自大佬張俊林的《放棄幻想,全面擁抱Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較》幢炸,當(dāng)時也是看到這篇文章才想看看Transformer
上一節(jié)對Transformer有了一個簡單的認(rèn)識泄隔,但是太耗腦細(xì)胞了,今天把這篇舊文拿出來復(fù)習(xí)一下宛徊,只是讀書筆記佛嬉。
開篇就是,在NLP領(lǐng)域CNN改改還能用闸天,RNN遲早要被放棄暖呕,Transformer將是未來的重點。然后就是一頓論證苞氮,知道大概意思就行了湾揽,RNN改造之后成為SRNN具備并行計算的能力,SRNN速度比GRU模型快5到15倍笼吟;CNN改造之后增加深度库物。
了解Transformer的三篇論文:
- Jay Alammar可視化地介紹Transformer的博客文章The Illustrated Transformer ,非常容易理解整個機(jī)制贷帮,建議先從這篇看起戚揭,有中文譯本https://zhuanlan.zhihu.com/p/54356280;
- Calvo的博客:Dissecting BERT Part 1: The Encoder 撵枢,盡管說是解析Bert民晒,但是因為Bert的Encoder就是Transformer,所以其實它是在解析Transformer锄禽,里面舉的例子很好潜必;
- 哈佛大學(xué)NLP研究組寫的“The Annotated Transformer. ”,代碼原理雙管齊下沟绪,講得也很清楚刮便。
進(jìn)一步介紹Transformer的機(jī)制,作者認(rèn)為Transformer核心并不僅僅是Self Attention绽慈,還有它自身的Block中的所有元素Multi-head self attention恨旱,Skip connection,LayerNorm坝疼,F(xiàn)eedForward搜贤。
針對NLP任務(wù)的特點來說下Transformer的對應(yīng)解決方案
- 如何解決自然語言不定長問題?
使用Padding填充钝凶,和之前Seq2seq類似仪芒,找到最長的那句話唁影,其他句子用空來填補(bǔ)到那么長。 - 如何保留輸入句子中詞與詞之間的位置相對信息掂名?
Transformer不像RNN或CNN据沈,必須明確的在輸入端將Positon信息編碼,Transformer是用位置函數(shù)來進(jìn)行位置編碼的饺蔑,而Bert等模型則給每個單詞一個Position embedding锌介,將單詞embedding和單詞對應(yīng)的position embedding加起來形成單詞的輸入embedding。 - 如何解決NLP句子中長距離依賴特征的問題猾警?
Self attention天然就能解決這個問題孔祸,因為在集成信息的時候,當(dāng)前單詞和句子中任意單詞都發(fā)生了聯(lián)系发皿,所以一步到位就把這個事情做掉了崔慧。不像RNN需要通過隱層節(jié)點序列往后傳,也不像CNN需要通過增加網(wǎng)絡(luò)深度來捕獲遠(yuǎn)距離特征穴墅,Transformer在這點上明顯方案是相對簡單直觀的惶室。
Transformer的兩個版本
Transformer base和Transformer Big。兩者結(jié)構(gòu)其實是一樣的封救。主要區(qū)別是包含的Transformer Block數(shù)量不同拇涤,Transformer base包含12個Block疊加,而Transformer Big則擴(kuò)張一倍誉结,包含24個Block鹅士。
無疑Transformer Big在網(wǎng)絡(luò)深度,參數(shù)量以及計算量相對Transformer base翻倍惩坑,所以是相對重的一個模型掉盅,但是效果也最好。
CNN/RNN/Transformer作為特征抽取器的比較
在句法特征抽取方面以舒,文獻(xiàn)較少趾痘,之前的對比是CNN要優(yōu)于RNN。
作者從四個方面進(jìn)行了對比
-
語義特征提取能力蔓钟;
從語義特征提取能力來說永票,目前實驗支持如下結(jié)論:Transformer在這方面的能力非常顯著地超過RNN和CNN(在考察語義類能力的任務(wù)WSD中,Transformer超過RNN和CNN大約4-8個絕對百分點)滥沫,RNN和CNN兩者能力差不太多侣集。
image.png -
長距離特征捕獲能力;
在長距離特征捕獲能力方面兰绣,目前在特定的長距離特征捕獲能力測試任務(wù)中(主語-謂語一致性檢測世分,比如we……..are…),實驗支持如下結(jié)論:原生CNN特征抽取器在這方面極為顯著地弱于RNN和Transformer缀辩,Transformer微弱優(yōu)于RNN模型(尤其在主語謂語距離小于13時)臭埋,能力由強(qiáng)到弱排序為Transformer>RNN>>CNN; 但在比較遠(yuǎn)的距離上(主語謂語距離大于13)踪央,RNN微弱優(yōu)于Transformer,所以綜合看瓢阴,可以認(rèn)為Transformer和RNN在這方面能力差不太多畅蹂,而CNN則顯著弱于前兩者。
CNN弱于RNN的原因就是之前所述荣恐,卷積神經(jīng)網(wǎng)絡(luò)是依靠堆積深度來實現(xiàn)覆蓋更長的輸入長度魁莉,所以在對長距離的處理上會弱于RNN。
對于Transformer來說募胃,Multi-head attention的head數(shù)量嚴(yán)重影響NLP任務(wù)中Long-range特征捕獲能力:結(jié)論是head越多越有利于捕獲long-range特征。
image.png -
任務(wù)綜合特征抽取能力畦浓;
使用機(jī)器翻譯MT作為綜合任務(wù)痹束,BLEU作為評判指標(biāo)。Transformer綜合能力要明顯強(qiáng)于RNN和CNN(你要知道讶请,技術(shù)發(fā)展到現(xiàn)在階段祷嘶,BLEU絕對值提升1個點是很難的事情),而RNN和CNN看上去表現(xiàn)基本相當(dāng)夺溢,貌似CNN表現(xiàn)略好一些论巍。
image.png 并行計算能力及運(yùn)行效率
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進(jìn)行各種魔改持搜,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性能還是存在一些差距。