詳解深度學習中“注意力機制”

1. 前言

本文翻譯自《Attention?Attention!》博客

最近幾年,注意力——在深度學習社區中,已然成為最廣為流行的概念和實用工具。在這篇博客里,我們將一起回顧它是如何被“發明”出來的,以及引申出來的各種變種和模型,如 transformer和SNAIL。

2. 目錄

  • Seq2Seq問題所在
  • 為”翻譯“而生
    • 定義
  • 注意力機制”家族“
    • 概要
    • 自注意力機制(Self-Attention)
    • 柔性 vs 剛性注意力
    • 全局 vs 局部注意力
  • 指針網絡(Pointer Network)
  • Transformer
    • key, Value, Query
    • Multi-Head 自注意力
    • 編碼器
    • 解碼器
    • 整體結構
  • SNAIL
  • 自注意力 GAG
  • 文獻

注意力,在某種程度上,受啟發于我們是如何關注圖片中的某些區域,或者句子中的某些相關詞。舉個栗子:

視覺任務中注意力轉移

人類的視覺注意力,使得我們能夠在圖片的“低解析度”背景下,更加關注具有“高解析度或辨識度”(High resolution)的特定區域(如黃色區域中狗的耳朵),然后逐漸調整焦點,移動到另一個耳朵、眼睛、鼻子等,最后進行推斷整張圖片的信息。給定圖片中的一小塊補丁區域,圖片中其余的像素點也可以提供這塊補丁應該展示什么的信息。在上圖中,假設我們先看到了狗的鼻子、尖尖的右耳和Shiba迷離的眼睛,因此我們就會理所當然的期望在黃色區域看到另一只尖尖的耳朵。但是像毯子和毛衣的信息對于解析狗的特征信息幾乎沒有什么幫助。

同樣地,我們可以解釋一句話或者上下文中詞與詞之間的關系。當看到“eating”這個詞時,我們會期望在后面不遠的位置看到“食物“描述的詞。下圖中有色詞表示食物,但并不是每個詞都與”eating“直接強相關。

自然語言中語義attention

簡而言之,在深度學習中,注意力可以廣泛的借助重要性權重向量來實現:在預測或推斷一個元素時,如圖片中的像素點或句中的一個詞,我們使用注意力向量來判斷,它與其他元素有多強的關聯性,然后對加權后的向量求和以逼近最后的目標值(target)。

3. Seq2Seq問題所在

Seq2Seq模型誕生于語言模型領域(Sutskever, et al. 2014)——廣泛的講,它是將一個輸入序列(source)轉化為另一個序列(target),兩個序列都可以是不定長的。轉化任務的場景包括多語言機器翻譯(文本或語音)、問答對話對話生成系統、甚至是句子解析為語法樹。

Seq2Seq模型一般都會包含編碼-解碼結構,包括:

  • 編碼器——處理序列輸入并壓縮信息到一個固定長度的上下文向量中(sentence embedding 或者 “thought” vector)。上下文向量被當做是輸入序列的語義概要。
  • 解碼器——由上下文向量初始化,并每次產生一個轉碼輸出。早期的研究僅使用編碼網絡的最后一個狀態作為下次解碼的初始狀態。

編碼器和解碼器都是循環神經網絡結構,如LSTM或者GRU單元

seq2seq模型

固定長度上下文向量具有一個明顯的致命缺點——無法記憶長句子。一旦完成編碼器輸入序列的處理,就會遺忘開始的部分。因此注意力機制(Bahdanau et al., 2015)被提出,解決這個問題。

4. 為”翻譯“而生

注意力機制”生來“就是為機器翻譯任務幫助記憶長序列的句子輸入。相對于原始借助編碼器的最后一個隱藏單元的輸出構建單一上下文向量,注意力機制的獨家”秘方“在于,其考慮了上下文向量和所有序列輸入的信息,構建了”連接“。每一個輸出元素下的連接的權重都是自動學習的。

上下文向量已經考慮了整體輸入序列信息,我們不需要擔心遺忘的問題。源輸入和目標輸出的語義對齊問題由上下文向量學習和控制。實際上上下文向量處理三方面的信息:

  • 編碼器的隱藏狀態
  • 解碼器的隱藏狀態
  • 源輸入和目標輸出的對齊
神經網絡翻譯模型注意力機制

4.1 定義

