1. 程式人生 > >論文筆記:Image Caption(Show and Tell)

論文筆記:Image Caption(Show and Tell)

Show and Tell: A Neural Image Caption Generator

Show and Tell

1、四個問題

  1. 要解決什麼問題?
    • Image Caption(自動根據影象生成一段文字描述)。
  2. 用了什麼方法解決?
    • 作者提出了一個基於深度迴圈架構的生成式模型。
    • 訓練時的目標是最大化這個從輸入影象到目標描述語句的似然。
  3. 效果如何?
    • 所提出模型在幾個資料集上的效果都不錯。
    • 比如,此前在Pascal資料集上效果最好的BLEU-1分數是25,這裡達到了59,與人類的表現(69左右)相當。
    • 在Flickr30k上的BLEU-1分數從56提高到了66。
    • 在SBU上,從19提高到了28.
    • 在最新的COCO資料集上,BLEU-4分數達到了27.7,是目前最好的結果。
  4. 還存在什麼問題?
    • 由於這篇論文是在15年發表的,當時的state-of-the-art,現在已經算是比較落後的了。
    • 影象特徵僅僅是隻在開始的時候以bias的形式傳入,只關注到了全域性特徵,模型也是學習到了一種模板然後往裡面填詞。

2、論文概述

2.1、簡介

  • Image Caption任務,顧名思義,就是讓演算法根據輸入的一幅影象自動生成對應的描述性文字。
  • Image Caption的難點在於,不止要檢測到影象中的物體,還需要表示出這些物體相互之間的關係。
  • 此前關於Image Caption的嘗試,大多數是考慮將那些子問題的一些現有的解決演算法拼在一起。
  • Image Caption任務數學模型:
    • 輸入影象為 I I
    • 輸出語句是 S
      = S 1 , S 2 , . . . S = {S_1, S_2, ...}
      ,每個單詞 S t S_t 都是從一個給定的字典中得到的。可以充分地對影象進行描述。
    • 目標函式是最大化似然函式: p ( S I ) p(S | I)
  • 文中提出的主要思路來自於最近的機器翻譯相關的工作。
    • 機器翻譯的主要任務是將源語言的語句 S S 轉換為目標語言的語句 T T ,通過最大化似然函式 p ( S I ) p(S | I)
    • 近期的工作中使用RNN做機器翻譯可以取得相當不錯的效果。
    • 整體思路是:使用一個“編碼器”RNN讀取源語句,並將其轉換為長度固定的特徵向量,而這些特徵向量又被用作“解碼器”RNN的初始隱藏層狀態。最後使用“解碼器”RNN來生成目標語句。

在這裡插入圖片描述

  • 上圖是文中提出的模型,NIC。
  • 思路很簡單,在機器翻譯中有一個編碼器RNN、一個解碼器RNN,然後把編碼器RNN替換成CNN。
    • 在近些年來的研究中,已經充分證明了CNN可以從輸入影象中充分地提取特徵並嵌入到一個定長的向量中。
    • 很自然地,可以將CNN用作一個編碼器,先在ImageNet上進行預訓練,隨後將其最後一層隱藏層作為作為RNN的輸入。
  • 論文的貢獻有以下三點:
    1. 提出了一個端到端的系統來解決Image Caption任務。
    2. NIC模型結合了分別在CV和NLP領域state-of-the-art的子網路模型。
    3. 相比其他方法,取得了state-of-the-art的效果。

2.2、模型

  • 近期的基於統計機器翻譯的發展說明了,只要提供了一個強大的序列模型,我們能夠直接通過最大化給定輸入語句的正確翻譯的概率(以一種端到端的方式),來獲得state-of-the-art的結果。
  • 這些模型使用RNN對變長輸入進行編碼,得到定長的特徵向量,然後再用來解碼成期望的輸出語句。
  • 將編碼器的部分換成,輸入影象到CNN,輸出定長的特徵向量。
  • 最大化似然的公式可以描述為如下公式:
    • θ = a r g m a x θ ( I , S ) log p ( S I ; θ ) \theta^* = argmax_{\theta} \sum_{(I, S)} \log p(S | I; \theta) ,其中 I I 是輸入影象, S S 是正確的影象描述, θ \theta 是模型的引數。
    • S S 可以表示任意語句,它的長度是不確定的。
  • 使用鏈式法則來對 S 0 S_0 S N S_N 的聯合概率建模是很常見的:
    • log p ( S I ) = t = 0 N log p ( S t I , S 0 , . . . , S t 1 ) \log p(S | I) = \sum_{t=0}^N \log p(S_t | I, S_0, ..., S_{t-1})
    • 為簡便起見,丟棄了 θ \theta 的依賴。
    • 訓練中, ( S , I ) (S, I) 是一對樣本對。我們求上式的log概率之和,使用SGD進行優化,使其最大。
    • 使用RNN來對 p ( S t I , S 0 , . . . , S t 1 ) p(S_t | I, S_0, ..., S_{t-1}) 建模,0到 t 1 t-1 為止的可變詞數可以用一個定長的隱藏層 h t h_t 來表示。
    • 在得到一個新的輸入 x t x_t 後,會使用一個非線性函式 f f 更新 h t + 1 = f ( h t , x t ) h_{t+1} = f(h_t, x_t)
    • 為了讓上述的RNN模型更具體,還有兩個重要的問題要考慮:
      1. 非線性函式 f f 具體的形式是什麼樣子?
        • f f 使用一個LSTM網路來表示。
      2. 影象和單詞如何轉換成輸入 x t x_t
        • 使用CNN從影象提取特徵,來表示影象。

