詳解深度學(xué)習(xí)中“注意力機(jī)制”

1. 前言

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

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

2. 目錄

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

注意力,在某種程度上,受啟發(fā)于我們是如何關(guān)注圖片中的某些區(qū)域,或者句子中的某些相關(guān)詞。舉個(gè)栗子:

視覺任務(wù)中注意力轉(zhuǎn)移

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

同樣地,我們可以解釋一句話或者上下文中詞與詞之間的關(guān)系。當(dāng)看到“eating”這個(gè)詞時(shí),我們會(huì)期望在后面不遠(yuǎn)的位置看到“食物“描述的詞。下圖中有色詞表示食物,但并不是每個(gè)詞都與”eating“直接強(qiáng)相關(guān)。

自然語(yǔ)言中語(yǔ)義attention

簡(jiǎn)而言之,在深度學(xué)習(xí)中,注意力可以廣泛的借助重要性權(quán)重向量來(lái)實(shí)現(xiàn):在預(yù)測(cè)或推斷一個(gè)元素時(shí),如圖片中的像素點(diǎn)或句中的一個(gè)詞,我們使用注意力向量來(lái)判斷,它與其他元素有多強(qiáng)的關(guān)聯(lián)性,然后對(duì)加權(quán)后的向量求和以逼近最后的目標(biāo)值(target)。

3. Seq2Seq問題所在

Seq2Seq模型誕生于語(yǔ)言模型領(lǐng)域(Sutskever, et al. 2014)——廣泛的講,它是將一個(gè)輸入序列(source)轉(zhuǎn)化為另一個(gè)序列(target),兩個(gè)序列都可以是不定長(zhǎng)的。轉(zhuǎn)化任務(wù)的場(chǎng)景包括多語(yǔ)言機(jī)器翻譯(文本或語(yǔ)音)、問答對(duì)話對(duì)話生成系統(tǒng)、甚至是句子解析為語(yǔ)法樹。

Seq2Seq模型一般都會(huì)包含編碼-解碼結(jié)構(gòu),包括:

  • 編碼器——處理序列輸入并壓縮信息到一個(gè)固定長(zhǎng)度的上下文向量中(sentence embedding 或者 “thought” vector)。上下文向量被當(dāng)做是輸入序列的語(yǔ)義概要。
  • 解碼器——由上下文向量初始化,并每次產(chǎn)生一個(gè)轉(zhuǎn)碼輸出。早期的研究?jī)H使用編碼網(wǎng)絡(luò)的最后一個(gè)狀態(tài)作為下次解碼的初始狀態(tài)。

編碼器和解碼器都是循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),如LSTM或者GRU單元

seq2seq模型

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

4. 為”翻譯“而生

注意力機(jī)制”生來(lái)“就是為機(jī)器翻譯任務(wù)幫助記憶長(zhǎng)序列的句子輸入。相對(duì)于原始借助編碼器的最后一個(gè)隱藏單元的輸出構(gòu)建單一上下文向量,注意力機(jī)制的獨(dú)家”秘方“在于,其考慮了上下文向量和所有序列輸入的信息,構(gòu)建了”連接“。每一個(gè)輸出元素下的連接的權(quán)重都是自動(dòng)學(xué)習(xí)的。

上下文向量已經(jīng)考慮了整體輸入序列信息,我們不需要擔(dān)心遺忘的問題。源輸入和目標(biāo)輸出的語(yǔ)義對(duì)齊問題由上下文向量學(xué)習(xí)和控制。實(shí)際上上下文向量處理三方面的信息:

  • 編碼器的隱藏狀態(tài)
  • 解碼器的隱藏狀態(tài)
  • 源輸入和目標(biāo)輸出的對(duì)齊
神經(jīng)網(wǎng)絡(luò)翻譯模型注意力機(jī)制

4.1 定義

接下來(lái)我們以理論的角度定義注意力機(jī)制。我們用X表示長(zhǎng)度為n的源輸入序列,用Y表示長(zhǎng)度為m*的目標(biāo)輸出序列:

源輸入和目標(biāo)輸出

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

