1. 前言
神經(jīng)網(wǎng)絡(luò)在進(jìn)行特征提取的時候货邓,會將所有的輸入進(jìn)行處理举瑰,提取得到的特征并沒有進(jìn)行特別的處理劳曹。那么,如果神經(jīng)網(wǎng)絡(luò)能夠像人一樣琅摩,并不是“觀察”到所有的特征铁孵,而是只“注意”到那些真正關(guān)心的特征呢?
2. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
雖然注意力機(jī)制常常用于語音處理房资,也就是RNN蜕劝,但是在圖像處理上,也有非常有趣的應(yīng)用轰异。例如這篇論文岖沛,使用神經(jīng)網(wǎng)絡(luò)對圖片進(jìn)行描述。這篇論文兩年前就讀過搭独,但是當(dāng)時也是瞎學(xué)一通婴削,今天,抽出時間再次拜讀一下牙肝。
論文的主要貢獻(xiàn):
- 作者介紹了兩種注意力唉俗,一種是soft,它可以使用BP算法求解配椭,一種是hard
- 作者介紹了將注意力可視化的方法
- 作者對結(jié)果進(jìn)行了量化驗證
2.1 模型介紹
作者采用了常見的sequence to sequence形式互躬,就是通過一個encoder將圖片轉(zhuǎn)換為了一個特征向量,再通過decoder將這個向量轉(zhuǎn)換為一串輸出颂郎。
Encoder:作者使用了傳統(tǒng)的CNN作為encoder,通過CNN對一個圖片進(jìn)行了特征提取容为。作者將特征稱為annotation向量乓序。不同的是,作者沒有從最后一層fc層中提出特征坎背,而是從中間的卷積層提取特征替劈,因此得到的特征是一個矩陣,而不是一個向量得滤。如下圖 個向量陨献,向量維度是。
其中每一個特征向量對應(yīng)圖片的一個部分懂更。
Decoder:作者在decoder的選擇上也非常簡單眨业,就是LSTM。LSTM就是一個加強(qiáng)版的RNN cell沮协。它通過設(shè)計門結(jié)構(gòu)龄捡,使得cell擁有長時記憶。如下:
公式如下:
注意慷暂,每個時刻LSTM cell的輸入是:上個時刻的狀態(tài)
根據(jù)annotation喜鼓,對每一個特征向量計算一個值
公式如下:
通過注意力模型
作者選擇的是一個多層fc背桐,它的輸入是上一時刻的狀態(tài),和annotation蝉揍。
一旦得到了權(quán)重就可以通過計算上下文向量链峭。這里就會有上面提到的hard, soft的區(qū)分。
2.2 Stochatic "hard" Attention
作者使用表示在產(chǎn)生第個詞的時候應(yīng)該注意的地方又沾,是一個向量弊仪,它的第個值為1,其余為0杖刷,表示在時刻應(yīng)該注意位置励饵。
那么,由于表示概率滑燃,就有如下公式:
也就是說役听,在
為了進(jìn)行反向傳播典予,作者定義了損失函數(shù):
它的梯度:
進(jìn)一步
我理解就是蚊丐,由于位置的選擇是根據(jù)概率來決定的熙参,就像給定
作者提出锐涯,這個公式類似于REINFORCE磕诊。只不過,action的選擇
2.3 Deterministic "Soft" Attention
soft情況下,被看作相對重要性升薯。那么上下文向量可以由annotation的加權(quán)和得到:
在文章中還有關(guān)于 輸出單詞莱褒,注意多個地方等的討論,具體請參考涎劈。
3. Neural Machine Translation by Jointly Learning to Align and Translate
這篇貌似是最早引入注意力機(jī)制的文章广凸,它在機(jī)器翻譯中引入了注意力。同樣蛛枚,作者是使用sequence to sequence框架進(jìn)行訓(xùn)練谅海。
3.1 模型
Decoder:作者定義新的條件概率:
也就是說,當(dāng)網(wǎng)絡(luò)預(yù)測新的詞的時候蹦浦,是根據(jù)上一個預(yù)測的詞
很顯然智末,關(guān)鍵就在于如何計算這個上下文向量,以及如何使用它來進(jìn)行預(yù)測徒河。
上下文向量由輸入的句子決定,在整個模型中送漠,會有一個encoder來將輸入的句子映射成多個向量顽照,作者稱為annotations:
于是代兵,上下文向量就由它們的加權(quán)和得到:
它們的權(quán)重
其中,
Encoder
作者使用了一個雙向的RNN作為encoder谷饿,雙向的RNN類似于普通的RNN惶我,但是它又進(jìn)一步提取了輸入反向輸入時的特征,具體可以參考論文博投。
4. Attention Is All You Need(TODO)
在這篇論文中绸贡,作者提出了一種新的網(wǎng)絡(luò)結(jié)構(gòu),稱之為Transformer毅哗,里面僅僅使用了注意力機(jī)制听怕,拋棄了之前的RNN,CNN等結(jié)構(gòu)虑绵。
作者認(rèn)為尿瞭,在傳統(tǒng)的RNN結(jié)構(gòu)中,在計算過程中需要cell的hidden state 蒸殿。因此筷厘,在每個時刻,都需要之前的結(jié)果宏所,這使得訓(xùn)練無法并行化酥艳,因此,在訓(xùn)練長的句子的時候爬骤,就無法使用大的batch來訓(xùn)練充石,因為GPU的顯存有限。
在論文中霞玄,作者提出了Transformer骤铃,避開了RNN,將input和output僅僅通過注意力機(jī)制連接起來坷剧。并且惰爬,Transformer允許更多的并行處理。
4.1 模型結(jié)構(gòu)
如下圖:
結(jié)構(gòu)依然采用了encoder-decoder的架構(gòu)惫企。
** Encoder:整個encoder由6個相同的層堆疊成撕瞧,每一層有兩個子層,第一個子層是multi-head self-attention mechanism狞尔,第二個子層是一個簡單的position-wise fc層丛版。作者在每個子層間加入了layer normalization和residual connection。也就是說偏序,每個子層的輸出是:页畦。
** Decoder:decoder同樣由6個相同的層堆疊成。除了像encoder中的兩個子層研儒,decoder還加入了第三個子層豫缨,它對encoder的輸出進(jìn)行multi-head attention**独令。
4.2 注意力
注意力機(jī)制可以描述為將一組query 和 一組輸入 映射為一組輸出,通常情況下這個輸出由輸入的加權(quán)得到州胳,權(quán)重由query 和 輸入來決定记焊。
Scale Dot-Product Attention:如下圖:
輸入由 queries,
權(quán)重由
Multi-Head Attention:作者發(fā)現(xiàn)將queries, keys, values映射次瓤湘,到一個不同的瓢颅,學(xué)習(xí)得到的映射結(jié)果會更加有利。在這些映射后的結(jié)果上弛说,再使用注意力機(jī)制挽懦,得到維的輸出。最后再進(jìn)行拼接木人,和一次映射信柿,得到最后的輸出結(jié)果。簡單地說醒第,就是將queries, keys, values通過線性變換到一個新的維度渔嚷,再進(jìn)行Scalesd Dot-Product Attention,結(jié)果拼接起來作為輸出稠曼。當(dāng)然這個結(jié)果還有一次映射形病。
公式如下:
4.3 如何在模型中應(yīng)用注意力機(jī)制
論文提出的模型中,有三個不同的方式來應(yīng)用注意力機(jī)制霞幅。
- queries來自于前一個decoder層漠吻,keys, values來自于encoder的輸出。這樣的話司恳,允許decoder關(guān)注到輸入的所有位置(之前的)途乃。
- 在encoder中,包含一個self-attention層扔傅。在這個層中欺劳,keys, values, queries都來自于同一個地方,例如:上一個encoder層的輸出铅鲤。這樣的話,每一次encoder都可以注意到之前所有encoder的輸出枫弟。
- 類似地邢享,可以在decoder中加入一個self-attention層,來觀察到之前所有層的輸出淡诗。但是骇塘,我們需要防止前面層的信息淹沒了decoder當(dāng)前的信息伊履,we need to prevent leftward information flow in the decoder to preserver the auto-regressive property,作者通過使用mask款违,去掉了所有不合理的連接唐瀑。
4.4 Positional Encoding
為了在輸入中保留位置信息,作者加入了位置編碼插爹。如下:
其中