接下來我們以理論的角度定義注意力機制。我們用X表示長度為n的源輸入序列,用Y表示長度為m*的目標輸出序列:

源輸入和目標輸出

(加粗的變量表示向量,下同)
編碼器是一個雙向RNN結構(也可選其他RNN結構)——包括前向和后向隱藏層狀態。簡單的維度拼接可以表示當下編碼狀態,可以理解為同時考慮了中心詞的上、下文信息:

雙向RNN隱藏狀態表示

解碼網絡在t時刻有隱藏狀態St——包括上一個序列隱藏狀態,上一輸出和上下文向量(所有輸入序列的加權求和),權重如下:

Attention計算

對齊模型會針對第i個輸入序列和第t個輸出序列,分配一個對齊得分,以評判(yt,xi)的對齊效果。在Bahdanau的文章中,對齊得分向量是由單個隱藏層的前向網絡來組織的,并和整體網絡的其他部分進行聯合訓練。score計算函數方式輸入下:

score計算

對齊得分矩陣是一個很好的副產物,并可以可視化的表示輸入序列和輸出序列的關聯程度。

翻譯模型Attention可視化

這里有一個Tensorflow團隊提供的一個實現方法的很好教程

5. 注意力機制”家族“

由于注意力的幫助,源輸入和目標輸出序列之間的依賴不再受限于距離問題。這在機器翻譯任務中,收益頗大。不久被很好的拓展到計算機視覺領域(Xu et al. 2015),人們開始探索注意力機制的各種變種(Luong, et al., 2015; Britz et al., 2017; Vaswani, et al., 2017)。

5.1 概要

下表是幾種主流的注意力機制(或更寬泛的注意力機制)


Attention機制概覽
  • (*)在Luong, et al., 2015表示”concat“,在Vaswani, et al.表示”累積注意力(additive attention)“
  • (^) 添加了尺度因子1/sqrt(n)——當輸入很大時,softmax函數可能具有極小的梯度,導致難以高效的更新學習
  • (&) 指“intra-attention”

5.2 自注意力

自注意力,又稱”intra-attention“,是一種在計算同一序列表示時,權重和序列的位置相關機制,被證明在機器閱讀理解,抽象概要(abstractive summarization)和圖片描述生成中非常有效。

這篇[long short-term memory network]論文使用了自注意力機制做機器閱讀。如下圖,自注意力機制能夠學習到當前詞和句中先前詞之前的關聯性。

自注意力機制可視化

在[show, attend and tell]這篇文章中,自注意力機制被應用在圖片生成描述任務中。圖片首先被CNN編碼,然后輸入到帶有自注意力機制的RNN網絡中,來學習圖片各個特征與描述中每個詞之前的映射關系。注意力權重的可視化清晰地的展示了模型每關注一部分特征都會輸出一個詞。

視覺任務中自注意力機制

5.3 柔性 vs 剛性注意力

”柔性“ vs ”剛性“是如何定義注意力的另一種方式,原始思想最初在[show, attend and tell]文章中提出——基于注意力是否需要處整篇圖片還是僅僅局部一小塊:

  • 柔性注意力:對齊權重通過源圖片所有的”patch“進行學習映射,和Bahdanau et al., 2015想法一致
    • Pro: 模型是平滑且可導的
    • Con: 當輸入圖片很大時,訓練代價很高
  • 剛性注意力:每次僅選取圖片中一個”patch“
    • Pro: 在inference階段計算量更小
    • Con: 模型是不可導的,需要更復雜的技術手段——如降低方差(variance reduction)或者強化學習去訓練(Luong, et al., 2015)

5.4 全局 vs 局部注意力

Luong, et al., 2015提出了”全局“和”局部“注意力的概念。全局注意力和柔性注意力很相似;局部注意力是”柔性“和”剛性“的糅合——相對于剛性,改進使其可導:模型首先預測當前目標詞的粗略對齊位置,然后在這個源輸入的位置上應用一個中心窗口框住,計算上下文向量。

全局和局部Attention

6. 指針網絡(Pointer Network)

在排序或者旅行推銷員問題上,輸入和輸入都是序列數據。輸出元素的離散類別總數事先是未知的,取決于輸入變量的尺度。這很難通過經典的Seq2Seqm或者NMT模型來解決。指針網絡(Ptr-Net; Vinyals, et al. 2015)被提出來解決此類問題:當輸出元素和輸入序列的位置相關時,指針網絡并非是借助注意力來將編碼器的隱藏狀態糅合僅上下文向量(如圖8),而是將注意力機制應用在輸入元素上,每次選取一個座位解碼步驟的輸出。

指針網絡輸出

Ptr-Net輸出的是序列的整數索引c=(c1, ..., cm),給定輸入序列向量x=(x1, ..., xn)且1<ci<n (可以取等號)。模型仍然沿用了編碼-解碼框架。編碼解碼的隱藏狀態分別為(h1, ..., hn)和(s1, ..., sm)。其中si是解碼器單元激活的輸出門。指針網絡在隱藏狀態間應用了了累積注意力,人后通過softmax進行歸一化。

Ptr-Net網絡結構

注意力機制被簡化了,因為指針網絡并非是借助注意力權重將編碼狀態糅合僅輸出。在這里,輸出僅和位置相關,和輸入內容無關。

7. Transformer

[Attention is All you Need]這篇文章,毫無疑問是2017年最有影響力的文章。它表示柔性注意力有了很大的提升,并使無RNN單元的Seq2Seq建模成為了可能,提出的”transformer“模型全部僅由自注意力機制構建。
秘密在于它的網絡架構。

7.1 key, Value 和 Query

transformer的主要由稱之為multi-head self-attention mechanism的單元組成——它將輸入元素的編碼表示看做key-value對(k, v),均為n維(n為輸入序列長度);在NMT的上下文中,keys和values都是編碼器的隱藏狀態。在解碼器中,先前步的輸出被壓縮進一個queryQ中(m維),且下一步輸出由這個query映射到keys和values集合來產生。

transformer采用了scaled dot-product attention:輸出是有values加權求和得到,其中分配給每一項的權重由query和所有keys點積求得。

Transformer中Attention注意力計算方式

7.2 multi-head自注意力機制

multi-head自注意力機制

相對于一次性計算注意力,multi-head注意力機制借助尺度化的點積注意力機制進行并行化多次計算。每個獨立的注意力輸出通過簡單拼接并線性的轉換到指定的維度空間。難道因為集成總是有效的?根據文章描述: ”multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this.”

multi-head 計算方式

7.3 編碼器

Transformer中的編碼器結構

編碼器能夠生成一個基于注意力的表示,具有從潛在的無限大上下文空間中定位相關信息片段的能力。

  • N=6的相同層堆疊
  • 每一層都有一個multi-head self-attention layer和一個位置敏感的全連接前向網絡
  • 每一個子網絡層都采用了殘差連接和網絡層正則化。所有的子層輸出數據都是512維

7.4 解碼器

Transformer中解碼器結構

解碼器能夠從編碼器的表示中抽取分析信息。

  • N=6的相同層堆疊
  • 每一層都有兩個帶有multi-head self-attention layer的子網絡結構和一個全連接前向網絡
  • 和解碼器相似,每一個子網絡層采用了殘差和網絡正則化
  • 第一個multi-head self-attention sub-layer被修改以防止位置信息被傳導到后續位置,正如當我們預測當下位置的信息時,并不想要偷瞥屬于目標序列的未來信息。

7.5 整體結構

最后我們整體看一下transformer的網絡結構:

  • 源輸入和目標輸出序列首先都會經過embedding層得到均為512維度的數據
  • 為了保留位置信息,一個基于正弦波的位置編碼器被整合應用到embedding層
  • softmax和線性層被添加到最后的解碼輸出中
Transformer整體結構

嘗試去實現Transformer網絡是很有趣的事情,這個是原博主實現的代碼:lilianweng/transformer-tensorflow

8. SNAIL

transformer模型中沒有RNN或者CNN結構,即使在embedding向量中引入了位置相關的編碼,也是一種序列順序的弱整合。對于位置敏感的任務如增強學習,這是一個問題。

Simple Neural Attention Meta-Learner(SNAIL)被提出部分解決了這個問題——借助帶有temporal的Transformer自注意力機制。實驗表明這種網絡在監督學習和強化學習任務中都比較擅長。

Simple Neural Attention Meta-Learner(SNAIL)網絡結構

SNAIL 誕生于元學習(meta-learning)——很值得另開一個博客單獨介紹它。簡單地說,he meta-learning model is expected to be generalizable to novel, unseen tasks in the similar distribution
詳細的內容可以參考這里

