©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
自 SimCLR [1] 以来,CV 中关于无监督特征学习的工作层出不穷,让人眼花缭乱。这些工作大多数都是基于对比学习的,即通过适当的方式构造正负样本进行分类学习的。
然而,在众多类似的工作中总有一些特立独行的研究,比如 Google 的 BYOL [2] 和最近的 SimSiam [3],它们提出了单靠正样本就可以完成特征学习的方案,让人觉得耳目一新。但是没有负样本的支撑,模型怎么不会退化(坍缩)为一个没有意义的常数模型呢?这便是这两篇论文最值得让人思考和回味的问题了。
其中 SimSiam 给出了让很多人都点赞的答案,但笔者觉得 SimSiam 也只是把问题换了种说法,并没有真的解决这个问题。笔者认为,像 SimSiam、GAN 等模型的成功,很重要的原因是使用了基于梯度的优化器(而非其他更强或者更弱的优化器),所以不结合优化动力学的答案都是不完整的。在这里,笔者尝试结合动力学来分析 SimSiam 不会退化的原因。
SimSiam
在看 SimSiam 之前,我们可以先看看 BYOL,来自论文 Bootstrap your own latent: A new approach to self-supervised Learning [4] ,其学习过程很简单,就是维护两个编码器 Student 和 Teacher,其中 Teacher 是 Student 的滑动平均,Student 则又反过来向 Teacher 学习,有种“左脚踩右脚”就可以飞起来的感觉。示意图如下:
▲ BYOL示意图
而 SimSiam 则来自论文 Exploring Simple Siamese Representation Learning [5] ,它更加简单,直接把 BYOL 的滑动平均去掉了:
▲ SimSiam示意图
事实上,SimSiam 相当于将 BYOL 的滑动平均参数 设置为 0 了,这说明 BYOL 的滑动平均不是必须的。为了找出算法中的关键部分,SimSiam 还做了很多对比实验,证实了 stop_gradient 算子以及 predictor 模块 是 SimSiam 不退化的关键。为了解释这个现象,SimSiam 提出了该优化过程实际上相当于在交替优化:
其中 x 代表训练样本而 代表数据扩增。这部分内容网上已有不少解读,直接读原论文也不困难,因此就不详细展开了。
动力学分析
然而,笔者认为,将 SimSiam 算法的理解转换成 的交替优化的理解,只不过是换了种说法,并没有作出什么实质的回答。因为很明显,目前 也存在退化解,模型完全可以让所有的 都等于同一个向量,然后 输出同一个常数向量。不回答 的交替优化为什么不退化,那也等于没有回答问题。
下面笔者将列举出自认为是 SimSiam 不退化的关键因素,并且通过一个简单的例子表明回答不退化的原因需要跟动力学结合起来。当然,笔者这部分的论述其实也是不完整的,甚至是不严谨的,只是抛砖引玉地给出一个新的视角。
2.1 深度图像先验
首先,很早之前人们就发现一个随机初始化的 CNN 模型就可以直接用来提取视觉特征,效果也不会特别差,该结论可以追溯到 2009 年的论文 What is the best multi-stage architecture for object recognition? [6] ,这可以理解为 CNN 天然具有处理图像的能力。
后来这个特性被起了一个高大上的名字,称为“深度图像先验”,出自论文 Deep Image Prior [7] ,里边做了一些实验,表明从一个随机初始化的 CNN 模型出发,不需要任何监督学习,就可以完成图像补全、去噪等任务,进一步确认了 CNN 天然具有处理图像的能力这个特性。
按照笔者的理解,“深度图像先验”源于三点:
1. 图像的连续性,是指图像本身就可以直接视为一个连续型向量,而不需要像 NLP 那样要学习出 Embedding 层出来,这意味着我们用“原始图像 +K 邻近”这样简单粗暴的方法就可以做很多任务了;
2. CNN的架构先验,指的是 CNN 的局部感知设计确实很好地模拟了肉眼的视觉处理过程,而我们所给出的视觉分类结果也都是基于我们的肉眼所下的结论,因此两者是契合的;
3. 良好的初始化,这不难理解,再好的模型配上全零初始化了估计都不会 work,之前的文章从几何视角来理解模型参数的初始化策略 [8] 也简单讨论过初始化方法,从几何意义上来看,主流的初始化方法都是一种近似的“正交变换”,能尽量地保留输入特征的信息。
2.2 不退化的动力学
还是那句话,深度图像先验意味着一个随机化的 CNN 模型就是一个不是特别差的编码器了,于是我们接下来要做的事情无非可以归结为两点:往更好地方向学、不要向常数退化。
往更好地方向学,就是通过人为地设计一些先验信号,让模型更好地融入这些先验知识。SimSiam、BYOL 等让同一张图片做两种不同的数据扩增,然后两者对应的特征向量尽量地相似,这便是一种好的信号引导,告诉模型简单的变换不应当影响我们对视觉理解,事实上,这也是所有对比学习方法所用的设计之一。
不同的则是在“不要向常数退化”这一点上,一般的对比学习方法是通过构造负样本来告诉模型哪些图片的特征不该相近,从而让模型不退化;但是 SimSiam、BYOL 不一样,它们没有负样本,实际上它们是通过将模型的优化过程分解为两个同步的、但是快慢不一样的模块来防止退化的。还是以 SimSiam 为例,它的优化目标可以写为:
然后用梯度下降来优化,对应的动力学方程组是:
上式已经注明了有无 stop_gradient 算子所带来的差别。简单来说,如果添加了 stop_gradient 算子,那么 就少了第二项,这时候