《Moco 文章阅读笔记》
Moco 文章閱讀筆記
hahakity
?
中國科學技術大學 物理學博士
馬卡斯·揚
等
既然前一篇帖子開了頭記錄Contrastive Loss的閱讀心得,這一篇干脆就記錄 Kaiming He, Haoqi Fan, Yuxin Wu, Saining Xie and Ross Girshick 的Momentum Contrast for Unsupervised Visual Representation Learning簡稱 MoCo 的閱讀筆記吧。個人閱歷很淺,不能列舉各種方法的原始文獻,筆記也可能有謬誤,輕拍。
對比損失函數 Contrastive Loss function
LeCun 2006年提出對比損失(Contrastive Loss),訓練過程將同類樣本盡量拉近,異類樣本盡量推遠。因異類樣本可以推到無窮遠,所以設定最遠推出距離為m,防止訓練無邊界。LeCun文章中,樣本特征之間的距離定義為歐幾里德距離,
其中是神經網絡,是網絡參數,是兩個輸入樣本。
如下損失函數的定義完美體現了上面的描述,
其中 Y=0 表示一對樣本屬于同類,Y=1 表示兩者屬于異類。同類則最小化第一項,即兩者之間的距離。異類則看兩者距離是否天生大于 m,是則忽略更新,否則增大距離到m。
樣本識別 Instance Discrimination
原始的對比損失要知道每個樣本的標簽,依此判斷兩個樣本是否同類。屬于監督學習。
KaiMing及其合作者文章的題目有“非監督圖像表示學習“,如果不知圖像標簽,如何判斷同類異類,進而做對比損失訓練?這就涉及到“Instance Discrimination", 參考文獻【2】。這種方案簡單說就是將每張圖片在訓練數據集中的序號作為標簽,它與訓練集中其他所有圖片都是異類。對同一張圖片做(剪切,旋轉,縮放,調色等 Augmentation)等增強產生的圖片與源圖片同類。
在分類任務中,神經網絡對相似的類給出相近的預測。文獻【2】的作者在文中有這樣一段話,非常的有啟發。
We take the class-wise supervision to the extreme of instance-wise supervision, and ask: can we learn a meaningful metric that reflects apparent similarity among instances via pure discriminative learning?
前段時間火起來的半監督學習 MixMatch 以及 UDA 中,就有最小化兩個同源圖片在特征空間距離的損失函數項,。從這個層面上來說,MoCo 相當于從半監督往非監督又邁了一步。
加噪對比估計 Noise-Contrastive Estimation (NCE)
一個自然的想法是,如果使用 cosine similarity,計算兩個單位向量的點乘,則同類樣本最小夾角為0,異類樣本最大夾角為, 不需要人為設定最遠推出距離。MoCo 使用了這種對比損失函數,名字為 InfoNCE,參考文獻 【3】
其中是查詢向量,對應當前樣本的編碼。是鍵向量,對應之前樣本的編碼字典。是溫度,是一個可調參數,調節同一類的彌散程度。
一眼看過去,這個損失函數跟 softmax 很像,它跟 softmax 又有什么關系呢?其實一開始,在“Instance Discrimination” 文章中,作者嘗試過 softmax, 做多標簽分類,每個訓練樣本的序號就是它們的標簽。如果第 i 張圖的潛在表示為, 那么一張新圖 x (其潛在表示)被識別為第 i 個樣本的概率為,
其中是最后一個隱藏層到輸出層第 i 個神經元之間的連接矩陣權重。因為輸出層第 i 個神經元對應著第 i 張圖,表示與第 i 個樣本的匹配程度。
這種方法有兩個問題 (1)被訓練的只對第 j 個訓練樣本敏感,不能很好的泛化到新的樣本。(2)訓練集很大,標簽個數 n 太多(百萬個類),分母上的求和做不了。
為了解決第一個問題,文獻【2】的作者們祭出了非參數化(扔掉)分類器,
在這個分類器里,作者將每個樣本的特征表示保存在一個記憶倉庫(memory bank)中。訓練時用 L2 正規化使得,得到高維空間的單位向量。之前的被替換成兩個單位向量的 cos similarity。這種非參數化的分類器,類似于將最后一層 Densely connected layer 換成了 Global Average Pooling。不用再算及其梯度,同時能夠更好泛化到新樣本。對負樣本使用 Memory Bank 緩存,不用每次計算負樣本的特征表示。
學習目標是能夠正確識別每一個樣本在訓練集中的序號,最大化所有訓練樣本的聯合預測概率,或最小化 negative log-likelihood,
有沒有很眼熟?MoCo 使用的損失函數與它基本一致,除了多出對所有訓練樣本的求和。注意這里的損失函數是對所有訓練樣本的,而真正訓練時,是使用mini-batch分批訓練。所以在 MoCo 文章中,拿掉了前面這個求和。
第二個存在的問題是分母上求和項太多。文獻【2】的作者們進一步改進,通過抽樣的方法,從 n 個樣本(~)中隨機抽出 m 個(~),作為代表計算求和,最后再乘以因子 n/m。作者在文中表示m=4096可以達到 m = 49999 的精度,大大加速計算。
Momentum vs Proximal Regularization
在文獻【2】中,作者發現這種樣本識別任務中每類只有一個樣本,訓練的時候每個Epoch只訪問每個樣本一次,訓練樣本的漲落導致訓練誤差劇烈震蕩。作者采用了前人發明的 Proximal Regularization,在損失函數中加入使得樣本的特征表示更新過程盡量平滑。其中 t 是當前時刻,t-1 是前一次迭代。
MoCo 使用了動量機制,滑動平均來更新編碼器參數。其中 m 默認值是 0.999,每次的增量等于 0.001,非常微小。
Momentum Contrast (MoCo)
回到 MoCo, 其損失函數表示一個正樣本與K個負樣本的 negative log-likelihood, 對應 (K+1)類的 softmax (目標為將分類為正樣本)。
最小化有兩種方法,第一種是增大分子,使同類樣本的特征表示夾角變小。第二種是減小分母,使異類樣本的特征表示夾角變大。所以這種損失函數也是一種 Contrastive Loss。通過梯度下降更新 q 編碼器和 k 編碼器的參數能夠實現最小化的目的。
在 Memory bank 方法中,每個樣本的特征表示被保存在bank中。隨著神經網絡編碼器的訓練,不同樣本被不同時期的編碼器編碼。每次抽樣得到的K個負樣本,其特征表示來自于多個時期的編碼器的輸出,不夠自洽。
在 Momentum Contrast 方法中,放棄 memory bank, 使用隊列保存最近幾個mini-batch中訓練樣本的特征表示,提供 K 個負樣本。隨著訓練的繼續,老的 mini-batch 被從隊列中移除,新 mini-batch 的特征表示被加入隊列,保證字典中的負樣本都來自于最新的鍵編碼器。
按照MoCo的做法,對q編碼器(查詢)的更新比較激進,對k編碼器(字典)的更新比較平滑,但也是使用 q 的梯度。按照 3.1 節的說法,兩個編碼器可以是同一個網絡,或部分共享,或完全不同。但是好像沒有看到如果q和k使用同一個編碼器時的效果對比。
總結
從監督學習到半監督學習,再到非監督學習,每一步都是很大的進步。它山之石,可以攻玉。這里學到的方法,應該可以應用到更廣泛的科學大數據中去。
參考文獻
Contrastive Loss function,Dimensionality Reduction by Learning an Invariant Mapping, 2006, Raia Hadsell, Sumit Chopra, Yann LeCun
Instance Discrimination,Unsupervised Feature Learning via Non-Parametric Instance Discrimination, Wu ZhiRong, Yuanjun Xiong, Stella X. Yu, Dahua Lin
InfoNCE or CPC,Representation Learning with Contrastive Predictive Coding, Aaron van den Oord, Yazhe Li, Oriol Vinyals, all from DeepMind
Momentum Contrast for Unsupervised Visual Representation Learning,Kaiming He Haoqi Fan Yuxin Wu Saining Xie Ross Girshick, all from FAIR
發布于 2019-11-28
深度學習(Deep Learning)
機器學習
AI教程
文章被以下專欄收錄
AI+X
此專欄會關注AI領域的最新進展,代碼復現,交叉學科應用
推薦閱讀
深度學習面試100題(第1-5題):經典??键cCNN
1、梯度下降算法的正確步驟是什么?a.計算預測值和真實值之間的誤差b.重復迭代,直至得到網絡權重的最佳值c.把輸入傳入網絡,得到輸出值d.用隨機值初始化權重和偏差e.對每一個產生誤差的神…
七月在線 ...發表于BAT面試...
CS231n課程筆記翻譯:線性分類筆記(上)
杜客發表于智能單元
300 頁干貨!李宏毅《一天搞懂深度學習》(附下載)
紅色石頭發表于AI有道
XLNet 閱讀筆記
背景:自編碼與自回歸語言模型的缺陷BERT 預訓練方式屬于自編碼AE (Auto Encoder)。原因在于 BERT 預訓練目標為根據上下文語境復原被 [MASK]隨機遮擋的文字。此過程與降噪自編碼機的原理一…
hahak...發表于AI+X
11 條評論
寫下你的評論...
言蹊03-04
樓主你好,謝謝您的分享。
請問
【這種方法有兩個問題 (1) W_{j}^{T} 被訓練的只對第 j 個訓練樣本敏感,不能很好的泛化到新的樣本。所以文中祭出非參版本...】
這句話如何理解呢?
hahakity(作者)回復言蹊03-04
因為這里每個樣本都是一個類,j 的個數等于樣本個數。第 j 個類僅表示第 j 個樣本。不同于以往的多分類任務。
言蹊回復hahakity(作者)03-04
您的意思是說:以前多分類是 學一個w 處理所有類,所以自適應新的測試樣本。
而Memory bank 這里,每個w只能固定處理一個類, 所以
而每個樣本(即這里的每個類)都學一個w 有什么不好呢?
1-如果有新的測試instance, 之前訓練好所有的 w 并不能排上用場。直接沒有泛化性。
2-需要學的w和training instance 數目相同,實在太暴力?
言蹊03-04
還有,
【在 Memory bank 方法中,每個樣本的特征表示被保存在bank中。隨著神經網絡編碼器的訓練,不同樣本被不同時期的編碼器編碼。每次抽樣得到的K個負樣本,其特征表示來自于多個時期的編碼器的輸出,不夠自洽?!?/p>
不是固定住了 k-encoder 嗎,怎么會出現
【每次抽樣得到的K個負樣本,其特征表示來自于多個時期的編碼器的輸出】呢?
AntonioLiu103-26
您好,query和key所用的同一個編碼器的參數不同,這樣不會造成不一致嗎?為什么會work呢?
小葉04-10
分析很到位,看完細節清晰了很多,贊作者
kwduan05-12
你好,有個地方沒理解,文中說由于標簽個數n太多,w_{j}^{T}*v求和做不了,為什么換成v_{j}^{T}*v求和就可以做?w和v的shape不都是一樣的么?
hahakity(作者)回復kwduan05-12
W是矩陣,V是向量,差了一維
kwduan回復hahakity(作者)05-12
如果w是矩陣的話,w與v相乘的結果是一個向量,softmax分子分母都得是數,才能計算概率
xfdu05-31
我怎么覺得偽代碼里面labels那里有點問題,就是應該是個[N,K+1]的矩陣,第一位為1,請問一下您覺的labels為什么是zeros(N)?
總結
以上是生活随笔為你收集整理的《Moco 文章阅读笔记》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 60帧极高画质 红魔7S《原神》30分钟
- 下一篇: 俄妹COS《进击的巨人》阿尼 还自创了泳