无监督学习简介
无监督学习简介
什么是无监督学习方式?
无监督学习方式是一种机器学习的方法,它不需要给模型提供标注的数据,而是让模型自己从数据中发现有用的信息和结构。无监督学习方式有很多应用场景,比如聚类、降维、异常检测、生成模型等。
在计算机视觉领域,无监督学习方式可以用来学习图像的表征,也就是把图像转换成一种低维的向量,这个向量可以反映图像的语义信息和视觉特征。图像表征的好坏,直接影响了下游任务的性能,比如分类、检测、分割等。
然而,学习图像表征并不容易,因为图像是一个高维的连续空间,不像文本那样有离散的单词或者词根。图像中的每个像素都有很多变化因素,比如光照、角度、遮挡、背景等。这些因素会导致同一类别的图像之间有很大的差异,而不同类别的图像之间又有一些相似性。因此,如何从这样一个复杂的空间中提取出有意义的特征,是一个挑战。
什么是对比学习?
对比学习是一种无监督学习方式的方法,它主要关注如何让模型学习到同类实例之间的共同特征,区分非同类实例之间的不同之处。对比学习的基本思想是:给定一个输入实例(比如一张图像),通过一些变换(比如裁剪、翻转、颜色变换等)得到两个或多个不同的版本(称为增强实例),然后让模型判断哪些增强实例是来自同一个输入实例的(称为正样本),哪些增强实例是来自不同输入实例的(称为负样本)。通过这样的对比过程,模型可以学习到输入实例中不变的语义信息和视觉特征。
对比学习可以看作是一种字典查询任务。我们可以把每个输入实例看作是一个查询(query),把每个增强实例看作是一个键(key)。我们希望模型能够根据查询找到字典中与之最匹配的键。为了让模型能够进行这样的匹配,我们需要给模型提供一个目标函数(objective function),来告诉模型如何衡量查询和键之间的相似度。常见的目标函数有 NCE loss 、 InfoNCE loss 等。
对比学习有几个关键因素会影响其效果:
- 数据增强方式:数据增强方式决定了增强实例之间的差异程度。如果数据增强方式太弱,那么增强实例之间的差异就不够大,模型就难以区分正负样本。如果数据增强方式太强,那么增强实例之间的差异就太大,模型就难以捕捉到语义信息和视觉特征。因此,需要找到一种合适的数据增强方式,让增强实例之间既有一定的差异,又保留了一定的相似性。
- 负样本数量:负样本数量决定了对比学习的难度。如果负样本数量太少,那么对比学习就太容易了,模型就难以学习到有用的特征。如果负样本数量太多,那么对比学习就太困难了,模型就难以收敛。因此,需要找到一种合适的负样本数量,让对比学习既有一定的挑战性,又有一定的可行性。
- 表征能力:表征能力决定了模型能够学习到多少信息和特征。如果表征能力太弱,那么模型就难以捕捉到输入实例中的细节和变化。如果表征能力太强,那么模型就容易过拟合于输入实例中的噪声和无关因素。因此,需要找到一种合适的表征能力,让模型既能够提取出有意义的信息和特征,又能够抑制掉无意义的噪声和无关因素。
什么是moco、SimCLR等方法?
moco 和 SimCLR 都是对比学习的方法,它们都是在 2019 年提出的,并且在无监督图像表征学习方面取得了很好的效果。它们都是基于同一个框架:先对输入图像进行两种不同的数据增强,得到两个增强实例;然后分别用两个编码器(encoder)提取出两个特征向量;然后用一个目标函数计算两个特征向量之间的相似度,并最大化正样本之间的相似度,最小化负样本之间的相似度。
moco 和 SimCLR 的主要区别在于如何获取负样本。SimCLR 是直接用一个大批量(batch)的数据来提供负样本。也就是说,在一个批量中,除了来自同一个输入图像的两个增强实例之外,其余所有的增强实例都是负样本。这样做的好处是简单直接,不需要额外的存储空间和计算资源。但是这样做的缺点是需要一个非常大的批量大小(比如 4096),才能提供足够多的负样本。而这样大的批量大小需要非常多的显存和计算资源,对于普通用户来说不太现实。
moco 是为了解决这个问题而提出的。moco 的思路是利用动量(momentum)和队列(queue)来构建一个动态字典(dictionary)。具体来说,moco 用两个编码器来提取特征向量,其中一个称为查询编码器(query encoder),另一个称为键编码器(key encoder)。查询编码器是正常更新参数的,而键编码器则是用动量法来缓慢地跟随查询编码器更新参数。也就是说,在每次更新参数时,键编码器会以一个较小的步长(比如 0.999)从查询编码器复制参数。这样做的好处是,键编码器的参数变化得很缓慢,所以它提取的特征向量也比较稳定,不会随着每次更新而发生剧烈的变化。这样就保证了字典中的特征向量有一定的一致性,便于进行对比学习。
除了用动量法来更新键编码器,moco 还用一个队列来存储历史批量中的特征向量。也就是说,在每次计算对比损失时,不仅用当前批量中的特征向量作为负样本,还用队列中的特征向量作为负样本。这样做的好处是,可以大大增加负样本的数量和多样性,从而提高对比学习的难度和效果。队列中的特征向量是用键编码器提取的,所以它们也有一定的一致性。队列是按照先进先出(FIFO)的原则更新的,也就是说,最旧的特征向量会被最新的特征向量替换掉。这样做的好处是,可以保证队列中的特征向量不会过时,而且可以适应数据集中的分布变化。
通过动量法和队列,moco 可以在一个较小的批量大小(比如 256)下,提供足够多(比如 65536)的负样本,从而实现高效且有效的对比学习。moco 在无监督图像表征学习方面取得了很好的效果,并且在多个下游任务上超越了有监督预训练模型。
moco 后来还有两个版本:moco v2 和 moco v3。moco v2 主要是借鉴了 SimCLR 的一些改进点,比如增加了 MLP 头部(head),使用了更强的数据增强方式(比如随机高斯模糊),以及使用了更大更深的编码器(比如 ResNet-50)。这些改进使得 moco v2 的效果有了显著提升。moco v3 主要是在 moco v2 的基础上,增加了一个自监督任务:旋转预测(rotation prediction)。也就是说,在数据增强时,除了裁剪、翻转、颜色变换等操作外,还会对图像进行随机旋转(0°、90°、180°或270°),然后让模型预测旋转角度。这个任务可以让模型学习到图像中物体的方向信息,从而提高图像表征的质量。moco v3 在无监督图像表征学习方面取得了目前最好的效果,并且在多个下游任务上超越了有监督预训练模型。
总结
无监督学习方式是一种不需要标注数据就可以让模型从数据中学习有用信息和结构的方法。对比学习是一种无监督学习方式的方法,它主要关注如何让模型学习到同类实例之间的共同特征,区分非同类实例之间的不同之处。moco 和 SimCLR 都是对比学习的方法,它们都是在 2019 年提出的,并且在无监督图像表征学习方面取得了很好的效果。它们都是基于同一个框架:先对输入图像进行两种不同的数据增强,得到两个增强实例;然后分别用两个编码器提取出两个特征向量;然后用一个目标函数计算两个特征向量之间的相似度,并最大化正样本之间的相似度,最小化负样本之间的相似度。moco 和 SimCLR 的主要区别在于如何获取负样本。SimCLR 是直接用一个大批量的数据来提供负样本,但是需要非常多的显存和计算资源。moco 是利用动量和队列来构建一个动态字典,从而在一个较小的批量大小下,提供足够多的负样本,从而实现高效且有效的对比学习。moco 后来还有两个版本:moco v2 和 moco v3。moco v2 主要是借鉴了 SimCLR 的一些改进点,比如增加了 MLP 头部,使用了更强的数据增强方式,以及使用了更大更深的编码器。moco v3 主要是在 moco v2 的基础上,增加了一个自监督任务:旋转预测。这些改进使得 moco v3 在无监督图像表征学习方面取得了目前最好的效果,并且在多个下游任务上超越了有监督预训练模型。
- 点赞
- 收藏
- 关注作者
评论(0)