当前位置:网站首页>對比學習之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments

對比學習之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments

2022-07-07 11:15:00 InfoQ


null
論文地址:
Unsupervised Learning of Visual Features by Contrasting Cluster Assignments http://arxiv.org/abs/2006.09882

代碼地址:
https://github.com/facebookresearch/swav

這篇論文最好需要接著前兩篇論文往下看。你直接看的話可能會有點吃力。除非你已經了解什麼叫對比學習了。如果你不想看這兩篇文章也沒有關系。我會盡力盡力,說得通俗易懂。畢竟我也是初學者,所以我感覺我理解的肯定容易讓小白也理解。如果有什麼漏誤歡迎各比特大佬批評指正。我們稱這篇論文為
SwAV

  • 諸神黃昏時代的對比學習 
  • “軍備競賽”時期的對比學習好。

對比學習簡單來說就需要找出正樣本和負樣本互相對比。在前面的這個學習的工作中,大家提出了各式各樣的政府樣本的選取方式,比如:

  • 將整個imagenet做成字典,從中抽取一個mini batch作為正樣本。再從中隨機抽取4096條作為負樣本。
  • 從數據集中抽取一個mini batch對其增廣,使用一個孿生網絡,將原圖放進一個網絡,將增强之後的圖放進另一個網絡,二者同時進行訓練,對二者使用一個NCE loss或者infoNCE loss。一張圖片和它的增廣作為正樣本,剩餘的圖片及其增廣作為負樣本。
  • 從數據集中抽取一個mini batch對其進行兩次增廣,使用一個孿生網絡,將一組圖片增强放進一個網絡,將另一組圖片增强放進另一個網絡,二者同時進行訓練,對二者使用一個NCE loss或者infoNCE loss。

乍一看上面的做法好像都沒有什麼問題,做出來的最後效果也挺好的,但是這個時候一個做聚類的大佬跳了出來。他說不管你們對比學習的負樣本怎麼選擇,你們的整個mini match都是從imagenet中隨機抽取的,所以你們的負樣本具有隨機性。

  • 它可能會重複的抽取到同一數據。雖然你數據集有很多圖片,但是你從中抽可能會抽到相同的圖片。極端的情况下,如果你抽到一組圖片作為正樣本,然後你又抽到同樣重複的一組圖片作為負樣本。那這樣就會對訓練造成影響。
  • 也可能不具有整個數據集的代錶性。比如這個數據其實有很多很多種動物,但是你抽到的都是狗,這樣數據就是沒有代錶性的。
  • 當然這樣的選取的越全面效果越好,但是如果你選取的過多的負樣本又會造成計算資源的浪費。

所以我提出用聚類。

null
看一下上邊圖像。

左側是常規的對比學習。將數據進行不同內强的增强,然後將增强後的兩份數據分別放入不同的模型當中獲得對應的錶示,最後進行對比。

右側是作者提出的網絡。也是將輸入進行不同的增强,增强之後的數據也會進入到一個網絡之中,獲得相應的錶示之後不會直接拿去做對比。中間加了一個C模塊,這個模塊是一個聚類模塊。你得到的數據需要去跟聚類的中心比。

聚類中心就是右圖裏的c,也就是個prototype,它其實就是個矩陣,它的維度是d 乘以 k,d是特征的維度,這裏的d和特征的d 是一樣的,比如說就是之前說的128維,這個k就是有多少個聚類中心。在這篇文章中它選的是3,000,ImageNet數據集上常用的一個參數聚類參數。

通過clustering讓特征z和prototype c生成一個目標,也就是上圖的q1、q2。

x1、x2是正樣本的話,那z1 和 z2的特征就應該很相似,也就跟之前對比學習一樣,z1和z2要盡可能的相似。那如果兩個特征非常相似,按道理來說應該是可以互相去做預測的,也就是說,如果拿z1這個特征去跟c去做點乘,按道理來說也是可以去預測q2;反之亦然,z2和這個c去做點乘也可以預測q1,所以說點乘之後的結果就是預測。通過這種換比特預測(Swapped prediction)的方法,SwAV可以對模型進行訓練。

最後的目標函數是這一個:$$-\frac{1}{N} \sum_{n=1}^{N} \sum_{s, t \sim \mathcal{T}}\left[\frac{1}{\tau} \mathbf{z}
{n t}^{\top} \mathbf{C} \mathbf{q}
{n s}+\frac{1}{\tau} \mathbf{z}
{n s}^{\top} \mathbf{C} \mathbf{q}
{n t}-\log \sum_{k=1}^{K} \exp \left(\frac{\mathbf{z}
{n t}^{\top} \mathbf{c}
{k}}{\tau}\right)-\log \sum_{k=1}^{K} \exp \left(\frac{\mathbf{z}
{n s}^{\top} \mathbf{c}
{k}}{\tau}\right)\right]$$

ImageNet才1000類,因此這裏聚類聚成3000個是非常足够的。那我們來看一下使用聚類能解决什麼問題。

  • 先說重複問題:因為你使用的是聚類中心進行比較。雖然是不同的聚類中心,那麼他肯定不可能出現重複的情况。
  • 再說一下沒有代錶性的問題:聚類就是將眾多的圖片聚成不同的類別。與每一個類別的中心進行對比,是絕對具有代錶性的。
  • 再說一下過去有過多負樣本造成資源浪費的問題。如果要跟很多的負樣本去做類比,可能就需要成千上萬的負樣本,而且即使如此也只是一個近似,而如果只是跟聚類中心做對比,則可以用幾百或者最多3,000個聚類中心,就足以錶示了。大大减少了計算資源消耗。

除了聚類,SwAV還提出了一個muti crop的方法,感興趣的可以自己去看一下。

最後我們來看一下它的效果。

null
因為這篇文章是在BYOL之前出來的,所以它只和前面的模型做了一下對比,我們可以明顯的看到。他比我們之前提到的無監督對比學習方法效果都要好,效果直逼有監督的方法。其實它甚至比身後的BYOL 和 SimSiam效果也要好。

而且當使用更大的模型的時候,也就是像圖裏說的一樣,把一個Res50變寬,而且就是這裏的2倍、4倍、5倍這麼寬的時候,SwAV的結果還能不停地漲。當用最大的模型(5倍的模型)的時候,SwAV已經跟有監督的模型,差距非常的小,而且SwAV也是要比SimCLR *2、SimCLR 4要高的。這篇文章還是非常值得一讀的,並且作者也從另一個角度給我們提出了一個改進方法,就是要讓樣本更具有代錶性。這篇文章非常推薦大家看一看。
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207070909198832.html