轉載請註明作者:夢裡茶

這是騰訊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約束完成:

首先解釋一下符號,

  • H^l 是根據label生成的hash,
  • B^l是由hash執行sign操作得到的二進位碼
  • hat{L} 是由特徵還原回來的label
  • L 是原本的label
  • Delta_{ij}^l=frac{1}{2}(F_i^l)^	op(F_j^l) ,即樣本i和樣本j的label生成的特徵的餘弦相似度
  • Gamma_{ij}^l=frac{1}{2}(H_i^l)^	op(H_j^l) ,即樣本i和樣本j的label生成的特徵餘弦相似度
  • S_{ij} 表示樣本i和j是否包含至少一個相同的label,
    • 包含為1,表示樣本i和j在語義上相似
    • 不包含為0,表示樣本i和j在語義上不相似

對於 mathcal{J}_1 ,

-sum_{i,j=1}^{n}{S_{ij}Delta_{ij}^{l}-log(1+e^{Delta_{ij}^l})}

= -sum_{i,j=1}^{n}{log(frac{e^{S_{ij}Delta_{ij}^{l}}}{1+e^{Delta_{ij}^l}})}

= -sum_{i,j=1}^{n}{log(frac{e^{Delta_{ij}^{l}}}{1+e^{Delta_{ij}^l}})} if S_{ij}=1

= -sum_{i,j=1}^{n}{log(frac{1}{1+e^{Delta_{ij}^l}})} if S_{ij}=0

= sum_{i,j=1}^{n}-{S_{ij}log(frac{e^{Delta_{ij}^{l}}}{1+e^{Delta_{ij}^l}})-(1-S_{ij})log(1-frac{e^{Delta_{ij}^{l}}}{1+e^{Delta_{ij}^l}})}

實際上和交叉熵loss是等效的

S_{ij}=1時,

min -sum_{i,j=1}^{n}{log(frac{e^{Delta_{ij}^{l}}}{1+e^{Delta_{ij}^l}})}=maxsum_{i,j=1}^{n}{log(frac{1}{1+e^{-Delta_{ij}^l}})}=max Delta_{ij}^l

最大化兩個向量的餘弦相似度

S_{ij}=0 時,

min -sum_{i,j=1}^{n}{log(frac{1}{1+e^{Delta_{ij}^l}})}=maxsum_{i,j=1}^{n}{log(frac{1}{1+e^{Delta_{ij}^l}})}=minDelta_{ij}^l

最小化兩個向量的餘弦相似度

對於 mathcal{J}_2 同理,從而約束了相似的label具有相似的hash

對於 mathcal{J}_3 , 使 H^lB^l 儘可能接近,從而使得Hash向量中的元素盡量接近-1,1,

減少了 H -> B 時的損失

對於 mathcal{J}_4 , 使得還原的標籤與原來的標籤儘可能相同

這個部分跟自編碼器很像,是自監督的過程,由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很像

但又與之前的模型不同,這裡的監督信號有標籤和標籤生成的特徵,而之前的監督信號就是輸入本身。

其中

  • Delta_{ij}^l=frac{1}{2}(F_i^{l})^	op(F_j^{v,t}) ,即樣本i的標籤label生成的特徵和樣本j的輸入(圖/文)提取的特徵的餘弦相似度,目標是使提取的特徵和生成的特徵盡量相近
  • Gamma_{ij}^l=frac{1}{2}(H_i^l)^	op(H_j^{v,t}) ,即樣本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個特徵 (??_??^??,??_??^??,??_??^??)
  • 輸入:圖/文特徵+生成特徵 (??_??^??, ??_??^?? )(??_??^??,??_??^??)
  • 輸出: (??_??^??, ??_??^?? )(??_??^??, ??_??^?? ) ,即輸入向量是否來自生成特徵
  • 監督信號: ??_??^????_??^??=0,??_??^??=1
  • 判別器的損失函數:

即最小化判別器的預測誤差

Training

  • 於是我們有了特徵生成Loss:

mathcal{L}_{gen}=mathcal{L}^v+mathcal{L}^t+mathcal{L}^l

圖像特徵提取loss+文本特徵提取loss+標籤生成loss

  • 以及對抗loss

mathcal{L}_{adv}=mathcal{L}^v_{adv}+mathcal{L}^t_{adv}

  • 我們的優化目標是:

(B,	heta^{v,t,l})=argmin_{B,	heta^{v,t,l}}mathcal{L}_{gen}(B,	heta^{v,t,l})-mathcal{L}_{adv}(hat{	heta}_{adv})

在最優的判別器參數 hat{	heta}_{adv} 下,最小化特徵的生成Loss

以及

	heta_{adv}=argmax_{	heta_{adv}} L_{gen}(hat{B}, hat{	heta}^{v,t,l})-L_{adv}(	heta_{adv})

在最優生成器參數 hat{B}, hat{	heta}^{v,t,l} 下,最小化判別器的識別誤差 L_{adv}

  • 具體實現上,分為四步迭代進行優化:
    • 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,加入對抗學習來拉近不同模態特徵的相似性,模型的思路足夠清晰,容易復現,有很多值得學習的東西。

推薦閱讀:

相关文章