雙向RNN隱藏狀態(tài)表示

解碼網(wǎng)絡(luò)在t時(shí)刻有隱藏狀態(tài)St——包括上一個(gè)序列隱藏狀態(tài),上一輸出和上下文向量(所有輸入序列的加權(quán)求和),權(quán)重如下:

Attention計(jì)算

對(duì)齊模型會(huì)針對(duì)第i個(gè)輸入序列和第t個(gè)輸出序列,分配一個(gè)對(duì)齊得分,以評(píng)判(yt,xi)的對(duì)齊效果。在Bahdanau的文章中,對(duì)齊得分向量是由單個(gè)隱藏層的前向網(wǎng)絡(luò)來(lái)組織的,并和整體網(wǎng)絡(luò)的其他部分進(jìn)行聯(lián)合訓(xùn)練。score計(jì)算函數(shù)方式輸入下:

score計(jì)算

對(duì)齊得分矩陣是一個(gè)很好的副產(chǎn)物,并可以可視化的表示輸入序列和輸出序列的關(guān)聯(lián)程度。

翻譯模型Attention可視化

這里有一個(gè)Tensorflow團(tuán)隊(duì)提供的一個(gè)實(shí)現(xiàn)方法的很好教程。

5. 注意力機(jī)制”家族“

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

5.1 概要

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


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

5.2 自注意力

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

這篇[long short-term memory network]論文使用了自注意力機(jī)制做機(jī)器閱讀。如下圖,自注意力機(jī)制能夠?qū)W習(xí)到當(dāng)前詞和句中先前詞之前的關(guān)聯(lián)性。

自注意力機(jī)制可視化

在[show, attend and tell]這篇文章中,自注意力機(jī)制被應(yīng)用在圖片生成描述任務(wù)中。圖片首先被CNN編碼,然后輸入到帶有自注意力機(jī)制的RNN網(wǎng)絡(luò)中,來(lái)學(xué)習(xí)圖片各個(gè)特征與描述中每個(gè)詞之前的映射關(guān)系。注意力權(quán)重的可視化清晰地的展示了模型每關(guān)注一部分特征都會(huì)輸出一個(gè)詞。

視覺任務(wù)中自注意力機(jī)制

5.3 柔性 vs 剛性注意力

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

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

5.4 全局 vs 局部注意力

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

全局和局部Attention

6. 指針網(wǎng)絡(luò)(Pointer Network)

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

指針網(wǎng)絡(luò)輸出

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

Ptr-Net網(wǎng)絡(luò)結(jié)構(gòu)

注意力機(jī)制被簡(jiǎn)化了,因?yàn)橹羔樉W(wǎng)絡(luò)并非是借助注意力權(quán)重將編碼狀態(tài)糅合僅輸出。在這里,輸出僅和位置相關(guān),和輸入內(nèi)容無(wú)關(guān)。

7. Transformer

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

7.1 key, Value 和 Query

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

transformer采用了scaled dot-product attention:輸出是有values加權(quán)求和得到,其中分配給每一項(xiàng)的權(quán)重由query和所有keys點(diǎn)積求得。

Transformer中Attention注意力計(jì)算方式

7.2 multi-head自注意力機(jī)制

multi-head自注意力機(jī)制

相對(duì)于一次性計(jì)算注意力,multi-head注意力機(jī)制借助尺度化的點(diǎn)積注意力機(jī)制進(jìn)行并行化多次計(jì)算。每個(gè)獨(dú)立的注意力輸出通過簡(jiǎn)單拼接并線性的轉(zhuǎn)換到指定的維度空間。難道因?yàn)榧煽偸怯行У??根?jù)文章描述: ”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 計(jì)算方式

7.3 編碼器

Transformer中的編碼器結(jié)構(gòu)

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

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

7.4 解碼器

