作者&編輯:李中梁

自監督學習介紹

對於預訓練技術大家一定不陌生,在訓練我們的深度學習模型時,我們一般會選擇一個預先訓練好的模型,並對其進行微調得到想要的模型。如果從隨機權重開始,意味着需要花費大量的數據和時間進行訓練。

那麼,如果在你的領域中沒有預訓練模型,該怎麼辦呢?例如,在醫學圖像領域,很少有預先訓練過的模型。最近發表的一篇有趣的論文《Transfusion: Understanding Transfer Learning for Medical Imaging》研究了這個問題,並發現即使使用來自預先訓練過的ImageNet模型的幾個早期層,也可以提高醫學圖像模型的訓練速度和最終準確性。因此,您應該使用一個通用的預先訓練的模型,即使它不屬於您正在處理的問題的領域。

然而,正如本文所指出的,將ImageNet預訓練模型應用於醫學成像時,其改進程度並不大。我們想要模型工作更好,但不需要大量的數據,祕訣就是“自監督學習”。在自監督學習中,標籤來自數據,而不需要單獨的外部標籤(外部標籤就是指我們手工標註的標籤)。

這個想法有着悠久的歷史,早在1989年,Jurgen Schmidhuber就在他1989年(甚至更早)的論文《Making the World Differentiable》中討論過。到1994年,這個術語還被用來涵蓋一種相關的方法,即使用一種模態作爲另一種模態的標籤,例如論文Learning Classification with Unlabeled Data,該論文使用音頻數據作爲標籤,使用視頻數據作爲預測任務。例如下面這個例子:

聽到“哞哞”聲和看到奶牛往往同時出現

論文《Universal Language Model Fine-tuning for Text Classification》中也研究了自監督學習對文本分類任務的效果。預訓練模型的任務是預測句子中的下一個單詞。我們並不一定對語言模型本身感興趣,但事實證明,能夠完成這一任務的模型必須在訓練過程中瞭解語言的本質,甚至“瞭解”一點世界。當我們把這個預先訓練好的語言模型,fine-tune到另一個任務中,比如情緒分析,結果是我們可以用很少的數據很快得到最新的結果。

在計算機視覺任務中應用無監督學習

在自監督學習中,我們把用於預訓練的任務稱爲“pretext task”,把用於fine-tune的任務稱爲“downstream task”。儘管自監督學習在當今的自然語言處理中幾乎被普遍使用,但考慮到它的工作效果,它在計算機視覺模型中的使用要比我們預期的少得多。也許這是因爲ImageNet的預訓練已經獲得了廣泛的成功,所以像醫學成像這樣的社區中的人們可能不太熟悉自監督學習的必要性。在這篇文章的其餘部分,我將努力提供一個簡短的自監督學習在計算機視覺中的應用介紹,希望這可能有助於更多的人利用這一非常有用的技術。

在計算機視覺中使用自我監督學習最需要回答的問題是:“你應該使用什麼pretext task?”“其實你有很多選擇。下面展示了一些相關的工作。

  • Colorization

    着色任務就是輸入一張灰度圖,讓網絡預測其彩色圖的色彩分佈。由於原始圖片是彩色的的,所以可以自動構建好輸入和輸出標籤對。

    相關工作有:

    《Colorful Image Colorization》

    《Learning Representations for Automatic Colorization》

    《Tracking Emerges by Colorizing Videos》

  • Placing image patches in the right place

    對一張圖像分塊。例如將其分成九宮格,輸入中心小塊周圍的任意一小塊,讓網絡預測其相對中心小塊的位置,這是是一個典型的8分類問題,其學習到的特徵可以用於下游任務。可以參考以下工作:

    《Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles》

    《Unsupervised Visual Representation Learning by Context Prediction》

  • Placing frames in the right order

    既然圖像中有對某一個patch的位置進行預測,那麼視頻中就可以對某一幀的位置進行預測:

    《Unsupervised Representation Learning by Sorting Sequences》

    《Shuffle and Learn: Unsupervised Learning using Temporal Order Verification》

  • Classify corrupted images

    在《Self-Supervised Feature Learning by Learning to Spot Artifacts》這篇論文中,pretext task 是對損壞的圖像進行分類,注意到綠色的圖像沒有被破壞,紅色的圖像被破壞。同時,過於簡單的破壞機制可能會導致任務過於簡單,並且不會產生有用的特性。上面的文章使用了一種聰明的方法,它破壞了自動編碼器的特性,然後試圖重建它們,使其成爲一個具有挑戰性的任務。

