從 SimCLR, MoCo, BYOL 了解目前圖像自監督對比學習預訓練在做什麼

2021-12-28 阿柴的算法學習日記

除了Transformer之外,自監督對比學習預訓練目前也是CV領域的另一大研究熱點。在不使用任何的標籤的情況下,使用自監督對比學習預訓練出的CNN編碼器參數能夠在分類、分割、檢測等基礎任務上都有上佳的表現。這篇文章重點總結了SimCLR, MoCo, BYOL三個經典的CV領域無監督對比學習預訓練的方法。

一、自監督對比學習預訓練簡介

機器學習通常以受監督的方式完成:我們使用由輸入和「正確答案」(輸出)組成的數據集來找到從輸入數據映射到正確答案的最佳函數。相比之下,在自監督 學習中,數據集中沒有提供正確答案。相反,我們學習了一個將輸入數據映射到自身的函數(例如:MAE中使用沒有mask的區域來預測被mask區域的像素值)。

這種方法在從語言到圖像和音頻的所有方面都被證明是成功的。事實上,最近的NLP領域的語言模型(從word2vec到BERT和GPT-3),以及CV領域的預訓練模型(MAE、PeCo)都是自監督方法的例子。有些學者認為自監督學習可能是類人智能的重要組成部分。

對比學習是訓練分類器區分「相似」和「不同」輸入數據的過程。分類器的正例是同一圖像的不同版本,而負例是同一數據集中的其他圖像。例如,假設有一張狗的圖片。在這種情況下,正例可能是該圖像的不同數據增強形式(見下圖),而反例可能是來自完全不同圖像的數據增強。

原始圖片的數據增強版本。這些中的任何兩個都可以用作正例對

2)同一個原樣本的不同augmentation結果 / view在特徵空間有相同的表徵。

這也是各個對比學習的框架去構建損失函數、訓練流程時的基本規則。在以上兩個原則的監督下,能夠使得編碼器得到的特徵能夠很好的表徵圖像。實際上,這種對比學習的方法在NLP的文本表徵中已經有過很好的應用。比如我之前總結過的「文本匹配入門必讀:預訓練模型前的文本匹配模型總結」中的基於表示的方法就是對比學習的早期應用。這些方法試圖用對比學習的形式預訓練得到每一個句子級別的向量表徵。不過,這些方法,在BERT的自監督預訓練形式出來之後便沒有了進一步的進展(當然,也有像sentence-bert這樣在bert上做對比學習的來進一步提升句子的表徵能力的)。而目前,CV中的借鑑BERT的自監督預訓練也在蓬勃發展,它是否也會像NLP的的發展浪潮一樣終結對比學習對於圖片的表徵呢?我們可以拭目以待?當然,我們還是先來看看,目前圖像自監督對比學習預訓練是怎麼做的。

二、圖像對比學習中預訓練典型方法SimCLR 是一種特別優雅的自監督算法,它設法簡化了以前的基本核心方法並提高了它們的性能。同一圖像 x 的 兩個變換(不同的數據增強)v 和 v' 通過同一網絡(比如resnet)的進行特徵提取在特徵空間產生兩個圖像的兩個表徵向量 y 和 y' ,然後通過 projection(MLP)得到 z 和 z'。對比損失旨在最大化來自同一輸入的兩個投影 z 和 z' 的相似性,同時最小化與同一小批量中其他圖像的投影的相似性。

相對於 SimCLR,MoCo 將單個網絡拆分為一個online網絡(頂行),和一個momentum網絡(底行)。online網絡通過隨機梯度下降更新,而momentum網絡基於online網絡的權重更新,更新形式為()。momentum網絡允許 MoCo 有效地使用過去預測的Memory bank作為對比損失的反例。比如,上面的狗圖像數據增強插圖中,正例將是同一條狗圖像的增強圖。反例是過去mini batch中使用的完全不同的圖像,其投影向量存儲在Memory bank中。這種改動使得我們沒有必要在一次前向傳播中,momentum網絡既要處理正例又要處理反例,從而增大每個step的batch size。Memory bank使用隊列的更新形式,會將最新的圖像編碼後的向量 z', 存儲到 Memory bank中,並將最早的存儲在Memory bank z' 出列。而之所以要用到momentum這種參數的更新形式,主要是考慮到online網絡參數更新很快,如果,momentum與其一樣更新的話Memory bank中存儲的不同step的 z'就會不一致。所以這種形式(公式中一般取接近1的值,比如0.998,這樣使得momentum網絡的參數在很多個step之後仍然差別不大)的更新能夠保持Memory bank中存儲的z'的一致性。

