讀論文系列:CVPR2018 SSAH
轉載請註明作者:夢裡茶
這是騰訊AI Lab與西電合作的一篇CVPR2018的paper,在多模態檢索任務中加入對抗網路組件,為跨模態對象生成更好的語義特徵,從而提高了跨模態檢索的效果。
問題描述
跨模態檢索:
- 利用一種模態的數據去檢索另一種模態中的數據,比如文字搜圖片
- 尋找多種模態的數據對應的關鍵字
- 常用的數據集:MSCOCO, NUS-WIDE, MIRFLICKR-25K
如果我們在檢索的時候再去做特徵提取,檢索速度會很慢,因此通常需要預先將特徵提取出來,根據相似度建立索引,從而加快檢索速度,為了節省存儲空間,並加快計算效率,通常會要求特徵盡量短,並且是二進位表示,這樣的特徵我們稱為Hash。
常用方法
我們要根據多模態的內容生成一個hash,希望不同模態的同個對象hash盡量相近,不同對象的hash盡量不同。由於跨模態的內容具有語義上的聯繫,通常的做法是將不同模態的內容映射到公共的語義空間,已經有很多這方面的工作,有監督/無監督的,Shallow的手工特徵/Deep特徵。得到特徵之後,可以用sign操作將連續的feature向量變成離散值,從而得到更輕量的特徵。
SSAH
這篇論文提出了一個結合對抗學習的深度神經網路:
- 利用深度提取圖像和文本特徵,轉為hash(I/T->F->L+H->B)
- 利用標籤生成特徵,再轉為hash,並希望特徵能夠還原回label((L->F->L+H->B)
- 有監督地最小化不同模態特徵和hash的差異
- 加入能夠區分不同來源的特徵的判別器進行對抗訓練,進一步減小不同模態特徵的差異
接下來具體講其中幾個部分:
Self supervised semantic Generation(L->F->L+H->B)
- 輸入:某個圖文對應的label,每個對象會對應多個label,one hot成01向量
- 經過四層神經網路(L->4096->512->N)
- 輸出長度為N的向量,N=K+c,K為哈希碼長度,c為label的類別個數
- 訓練目標:讓生成的hash保留語義上的相關性,並能還原回原來的label
訓練目標由這個Loss約束完成:
首先解釋一下符號,
- 是根據label生成的hash,
- 是由hash執行sign操作得到的二進位碼
- 是由特徵還原回來的label
- 是原本的label
- ,即樣本i和樣本j的label生成的特徵的餘弦相似度
- ,即樣本i和樣本j的label生成的特徵餘弦相似度
- 表示樣本i和j是否包含至少一個相同的label,
- 包含為1,表示樣本i和j在語義上相似
- 不包含為0,表示樣本i和j在語義上不相似
對於 ,
if
if
實際上和交叉熵loss是等效的
即時,
最大化兩個向量的餘弦相似度
時,
最小化兩個向量的餘弦相似度
對於 同理,從而約束了相似的label具有相似的hash
對於 , 使 和 儘可能接近,從而使得Hash向量中的元素盡量接近-1,1,
減少了 -> 時的損失
對於 , 使得還原的標籤與原來的標籤儘可能相同
這個部分跟自編碼器很像,是自監督的過程,由label生成特徵,再由特徵還原回label
Feature Learning(I/T->F->L+H->B)
- 輸入:圖像/文本,
- 經過神經網路提取特徵(圖像和文本的網路不同)
- 輸出長度為N的向量,N=K+c,K為哈希碼長度,c為label的類別個數
- 訓練目標:
- 在特徵中保留語義信息,因此希望預測label與真實label相近
- hash盡量接近binary code
- 讓特徵提取得到的feature和hash與Semantic Generation得到的特徵和hash盡量相同,
- 因此監督信號做feature learning的時候還對提取feature和生成feature的相似性做約束,
- 對提取hash和生成hash的相似性做約束
其中,圖像的特徵提取網路作者試用了CNN-F和VGG16(VGG16更優),文本特徵提取則是一個新的多尺度融合模型:
- 輸入:文本,轉為一個詞袋向量,由於詞袋向量非常稀疏,需要轉化為一個相對稠密的向量
- 網路:T->Multi-scale Fusion->4096->512->N
- 輸出長度為N的向量,N=K+c,K為哈希碼長度,c為label的類別個數
- Multi-scale Fusion:
- 5個average pooling layer(1x1,2x2,3x3,5x5,10x10)+1個1x1conv
訓練Loss與前面的Semantic Generation很像
但又與之前的模型不同,這裡的監督信號有標籤和標籤生成的特徵,而之前的監督信號就是輸入本身。
其中
- ,即樣本i的標籤label生成的特徵和樣本j的輸入(圖/文)提取的特徵的餘弦相似度,目標是使提取的特徵和生成的特徵盡量相近
- ,即樣本i的標籤label生成的hash和樣本j的輸入(圖/文)提取的hash的餘弦相似度,目標是使提取的hash和生成的hash盡量相近
Adversarial learning
- Motivation:不同模態提取的特徵會有不同的分布,希望相同語義的對象在不同模態里的特徵表達盡量接近
- Solution:加入判別器D,希望D能區分特徵是來自Feature Learning還是Semantic Generation,D越強大,越能區分兩種特徵,要欺騙D,就迫使Feature Learning和Semantic Generation得到的特徵盡量相近
- 判別器D的網路結構:F->4096->4096->1
- 每個樣本(圖+文+label)產生3個特徵
- 輸入:圖/文特徵+生成特徵 或
- 輸出: 或 ,即輸入向量是否來自生成特徵
- 監督信號: 或
- 判別器的損失函數:
即最小化判別器的預測誤差
Training
- 於是我們有了特徵生成Loss:
圖像特徵提取loss+文本特徵提取loss+標籤生成loss
- 以及對抗loss
- 我們的優化目標是:
在最優的判別器參數 下,最小化特徵的生成Loss
以及
在最優生成器參數 下,最小化判別器的識別誤差
- 具體實現上,分為四步迭代進行優化:
- Label自監督生成特徵
- 圖像分類器feature learning
- 文本分類器feature learning
- 判別器訓練
於是SSAH的工作機制就梳理完畢了
方法評估
生成的Hash效果是否足夠好,通常由Hamming Ranking和Hash Lookup來評估,在論文中,作者還對模型本身做了Training efficiency,Sensitivity analysis,Ablation study的實驗評估。
- Hamming Ranking
- 按照哈希碼海明距離進行Ranking,計算mAP
可以看到使用VGG作為圖像基礎網路時,SSAH準確率領先其他方法很多。
- Hash Lookup
- 海明距離小於某個值認為是正樣本,這個值稱為Hamming Radius,改變Radius可以改變Precision-Recall的值,於是可以得到P-R曲線,P-R曲線與坐標軸圍成的面積越大,說明效果越好
SSAH的PR曲線基本都是在其他模型的曲線之上
- 對Ranking的結果計算TopN的命中率(不過這個文中好像沒講)
- Training efficiency
- 達到相同的效果所需訓練時間
相對於另一種深度學習方法DCMH,SSAH只要比較短的時間就能得到比較好的效果
- Sensitivity analysis
- 超參數改變時的結果變化
可以看到,超參數變化時,準確率依然能維持在比較高的水平
- Ablation study
- 去除不同組件對效果的影響
其中,
SSAH-1: remove LabNetSSAH-2: TxtNet改成三層全連接SSAH-3: 去掉對抗網路可以看到在I2T任務中,標籤生成網路是很重要的,在T2I任務中對抗網路的效果更明顯。
Summary
SSAH中最妙的兩點是,用Label生成特徵和哈希來監督feature learning,加入對抗學習來拉近不同模態特徵的相似性,模型的思路足夠清晰,容易復現,有很多值得學習的東西。
推薦閱讀: