真诚的向大家推荐这个UP主,论文讲述的方法清楚,脉络清晰,听君一席话胜读十年书。
论文名称:Bootstrap your own latent: A new approach to self-supervised Learning
论文地址: https://arxiv.org/abs/2006.07733
代码: https://github.com/deepmind/deepmind-research/tree/master/byol
【左脚踩右脚上天的神奇方法】Bootstrap
目录:1.Intro 2. methodology 3. intuition 4. result and ablation study 5. conclusion
1. Introduction
为什么使用Self-supervise这些方法?
因为随着深度学习的发展,模型越来越大,出现梯度爆炸、梯度消失等情况,训练越来越论难,需要的数据越来越多(大量标记过的数据)。我们需要一个模型能够以更低的样本的成本来训练出一个好的模型。这个模型能够更加泛化,对于多种视觉任务都能有所帮助。
2. Methodology
BYOL的亮点在于会同时维护两个相同的网络与。为Online Network,为target Network。在训练的过程中使Online Network不断的逼近Target Network。Target Network使用Momentum(动量)的方式更新自己的参数,从而缓慢的向Online Network靠拢。从而自己依靠自己的力量缓慢的提升模型的性能。
模型流程解析:
对于一幅输入的图像(input image),对其进行两种随机的图像增广策略和得到增广的两幅图像和。送入Online Network,送入Target Network。
是常见的encoder(CNN:ResNet 50...)。通过后得到表征(representation),这是我们最终会使用到的图像所提取的feature。在此基础之上,利用将由feature space映射到latent space得到。这一步即称为projection(投影)。
在target network中经过这一增强后得到了一个新的图像。送入一个与online network结构相同的encoder 中得到的representation。(两个encoder的参数是不同的,target network中的encoder参数使用的是动量更新)同样,将通过映射到latent space得到。
截止到这里online network与target network进行的是同样的工作。到这一步我们需要思考,我们有了之前的铺垫,如何让online network和target network产生联系呢?也就是说我们要思考如何来构建loss。
BYOL的做法是在online network里增加了一层网络的结构。将输入中,使输出值尽量的靠近。也就是说使Online network的projection的prediction尽量的向target network的projection靠拢。从而使得online network不断的向target network逼近。
注:target network中的sg即为stop gradient(停止梯度传播)。也就是说在得到loss之后只是在训练online network,并没有训练target network。但是target network并不是一成不变的,它依据动量更新在缓慢的向online network靠拢。但是他们二者永远不会达到相同的参数。
(其实我以为这里就是在通过不同的增广来积累同类图像的特征,从而使模型不断的优化。因为两种增广后的图片实际上属于同一类别,因此online network向target network靠近是合理且可行的。并且通过这种靠近最终希望模型能够学习到各种增广下各类图像的特征。
或者换一种说法,BYOL实际上是以prediction这一步来代替了之前SimCLR和MOCO中的负样本的存在。)
接下来让我们对本文的loss进行梳理:
这一loss的主要目标就是希望向量与的夹角越小越好,夹角越小的值就越大,从而loss越小。
如果有初学者看到这个公式可能会不理解,下面补充一些二范数的基础知识,毕竟在深度学习的论文中常常会看到它的出现:
若存在向量,则的意思是向量的欧几里得范数的平方。
如果你不明白公式推导中的2从哪里来,可以去论文中找找答案。这里我简单用文字来描述一下。
欧几里得范数的平方展开其实就是简单的完全平方差公式的展开,而2来自于两个平方项的和。
其中,。
这两项的平方自然都等于1,加起来就是2了。
在实际的训练当中BYOL还会调换生成的和。也即将送入target network,将送入online network。这样可以得到另一个loss 。将这一个loss与之前的loss相加可以得到BYOL最终的loss。
使用该loss只对online network进行训练。根据训练得到的再更新target network。也即论文中的:
以上就是整个BYOL网络的核心思想。以下是作者给出的伪代码,其流程与上述我们所讲述的是一致的。
通过以上流程我们将得到一个强的好的encoder 。通过好的encoder学习到好的representation,用于下游的计算机视觉任务的开展。
3. Intuition
到此我们需要深思一个问题:为什么这种方法没有使用负样本,没有使用contrastive loss却可以避免模型的坍塌呢?
在feature space中图像是由每一个dimension的值来描述的。但是我们如果在feature space中观察两幅增广图像的信息,他们之间的相互关系其实并不明显。因此我们需要再使用一串神经网络将它们投影到更高维的space中(latent space)。在这个高维space中我们希望两幅图像vector(可能就是高维空间中的“点”)尽可能的靠近。通过这两个vector的距离来表示二者的关系。因为vector实际来自于参数不同的两个网络中,所以它们在latent space中不可能是完全一致的。所以BYOL在online network后又增加了几层神经网络将online network中的projection预测到target network的latent space中。(这一过程实际上就是在latent space中将一个vector向另一个vector推近的过程。)为了能够完美的达成以上目标,整体的网络结构必须能够很好的克服图像增强对图像的影响,能够准确的将增广后的图像聚集(靠拢)在一起。这样实际上强迫了encoder学习出一个好的、更高级语义的表达。
在训练中只训练online network,target network实际上是一种过去的online network。这也就导致了无论怎么训练这个模型都不能使loss达到最小值。作者在此处指出本文的模型其实有些类似于GAN,有两个network进行对抗,始终无法将loss降下来。
4. Result
通过几个下游任务来测试方法的结果:
最后:
注:停止target network的梯度传播是非常有必要的,对结果的影响很大。(论文中有对比实验)
一些人对BYOL的质疑:sensitive to batch size and optimizer choices。
感谢您的阅读,欢迎在评论区分享您的见解。