大家好!今天让小编来大家介绍下关于byol与simsim的区别,为什么simsim不退化?的问题,以下是酷知号的小编对此问题的归纳整理,让我们一起来看看吧。
自simclr以来,cv中关于无监督特征学习的工作层出不穷,让人眼花缭乱。这些工作大多数都是基于对比学习的,即通过适当的方式构造正负样本进行分类学习的。然而,在众多类似的工作中总有一些特立独行的研究,比如google的byol和最近的simsiam,它们提出了单靠正样本就可以完成特征学习的方案,让人觉得耳目一新。但是没有负样本的支撑,模型怎么不会退化(坍缩)为一个没有意义的常数模型呢?这便是这两篇论文最值得让人思考和回味的问题了。
其中simsiam给出了让很多人都点赞的答案,但笔者觉得simsiam也只是把问题换了种说法,并没有真的解决这个问题。笔者认为,像simsiam、gan等模型的成功,很重要的原因是使用了基于梯度的优化器(而非其他更强或者更弱的优化器),所以不结合优化的答案都是不完整的。在这里,笔者尝试结合动力学来分析simsiam不会退化的原因。
simsiam #
在看simsiam之前,我们可以先看看byol,来自论文《bootstrap your own latent: a new approach to self-supervised learning》,其学习过程很简单,就是维护两个编码器student和teacher,其中teacher是student的滑动平均,student则又反过来向teacher学习,有种“左脚踩右脚”就可以飞起来的感觉。示意图如下:
而simsiam则来自论文《exploring simple siamese representation learning》,它更加简单,直接把byol的滑动平均去掉了:
事实上,simsiam相当于将byol的滑动平均参数
其中
动力学分析 #
然而,笔者认为,将simsiam算法的理解转换成
下面笔者将列举出自认为是simsiam不退化的关键因素,并且通过一个简单的例子表明回答不退化的原因需要跟动力学结合起来。当然,笔者这部分的论述其实也是不完整的,甚至是不严谨的,只是抛砖引玉地给出一个新的视角。
深度图像先验 #
首先,很早之前人们就发现一个随机初始化的cnn模型就可以直接用来提取视觉特征,效果也不会特别差,该结论可以追溯到2009年的论文《what is the best multi-stage architecture for object recognition?》,这可以理解为cnn天然具有处理图像的能力。后来这个特性被起了一个高大上的名字,称为“深度图像先验”,出自论文《deep image prior》,里边做了一些实验,表明从一个随机初始化的cnn模型出发,不需要任何监督学习,就可以完成图像补全、去噪等任务,进一步确认了cnn天然具有处理图像的能力这个特性。
按照笔者的理解,“深度图像先验”源于三点:
1、图像的连续性,是指图像本身就可以直接视为一个连续型向量,而不需要像nlp那样要学习出embedding层出来,这意味着我们用“原始图像 k邻近”这样简单粗暴的方法就可以做很多任务了;
2、cnn的架构先验,指的是cnn的局部感知设计确实很好地模拟了肉眼的视觉处理过程,而我们所给出的视觉分类结果也都是基于我们的肉眼所下的结论,因此两者是契合的;
3、良好的初始化,这不难理解,再好的模型配上全零初始化了估计都不会work,之前的文章《从几何视角来理解模型参数的初始化策略》也简单讨论过初始化方法,从几何意义上来看,主流的初始化方法都是一种近似的“正交变换”,能尽量地保留输入特征的信息。
不退化的动力学 #
还是那句话,深度图像先验意味着一个随机化的cnn模型就是一个不是特别差的编码器了,于是我们接下来要做的事情无非可以归结为两点:往更好地方向学、不要向常数退化。
往更好地方向学,就是通过人为地设计一些先验信号,让模型更好地融入这些先验知识。simsiam、byol等让同一张图片做两种不同的数据扩增,然后两者对应的特征向量尽量地相似,这便是一种好的信号引导,告诉模型简单的变换不应当影响我们对视觉理解,事实上,这也是所有对比学习方法所用的设计之一。
不同的则是在“不要向常数退化”这一点上,一般的对比学习方法是通过构造负样本来告诉模型哪些图片的特征不该相近,从而让模型不退化;但是simsiam、byol不一样,它们没有负样本,实际上它们是通过将模型的优化过程分解为两个同步的、但是快慢不一样的模块来防止退化的。还是以simsiam为例,它的优化目标可以写为
然后用梯度下降来优化,对应的动力学方程组是
上式已经注明了有无stop_gradient算子所带来的差别。简单来说,如果添加了stop_gradient算子,那么
举个简单的具体例子,我们考虑
简单起见这里的
假设
可以看到,停掉第二个
这个例子本身没多大说服力,但是它简单地揭示了动力学的变化情况:
predictor(
φ ">φφ)的引入使得模型的动力学分为了两大部分,stop_gradient算子的引入则使得encoder部分(θ ">θθ)的动力学变慢,并且增强了encoder与predictor的同步性,这样一来,predictor以“迅雷不及掩耳之势”拟合了目标,使得encoder还没来得及退化,优化过程就停止了。
看近似展开 #
当然,诠释千万种,皆是“马后炮”,真正牛的还是发现者,我们充其量也就是蹭掉热度而已。这里再多蹭一下,分享笔者从另外一个视角看的simsiam。文章开头说了,simsiam论文提出了通过目标
如果固定
代入
我们假定
其中
在式
那是不是意味着,不加stop_gradient、不加predictor会失败的原因,是因为它的损失函数以及方差过大呢?注意到在一阶近似下有
是不是就不会退化了?笔者也没有验证过,不得而知,正在研究相关内容的读者不妨验证一下。这里还引申出一个相关的问题,经过这样训练好的编码器,究竟用
当然,这部分的讨论都是建立在“
下文末小结 #
本文试图从动力学角度给出笔者对byol、simsiam算法不退化的理解,很遗憾,写到一半的时候发现之前头脑中构思的一些分析无法自圆其说了,于是删减了一些内容,并补充了一个新的角度,尽量让文章不“烂尾”,至于求精,那是说不上了。权当笔记分享在此,如有不当之处,还望读者海涵斧正。
来源: https://spaces.ac.cn/archives/7980
欢迎转载,转载请保留页面地址。帮助到你的请点个推荐。
以上就是小编对于byol与simsim的区别,为什么simsim不退化?问题和相关问题的解答了,byol与simsim的区别,为什么simsim不退化?的问题希望对你有用!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文链接:https://www.andon8.com/420413.html