《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》
論文地址與項目源碼:
https://arxiv.org/abs/1502.03044
https://github.com/DeepRNN/image_captioning
一、主要概念、任務與背景
「soft」deterministic attention mechanism 確定性注意力機制:確定的全局注意力
「hard」stochastic attention mechanism 隨機注意力機制:不確定取attention的區域位置
本文主要提出了與soft attention相對應的hard attention
- hard: Attention每次移動到一個固定大小的區域
- soft: Attention每次是所有區域的一個加權和
soft attention是可微的,即attention項和作為結果的loss function都是輸入的可微函數,這樣梯度信息保留下來,就可以用BP
主要思想:
二、本文主要工作、模型
主要區別是Φ function的不同
Stochastic 「Hard」 Attention:
首先定義一個地點變數St,就是在生成第t個詞的時候模型的注意力的位置
St,i是one-hot變數,置第i個位置為1(out of L)
Encoder:VGG
- VGG第四層的輸出為14×14×512
- Flatten之後為196×512,L=196 D=512,這L個向量被稱為annotation vectors
- 一個map有196個位置,每個位置的特徵用一個512維的vector表示,然後給這196個vector加權相加,得到這個map在當前time step的表示,即Zt
獲得Annotation vector兩種方法:
- 14×14×512 ——>1×4096:繼續卷積池化,最後全連接,得到1個dense的輸出向量,也就是此時的annotation vector是一個向量,這種情況下decoder不能選擇性的關注一些區域(14×14個區域)
- 14×14×512 ——>1×512:soft attention或者hard attention 如果是soft attention,本文沒有直接通過全連接得到dense的向量來表示這個圖片,為了能夠讓每個time step的輸入有不同的關注點(每個時刻都分別進行attention),於是對這196個分別代表了196個區域的的向量取加權相加得到了一個512維的向量來表示這張圖片,也就是說可以分析出當前時刻的輸入vector更「像」哪些區域的vector(相當於從196個區域vector中選一個子集(加權)作為image的表示)。這時的annotation vector是一個矩陣,可以與decoder每個時刻的hidden state動態交互從而產生動態的attention。
Decoder:LSTM
Decoder的cell state與hidden state的初始化trick:
將196個annotation vectors求均值,然後分別過兩個獨立的MLP多層感知機
- Eyt-1為上一個時刻的輸出的文字對應的詞向量
- ht-1為上一個時刻的隱層輸出
- Zt為當前時刻t的map的attention後的動態表示(512維),即context vector,因為每生成一個字的關注點是不一樣的,所以attention的權重是和decode的上一個時態的hidden state有關的
- m為詞向量維度,n為LSTM隱層維度
Attention的權重如何得到:第i個區域,第t個step
用fatt這個函數處理context vector(L×D)與decoder的上一個時刻的hidden state,得到當前時刻的attention權重分布即αti
對於fatt,是一種對齊模型,常見的對齊計算方式有:
Score(ht,hs) = aij表示源端與目標單單詞對齊程度。
常見的對齊關係計算方式有,點乘(Dot product),權值網路映射(General)和concat映射(multilayer perceptron)幾種方式。
而本文使用了第三種multilayer perceptron。
Context vector如何得到(理解為當前step下圖片區域的representation):
hard/soft attention的區別就是怎麼利用這一組權重對annotation vectors進行處理,就是Φ
Soft attention:
直接使用attention的權重對196個vector加權相加即可:整個模型可微,可以利用BP進行end-to-end訓練
Hard attention:
核心思想是隨機採樣在這些區域中進行選擇,優化marginal likelihood
參考 http://www.cnblogs.com/Determined22/p/6914926.html
Doubly Stochastic Attention
目標函數即在給定輸入x時,對應y的最大概率,而懲罰項表示關注錯誤的區域會得到較大的懲罰,對loss會有較大的貢獻,而對於關注正確的區域,則減小懲罰力度。
Decoder每個時刻輸出word:
給定 previous word, hidden state, context vector
其實就是傳統的softmax多了一個L0
小總結:
三、實驗
四、總結
1、使用CNN中的low-level的feature map來作為decoder的輸入,通過在每個時刻與上一時刻的hidden state的交互得到當前的attention分布,從而得到當前的context vector,然後與上一時刻的輸出(word)、上一時刻的hidden state一起,得到當前時刻的輸出(改進版softmax)
2、? 函數代表的兩種attention機制
推薦閱讀:
※《Dialogue Act Sequence Labeling using Hierarchical encoder with CRF》閱讀筆記
※TextGAN 代碼閱讀筆記
※辭彙星空:如何構建一個炫酷的 Word2Vec 可視化
※NLP入門:做一個簡單的"人工智障"
TAG:自然語言處理 |