本文翻譯自文章 《Self-supervised learning and computer vision》
我把我認爲重要的部分加粗顯示了
1.自監督學習介紹
只要有可能,你都應該用一個預先訓練好的模型來開始你的神經網絡訓練,並對它進行微調。 你真的不想從隨機的權重開始訓練,因爲這意味着你將從一個完全不知道如何學習的模型開始! 通過預訓練,您使用的數據可以比從零開始少1000倍。
那麼,如果您的領域中沒有預訓練的模型,您該怎麼辦? 例如,在醫學影像領域,很少有預先訓練過的模型。 最近一篇有趣的論文,Transfusion: Understanding Transfer Learning for Medical Imaging對這個問題進行了研究,發現即使使用預先訓練過的 ImageNet 模型中的前幾層,都可以提高醫學成像模型的訓練速度和最終的準確性。 因此,您應該使用通用的預訓練模型,即使它不在您的問題範圍內。
然而,正如本文指出的那樣,ImageNet 預先訓練的模型應用於醫學成像時的改進量並不大。 我們希望有一些更好的工作,但不需要大量的數據。 其中的祕密就是“自監督學習”。 在這裏,我們使用作爲輸入數據自然組成部分的標籤來訓練模型,而不需要單獨的外部標籤。
這個想法有着悠久的歷史,早在1989年,于爾根·施密德胡伯就在他的著作中討論過 Making the World Differentiable 。 到1994年,這一術語也被用來涵蓋一種相關的方法,即用一種方法作爲另一種方法的標籤,例如這篇論文 Making the World Differentiable ,使用音頻數據作爲標籤,視頻數據作爲預測因子。 本文給出了一個例子: 聽到“哞哞”的叫聲和看到牛羣往往是一起發生的。
自監督學習是 ULMFiT 的祕密,它是一種自然語言處理訓練方法,極大地提高了這一重要領域的最新水平。 在 ULMFiT 中,我們首先預訓練一個“語言模型”ーー也就是說,一個預測句子中下一個單詞的模型。 我們不一定對語言模型本身感興趣,但是事實證明,能夠完成這項任務的模型必須在訓練過程中瞭解語言的本質,甚至瞭解一點世界。 當我們使用這種預先訓練好的語言模型,並對其進行微調以適應另一項任務時,比如情緒分析,結果表明,我們可以很快地用很少的數據得到最先進的結果。 要了解更多關於如何工作的信息,請參考 introduction to ULMFiT 和語言模型預訓練介紹。
2. 計算機視覺中的自監督學習
在自我督學習中,我們用於預訓練的任務被稱爲“pretext task”(藉口任務)。 然後我們用於微調的任務稱爲“downstream tasks”(下游任務)。 儘管如今自監督學習在自然語言處理中幾乎普遍使用,但是考慮到它的工作效果,它在計算機視覺模型中的應用比我們預期的要少得多。 也許這是因爲 ImageNet 的預訓練已經取得了廣泛的成功,所以像醫學成像這樣領域的人可能不太熟悉自監督學習需求。 在這篇文章的其餘部分,我將努力提供一個簡短的介紹在計算機視覺中使用自我監督學習,希望這可以幫助更多的人利用這個非常有用的技術。
在計算機視覺中使用自主學習需要回答的最重要的問題是: “你應該使用什麼樣的 pretext task? ” 事實證明,你可以從中選擇很多。 下面是一些論文的列表,描述它們的論文,以及每個部分論文中的一張圖片,展示了這種方法。
2.1 Colorization
給圖像上色
2.2 Placing image patches in the right place
將圖像碎片放置在正確的位置
2.3 Placing frames in the right order
按順序排列幀
2.4 Inpainting
圖像修補
(paper)
2.5 Classify corrupted images
給損壞圖像分類
(paper)
在此示例中,綠色圖像沒有損壞,紅色圖像已損壞。 請注意,一個過於簡單的損壞方案可能會導致任務過於簡單,並且不會產生有用的特徵。 上面的論文使用了一種巧妙的方法,破壞了一個自動編碼器的特性,然後試圖重建它們,使之成爲一個具有挑戰性的任務。
2.6 Choosing a pretext task
選擇藉口任務
您選擇的 pretext task 需要了解您下游任務的數據。 例如,從業人員經常用一個稱爲“autoencoder 自動編碼器”的任務作爲藉口任務。 這是一個模型,可以採取一個輸入圖像,轉換成一個簡化形式(使用瓶頸層) ,然後將其轉換回儘可能接近原始圖像。 它有效地使用壓縮(compression )作爲藉口任務。 然而,解決這個任務不僅需要再生成原始圖像內容,而且還要再生成原始圖像中的任何噪聲。 因此,如果您的下游任務是希望生成高質量圖像的任務,那麼這將是一個糟糕的選擇。
您還應該確保藉口任務是人類可以完成的任務。 例如,您可以將生成視頻未來幀的問題作爲藉口。 但是,如果你試圖生成的畫面太遙遠,那麼它可能是一個完全不同的場景的一部分,因此沒有任何模型可以指望自動生成它。
3. 微調下游任務
一旦您用一個藉口任務預訓練了您的模型,您就可以進行微調(fine tune)了。 在這一點上,你應該把這當作一個遷移學習(transfer learning)問題,因此你應該小心不要影響你預訓練的權重。 使用 ULMFiT 論文中討論的內容來幫助您,比如逐漸解凍、區分性學習速度和單週期訓練。 如果您正在使用 fastai2,那麼您可以簡單地調用微調方法來完成這一切。
總的來說,我建議不要花太多的時間去創造一個完美的藉口模型,而是儘可能快速簡單地創造出你能想到的東西。 然後你就可以發現它是否符合你的下游任務。 通常情況下,你並不需要一個特別複雜的藉口來完成你的下游任務。
4. 一致性損失
在自監督訓練的基礎上,還可以加入一個非常有用的技巧,即自然語言處理中的“一致性損失”(consistency loss)或計算機視覺中的“噪聲對比估計”(noise contrastive estimation)。 其基本思想是這樣的: 你的藉口任務是一些擾亂你的數據的東西,比如模糊部分,旋轉它,移動補丁,或者(在 NLP 中)改變單詞或者把一個句子翻譯成外語然後再轉回來。 在每種情況下,您都希望原始項和混亂項在一個藉口任務中給出相同的預測,並在中間表示中創建相同的特性。 同時你也希望,當同一個物品以兩種不同的方式“弄亂”(messed up)時(比如,一幅圖像以兩種不同的數量旋轉) ,也應該具有相同的一致性表示。
因此,我們在損失函數中增加了一項對同一數據的不同版本得到不同答案的懲罰。 下面是一個圖形化的表示(from Google post)
說這種方法有效太輕描淡寫了… … 例如,上面谷歌帖子中討論的方法完全打破了我們以前使用 ULMFiT 進行文本分類的最先進的方法。 他們使用的標籤數據比我們少1000倍!
Facebook AI 最近發表了兩篇 CV 領域的文章就使用了這種思想:Self-Supervised Learning of Pretext-Invariant Representations 和 Momentum Contrast for Unsupervised Visual Representation Learning 就像谷歌的 NLP 論文一樣,這些方法打敗了以前最先進的方法,並且需要更少的數據。
對於您選擇的幾乎任何藉口任務,您都可以向模型添加一致性損失。 既然它如此有效,我強烈建議你試一試!
5. 延伸閱讀
如果您有興趣瞭解有關計算機視覺中自監督學習的更多信息,請查看以下最新內容: