本篇文章主要讲解两个无监督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:
这样的方法在其余的分类数据集上的效果:
以为笔记不错的,能够关注做者的微信公众号「机器学习炼丹术」。