Transformer中解碼器結(jié)構(gòu)

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

  • N=6的相同層堆疊
  • 每一層都有兩個(gè)帶有multi-head self-attention layer的子網(wǎng)絡(luò)結(jié)構(gòu)和一個(gè)全連接前向網(wǎng)絡(luò)
  • 和解碼器相似,每一個(gè)子網(wǎng)絡(luò)層采用了殘差和網(wǎng)絡(luò)正則化
  • 第一個(gè)multi-head self-attention sub-layer被修改以防止位置信息被傳導(dǎo)到后續(xù)位置,正如當(dāng)我們預(yù)測(cè)當(dāng)下位置的信息時(shí),并不想要偷瞥屬于目標(biāo)序列的未來(lái)信息。

7.5 整體結(jié)構(gòu)

最后我們整體看一下transformer的網(wǎng)絡(luò)結(jié)構(gòu):

  • 源輸入和目標(biāo)輸出序列首先都會(huì)經(jīng)過embedding層得到均為512維度的數(shù)據(jù)
  • 為了保留位置信息,一個(gè)基于正弦波的位置編碼器被整合應(yīng)用到embedding層
  • softmax和線性層被添加到最后的解碼輸出中
Transformer整體結(jié)構(gòu)

嘗試去實(shí)現(xiàn)Transformer網(wǎng)絡(luò)是很有趣的事情,這個(gè)是原博主實(shí)現(xiàn)的代碼:lilianweng/transformer-tensorflow

8. SNAIL

transformer模型中沒有RNN或者CNN結(jié)構(gòu),即使在embedding向量中引入了位置相關(guān)的編碼,也是一種序列順序的弱整合。對(duì)于位置敏感的任務(wù)如增強(qiáng)學(xué)習(xí),這是一個(gè)問題。

Simple Neural Attention Meta-Learner(SNAIL)被提出部分解決了這個(gè)問題——借助帶有temporal的Transformer自注意力機(jī)制。實(shí)驗(yàn)表明這種網(wǎng)絡(luò)在監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)任務(wù)中都比較擅長(zhǎng)。

Simple Neural Attention Meta-Learner(SNAIL)網(wǎng)絡(luò)結(jié)構(gòu)

SNAIL 誕生于元學(xué)習(xí)(meta-learning)——很值得另開一個(gè)博客單獨(dú)介紹它。簡(jiǎn)單地說(shuō),he meta-learning model is expected to be generalizable to novel, unseen tasks in the similar distribution
詳細(xì)的內(nèi)容可以參考這里

9. 自注意力GAN

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

經(jīng)典的深度卷積對(duì)抗生成網(wǎng)絡(luò)(DCGAN)均用多層CNN網(wǎng)絡(luò)表示生成器和判別器。但是網(wǎng)絡(luò)表示能力受限于卷積核大小,因?yàn)橐粋€(gè)像素的特征被限制在很小的局部區(qū)域里。為了連接更遠(yuǎn)的區(qū)域,特征必須通過卷積操作被稀釋,并且依賴性信息不保征被保留。

在視覺任務(wù)里,柔性注意力機(jī)制下的上下文向量可以明確的學(xué)習(xí)一個(gè)像素和其他位置之間的關(guān)系,即使相隔較遠(yuǎn)的區(qū)域,這可以很容易的捕捉全局依賴性。因此帶有注意力機(jī)制的GAN也同樣能夠捕捉這種細(xì)節(jié)。

卷積操作和自注意力機(jī)制

SAGAN采用了非局部神經(jīng)網(wǎng)絡(luò)來(lái)計(jì)算注意力權(quán)重。卷積的圖片特征可以將x映射成三份copy,分別與Transformer中的key,value和query相對(duì)應(yīng)。

之后我們采用點(diǎn)擊計(jì)算最后特征輸出的注意力權(quán)重:

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

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

其中尺度參數(shù)γ在訓(xùn)練過程中從0開始增加,網(wǎng)絡(luò)首先比較依賴局部區(qū)域,然后漸漸的通過分配權(quán)重給較遠(yuǎn)的區(qū)域去更新學(xué)習(xí)。


*如果你注意到本博客中的一些錯(cuò)誤地方,請(qǐng)及時(shí)聯(lián)系liujiezhangbupt@gmail.com。

10. 文獻(xiàn)

  • [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.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容