本篇文章主要講解兩個無監督2020年比較新比較火的論文:微信
BYOL是Boostrap Your Own Latent,這個無監督框架很是的優雅和簡單,並且work。收到了不少人的稱讚,上一個這樣起名的在我認知中就是YOLO。二者都很是簡單而優美。網絡
這個結構有兩個網絡,一個是online network,一個是target network。框架
咱們會更新online network,而後用滑動平均的方式,更新target network:機器學習
\(\xi\leftarrow \tau\xi + (1-\tau)\theta\)ide
如今咱們有一個圖像數據集D,其中獲取一個圖片\(x\in D\),而後咱們對這個D作不一樣的圖像加強,獲得了兩個新的分佈\(\Tau\)和\(\Tau'\),而後從兩個新分佈中獲取的圖片,用\(v\)和\(v'\)標記。也就是說,若是用\(t()\)和\(t'()\)表示對圖像作圖像加強的過程,那麼\(v=t(x),v'=t'(x)\)。函數
咱們如今有\(v\),通過encoder,獲得\(y=f_{\theta}(v)\),通過prejector,獲得\(z=g_{\theta}(y)\),通過predictor,獲得\(q_{\theta}(z)\);同理,target network也是如此,只是沒有最後的predictor,最終獲得\(z'\)。post
咱們對\(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的整個訓練過程能夠濃縮成下面的兩行:
上圖中的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層。
使用的是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.
batchsize爲4096,分佈在512個TPU v3的核,訓練encoder大約須要8個hour。
在ImageNet上作監督學習,先用無監督訓練好encoder後,而後用標準的resnet50進行監督微調:
前面同行,這裏的監督訓練也是獲取ImageNet上的少部分數據集進行訓練,因此叫作semi-supervised:
這樣的方法在其餘的分類數據集上的效果:
以爲筆記不錯的,能夠關注做者的微信公衆號「機器學習煉丹術」。