自監督SOTA框架 | BYOL(優雅而簡潔) | 2020

忽逢桃林發表於2021-01-29

  • 文章原創自微信公眾號「機器學習煉丹術」
  • 作者:煉丹兄
  • 聯絡方式:微信cyx645016617

本篇文章主要講解兩個無監督2020年比較新比較火的論文:

0 綜述

BYOL是Boostrap Your Own Latent,這個無監督框架非常的優雅和簡單,而且work。收到了很多人的稱讚,上一個這樣起名的在我認知中就是YOLO。兩者都非常簡單而優美。

1 數學符號

這個結構有兩個網路,一個是online network,一個是target network。

  • online network:用\(\theta\)來表示online network的引數,包含,encoder\(f_{\theta}\),projector\(g_{\theta}\)和predictor\(q_\theta\)
  • target netowrk:使用\(\xi\)來表示引數,也有\(f_{\xi}\)\(g_{\xi}\),但是沒有predictor。

我們會更新online network,然後用滑動平均的方式,更新target network:

\(\xi\leftarrow \tau\xi + (1-\tau)\theta\)

現在我們有一個影像資料集D,其中獲取一個圖片\(x\in D\),然後我們對這個D做不同的影像增強,得到了兩個新的分佈\(\Tau\)\(\Tau'\),然後從兩個新分佈中獲取的圖片,用\(v\)\(v'\)標記。也就是說,如果用\(t()\)\(t'()\)表示對影像做影像增強的過程,那麼\(v=t(x),v'=t'(x)\)

2 損失函式

我們現在有\(v\),經過encoder,得到\(y=f_{\theta}(v)\),經過prejector,得到\(z=g_{\theta}(y)\),經過predictor,得到\(q_{\theta}(z)\);同理,target network也是如此,只是沒有最後的predictor,最終得到\(z'\)

我們對\(z'\)\(q_{\theta}(z)\)做l2-normalization,含義為取出這兩個隱含變數的絕對大小,而保留其方向性,為後面要做的向量點乘做鋪墊。

上圖中,\(\bar{q_{\theta}}(z)=\frac{q_{\theta}(z)}{||q_{\theta}(z)||_2}\),損失函式不難,其實有點像是:\(2-2\cos\theta\)

上面,我們得到了損失\(L_{\theta,\xi}\),接下來,我們需要計算symmetric loss,這個是把v和v‘分別放入target network和online network計算,得到的\(\widetilde{L}_{\theta,\xi}\),然後論文中提到,通過SGD來最小化

\(L^{BYOL}_{\theta,\xi}=L_{\theta,\xi} + \widetilde{L}_{\theta,\xi}\)

需要注意的是,這個優化的過程,僅僅更新online network,target network的引數不變化,目的是讓online network逐漸擁有target network的效能

因此,這個BYOL的整個訓練過程可以濃縮成下面的兩行:

3 細節部分

3.1 影像增強

3.2 結構

上圖中的encoder\(f_{\theta},f_{\xi}\)使用的是resnet50和post activation,這裡第一次看到post activation,就去看了一下發現,其實就是先卷積還是先啟用層,如果relu放在conv後面就是post activation,relu放在conv前面就是pre activation。

經過encoder,一個圖片會輸出2048個features,然後經過MLP,特徵擴充套件到4096個特徵,最終輸出256個特徵,在SimCLR模型中,MLP後跟了一個BN層和Relu啟用層,但是在BYOP中沒有BN層。

3.3 優化器

使用的是LARS優化器,使用cosine 學習率衰減策略,訓練1000epoch,其中包含10個warn-up epoch。學習率設定的為0.2。

至於online更新到target的引數\(\tau\),\(\tau_{base}=0.996\),

\(\tau=1-(1-\tau_{base})(\cos\frac{\pi k}{K}+1)\frac{1}{2}\)

k is current training step and K is maximum training steps.

3.4 財力

batchsize為4096,分佈在512個TPU v3的核,訓練encoder大約需要8個hour。

4 模型評估

在ImageNet上做監督學習,先用無監督訓練好encoder後,然後用標準的resnet50進行監督微調:

前面同行,這裡的監督訓練也是獲取ImageNet上的少部分資料集進行訓練,所以叫做semi-supervised:

這樣的方法在其他的分類資料集上的效果:

覺得筆記不錯的,可以關注作者的微信公眾號「機器學習煉丹術」。

相關文章