BYOL 基於 MoCo 的動量網絡概念,添加了 prediction head 從 z 預測 z'。BYOL 不使用對比損失,而是使用歸一化預測 p 和目標 z' 之間的 L2 誤差。其實也就相當於用momentum網絡的輸出來監督 online 網絡。由於此損失函數不需要負示例,因此 BYOL 中沒有使用Memory bank。如果真的理解了對比學習的話,此時一定會陷入沉思之中。怎麼會不需要負例的參與呢?兩個網絡不管輸入是什麼,都輸出值為0的向量豈不是就能夠正確率100%?但是,顯然,BYOL的這種訓練方式並沒有使得網絡陷入到上述的這種trivial solution中。這是為什麼呢?網上有些研究者也給出了自己的見解,以下是我認為很有道理的見解:作者:鄭華濱
連結:https://www.zhihu.com/question/402452508/answer/1293518245
來源:知乎

眾所周知,contrastive learning框架有兩大目標:

而之前其實已經有挺多工作告訴我們,一個隨機初始化的CNN就已經具備一定程度的圖像特徵抽取能力。更進一步地,如果CNN隨機初始化之後,就已經會把不同的樣本輸入投射到特徵空間的不同地方,並且投射得足夠分散,那它就已經完成了contrastive learning框架中第一個目標。如果上述猜測成立,那麼只要在接下來的訓練過程中達成contrastive learning框架第二個目標,並且小心翼翼地維護第一個目標不被破壞,避免網絡收斂到trivial solution,那就確實可以拋開負樣本。而這個小心翼翼維護的操作,在BYOL裡面就體現為」teacher不要太快跟上student的步伐「,論文Table 5說明,跟得太快會破壞contrastive特性,跟得太慢又有損訓練效率,為了trade-off,就祭出了mean teacher這個好用的工具,平衡穩定性與效率。

所以我猜測BYOL能work的基石,很可能就是CNN結果在圖像數據集上天然存在、不依賴於訓練的contrastive feature repersentation能力,BYOL所做的,主要是為CNN補上了transformation invariance。換言之,如果換一個完全不同的網絡結構(比如MLP)或者完全不同的數據形態(比如文本),導致該結構並不天然具備針對該數據形態的特徵抽取能力,那麼BYOL就不work,還得negative sample出來救場。


三、微調結果

上述預訓練完之後,我們可以取其預訓練好的encoder在分類、分割、檢測任務上進行微調。

1)分類:

2)分割、檢測與其他任務。可以看到甚至比有監督的預訓練更好:

參考資料:

1)https://generallyintelligent.ai/blog/2020-08-24-understanding-self-supervised-contrastive-learning/2)https://zhuanlan.zhihu.com/p/3479986383)如何評價BYOL:https://www.zhihu.com/question/402452508/answer/1293518245

阿柴提示

以上若有你需要而查不到或有疑惑的項目,

請聯繫小編為你解答

Ps:歡迎關注公眾號,獲取更多計算機視覺、圖像分割和自然語言處理領域資料:


以上如果對你有用,請點擊點擊右下角在看或者分享一下噢

