近年來NLP領域最讓人印象深刻的成果,無疑是以谷歌提出的Bert為代表的預訓練模型了。它們不斷地刷新記錄(無論是任務指標上,還是算力需求上),在很多任務上已經能超越人類平均水平,還具有非常良好的可遷移性,以及一定程度的可解釋性。
例如,當我們需要在論文裡解釋為什麼算法或者改動能夠work的時候,一張基於attention的熱力圖顯然更容易說明我們的代碼究竟做到了什麼。
圖1 一種論文中常見的attention熱力圖而目前主流的預訓練模型,都是以17年穀歌提出的Transformer模型作為基礎進行修改,作為自己的特徵抽取器。可以說,Transformer自從出現以來就徹底改變了深度學習領域,特別是NLP領域。
本文主要介紹了Transformer以及其在近年來的一些優化變種。
Transformer如果用一句話來介紹Transformer,那就是:「首個完全拋棄RNN的recurrence,CNN的convolution,僅用attention來做特徵抽取的模型。」也就是論文標題所寫的,《Attention Is All You Need》。
Attention機制在NLP領域的應用最早可以追朔到2014年,Bengio團隊將Attention引入NMT(神經機器翻譯)任務。但那時Attention僅僅是作為一項外掛結構,模型的核心構架還是RNN。而到了Transformer則完全地以Attention機製作為模型的基礎構架,拋棄了之前的CNN和RNN的網絡。
Transformer的基本構架如下圖所示,其中,左半邊是Encoder部分,右半邊是Decoder部分。Transformer有6層這樣的結構。
圖2 Transformer詳細構架
以翻譯模型為例給出Transformer的總的結構圖:
圖3 Transformer整體構架
以上是對Transformer的整體介紹,下面將對Transformer各個創新之處進行講解。
AttentionTransformer中一共使用了三次Attention。其中Decoder部分多一層比較特殊的Masked Attention。即在解碼時,模型應當只知道當前中心詞的上文,因此通過masking的方式,屏蔽中心詞下文的內容,保持了自回歸的特性。
Scaled Dot-Product AttentionSelf-Attention本質上是通過為當前詞引入其上下文的信息,以增強對當前詞的表示,寫入更多的信息。這點基本類似於2014年,Bengio團隊將Attention引入NMT(神經機器翻譯)。
在Transformer中,這部分是通過Attention(Q, K, V)實現的。其中Q是query,K是key,V是value。通過Q和K的點積的結果來體現上下文詞分別對中心詞的影響程度,再通過softmax進行歸一化。
圖4 Attention計算路徑Multi-Head AttentionMulti-Head Attention基本是完全創新之處。
圖5 Multi-Head Attention計算路徑
其會將原本512維的Q、K、V,通過8次不同的線性投影,得到8組低維的Qi、Ki、Vi,其維度均為64維。公式如下:
這樣做由於每個注意力頭的大小都相應地縮小了,實際上計算量並沒有顯著增加。
關於為什麼使用多頭注意力,而不是單頭注意力,《Attention Is All You Need》作者認為:平均注意力加權降低了有效的解析度,即它不能充分體現來自不同表示子空間的信息。而使用多頭注意力機制有點類似於CNN中同一卷積層內使用多個卷積核的思想。可以增強模型對於文本在不同子空間中體現出的不同的特性,避免了平均池化對這種特性的抑制。
但是關於多頭注意力機制是不是有用,為什麼有用,目前還沒有一個很好的解釋。
有大量的研究表明,以Transformer為基礎的Bert的特定層是有其獨特的功能的,底層更偏向於關注語法,頂層更偏向於關注語義。既然在同一層Transformer關注的方面是相同的,那麼對該層而言,不同的頭關注點應該也是一樣的。這就和作者的解釋有些矛盾。
實際上,在《A Multiscale Visualization of Attention in the Transformer Model》這篇文章中,作者分析了前幾層BERT的部分注意力頭,如下圖所示,結果顯示,同一層中,總有那麼一兩個頭關注的點和其他的頭不太一樣,但是剩下的頭也相對趨同【考慮到同一層的注意力頭都是獨立訓練的,這點就很神奇】。
圖6 Bert的0-3層中,第0-5的head對於同樣的輸入所關注的內容。
而在《What Does BERT Look At? An Analysis of BERT’s Attention》一文中,作者分析了,同一層中,不同的頭之間的差距,以及這個差距是否會隨層數變化而變化。結果如下圖所示,似乎可以粗略地得出結論,頭之間的差距隨著所在層數變大而減少,即層數越高,頭越趨同。但遺憾的是,這個現象的原因目前沒有比較好的解釋。
圖7 對於Bert中,每一層的head之間的差異在二維平面上的投影
就我個人觀點,多頭注意力機制的作用可能是這樣:注意力機制的冗餘性很高(即使是獨立計算的注意力頭,大概率關注的點還是一致的),所以那些僅有很少部分的相對離群的注意力頭,能夠使得模型進一步優化。但是這些離群的頭出現的概率並不高,因此需要通過提高頭的基數,來保證這些離群頭的出現頻率。
Positional Encoding由於Attention機制並不會告訴模型,詞與詞之間的位置關係(這點和RNN、CNN不同),需要額外引入位置信息編碼。
使用上述位置編碼的理由很簡單,因為它能夠很好的編碼兩個詞之間的相對位置關係。三角函數有著非常方便的和差化積公式。作者還提到了可以使用Learned embedding,但是實驗表明兩種方法效果上並沒有差別,但使用公式方法更為簡單,可以處理比訓練時更長的序列。
缺點Transformer從現在看來也存在著一些缺點和不足:
非圖靈完備:證明略過不表。通俗來說,就是Transformer不能處理所有問題。例如,當我們需要輸出直接複製輸入時,Transformer並不能很好地學習到這個操作。
不適合處理超長序列:當針對文章處理時,序列的長度很容易就超過512。而如果選擇不斷增大模型的維度,訓練時計算資源的需求會平方級增大,難以承受。因此一般選擇將文本直接進行截斷,而不考慮其自然文本的分割(例如標點符號等),使得文本的長距離依賴建模質量下降。
計算資源分配對於不同的單詞都是相同的:在Encoder的過程中,所有的輸入token都具有相同的計算量。但是在句子中,有些單詞相對會更重要一些,而有些單詞並沒有太多意義。為這些單詞都賦予相同的計算資源顯然是一種浪費。
原始版的Transformer雖然並不成熟,層數固定不夠靈活、算力需求過大導致的不適合處理超長序列等缺陷限制了其實際應用前景。但是其優秀的特徵抽取能力吸引了很多學者的關注。很多人提出了不同的變種Transformer來改進或者規避它的缺陷。其中,Universal Transformer、Transformer-XL、Reformer就是典型的代表。
Universal Transformer從構架來看,Universal Transformer和Transformer並沒有太大的區別,這裡就不詳細解讀了,主要談談其最大的創新之處。
圖8 Universal Transformer模型架構
在Transformer中,輸入經過Attention後,會進入全連接層進行運算,而Universal Transformer模型則會進入一個共享權重的transition function繼續循環計算
圖9 Universal Transformer重新啟用了循環機制
其中,縱向看是文本的序列順序,橫向看是時間步驟。其中每一步的計算公式如下:
這裡Transition function可以和之前一樣是全連接層,也可以是其他函數層。
之前Transformer的位置編碼因為因為層數是固定的,所以不需要將層數編碼進去。大師Universal Transforer模型多了一個時間維度,因此每一次循環都需要進行一輪坐標編碼,公式為:
為了控制循環的次數,模型引入了Adaptive Computation Time(ACT)機制。ACT可以調整計算步數,加入ACT機制的Universal transformer被稱為Adaptive universal transformer。以下圖為例,可以看出,引入ACT機制後,模型對於文本中更重要的token會進行更多次數的循環,而對於相對不重要的單詞會減少計算資源的投入。
圖10 Universal Transformer模型會對重要的token投入更多的資源
Universal Transformer對transformer的缺點進行了改進,解決了Transformer非圖靈完備的缺點,和計算資源投入平均的問題。
Transformer-XL理論上,attention機制可以讓Transformer模型捕獲任意距離之間的token之間的依賴關係,但是受限於算力問題(下一個介紹的模型就是解決這個問題的),Transformer通常會將本文分割成長度小於等於
這也就意味著,segment之間的依賴關係,或者說距離超過512的token之間的依賴關係就完全無法建模抽取。同時,這還會帶來一個context fragmentation的問題,因為segment的劃分並不是根據語義邊界,而是根據長度進行劃分的,可能會將一個完整的句子拆成兩個。那麼在對這樣被拆分的句子進行預測時,可能就會缺少必要的語義信息。
而Transformer-XL提出了Segment-level Recurrence來解決這個問題。
用一句話概括Segment-level Recurrence,那就是,在對當前segment進行處理的時候,緩存並利用上一個segment中所有layer的隱向量,而且上一個segment的所有隱向量只參與前向計算,不再進行反向傳播。
圖11 Transformer-XL中,節點能夠「看到」之前的segment中的內容
讓我們仔細深入研究一下計算過程,假設每個segment的長度為L,整個模型包含N層Transformer-XL,那麼每組segment就包含有N組長度為L的隱變量數組。將第t組segment的第n層隱變量向量表示為
從圖中可以看出,在當前segment中,第n層的每個隱向量的計算,都是利用下一層中包括當前位置在內的,連續前L個長度的隱向量。這也就意味著,每一個位置的隱向量,除了自己的位置,都跟下一層中前(L-1)個位置的token存在依賴關係,而且每往下走一層,依賴關係長度會增加(L-1)。所以最長的依賴關係長度是N(L-1),N是模型中layer的數量。在對長文本進行計算的時候,可以緩存上一個segment的隱向量的結果,不必重複計算,大幅提高計算效率。
由於考慮了之前的segment,那麼先前的位置編碼就不足以區分不同segment之間的相同位置的token,因此作者提出了使用Relative Positional Encodeing來替代之前的位置編碼。具體來說,就是使用相對位置編碼來替代絕對位置編碼。這種做法在思想上是很容易理解的,因為在處理序列時,一個token在其中的絕對位置並不重要,我們需要的僅僅是在計算attention時兩個token的相對位置。由於這部分工作起到的作用主要是補丁,這裡不再展開說。
總結來看。Transformer-XL在沒有大幅度提高算力需求的情況下,一定程度上解決了長距離依賴問題。
Reformer之所以Transformer的
為了解決這個問題,作者提出了兩個機制分別解決這兩個問題,它們是locality-sensitve hashing(LSH) attention和Reversible transformer。原始Transformer計算attention的過程中,需要計算
下圖展示LSH attention的過程,首先用LSH來對每個segment進行分桶,將相似的部分放在同一個桶裡面。然後我們將每一個桶並行化計算其中兩兩之間的點乘。
者還考慮到有一定的概率相似的向量會被分到不同的桶裡,因此採用了多輪hashing來降低這個概率。
圖12 Reformer模型預先使用了hashing篩選,類似桶排序,避免了對QK的計算
LSH解決了計算速度的問題,但仍有一個內存消耗的問題。一個單層網絡通常需要佔用GB級別的內存,但是當我們訓練一個多層模型時,需要保存每一層的激活值和隱變量,以便在反向傳播時使用。這極大地提高了內存的佔用量。
這裡作者借鑑了RevNet的思想,不保留中間殘差連接部分的輸入了,取而代之的,是應用一種「可逆層」的思路,就如同下圖中所示的那樣,(a)為前向傳播,(b)為反向傳播。
圖13 Reformer中的反向傳播時,每一層的輸入可以根據其輸出計算出來
可逆層對每個層有兩組激活。一個遵循正常的標準過程,並從一個層逐步更新到下一個層,但是另一個只捕獲對第一個層的更改。因此,要反向運行網絡,只需減去應用於每個層的激活。
這意味著不需要緩存任何激活來計算後向傳播。類似於使用梯度檢查點,雖然仍然需要做一些冗餘計算,但由於每一層的輸入都可以很容易地從它的輸出中構造出來,內存使用不再隨網絡中層數的增加而增加。
總結來看,Reformer在減少了attention計算量的情況下,還減少了模型的內存佔用,為未來大型預訓練模型的落地奠定了基礎。
總結本文主要介紹了Transformer模型以及針對其缺點作出改進的一些變種模型,總結了它們的設計思路和優缺點。未來,以Transformer及其改進版為基礎特徵抽取器的預訓練模型,一定能夠在自然語言處理領域取得更大的突破。
參考文獻[1] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.
[2] Dehghani M, Gouws S, Vinyals O, et al. Universal transformers[J]. arXiv preprint arXiv:1807.03819, 2018.
[3] Dai Z, Yang Z, Yang Y, et al. Transformer-xl: Attentive language models beyond a fixed-length context[J]. arXiv preprint arXiv:1901.02860, 2019.
[4] Kitaev N, Kaiser Ł, Levskaya A. Reformer: The Efficient Transformer[J]. arXiv preprint arXiv:2001.04451, 2020.
[5] Vig J. A multiscale visualization of attention in the transformer model[J]. arXiv preprint arXiv:1906.05714, 2019.
[6] Clark K, Khandelwal U, Levy O, et al. What does bert look at? an analysis of bert's attention[J]. arXiv preprint arXiv:1906.04341, 2019.