文章來源: http://blog.csdn.net/shenxiaolu1984/article/details/51493673
Xu, Kelvin, et al. “Show, attend and tell: Neural image caption generation with visual attention.” arXiv preprint arXiv:1502.03044 (2015).
聚焦機制(Attention Mechanism)是當下深度學習前沿熱點之一,能夠逐個關注輸入的不同部分,給出一系列理解。這篇論文是聚焦機制代表作,完成了圖像理解中頗具難度的“看圖說話”任務。
作者提供了基於Theano的源碼(戳這裏),另外有熱心羣衆在Tensorflow上給出了實現(戳這裏)。
本文對照Tensorflow版本源碼,詳解論文算法。
數據結構
從輸入到輸出經歷編碼和解碼兩個部分。
類比:在機器翻譯中,編碼部分把源語言變成基本語義特徵,解碼部分把基本語義特徵變成目標語言。
輸入:圖像
特徵(annotation):
上下文(context):
輸出(caption):
有順序的
釋義
ai 是一次生成的,但單詞zt 是逐個生成的,所以使用下標t 來強調每一次估計。
網絡結構
編碼(I→a )
輸入圖像
爲了能夠更好地描述局部內容,所以使用了較低層級的特徵。
編碼只進行一次,解碼是逐個單詞進行的,所有以下網絡變量均帶有步驟下標t。
上下文生成(a→z )
當前步驟的上下文
權重
“看哪兒”不單和實際圖像有關,還受之前看到東西的影響。比如
et−1 中蘊含看到了騎手,接下來應該往下看找馬。
第一步權重完全由圖像特徵
這一部分在全圖特徵上施加了權重,也稱爲Attention網絡。系統的隱變量是一個
隱變量生成(z→h )
這部分中採用當下流行的LSTM結構3模擬步驟之間的記憶關係。除了前文提到的內部隱狀態
輸入
候選
存儲
隱狀態
整個LSTM構造如下,前一步驟中的
句子生成(h→y )
當前隱變量
回顧
到此模型搭建完畢,來總結一下:
- 圖像經過卷積網絡生成圖像特徵;
- 根據系統前次狀態,決定現在該看哪兒;
- 用關注點對特徵加權,獲得當前上下文;
- 借鑑前次系統狀態,由上下文計算系統隱變量;
- 有隱變量直接推導出當前單詞。
訓練
數據
本文使用了三種數據庫Flickr8K, Flickr30K, MS
COCO。每個樣本包含一張圖片,以及幾個標定好的句子。使用的詞典大小
優化
爲了提高效率,每個mini-batch由“擁有相同長度句子”的樣本組成,mini-batch尺寸爲64。
在最後的誤差模塊中,比較每一步驟輸出的單詞和標定句子的Cross Entropy,使用RM-SProp方法更新模型參數。
除此之外,使用機器翻譯中常見的BLEU準則,監測validation集上的得分,作爲early stopping的一句。
在最大的MS COCO數據庫上,使用NVIDIA Titan Black訓練時間爲3天。
結果
與其他算法相比,BLEU以及METEOR評分均有提高。
尤其可貴的是,本論文只是用了單獨一個模型,且在沒有檢測模塊的前提下,給出了針對每個單詞的注意力區域(由
- K. Simonyan and A. Zisserman. Very Deep Convolutional Networks for Large-Scale Image Recognition. arXiv:1409.1556 [cs], Sept. 2014. arXiv: 1409.1556. 3 ↩
- 這裏和源碼一樣,只介紹了論文中的soft attention方法。hard attention方法推導較爲繁瑣,可以參看前文DRAM算法 ↩
- 適合入門的LSTM簡介:http://www.open-open.com/lib/view/open1440843534638.html ↩
- 論文中,前一步輸出
yt−1 也參與了本步驟運算。本文以Tensorflow源碼爲準。