9. 自注意力GAN

最后我想提一下最近流行的對抗生成網絡,以及自注意力GAN(SAGAN; Zhang et al., 2018),并展示注意力機制是如何提高生成圖片的質量的。

經典的深度卷積對抗生成網絡(DCGAN)均用多層CNN網絡表示生成器和判別器。但是網絡表示能力受限于卷積核大小,因為一個像素的特征被限制在很小的局部區域里。為了連接更遠的區域,特征必須通過卷積操作被稀釋,并且依賴性信息不保征被保留。

在視覺任務里,柔性注意力機制下的上下文向量可以明確的學習一個像素和其他位置之間的關系,即使相隔較遠的區域,這可以很容易的捕捉全局依賴性。因此帶有注意力機制的GAN也同樣能夠捕捉這種細節。

卷積操作和自注意力機制

SAGAN采用了非局部神經網絡來計算注意力權重。卷積的圖片特征可以將x映射成三份copy,分別與Transformer中的key,value和query相對應。

之后我們采用點擊計算最后特征輸出的注意力權重:

其中αij是注意力映射中的一個實例,表明當模型合成第j位置像素時應該分配給i位置多大權重。W均為1×1的卷積核。如果你覺得1×1的卷積核很詭異,可以瀏覽一下Andrew Ng的這篇教程。輸出oj是最終輸出o=(o1, ..., oj, ..., oN)的列向量。

然后,注意力層的輸出乘上尺度參數,累加原始的輸入特征映射:

其中尺度參數γ在訓練過程中從0開始增加,網絡首先比較依賴局部區域,然后漸漸的通過分配權重給較遠的區域去更新學習。


*如果你注意到本博客中的一些錯誤地方,請及時聯系liujiezhangbupt@gmail.com

10. 文獻

  • [1] “Attention and Memory in Deep Learning and NLP.” - Jan 3, 2016 by Denny Britz
  • [2] “Neural Machine Translation (seq2seq) Tutorial”
  • [3] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by + jointly learning to align and translate.” ICLR 2015.
  • [4] Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, and Yoshua Bengio. “Show, attend and tell: Neural image caption generation with visual attention.” ICML, 2015.
  • [5] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” NIPS 2014.
  • [6] Thang Luong, Hieu Pham, Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation.” EMNLP 2015.
  • [7] Denny Britz, Anna Goldie, Thang Luong, and Quoc Le. “Massive exploration of neural machine translation architectures.” ACL 2017.
  • [8] Ashish Vaswani, et al. “Attention is all you need.” NIPS 2017.
  • [9] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long short-term memory-networks for machine reading.” EMNLP 2016.
  • [10] Xiaolong Wang, et al. “Non-local Neural Networks.” CVPR 2018
  • [11] Han Zhang, Ian Goodfellow, Dimitris Metaxas, and Augustus Odena. “Self-Attention Generative Adversarial Networks.” arXiv preprint arXiv:1805.08318 (2018).
  • [12] Nikhil Mishra, Mostafa Rohaninejad, Xi Chen, and Pieter Abbeel. “A simple neural attentive meta-learner.” NIPS Workshop on Meta-Learning. 2017.
  • [13] “WaveNet: A Generative Model for Raw Audio” - Sep 8, 2016 by DeepMind.
  • [14] Oriol Vinyals, Meire Fortunato, and Navdeep Jaitly. “Pointer networks.” NIPS 2015.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容

  • 9. 循環神經網絡 場景描述 循環神經網絡(Recurrent Neural Network)是一種主流的深度學習...
    _龍雀閱讀 2,922評論 0 3
  • 有段日子,身在異鄉的我習慣在樓角的煙酒店里買煙,和小店老板操著各自的鄉音交談著。固定的時間雖然話不多卻也成了...
    楝蛋的閱讀 226評論 0 0
  • 一 四月的清晨,天空早早地亮了,陽光透過白色的紗簾輕輕地覆上少女的眼瞼。女孩兒纖長的睫毛極其輕微地振動了兩下,卻始...
    朝云生閱讀 875評論 0 11
  • Hey~ 我們又見面啦~ 你還好嗎? 2017.09.25 Change it if you can't acce...
    不著急小姐閱讀 478評論 0 0