論文筆記:Image Caption(Show and Tell)
阿新 • • 發佈:2019-01-12
Show and Tell: A Neural Image Caption Generator
Show and Tell
1、四個問題
- 要解決什麼問題?
- Image Caption(自動根據影象生成一段文字描述)。
- 用了什麼方法解決?
- 作者提出了一個基於深度迴圈架構的生成式模型。
- 訓練時的目標是最大化這個從輸入影象到目標描述語句的似然。
- 效果如何?
- 所提出模型在幾個資料集上的效果都不錯。
- 比如,此前在Pascal資料集上效果最好的BLEU-1分數是25,這裡達到了59,與人類的表現(69左右)相當。
- 在Flickr30k上的BLEU-1分數從56提高到了66。
- 在SBU上,從19提高到了28.
- 在最新的COCO資料集上,BLEU-4分數達到了27.7,是目前最好的結果。
- 還存在什麼問題?
- 由於這篇論文是在15年發表的,當時的state-of-the-art,現在已經算是比較落後的了。
- 影象特徵僅僅是隻在開始的時候以bias的形式傳入,只關注到了全域性特徵,模型也是學習到了一種模板然後往裡面填詞。
2、論文概述
2.1、簡介
- Image Caption任務,顧名思義,就是讓演算法根據輸入的一幅影象自動生成對應的描述性文字。
- Image Caption的難點在於,不止要檢測到影象中的物體,還需要表示出這些物體相互之間的關係。
- 此前關於Image Caption的嘗試,大多數是考慮將那些子問題的一些現有的解決演算法拼在一起。
- Image Caption任務數學模型:
- 輸入影象為 。
- 輸出語句是 ,每個單詞 都是從一個給定的字典中得到的。可以充分地對影象進行描述。
- 目標函式是最大化似然函式: 。
- 文中提出的主要思路來自於最近的機器翻譯相關的工作。
- 機器翻譯的主要任務是將源語言的語句 轉換為目標語言的語句 ,通過最大化似然函式 。
- 近期的工作中使用RNN做機器翻譯可以取得相當不錯的效果。
- 整體思路是:使用一個“編碼器”RNN讀取源語句,並將其轉換為長度固定的特徵向量,而這些特徵向量又被用作“解碼器”RNN的初始隱藏層狀態。最後使用“解碼器”RNN來生成目標語句。
- 上圖是文中提出的模型,NIC。
- 思路很簡單,在機器翻譯中有一個編碼器RNN、一個解碼器RNN,然後把編碼器RNN替換成CNN。
- 在近些年來的研究中,已經充分證明了CNN可以從輸入影象中充分地提取特徵並嵌入到一個定長的向量中。
- 很自然地,可以將CNN用作一個編碼器,先在ImageNet上進行預訓練,隨後將其最後一層隱藏層作為作為RNN的輸入。
- 論文的貢獻有以下三點:
- 提出了一個端到端的系統來解決Image Caption任務。
- NIC模型結合了分別在CV和NLP領域state-of-the-art的子網路模型。
- 相比其他方法,取得了state-of-the-art的效果。
2.2、模型
- 近期的基於統計機器翻譯的發展說明了,只要提供了一個強大的序列模型,我們能夠直接通過最大化給定輸入語句的正確翻譯的概率(以一種端到端的方式),來獲得state-of-the-art的結果。
- 這些模型使用RNN對變長輸入進行編碼,得到定長的特徵向量,然後再用來解碼成期望的輸出語句。
- 將編碼器的部分換成,輸入影象到CNN,輸出定長的特徵向量。
- 最大化似然的公式可以描述為如下公式:
- ,其中 是輸入影象, 是正確的影象描述, 是模型的引數。
- 可以表示任意語句,它的長度是不確定的。
- 使用鏈式法則來對
到
的聯合概率建模是很常見的:
- 。
- 為簡便起見,丟棄了 的依賴。
- 訓練中, 是一對樣本對。我們求上式的log概率之和,使用SGD進行優化,使其最大。
- 使用RNN來對 建模,0到 為止的可變詞數可以用一個定長的隱藏層 來表示。
- 在得到一個新的輸入 後,會使用一個非線性函式 更新 。
- 為了讓上述的RNN模型更具體,還有兩個重要的問題要考慮:
- 非線性函式
具體的形式是什麼樣子?
- 使用一個LSTM網路來表示。
- 影象和單詞如何轉換成輸入
?
- 使用CNN從影象提取特徵,來表示影象。
- 非線性函式
具體的形式是什麼樣子?
2.3、LSTM
- 在設計和訓練RNN過程中,最具挑戰的是如何解決梯度消失和梯度爆炸的問題,所以選擇了LSTM。
2.4、訓練
- 如果用 表示輸入影象,用 表示描述這個影象的真實句子,展開過程如下:
- 每個單詞都被表示為一個與字典等長的one-hot向量 。
- 表示開始單詞, 表示結束單詞。 從LSTM檢測到停止單詞,就意味著已經生成了一個完整的句子。
- 影象和單詞都被對映到同一個特徵空間,使用CNN提取影象特徵,使用word embedding將單詞對映為詞向量。
- 影象只在 時輸入,以告知LSTM影象中的內容。
- loss函式是每個步驟中正確單詞的負對數概率之和。
2.4、Inference
- 我們有多種方法來使用NIC模型根據輸入影象生成描述。
- 第一種是取樣。我們可以根據 取樣得到第一個單詞,然後提供對應的embedding作為輸入,並採樣 ,不斷重複,知道我們取樣到特殊句末標識,或到達了最大句長。
- 第二種是BeamSearch。迭代地選取直到時間 最好的 個語句作為候選,來長度為 時刻的句子,最後只保留其中的 個最好結果。
- 後續的實驗中採用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分數。
- 排名結果:
- 人工評估:
- word embedding分析
- 把輸入的前一個詞