一、Attention 機制剖析
1付呕、為什么要引入 Attention 機制?
根據(jù)通用近似定理跌捆,前饋網(wǎng)絡和循環(huán)網(wǎng)絡都有很強的能力徽职。但為什么還要引入注意力機制呢?
計算能力的限制:當要記住很多“信息“佩厚,模型就要變得更復雜姆钉,然而目前計算能力依然是限制神經(jīng)網(wǎng)絡發(fā)展的瓶頸。
優(yōu)化算法的限制:雖然局部連接抄瓦、權(quán)重共享以及 pooling 等優(yōu)化操作可以讓神經(jīng)網(wǎng)絡變得簡單一些潮瓶,有效緩解模型復雜度和表達能力之間的矛盾;但是闺鲸,如循環(huán)神經(jīng)網(wǎng)絡中的長距離以來問題筋讨,信息“記憶”能力并不高。
可以借助人腦處理信息過載的方式摸恍,例如 Attention 機制可以提高神經(jīng)網(wǎng)絡處理信息的能力。
2、Attention 機制有哪些立镶?(怎么分類壁袄?)
當用神經(jīng)網(wǎng)絡來處理大量的輸入信息時,也可以借鑒人腦的注意力機制媚媒,只 選擇一些關鍵的信息輸入進行處理嗜逻,來提高神經(jīng)網(wǎng)絡的效率。按照認知神經(jīng)學中的注意力缭召,可以總體上分為兩類:
聚焦式(focus)注意力:自上而下的有意識的注意力栈顷,主動注意——是指有預定目的、依賴任務的嵌巷、主動有意識地聚焦于某一對象的注意力萄凤;
顯著性(saliency-based)注意力:自下而上的有意識的注意力,被動注意——基于顯著性的注意力是由外界刺激驅(qū)動的注意搪哪,不需要主動干預靡努,也和任務無關;可以將 max-pooling 和門控(gating)機制來近似地看作是自下而上的基于顯著性的注意力機制晓折。
在人工神經(jīng)網(wǎng)絡中惑朦,注意力機制一般就特指聚焦式注意力。
3漓概、Attention 機制的計算流程是怎樣的漾月?
Attention 機制的實質(zhì):尋址(addressing)
Attention 機制的實質(zhì)其實就是一個尋址(addressing)的過程,如上圖所示:給定一個和任務相關的查詢 Query 向量 q胃珍,通過計算與 Key 的注意力分布并附加在 Value 上梁肿,從而計算 Attention Value,這個過程實際上是Attention 機制緩解神經(jīng)網(wǎng)絡模型復雜度的體現(xiàn):不需要將所有的 N 個輸入信息都輸入到神經(jīng)網(wǎng)絡進行計算堂鲜,只需要從 X 中選擇一些和任務相關的信息輸入給神經(jīng)網(wǎng)絡栈雳。
注意力機制可以分為三步:一是信息輸入;二是計算注意力分布α缔莲;三是根據(jù)注意力分布α 來計算輸入信息的加權(quán)平均哥纫。
step1- 信息輸入:用 X = [x1, · · · , xN ] 表示 N 個輸入信息;
step2- 注意力分布計算:令 Key=Value=X痴奏,則可以給出注意力分布
我們將 αi 稱之為注意力分布(概率分布)蛀骇, s(Xi,q) 為注意力打分機制读拆,有幾種打分機制:
step3- 信息加權(quán)平均:注意力分布 αi 可以解釋為在上下文查詢 q 時擅憔,第 i 個信息受關注的程度,采用一種“軟性”的信息選擇機制對輸入信息 X 進行編碼為:
這種編碼方式為軟性注意力機制(soft Attention)檐晕,軟性注意力機制有兩種:普通模式(Key=Value=X)和鍵值對模式(Key暑诸!=Value)蚌讼。
軟性注意力機制(soft Attention)
4、Attention 機制的變種有哪些个榕?
與普通的 Attention 機制(上圖左)相比篡石,Attention 機制有哪些變種呢?
變種 1- 硬性注意力:之前提到的注意力是軟性注意力西采,其選擇的信息是所有輸入信息在注意力 分布下的期望凰萨。還有一種注意力是只關注到某一個位置上的信息,叫做硬性注意力(hard attention)械馆。硬性注意力有兩種實現(xiàn)方式:
(1)一種是選取最高概率的輸入信息胖眷;
(2)另一種硬性注意力可以通過在注意力分布式上隨機采樣的方式實現(xiàn)。
硬性注意力模型的缺點:
硬性注意力的一個缺點是基于最大采樣或隨機采樣的方式來選擇信息霹崎。因此最終的損失函數(shù)與注意力分布之間的函數(shù)關系不可導珊搀,因此無法使用在反向傳播算法進行訓練。為了使用反向傳播算法仿畸,一般使用軟性注意力來代替硬性注意力食棕。硬性注意力需要通過強化學習來進行訓練〈砉粒——《神經(jīng)網(wǎng)絡與深度學習》
變種 2- 鍵值對注意力:即上圖右邊的鍵值對模式簿晓,此時 Key!=Value千埃,注意力函數(shù)變?yōu)椋?/p>
變種 3- 多頭注意力:多頭注意力(multi-head attention)是利用多個查詢 Q = [q1, · · · , qM]憔儿,來平行地計算從輸入信息中選取多個信息。每個注意力關注輸入信息的不同部分放可,然后再進行拼接:
5谒臼、一種強大的 Attention 機制:為什么自注意力模型(self-Attention model)在長距離序列中如此強大?
(1)卷積或循環(huán)神經(jīng)網(wǎng)絡難道不能處理長距離序列嗎耀里?
當使用神經(jīng)網(wǎng)絡來處理一個變長的向量序列時蜈缤,我們通常可以使用卷積網(wǎng)絡或循環(huán)網(wǎng)絡進行編碼來得到一個相同長度的輸出向量序列冯挎,如圖所示:
基于卷積網(wǎng)絡和循環(huán)網(wǎng)絡的變長序列編碼
從上圖可以看出底哥,無論卷積還是循環(huán)神經(jīng)網(wǎng)絡其實都是對變長序列的一種“局部編碼”:卷積神經(jīng)網(wǎng)絡顯然是基于 N-gram 的局部編碼;而對于循環(huán)神經(jīng)網(wǎng)絡房官,由于梯度消失等問題也只能建立短距離依賴趾徽。
(2)要解決這種短距離依賴的“局部編碼”問題,從而對輸入序列建立長距離依賴關系翰守,有哪些辦法呢孵奶?
如果要建立輸入序列之間的長距離依賴關系,可以使用以下兩種方法:一 種方法是增加網(wǎng)絡的層數(shù)蜡峰,通過一個深層網(wǎng)絡來獲取遠距離的信息交互了袁,另一種方法是使用全連接網(wǎng)絡朗恳。 ——《神經(jīng)網(wǎng)絡與深度學習》
全連接模型和自注意力模型:實線表示為可學習的權(quán)重,虛線表示動態(tài)生成的權(quán)重早像。
由上圖可以看出僻肖,全連接網(wǎng)絡雖然是一種非常直接的建模遠距離依賴的模型肖爵, 但是無法處理變長的輸入序列卢鹦。不同的輸入長度,其連接權(quán)重的大小也是不同的劝堪。
這時我們就可以利用注意力機制來“動態(tài)”地生成不同連接的權(quán)重冀自,這就是自注意力模型(self-attention model)。由于自注意力模型的權(quán)重是動態(tài)生成的秒啦,因此可以處理變長的信息序列熬粗。
總體來說,為什么自注意力模型(self-Attention model)如此強大:利用注意力機制來“動態(tài)”地生成不同連接的權(quán)重余境,從而處理變長的信息序列驻呐。
(3)自注意力模型(self-Attention model)具體的計算流程是怎樣的呢?
同樣,給出信息輸入:用 X = [x1, · · · , xN ] 表示 N 個輸入信息芳来;通過線性變換得到為查詢向量序列含末,鍵向量序列和值向量序列:
上面的公式可以看出,self-Attention 中的 Q 是對自身(self)輸入的變換即舌,而在傳統(tǒng)的 Attention 中佣盒,Q 來自于外部。
self-Attention 計算過程剖解(來自《細講 | Attention Is All You Need 》)
注意力計算公式為:
自注意力模型(self-Attention model)中顽聂,通常使用縮放點積來作為注意力打分函數(shù)肥惭,輸出向量序列可以寫為:
二、Transformer(Attention Is All You Need)詳解
從 Transformer 這篇論文的題目可以看出紊搪,Transformer 的核心就是 Attention蜜葱,這也就是為什么本文會在剖析玩 Attention 機制之后會引出 Transformer,如果對上面的 Attention 機制特別是自注意力模型(self-Attention model)理解后耀石,Transformer 就很容易理解了牵囤。
1、Transformer 的整體架構(gòu)是怎樣的娶牌?由哪些部分組成奔浅?
Transformer 模型架構(gòu)
Transformer 其實這就是一個 Seq2Seq 模型,左邊一個 encoder 把輸入讀進去诗良,右邊一個 decoder 得到輸出:
Seq2Seq 模型
Transformer=Transformer Encoder+Transformer Decoder
(1)Transformer Encoder(N=6 層汹桦,每層包括 2 個 sub-layers):
Transformer Encoder
sub-layer-1:multi-head self-attention mechanism,用來進行 self-attention鉴裹。
sub-layer-2:Position-wise Feed-forward Networks舞骆,簡單的全連接網(wǎng)絡钥弯,對每個 position 的向量分別進行相同的操作,包括兩個線性變換和一個 ReLU 激活輸出(輸入輸出層的維度都為 512督禽,中間層為 2048):
每個 sub-layer 都使用了殘差網(wǎng)絡:
(2)Transformer Decoder(N=6 層脆霎,每層包括 3 個 sub-layers):
Transformer Decoder
sub-layer-1:Masked multi-head self-attention mechanism,用來進行 self-attention狈惫,與 Encoder 不同:由于是序列生成過程睛蛛,所以在時刻 i 的時候,大于 i 的時刻都沒有結(jié)果胧谈,只有小于 i 的時刻有結(jié)果忆肾,因此需要做 Mask。
sub-layer-2:Position-wise Feed-forward Networks菱肖,同 Encoder客冈。
sub-layer-3:Encoder-Decoder attention 計算。
2稳强、Transformer Encoder 與 Transformer Decoder 有哪些不同场仲?
(1)multi-head self-attention mechanism 不同,Encoder 中不需要使用 Masked退疫,而 Decoder 中需要使用 Masked渠缕;
(2)Decoder 中多了一層 Encoder-Decoder attention,這與 self-attention mechanism 不同蹄咖。
3褐健、Encoder-Decoder attention 與 self-attention mechanism 有哪些不同?
它們都是用了 multi-head 計算澜汤,不過 Encoder-Decoder attention 采用傳統(tǒng)的 attention 機制蚜迅,其中的 Query 是 self-attention mechanism 已經(jīng)計算出的上一時間 i 處的編碼值,Key 和 Value 都是 Encoder 的輸出俊抵,這與 self-attention mechanism 不同谁不。代碼中具體體現(xiàn):
復制代碼
## Multihead Attention ( self-attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.dec,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=True,
scope="self_attention")
## Multihead Attention ( Encoder-Decoder attention)
self.dec = multihead_attention(queries=self.dec,
keys=self.enc,
num_units=hp.hidden_units,
num_heads=hp.num_heads,
dropout_rate=hp.dropout_rate,
is_training=is_training,
causality=False,
scope="vanilla_attention")
4、multi-head self-attention mechanism 具體的計算過程是怎樣的徽诲?
multi-head self-attention mechanism 計算過程
Transformer 中的 Attention 機制由 Scaled Dot-Product Attention 和 Multi-Head Attention 組成刹帕,上圖給出了整體流程。下面具體介紹各個環(huán)節(jié):
Expand:實際上是經(jīng)過線性變換谎替,生成 Q偷溺、K、V 三個向量钱贯;
Split heads: 進行分頭操作挫掏,在原文中將原來每個位置 512 維度分成 8 個 head,每個 head 維度變?yōu)?64秩命;
Self Attention:對每個 head 進行 Self Attention尉共,具體過程和第一部分介紹的一致褒傅;
Concat heads:對進行完 Self Attention 每個 head 進行拼接;
上述過程公式為:
5袄友、Transformer 在 GPT 和 Bert 等詞向量預訓練模型中具體是怎么應用的殿托?有什么變化?
GPT 中訓練的是單向語言模型剧蚣,其實就是直接應用 Transformer Decoder支竹;
Bert 中訓練的是雙向語言模型,應用了 Transformer Encoder 部分券敌,不過在 Encoder 基礎上還做了 Masked 操作唾戚;
BERT Transformer 使用雙向 self-attention,而 GPT Transformer 使用受限制的 self-attention待诅,其中每個 token 只能處理其左側(cè)的上下文。雙向 Transformer 通常被稱為“Transformer encoder”熊镣,而左側(cè)上下文被稱為“Transformer decoder”卑雁,decoder 是不能獲要預測的信息的。