相關焦點

  • 盤點近期大熱對比學習模型:MoCo/SimCLR/BYOL/SimSiam
    在表示學習方面,如果直接對語義進行監督學習,雖然表現很好,但是它需要很多的樣本並且往往是需要對特定的任務進行設計,很難具有遷移性。所以難怪各位大佬們都紛紛為自監督學習站臺,自監督是未來!自監督學習有大類方法,一個是生成方法一個對比方法,如上圖。
  • BYOL:輕鬆進行自監督學習
    經過谷歌這樣的諸多先驅者若干年的研究,子監督學習如今已取得一系列的進步與發展。在BYOL之前,多數自我監督學習都可分為對比學習或生成學習,其中,生成學習一般GAN建模完整的數據分布,計算成本較高,相比之下,對比學習方法就很少面臨這樣的問題。
  • 一文梳理無監督對比學習(MoCo/SimCLR/SwAV/BYOL/SimSiam)
    對比學習的概念很早就有了,但真正成為熱門方向是在2020年的2月份,Hinton組的Ting Chen提出了SimCLR,用該框架訓練出的表示以7%的提升刷爆了之前的SOTA,甚至接近有監督模型的效果。
  • 華人博士提出原型對比學習,非監督學習效果遠超MoCo和SimCLR
    Salesforce的華人科學家(Junnan Li)介紹了一種新的非監督式神經網絡學習方法,這種方法能夠從數百萬個未標記的圖像中訓練深層神經網絡,讓我們離機器智能又進了一步。本文提出的原型對比學習(PCL) ,統一了非監督式學習的兩個學派: 聚類學習和對比學習。PCL 推動了機器學習和人工智慧的聖杯--非監督式學習技術的進步,並向無需人類指導的機器智能邁出了重要的一步。
  • 考慮下用BYOL輕鬆進行自監督學習!附代碼、論文解讀連結
    基於此,自監督學習成為深度學習的研究熱點,旨在從未標記樣本中進行學習,以緩解數據標註困難的問題。自監督學習的目標很簡單,即訓練一個模型使得相似的樣本具有相似的表示,然而具體實現卻困難重重。經過谷歌這樣的諸多先驅者若干年的研究,自監督學習如今已取得一系列的進步與發展。
  • 自監督學習在計算機視覺中的應用
    01什麼是自監督學習監督學習。訓練數據有標註(人工標註出準確的標籤),比如典型的圖像分類,給一張圖片打上標籤(類別),算法來通過學習來預測類別從而得到預測規則(模型參數)。由於監督學習需要及其龐大的標註數據,但是獲取大量高質的標註數據由於成本問題不太現實、目前缺少數據這個問題會嚴重製約著模型性能,而無監督學習和強化學習目前解決的場景問題有限,所以這幾年越來越多的目光投入的自監督學習。
  • 對比自監督學習浪潮迅猛來襲,你準備好了嗎?
    ,科研人員在基於對比學習的自監督方法方面進行了大量研究。本文是 PyTorch Lightning 創始人 William Falcon 的對比學習綜述,對自監督學習、對比學習等基礎概念進行了簡要的回顧,介紹了 CPC、AMDIM、BYOL、SimCLR、Swav等最近較為著名的對比學習方法,並提出了一種名為 YADIM 的新型對比學習算法。
  • 一文掌握《對比學習(Contrastive Learning)》要旨,詳述MoCo和SimCLR算法
    摘要基於自監督學習的Bert[1]預訓練模型在NLP領域大放光彩,在多項下遊任務中均取得很好的效果。Bert在無標註的語料中充分地學到了通用的知識,那麼很容易引出一個問題,CV領域是否也可以「復現」Bert的成功呢?近年比較火熱的對比學習或許是這個問題的一個答案。
  • 自監督、半監督和有監督全涵蓋,四篇論文遍歷對比學習的研究進展
    新的工作是一個半監督學習框架(Semi-Supervised Learning Framework),主要包括三部分:(1) 無監督或自監督的預訓練;(2)有監督的微調;(3)使用未標記的數據進一步的蒸餾處理。其中,作者改進了 SimCLR 得到了 SimCLRv2,用於第一個步驟中 ResNet 體系結構的無監督預訓練。該框架以與任務無關和特定於任務兩種方式利用未標記的數據。
  • 谷歌大腦聯手Hinton提出SimCLR新框架,瘋狂提升自監督學習性能 | 北郵畢業生一作
    【新智元導讀】Hinton團隊新作SimCLR似乎打開了自監督學習的大門,自監督學習的效果到底如何?最近Google發表了一篇博客,介紹了他們使用SimCLR的經驗,通過圖像擴增,模型擴展等手段提高了自監督和半監督模型的訓練效果。「新智元急聘主筆、高級主任編輯,添加HR微信(Dr-wly)或掃描文末二維碼了解詳情。」
  • 不需要負樣本對的SOTA的自監督學習方法:BYOL
    >這些發現強調了在學習表徵時正樣本和負樣本對比的重要性,並幫助我們更基本地理解自監督學習是如何以及為什麼有效的。相比之下,在自監督學習中,在數據集中沒有正確的答案,因此我們學習一個函數,把輸入數據映射輸入到本身(比如:使用圖像的右半部分預測圖像的左半部分)。從語言到圖像和音頻,這種方法已經被證明是成功的。事實上,最近的語言模型,從word2vec到BERT和GPT-3,都是自監督方法的例子。
  • ResNets首次反超有監督學習!DeepMind用自監督實現逆襲,無需標註
    首次用自監督學習實現了對有監督學習的超越。莫非,今後真的不用標註數據了?機器學習中,伴隨著更多高質量的數據標籤,有監督學習模型的性能也會提高。然而,獲取大量帶標註數據的代價十分高昂。按照AI行業的膨脹速度,如果每個數據點都得標記,「人工智慧=有多少人工就有多智能」的刻薄笑話很可能會成為現實。不過一直以來,表徵學習、自監督學習等辦法的「下遊效能」至今未能超出有監督學習的表現。
  • 自監督學習和對比學習
    這篇主要探討SimCLR,不需要用監督學習(supervision)的方式,採用自監督(self-supervised)的方式使得模型學到很多有用的patterns。眾所周知,使用對比學習(修改樣本,loss等小trick)就可以顯著提高模型的泛化能力,所以我們都需要掌握這項"技藝"。
  • 自監督圖像論文復現 | BYOL(pytorch)| 2020
    自監督SOTA框架 | BYOL(優雅而簡潔) | 2020筆記 | 吳恩達新書
  • 預訓練還需要監督信息嗎?一文了解無監督訓練的優勢
    機器之心報導機器之心編輯部隨著 MoCo 的提出,無監督學習在計算機視覺領域已經取得了不錯的效果,其在七項檢測分割任務上完勝有監督預訓練。這也引起眾多研究者的思考:為什麼不用標籤的學習可以超越有標籤的學習呢?近日,來自微軟亞洲研究院和香港城市大學的一項研究對此作出了解答。
  • 預訓練後性能反而變差,自訓練要取代預訓練了嗎?
    自監督學習的目的不僅僅是學習高級特徵。相反,我們希望模型學習的更好,有更好的魯棒性以適用於各種不同的任務和數據集。二、研究動機作者希望能解決以下問題:1、預訓練對訓練結果有多大程度的幫助?2、什麼情況下使用預訓練是無效的?3、與預訓練相比,我們可以使用自訓練並獲得相似或更好的結果嗎?
  • 自監督黑馬SimCLRv2來了!提出蒸餾新思路,可遷移至小模型,性能精度超越有監督
    Abstract一種從少量帶標籤數據+大量無標籤數據中進行學習的方案是:現在無標籤數據集上採用無監督學習方案進行預訓練,然後採用監督學習方式在少量帶標籤數據上進行微調。儘管方案中的無標籤數據上的無監督學習是一種任務不可知方式(不同於其他CV中半監督學習),但是令人驚訝的是這種半監督學習的放在ImageNet上極為有效。
  • 【源頭活水】淺談圖上的自監督學習——對比學習
    而本文會將主要目光放在Graph上的自監督學習。文章將自監督學習主要分為三類:Generative、Contrastive、Adversarial(Generative-Contrastive)。目前,個人認為大部分Graph研究的目光都集中在Contrstive Learning上。
  • S4L: 半監督+自監督學習
    即將半監督學習和自監督學習結合起來的一種學習方式。自監督學習,可以理解為沒有label,但是可以用數據集的特性創造出一些label來預測,從而學習到數據中的規律,所謂的規律在當前階段一般是指數據到embedding的轉換,比如Bert預訓練的時候就是自監督,mask一些詞語進行預測。
  • 試試自監督學習
    數據科學家 Jeremy Howard 發布一條Twitter:在醫學圖像領域,我們經常需要靠一點點的數據來做很多工作。在這個問題上,有一種被低估的方法,正是自監督學習,簡直太神奇!還附上了與之相關的最新fast.ai教程。