看圖說話——CNN和LSTM的聯合應用
看圖說話是深度學習波及的領域之一。其基本思想是利用卷積神經網絡來做圖像的特征提取,利用LSTM來生成描述。但這算是深度學習中熱門的兩大模型為數不多的聯合應用了。
本文是參考文獻[1]的筆記,論文是比較早的論文,15年就已經發表了,不新。但還是想寫下來它的細節以備后用。
關於CNN(卷積神經網絡)和LSTM(長短期記憶網絡)的細節,本文不再贅述其細節。讀者們需要了解的是:
- 卷積神經網絡是一種特別有效的提取圖像特征的手段。一個在大數據集如ImageNet上預訓練好的模型能夠非常有效的提取圖像的特征。
- 長短期記憶網絡能夠處理長短不一的序列式數據,比如語言句子。給定一個輸入,網絡能夠給出一個序列輸出。
背景
在參考論文提出的模型之前,對於看圖說話這個問題,解決方法主要有兩個大類:
- 利用一些預定義好的屬性來進行生成,比如對於路況圖像,可以判斷路上多少車,然后判斷路況堵不堵之后就可以生成描述。但這樣不具有可擴展性,對於每種場景都需要定制。
- 使用搜索排序的方法定義該問題,即對於每張圖像,在已有的描述中選擇最好的一個。這種方法的限制在於不能生成新的語句。
網絡模型
圖像到文字的問題可以看做是一種機器翻譯,在現在的機器翻譯模型中,以LSTM為基礎的seq2seq模型成為主流,該模型的基本思想是,對於一個數據pair (A, B)。因為A和B表達的是同一個意思,所以存在某種隱含狀態h,使得A和B都對應到h。於是seq2seq模型就先對A進行編碼,得到一個數據表示,再基於這個數據表示去解碼,生成目標語言的文字。
圖像到文字也類似,假設存在某種隱含狀態h,圖像可以編碼到h,而基於h可以生成目標語句。
用公式表示則是:
模型則如圖示:
值得注意的是,在LSTM模型方面,訓練和預測的時候是不一樣的。
- 在訓練時,假設數據是<某張圖像A, “ 我 是 誰 ”>,那么LSTM的輸入S0到SN-1分別是、我、是、誰;而輸出分別是 我、是、誰、。
- 在預測時,對於數據是<某張圖像A1, ???>,那么LSTM的輸入S0為,S1到SN-1分別為上一步的輸出。
實驗
效果評價
使用三種評價指標:
- 人工評價: 在Amazon Mechanical Turk平台上進行評測,每條數據可以由多個人打分。
- BLEU:衡量預測結果和實際結果在N-gram上的精度。
- Perplexity: 語言模型的常用指標,語句出現的概率,等於其句子中每個詞出現的概率之積。METEOR和Cider是其變種。
訓練細節
為了避免過擬合,采用了如下手段:
- 使用在大數據集上預訓練好的CNN模型。這樣不止防止了過擬合,還會提升效果。
- 預訓練好的word embedding並不能提升效果,所以沒用。
- Dropout和Ensembling可以顯著提升效果
- 圖像的文本描述數據部分都經過了預處理
- 統計詞語頻度,只保留出現過5個以上的詞語。
實驗結果
- 各個指標均顯著變好。
- 在Flickr30k和Flickr8k的類似數據上進行對比,發現大數據集可以顯著提升效果
- 在top-1的預測結果上,模型的輸出有80%在訓練集上出現過。而Top-15則只有50%的語句在訓練集上出現過。