選擇pretext task

如何選擇合適的pretext task呢?您選擇的pretext task必須是這樣的:如果解決了這些任務,就需要提取這些數據的特徵,而這些特徵也是解決downstream task所需要的。例如,大家經通常使用autoencoder作爲pretext task。這個模型可以將一個輸入圖像轉換成一個大大簡化的形式,然後將其轉換回儘可能接近原始圖像的內容。它有效地利用壓縮作爲的任務。然而,解決這個問題不僅需要重新生成原始圖像的內容,還需要重新生成原始圖像中的任何噪聲。因此,如果您的downstream task是您想要生成更高質量的圖像,那麼這將是一個糟糕的pretext task的選擇。

你還應該確保藉口任務是人類可以做的事情。例如,您可以使用生成視頻下幾幀的問題作爲pretext task。但是如果你試圖生成的視頻幀太靠後,那麼它可能是一個完全不同的場景的一部分,因此沒有模型能夠自動生成它。

微調 downstream tasks

一旦你用一個pretext task預先訓練了您的模型,你就可以繼續進行微調了。在這一點上,你應該把這當作一個遷移學習的問題,因此你應該小心不要損失你預先訓練的權重。可以借鑑ULMFiT論文中討論的內容,例如逐步解凍權重、有區別的學習率和單週期訓練。如果您正在使用fastai2,那麼您可以簡單地調用fine_tune方法來完成這些工作。

總的來說,我建議 不要花太多時間來創建完美的pretext task模型,而應該儘可能地快速、簡單地構建裏所能構建的任何東西 。然後你就可以知道它是否適合你的下游任務。通常情況下,你並不需要一個特別複雜的pretext task來完成你的下游任務。

還需要注意的是,你可以進行多輪的自我監督前訓練和有規律的預訓練。例如,你可以使用上述方法中的一種來進行初始的與預訓練,然後進行細分以進行額外的預訓練,最後再訓練你的downstream任務。你也可以在一個或兩個階段同時做多個任務(多任務學習)。先做最簡單的事情,然後只有在您確定確實需要它時才增加複雜性。

一致性損失

最後補充講解一下Consistency loss(一致性損失)。

在自監督訓練的基礎上,你可以增加一個非常有用的技巧,這在NLP中被稱爲“一致性損失”,在計算機視覺中被稱爲“噪聲對比估計”。基本思想是這樣的:你的pretext task 是一些損壞你數據的事情,比如模糊部分,旋轉它,移動補丁,或者(在NLP中)改變單詞或者把一個句子翻譯成外語然後再翻譯回來。在這種情況下,你都希望原始數據和“混亂”數據在pretext task中給出相同的預測,並在中間層有相同的表達。你也希望同樣的東西,當以兩種不同的方式“搞砸”時(例如,一個圖像旋轉了兩個不同的量),也應該有相同的一致表示。

因此,我們在loss函數中添加了一些內容,以懲罰爲相同數據的不同版本(比如旋轉了)獲取不同的預測的訓練。這張圖來自谷歌的文章《 Advancing Semi-supervised Learning with Unsupervised Data Augmentation.》,提出了半監督學習和非監督的數據增強。

說這是“有效的”將是一個巨大的輕描淡寫…例如,在谷歌的文章中討論的方法完全和絕對打破了我們之前ULMFiT文本分類的結果。他們使用的標籤數據少了1000倍!

Facebook人工智能最近發表了兩篇論文,在計算機視覺環境中使用了這一想法:《Self-Supervised Learning of Pretext-Invariant Representations》和《https://www.fast.ai/2020/01/13/self_supervised》。就像NLP中的谷歌論文一樣,這些方法超越了以前最先進的方法,並且需要更少的數據。

很可能你可以爲你選擇的幾乎任何的pretext task來添加一致性損失。既然它是如此有效,我強烈建議你嘗試一下!

參考文獻

- https://www.fast.ai/2020/01/13/self_supervised/

與我交流

github: https://github.com/keloli

blog: https://www.jianshu.com/u/d055ee434e59

機器學習算法工程師

一個用心的公衆號

長按,識別,加關注

進羣,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助

相關文章