elasticsearch入門系列">elasticsearch入門系列
930
2022-05-30
摘要
本文提出了一個用于無監督視覺表征學習的動量對比方法(MoCo)。從將對比學習作為字典查詢過程的角度來看,本文構建了一個由隊列和移動平均編碼器組成的動態字典。這使得可以實時地構建一個巨大的并且具有一致性的字典,因此可以促進對比無監督學習。通過MoCo學習到的特征可以很好地在下游任務完成遷移。MoCo在七個檢測和分割任務上都超越了對應的有監督預訓練模型,這告訴我們在許多視覺任務上有監督和無監督模型之間的差距已經大大地縮小。
背景
GPT和BERT這些模型充分展示了無監督表征學習在自然語言處理領域的成功。但在計算機視覺領域,有監督的預訓練依然占據著主導地位,無監督方法則遠遠落后。這其中的原因可能是他們各自信號空間的差異性。語言任務擁有離散的視覺信號,這有助于構建令牌化的字典,無監督學習正是基于這種字典。相比之下,視覺任務更加關注字典的構建,因為原始的信號位于連續的高維空間,它不像單詞一樣對人類的交流來說是結構化的。
動機
從視覺信號空間角度出發,本文猜想需要構建一個具有以下兩個特征的字典:(1)大容量的(2)在訓練過程中的演變需要具有一致性。直覺上,一個更大的字典可以更好的采樣底層的連續高維視覺空間。與此同時,字典中的鍵應由相同的或者相似的編碼器表示,以便他們與查詢的比較具有一致性。
本文提出了Momentum Contrast (MoCo),將其作為為無監督學習構建大型一致性字典的方法(如圖一)。本文將字典作為一個數據樣本的隊列來進行維護:當當前的小批量數據的編碼表示入隊的時候,時間最久的批次就會出隊。通過這種隊列的方式,將字典大小和小批量大小解耦,讓字典的規模可以變得更大。更重要的是,
圖一 動量對比
方法
作為字典查詢的對比學習
對比學習以及它最近的發展,都可以看做是訓練一個用來做字典查詢的編碼器。我們考慮一個待編碼的查詢q和一系列待編碼的樣本{k~0~,k~1~,k~2~,$\ldots$ },他們構成了字典的鍵。假設字典中有一個鍵(標記為k~+~)正好是查詢q需要匹配的,當q和正樣本鍵k~+~非常相似,和其他所有的負樣本鍵都不相似時,損失函數的值應該是非常低的,而對比損失函數正是這樣一個函數。當用點積來度量兩個鍵的相似性時,這就是InfoNCE 這個對比損失函數,也正是本文所采用的對比損失函數:
其中$\tau$ 是一個溫度超參數,分母是同時計算了一個正樣本和K個負樣本之和。實際上這個函數的本質是一個基于softmax的(K+1)類分類器的對數損失函數。這個表達式中,分類器試圖將q分類為k~+~。
對比損失函數作為無監督學習方法的目標函數,被用來訓練表征查詢和鍵的編碼網絡。一般情況下,查詢可以被表示為$q=f_q(x^q)$ ,其中$f_q$是一個編碼器網絡,$x^q$ 是一個查詢樣本(鍵的表示是類似的,$k=f_k(x^k)$)。他們的初始化取決于特定的代理任務,輸入$x^q$ 和$x^k$可以是圖像,圖像切片或者由一系列切片構成的上下文。編碼網絡$f_q$和$f_k$可以是相同的,部分共享的或者完全不同的。
動量對比
從上面的描述可以看出,對比學習是一種在高維連續輸入(例如圖像)上建立離散字典的方法。因為輸入鍵是隨機采樣的,因此字典也是動態的,并且在推理過程中鍵編碼器會不斷演變。本文假設好的特征表達可以通過一個包含豐富負樣本的大字典學習到,與此同時,盡管鍵編碼器會不斷演變,但對字典的鍵的編碼應最大可能保持一致。基于上述假設,本文提出了動量對比。
字典作為一個隊列。文本方法的核心在于用數據樣本的隊列來維持字典,這樣可以對來自
前面小批次的編碼鍵進行重用。通過引入隊列,本文將字典的大小與數據批次的大小解耦開來,因此本文的字典大小可以遠大于常用的批次的大小。
字典中的樣本是循序漸進逐步被替代的。當前批次的數據入隊,最先進入的批次就出隊。這樣字典總是表征了全體數據的一個采樣子集,與此同時維持這個字典的額外開銷也是可管理的。更重要的是,移除掉最先進入隊列的樣本批次也是非常合理和有利的,因為它編碼的鍵是最過時的和當前最新的數據的一致性是最小的。
動量更新。使用隊列可以讓字典更大,但同時也讓更新鍵編碼器的反向傳播變得困難,梯度需要傳播到隊列中的所有樣本。一個簡單的解決辦法是直接從查詢編碼器$f_q$直接復制鍵編碼器$f_k$,不考慮鍵編碼器的梯度。但是這個方法在實驗中表現非常差,本文猜想導致這個問題的原因是,快速地改變鍵編碼器降低了鍵表征的一致性。因此本文提出了動量更新的策略來解決這個問題。
具體來說,用$\theta_k$和$\theta_q$分別表示編碼器$f_k$和$f_q$的參數,然后通過下面的式子對參數$\theta_k$進行更新:
其中$m \in \left[ 0, 1 \right)$ 是動量 系數,只有參數$\theta_q$通過反向傳播進行更新。通過公式(2)的更新方式,$\theta_k$要比$\theta_q$更新的更加平滑。最終,雖然隊列中的鍵是被不同的編碼器進行編碼的,但是這些編碼器之間的差異非常小。從實驗結果來看就是,一個相對更大的動量系數(例如:$m=0.999$)效果要好于更小的值(例如:$m=0.9$),從中我們也可以看出一個變化緩慢的鍵編碼器是利用隊列的核心。
和以往方法的關系。MoCo是一個通用的利用對比損失函數進行學習的機制。本文將它和現有的另外兩種通用機制(如圖二)進行了對比,他們的不同特性主要體現在字典大小和一致性這兩個方面上。
圖二 三種不同對比損失的機制的比較
圖二a展示的通過方向傳播進行梯度更新的端到端的方式是一個非常自然的機制,他利用當前批次的樣本作為字典,因此這些鍵的編碼具有表征具有一致性。但對應的字典大小就和批量大小發生了耦合,而批量大小又被GPU的顯存大小限制住了。與此同時大批量數據的優化問題也是一個挑戰。
另一個機制就是內存池的方法,如圖二b所示。內存池由數據中的所有樣本的表征組成,每一個批次的字典都可以不用通過反向傳播直接從內存池中隨機采樣,因此他可以支持足夠大的字典規模。但內存池中的樣本表征在它上次別看見之后就會更新,因此在一個輪次中的不同迭代步數中他們是不具備一致性的。動量更新的方法從內存池方法改進而來,不同的是本文提出的方法是在編碼器上更新而不是直接對樣本的表征進行更新。因此MoCo不需要記錄每一個樣本,更重要的是,MocCo在內存利用上更加的有效,而且可以在億級別上的數據進行訓練,這對基于內存池的方法來說是不切實際的。
代理任務
對比學習可以驅動各種代理任務,本文關注的交點不是設計一個新的代理任務,因此采用了一個簡單的實例區分任務作為代理任務。具體來說,如果一個查詢和一個鍵他們來自同一張圖片,那么我們就認為他們是一對正樣本對,反之則是一對負樣本對。和之前的方法一樣,本文對同一張圖片進行隨機的數據增強形成兩張不同視角的圖片作為正樣本對。然后編碼器$f_q$和$f_k$分別對查詢和鍵進行編碼,編碼器$f_q$和$f_k$可以是任意的卷積神經網絡。
實驗
線性分類方案
首先利用MoCo在ImageNet-1K數據集上進行無監督訓練,然后固定編碼器的參數,再通過有監督的方式訓練一個線性分類器。分類器的輸入為編碼器的輸出特征的平均池化,分類器由線性層和softmax層組成,最后在ImageNet驗證集上進行測試。
本文對比了三種不同對比損失的機制的表現如圖三所示。
圖三 三種對比損失機制的結果對比
同時和已有的方法做了對比,在相同參數的情況下準確率都超過了現有方法。
圖四 在ImageNet上的線性分類器結果對比
特征遷移方案
無監督學習的主要目標就是學習具有可遷移性的特征,ImageNet監督預訓練在作為下游任務微調的初始化中的影響是最大的。本文對比了MoCo和ImageNet監督訓練得到的模型,在遷移到不同數據集上不同任務的表現。在大部分情況下,MoCo都得到了優于ImageNet監督訓練的表現。
圖五 PASCAL VOC 數據集上微調目標檢測任務和現有方法對比結果
圖六 目標檢測和實例分割任務在COCO上的微調與ImageNet監督訓練對比
圖七 MoCo和ImageNet有監督預訓練在其他任務上的對比
AI EI企業智能 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。