作者:Mihail Eric
編譯:ronghuaiyang
前面分享了不少關於Attention相關的內容,今天給大家介紹自注意力的一個具體的應用,Google的Transformer,看看這麼牛逼的東西到底長個什麼樣子。
在這篇文章中,我們將描述一類序列處理模型,稱為Transformers (……不是變形金剛哦)。撇開笑話不談,Transformers其實出來沒多長時間,但是它對自然語言處理界的震動是非常大的,它的賣點是:最先進、高效的序列處理,無需遞歸單元或卷積。
「沒有遞歸單元或卷積?!這個模型是什麼做的?「,感覺要顛覆我的三觀了!
結果是,除了一些注意力和前饋操作之外,沒有什麼特別的東西。
雖然組成Transformer模型的各個組件並不特別新穎,但是這仍然是一個包含許多活動部件的非常密集的模型。因此,我們在這篇文章的目標將是提煉出模型的關鍵貢獻,而不是過於拘泥於細節。
首先,論文的TLDR:
聽起來是不是很興奮,請繼續看吧!
雖然Transformer不使用傳統的遞歸單元或卷積,但它仍然從序列到序列的體系結構中獲得靈感,在這種體系結構中,我們對一些輸入進行編碼,並疊代地解碼所需的輸出。
這在實踐中是如何實現的?讓我們首先看看編碼器。這個過程有相當多的小細節,所以不要在細節中迷失太多。我們正在做的是對一些輸入進行編碼。
假設我們想要從西班牙語翻譯成英語。Transformer首先將西班牙語短語的token嵌入到一個傳統的嵌入矩陣中:
由於模型不使用遞歸單元,我們需要一些方法來表示模型中基於位置的信息。因此,我們在這個嵌入矩陣中添加了一個位置編碼,我們將在下一節中描述它的確切形式:
們修改後的輸入被輸入到Transformer編碼器的第一層。在每個編碼器層中,我們對輸入執行一系列操作。
首先,我們把輸入進行多頭注意力操作:
對於這個注意力的輸出,我們還添加了一個殘差連接,並執行層歸一化操作:
現在,我們使用殘差連接和層歸一化將這個結果反饋給一個前饋層:
這是我們第一層編碼器操作的結果!這將作為輸入輸入到另一個相同的層。Transformer編碼器共使用六層疊加:
在我們來看看Transformer解碼器。在實踐中,解碼器也使用六個堆疊層來執行一組操作。這些操作基本上與編碼器層相同,只是有一些小的區別:
在實踐中,這個模型的外觀如下:
執行這些操作後,我們可以預測我們翻譯的短語的下一個token:
雖然Transformer體系結構在概念上看起來很簡單,但問題當然在於細節。為此,有相當多的方面值得作進一步的說明。
位置編碼
添加到編碼器和解碼器輸入中的位置編碼是模型中的第一個問號。這是怎麼回事?
回想一下,位置編碼的目的是幫助模型學習序列的一些概念和token的相對位置。這對基於語言的任務非常重要,尤其是在這裡,因為我們沒有使用任何傳統的遞歸單元。
在Transformer結構中,位置編碼是一個向量,其表達式如下:
這裡,i表示我們正在查看的向量索引,pos表示令牌,dmodel表示輸入嵌入維度的固定常數。好的,讓我們進一步分析。
這個向量的基本意思是,對於給定的固定向量下標,當我們改變pos(對應於不同位置的token)時,我們形成一個正弦:
之所以選擇這種特定的位置編碼形式,是因為在給定位置PEpos+k的編碼值可以表示為在較早位置PEpos的值的線性函數。這是從三角恆等式推導出來的,等價於說給定的token可以學習處理序列中較早的token。這是Transformer的基本屬性。
多頭注意力
多頭注意操作是該模型的主要貢獻之一。讓我們來看看它是如何工作的。
在高層次上,注意力操作旨在幫助自然語言體系結構中的某個token聚焦於模型的另一部分(通常是另一些token集合)的某些方面。請記住,注意力操作可以用於其他問題領域,如計算機視覺,這裡我們關注的是自然語言。
更正式地說,注意力接受一個query,計算一組keys的一些權重,並使用這些權重形成一組values的加權組合。用數學術語來說,Transformer的注意力機制可以描述為:
其中Q、K、V分別是查詢矩陣、鍵矩陣和值矩陣,dk是固定的縮放常數。
在編碼器自注意力的情況下,鍵、值和查詢都是相同的值,即來自前一層編碼的輸出。
在掩碼解碼器的自注意力的情況下,也是一樣的,只是應用了掩碼,使解碼的位置只能注意到先前的位置。
在編碼器-解碼器注意力的情況下,鍵和值是編碼器層堆棧的輸出,查詢是前一解碼器層的輸出。
多頭注意力操作的基本含義是,我們不只使用一次注意力操作,而是多次注意操作(Transformer模型為8次)。數學上,這看起來像:
其中,W**被適當大小的權重矩陣所填充。多頭注意力的優點是操作容易並行,從而減少了運行時間。
儘管繞過了傳統的遞歸體系結構,但Transformer還是令人驚訝的,因為它仍然能夠勝過它的遞歸對手。在英語到德語和英語到法語的WMT翻譯任務中,Transformer獲得了最先進的BLEU評分(EN-FR為41.8,EN-DE為28.4)。
不僅如此,由於它的高度並行性,Transformer能夠以顯著減少的FLOPs(浮點操作)數量來完成這一任務。所以Transformer不僅更好,而且更快!
在Transformer體系結構中,這種自注意力的概念非常重要。為什麼自注意力用來作為一個模型的支柱?
自注意力的一大優勢是它的計算效率。自注意力與其他傳統網絡操作的複雜性比較說明了這一點:
上面,層複雜度表示每層的計算量。在這種情況下,只要序列長度n小於輸入嵌入維d,那麼自注意力機制就比遞歸更有效,通常都是這樣的。
與需要線性時間計算的遞歸相比,自注意力機制還通過一個固定的計算時間來連接所有位置。
Transformer在自然語言深度學習場景中是一個真正的叛逆者,因為它避開了傳統的網絡結構,同時仍然優於現有的系統。它挑戰了關於自然語言模型中重複的必要性。自發布以來,Transformer已經被擴展並在新的體系結構中使用,最近的一次是BERT。
英文原文:https://www.mihaileric.com/posts/transformers-attention-in-disguise/
請長按或掃描二維碼關注本公眾號