2.3、LSTM

  • 在設計和訓練RNN過程中,最具挑戰的是如何解決梯度消失和梯度爆炸的問題,所以選擇了LSTM。

在這裡插入圖片描述

在這裡插入圖片描述

2.4、訓練

在這裡插入圖片描述

  • 如果用 I I 表示輸入影象,用 S = ( S 0 , . . . , S N ) S=(S_0, ..., S_N) 表示描述這個影象的真實句子,展開過程如下:

在這裡插入圖片描述

  • 每個單詞都被表示為一個與字典等長的one-hot向量 S t S_t
  • S 0 S_0 表示開始單詞, S N S_N 表示結束單詞。 從LSTM檢測到停止單詞,就意味著已經生成了一個完整的句子。
  • 影象和單詞都被對映到同一個特徵空間,使用CNN提取影象特徵,使用word embedding將單詞對映為詞向量。
  • 影象只在 t = 1 t=-1 時輸入,以告知LSTM影象中的內容。

在這裡插入圖片描述

  • loss函式是每個步驟中正確單詞的負對數概率之和。

2.4、Inference

  • 我們有多種方法來使用NIC模型根據輸入影象生成描述。
    1. 第一種是取樣。我們可以根據 p 1 p_1 取樣得到第一個單詞,然後提供對應的embedding作為輸入,並採樣 p 2 p_2 ,不斷重複,知道我們取樣到特殊句末標識,或到達了最大句長。
    2. 第二種是BeamSearch。迭代地選取直到時間 t t 最好的 k k 個語句作為候選,來長度為 t + 1 t+1 時刻的句子,最後只保留其中的 k k 個最好結果。
  • 後續的實驗中採用BeamSearch的方法,beam大小為20。如果將beam大小取為1,結果會降低2個BLEU點數。

2.5、實驗

  • 資料集

在這裡插入圖片描述

  • 訓練細節:
    • 訓練中很容易碰到過擬合。
    • 解決過擬合的一個很簡單的辦法就是,提供大量的資料。但是已有的資料量卻不足。
    • 經過實驗,作者發現最有效的避免過擬合的方法是使用預訓練權重(ImageNet)來初始化CNN。
    • 另外一組權重,即word embedding的權重,使用在一個大型新聞語料庫下預訓練的結果效果並不理想。所以最後為簡單起見,直接就不對其做初始化。
    • 還用了其他一些防止過擬合的策略:dropout,ensemble等。
    • 訓練時採用SGD,學習率固定,沒有momentum。除了CNN的權重採用ImageNet的預訓練權重,其他權重引數都是隨機初始化的。
    • embedding的維度是512維,也是LSTM記憶單元的大小。
  • 生成結果見表1。

在這裡插入圖片描述

  • 生成多樣性討論
    • 表3顯示了從beamsearch解碼器中返回的N個最佳列表的一些樣本,而不是最好的假設。

在這裡插入圖片描述

  • 如果選出最好的候選句子,那麼這個句子就會在約80%的時間裡出現在訓練集中。考慮到訓練資料較少,並不難預料到,模型相對容易會選取一個模板句子,然後填詞進去。
  • 如果分析的是生成的前15個最好的句子,大約在50%的時間內,我們可以看到一個全新的語句描述,也可以取得差不多高的BLEU分數。
  • 排名結果:

在這裡插入圖片描述

  • 人工評估:

在這裡插入圖片描述

在這裡插入圖片描述