欢迎光临散文网 会员登陆 & 注册

MoCo----相关工作

2021-12-29 16:02 作者:如果我是泡橘子  | 我要投稿

无监督学习(自监督学习,其实自监督学习是无监督学习的一种,但之前在前人的工作中大家一般不作区分,但是在本文中,作者选择了使用无监督学习这个词,因为定义的更加广泛一些)一般有两个方向可以做

  • 一个是在代理任务上做文章。代理任务一般是指的那些大家不太感兴趣的任务(不是分类、分割、检测这种有实际应用场景的任务),这些代理任务的提出,主要是为了学习一个好的特征

  • 一个是在目标函数上做文章。目标函数就比较广泛了,目标函数的研究其实是可以和代理任务分开的

MoCo主要是在目标函数上下功夫,它所提出的这个又大又一致的字典主要是影响后面InfoNCE目标函数的计算

  • 这里的目标函数主要是针对无监督的方式来说的


最常见的构建目标函数的方式,就是衡量一个模型的输出和它应该得到的固定的目标之间的差距

  • 比如说用auto-encoder(自编码器)的话,就是输入一张原图或者一张已经被干扰过的图,通过一个编码器解码器将这张图重建出来,这里既可以使用L1 loss,也可以使用L2 loss,但是总的来说,衡量的是原图和重新构建的图之间的差异,这种属于生成式网络的做法,因为是在生成一张图片

  • 如果是想走判别式网络,一般的做法有:eight position,它是15年的一篇论文,主要思想是说如果将一张图片打成九宫格,假如这个九宫格有序号(从1到9),现在先把中间5这一格拿到,然后再随机从剩下的八个格子中挑一格,看能不能预测出这个随机挑出来的这一格是位于中间这一格的哪个方位(左上、右下等等)。因为这里的每一块其实都是自带序号的,其实就相当于把这个代理任务转化成了一个分类任务,因为它只有八个方位可以去预测,所以MoCo这里就用了8个位置来代替这个方法

  • 除了判别式或者生成式这种常见的目标函数,还有对比学习的目标函数和对抗性的目标函数

  • 对比学习的目标函数主要是去一个特征空间中衡量各个样本对之间的相似性,它所要达到的目标就是让相似物体的特征尽量拉近,不相似物体之间的特征尽量远离。对比学习的目标函数和生成式或者判别式目标函数有很大的区别:不论是判别式(预测8个位置)还是生成式(重建整张图),目标都是一个固定的目标,但是在对比学习中,它的目标是在训练的过程中不停的改变的(在训练的过程中,目标其实是由一个编码器抽出来的数据特征而决定的,也就是本文所指的字典,作者接下来说最近几篇效果不错的方法,它们的核心思想都是用的对比学习)

  • 对抗性的目标函数在GAN这篇论文中也提到过,它主要衡量的是两个概率分布之间的差异。对抗性的目标函数主要是用来做无监督的数据生成的,但是后来也有一些对抗性的方法用来做特征学习,因为大家认为,如果能生成很好很真实的图片的话,按到底来说,它是已经学到了这个数据的底层分布,这样模型学出来的特征应该也是不错的



接下来就是代理任务这个方面,代理任务其实过去几年大家提出了非常多的形式

  • denoising auto-encoder:重建整张图

  • context auto-encoder:重建某个patch

  • colorization:用给图片上色当作自监督信号

  • 还有很多代理任务是去生成一些伪标签,像examplar image其实也是给同一张图片做不同的数据增广,它们都属于同一个类;patch ordering,也就是九宫格的方法,要么是打乱了之后去预测它的顺序,要么就是随机选一个patch去预测它的方位;还有利用视频的信息去做tracking,以及一些聚类的方法



最后一段作者讨论了一下对比学习和之前这些不同的代理任务之间的关系

  • 不同的代理任务是可以和某种形式的对比学习的目标函数配对使用的,比如说本文中使用的个体判别的方式就跟之前的examplar based代理任务很相关

  • 对于之前两个比较重要的工作CPC和CMC来说,CPC做的是预测性的对比学习它是用上下文的信息去预测未来,这样就跟上下文自编码代理任务非常相关;对于CMC来说,它是利用一个物体的不同视角去做对比,这个就跟给图片上色的代理任务非常相似,因为给图片上色这个任务就涉及了同一个图片的两个视角(黑白和彩色)



总的来说,相关工作写的还是非常的简洁明了,之所以围绕目标函数和代理任务这两个方向去写相关工作,是因为这两个任务是主要跟有监督学习不一样的地方

  • 如果和有监督学习对比一下,假如有一个输入x,然后通过一个模型得到y(也就是输出),有了输出之后就去和一个ground truth做比较,然后需要一个目标函数去衡量一下这个比较的结果,这就是有监督学习的流程

  • 对于无监督学习或者是自监督学习来说,缺少的就是标签,也就是这里的ground truth,如果没有标签就自己造标签,这时候代理任务就派上用场了,代理任务的用处就是去生成一个自监督的信号,从而去充当ground truth这个标签信息,一旦有了输出y,又有了标签信息,接下来还需要一个目标函数去衡量他们之间的差异,从而让模型学得更好

所以这就是为什么本文从目标函数和代理任务这两个角度去写相关工作





----end----

MoCo----相关工作的评论 (共 条)

分享到微博请遵守国家法律