SimSiam 的主要创新点在于它在无监督表征学习中使用了极简的 Siamese 网络结构,不需要负样本对、大批量训练或动量编码器来防止模型崩溃。以下是 SimSiam 的几个关键创新点:
无需负样本对:传统的对比学习方法,如 SimCLR,依赖负样本对来防止模型输出趋于常量(即“崩溃”)。SimSiam 则完全不使用负样本对,而是通过其他方式保持表征学习的稳定性。这大大简化了模型设计,并减少了对大批量数据的需求。
无需动量编码器:与 BYOL 等方法不同,SimSiam 不依赖动量编码器来获得稳定的训练效果。BYOL 中的动量编码器用于减少不同批次之间的波动,从而防止模型崩溃。而 SimSiam 通过引入 stop-gradient 操作来代替动量编码器,从而进一步简化了模型。
使用 stop-gradient 操作:SimSiam 中的 stop-gradient 操作是防止模型崩溃的核心。具体来说,模型在更新参数时,将一个视图的梯度计算阻止到另一个视图的输出,从而实现“分离式”优化。作者提出,stop-gradient 操作有效地分离了模型的优化过程,从而避免了输出崩溃到常量。
极简的模型架构:SimSiam 的架构仅由编码器和预测头部组成,不使用额外的对比损失(contrastive loss)或聚类机制。尽管架构简单,但在实验中展示了与更复杂的无监督学习方法相媲美的效果,特别是在 ImageNet 等大规模数据集上的表现。
推广能力强:SimSiam 能够在无需大批量训练的情况下取得良好效果,与 SimCLR 和 SwAV 等需要大批量的模型相比,在资源有限的环境下表现出优势。实验还表明,该方法的迁移学习性能强,在多个下游任务中(如对象检测和分割任务)表现出色。
通过这些创新点,SimSiam 成为一个易于实现且性能良好的无监督表征学习基线模型。它的成功展示了在无监督学习中,Siamese 网络架构本身可能是实现有效表征学习的关键因素。SimSiam 提供了一个重新思考复杂对比学习方法的机会,特别是在模型设计简化和计算效率方面的贡献。
Siamese networks已成为各种最新无监督视觉表征学习模型中的常见结构。这些模型在一定条件下,通过最大化同一图像的两种增强方式之间的相似性,避免崩溃解的出现。在本文中,我们报告了一些令人惊讶的实验结果,表明即使不使用以下方法,简单的Siamese networks也能学习到有意义的表征:(i) 负样本对,(ii) 大批量训练,(iii) 动量编码器。我们的实验表明,崩溃解的确存在于这种损失函数和结构中,但stop-gradient操作在防止崩溃解中起到了关键作用。我们提出了关于stop-gradient含义的假设,并进一步通过验证实验来支持这一假设。我们的“SimSiam”方法在ImageNet及其下游任务上取得了具有竞争力的结果。我们希望这一简单的基准能激励人们重新思考Siamese结构在无监督表征学习中的角色。代码将公开提供。
最近,无监督/自监督表征学习在多个视觉任务上取得了稳步进展,展示了令人鼓舞的结果(例如,[2, 17, 8, 15, 7])。尽管这些方法的初衷各不相同,但通常涉及某种形式的Siamese networks [4]。Siamese networks是一种权重共享的神经网络,应用于两个或多个输入上。它们是比较实体(包括但不限于“对比”)的天然工具。最近的方法将输入定义为同一图像的两种增强方式,并在不同条件下最大化其相似性。
对于Siamese networks而言,一个不希望出现的平凡解是所有输出“崩溃”到一个常量值上。已有一些通用策略来防止Siamese networks崩溃。对比学习(contrastive learning)[16],例如,在SimCLR [8]中实例化,通过拉开不同图像(负样本对)之间的距离,同时拉近同一图像的两种视图(正样本对)之间的距离,来避免常量输出。负样本对从解空间中排除了常量解。聚类(clustering)[5]是另一种避免常量输出的方法,SwAV [7]将在线聚类结合到Siamese networks中。除了对比学习和聚类,BYOL [15]仅依赖正样本对,但在使用动量编码器的情况下不会崩溃。
在本文中,我们报告了一项实验结果,即简单的Siamese networks在没有上述防止崩溃的策略下仍然表现良好。我们的模型直接最大化同一图像的两种视图的相似性,而不使用负样本对或动量编码器。它适用于典型的批量大小,并不依赖大批量训练。我们在图1中展示了这种“SimSiam”方法。
由于概念简单,SimSiam可以作为一个将几种现有方法关联起来的枢纽。简而言之,我们的方法可以被视为“没有动量编码器的BYOL”。与BYOL不同,但与SimCLR和SwAV相似,我们的方法直接在两条分支之间共享权重,因此它也可以被视为“没有负样本对的SimCLR”,以及“没有在线聚类的SwAV”。有趣的是,通过去除其核心组件之一,SimSiam与每种方法都相关联。即便如此,SimSiam不会导致崩溃,并且表现出竞争力。
我们实验证明,崩溃解确实存在,但stop-gradient操作(图1)对于防止此类解至关重要。stop-gradient的重要性暗示了一个不同的潜在优化问题正在被求解。我们假设存在两个隐式变量集,SimSiam表现得像是在交替优化每个变量集。我们提供了概念验证实验来验证这一假设。
我们的简单基准表明,Siamese结构可能是相关方法取得成功的一个重要原因。Siamese networks可以天然引入建模不变性的归纳偏置,因为根据定义,“不变性”意味着对同一概念的两次观测应产生相同的输出。类似于卷积(convolutions)[25],卷积通过权重共享来成功地为建模平移不变性引入归纳偏置,权重共享的Siamese networks可以针对更复杂的变换(例如,增强)来建模不变性。我们希望我们的探索能激励人们重新思考Siamese结构在无监督表征学习中的基本角色。
Siamese networks [4] 是用于比较实体的通用模型。它们的应用包括签名验证 [4]、人脸验证 [34]、跟踪 [3]、一次性学习 [23] 等等。在传统的应用场景中,Siamese networks 的输入来自不同的图像,且相似性由监督信息决定。
对比学习(contrastive learning)的核心思想是吸引正样本对并排斥负样本对 [16]。最近,这种方法在无监督/自监督表征学习中获得了广泛关注 [36, 30, 20, 37, 21, 2, 35, 17, 29, 8, 9]。一些简单且有效的对比学习实例使用了Siamese networks [37, 2, 17, 8, 9]。
在实际应用中,对比学习方法从大量的负样本中获益 [36, 35, 17, 8]。这些样本可以存储在一个内存库中 [36]。在Siamese网络中,MoCo [17] 通过维护一个负样本队列,并将其中一个分支转变为动量编码器,以提升队列的一致性。SimCLR [8] 直接使用当前批次中的负样本,并需要较大的批量大小才能表现良好。
另一类无监督表征学习方法基于聚类 [5, 6, 1, 7]。它们在聚类表示和学习预测聚类分配之间交替进行。SwAV [7] 将聚类融入Siamese网络,通过从一个视图中计算分配,并从另一个视图中预测该分配。SwAV 在每个批次内基于平衡分区约束进行在线聚类,并使用Sinkhorn-Knopp变换 [10] 来求解该约束。
虽然基于聚类的方法没有定义负样本,但聚类中心可以作为负类的原型。与对比学习类似,基于聚类的方法也需要一个内存库 [5, 6, 1]、大批量 [7] 或队列 [7] 来提供足够的样本进行聚类。
BYOL [15] 直接从一个视图预测另一个视图的输出。它是一种Siamese网络,其中一个分支是动量编码器 [15]。根据 [15] 的假设,动量编码器对于避免BYOL崩溃至关重要,并且报告表明,如果移除动量编码器,准确率会大幅下降(0.3% 准确率,见 [15] 的表5)。我们的实验证明,stop-gradient操作才是关键。使用动量编码器可能会掩盖这一发现,因为动量编码器总是伴随着stop-gradient(因为它的参数不会通过梯度更新)。尽管动量编码器的移动平均行为可能在适当的动量系数下提高准确率,但我们的实验表明,它与防止崩溃并无直接关系。
SimCLR、BYOL、SwAV 和 SimSiam 这四种方法在无监督表征学习中使用了Siamese网络结构,但它们在网络架构和训练策略上存在一些关键区别。以下是它们的主要区别:
这四种方法各有优缺点,选择哪种方法取决于具体任务和可用计算资源。SimCLR 更适合有大量计算资源的场景,而 BYOL、SwAV 和 SimSiam 则在一定程度上减少了对大批量和负样本的依赖。
在SimSiam的训练过程中,主要步骤如下:
输入数据的增强: 给定一张输入图像,首先通过数据增强生成两个不同的视图(通常是随机裁剪、翻转、颜色抖动等变换),得到视图 和 。这两个视图来自同一图像,但由于增强操作有所不同。
编码器网络: 两个视图 和 被分别输入到编码器网络 中。编码器网络通常由一个骨干网络(如ResNet)和一个投影MLP头部组成。投影MLP将编码器输出的特征映射到一个较小的向量空间。这两个编码器网络是权重共享的,确保两个视图在同样的特征空间中表示。
预测头部: 经过编码器后,和分别得到输出特征向量 和 。然后,将其中一个特征向量(如 )输入到一个预测MLP 中,得到预测向量 。预测MLP的目标是将 转化为与 相似的特征。
相似性计算: SimSiam的目标是最大化 和 之间的相似性。具体而言,使用负余弦相似度作为损失函数:
由于SimSiam是对称的,同样也计算 和 之间的相似性。最终损失函数 是对称损失的平均:
Stop-Gradient操作: SimSiam中使用了stop-gradient操作,以防止崩溃解的出现。具体来说,在计算相似性时,其中一方的梯度被禁止回传。也就是说,计算 时,将 视为常数,反之亦然。这可以防止网络崩溃到恒定解。
优化: 使用梯度下降(通常是SGD)来最小化上述损失函数。SimSiam不需要动量编码器(如BYOL中的那样)或负样本(如SimCLR中那样),并且不依赖于大批量的训练。
模型更新: 通过反向传播来更新模型参数,直到达到设定的训练轮数或者损失收敛。每次迭代都会将不同图像对的增强视图输入网络,并重复上述步骤。
SimSiam的训练过程关键在于使用Siamese网络结构、stop-gradient操作和预测头部MLP。与传统对比学习方法不同,SimSiam不使用负样本或动量编码器,这使得其结构更加简单。同时,stop-gradient操作防止了网络收敛到恒定输出解,确保特征表示的多样性和稳定性。
在SimSiam方法中,stop-gradient操作是一个关键组件,它在防止模型崩溃到恒定解(即所有输出都相同)的过程中起到了重要作用。以下是对stop-gradient操作的详细说明,包括它的作用原理、实现方式以及为什么它能够防止崩溃解。
stop-gradient操作的目的是在计算梯度时,阻止梯度从某些特定的网络分支中反向传播。具体来说,它将该分支的输出视为一个常量,使得优化过程不会对这个分支的参数产生影响。
在SimSiam中,这意味着在计算两个视图之间的相似性时,对其中一个视图的特征表示(输出向量)不进行梯度更新。
在SimSiam中,我们有两个输入视图 和 。这两个视图经过编码器和投影头后,分别产生输出特征向量 和 。之后,我们使用预测头部 将其中一个特征向量 转换为预测向量 ,然后计算 与 的相似性。Stop-Gradient的具体实现步骤如下:
具体的损失函数如下:
Siamese网络在直接最大化两个视图的相似性时,存在一个简单的崩溃解,即输出恒定向量。这种情况下,两个视图的输出会趋向于相同的恒定值,从而导致模型失去对输入数据的区分能力。引入stop-gradient操作有以下几个防止崩溃的原因:
引入非对称性:如果没有stop-gradient,优化过程会试图在同一时间内同时优化 和 (以及 和 )。这会导致一种模式:模型可以找到一个容易的解,即将所有输出收敛到相同的恒定值。stop-gradient通过阻止梯度回传,使得优化过程变成非对称的,这使得模型不能简单地收敛到恒定解。
间接逼近另一个优化目标:引入stop-gradient之后,优化问题可以被视为一种交替优化问题。每次迭代只优化 ,而不是同时优化 和 。这种优化方式可以避免模型直接朝着输出恒定解的方向收敛。
避免梯度消失:当所有特征向量都崩溃到同一值时,梯度可能趋近于零,导致训练停滞。而stop-gradient的操作使得在某一分支上的输出保持稳定,另一个分支则试图去匹配这个输出,保证了梯度的多样性,防止完全消失。
在一些对比学习方法中,防止崩溃解依赖于负样本(如SimCLR)或动量编码器(如BYOL)。SimSiam通过stop-gradient操作避免了这些额外的复杂性。具体来说:
Stop-gradient操作在SimSiam中扮演了防止模型崩溃的关键角色。通过选择性地阻止部分梯度的回传,它引入了非对称性,避免了模型朝着平凡的恒定解收敛。这使得SimSiam可以在没有负样本和动量编码器的情况下,有效地进行无监督表示学习,并取得与其它复杂方法相媲美的性能。
在SimSiam中,预测头(Prediction MLP)是一个关键组件,它的主要作用是在两个编码器输出之间进行特征转换,以防止崩溃解(Collapse Solution)。具体来说,预测头帮助模型学习到更加有区分性的表示,从而提升模型的性能。以下是预测头在SimSiam中的具体作用和意义:
在SimSiam中,模型的目标是最大化同一图像的两个不同增强视图之间的相似性。这种设计存在一个潜在风险:如果没有预测头,模型可能会快速收敛到一个崩溃解,即所有输出都收敛到一个常量值(例如,全零或相同的常量向量)。这种情况下,模型失去了区分不同输入的能力,不能学习到有用的特征表示。
预测头通过引入一个非线性转换,使得模型在两个分支之间存在一定的“错位”,从而避免了崩溃。具体来说,它增加了学习的难度,使得网络不能简单地通过恒定输出来最小化损失。
预测头通常是一个多层感知器(MLP),包括一个或多个全连接层(通常使用ReLU激活函数)。其主要目的是将编码器输出特征 转换为另一个空间中的特征 。这种非线性的特征变换增加了模型的灵活性,允许模型在特征空间中学习更丰富的表示。
具体地,预测头接收来自编码器的输出特征 ,然后通过一系列非线性变换得到预测特征 。SimSiam的损失函数是基于预测特征 与编码器特征 之间的相似性来计算的:
预测头的存在也引入了不对称性,这对于SimSiam非常重要。由于SimSiam没有负样本来拉开不同样本之间的距离,它完全依赖于图像的不同增强视图之间的相似性学习。在计算损失时,预测头仅在一个分支上使用,而另一个分支的编码器输出被stop-gradient操作冻结。这样的设计形成了一个不对称结构,使得模型能够在没有负样本的情况下有效地学习特征表示。
预测头的存在还起到调节特征表示的作用。它使得编码器产生的特征不是直接用于相似性计算,而是经过一个额外的预测步骤。这种设计类似于BYOL中的动量编码器(Momentum Encoder),起到防止模型直接通过简单的恒定输出来学习特征的作用。预测头使得模型在两个分支上产生的表示不完全相同,从而有效地鼓励了特征多样性。
由于预测头增加了网络的层数和复杂性,它对编码器的学习产生了一定的缓冲作用。这意味着编码器可以更好地集中在学习输入图像的高层次特征,而预测头则负责将这些特征变换到一个更适合相似性度量的空间中。这种分工有助于提高模型在无监督学习中的稳定性和有效性。
在SimSiam中,预测头的主要作用可以概括为以下几点:
因此,预测头是SimSiam能够在简单结构下成功实现无监督学习的一个关键组件。
SimSiam作为一种无监督学习方法,以其简单的结构和出色的性能吸引了广泛关注。虽然SimSiam已经展示了它的有效性,但仍然有一些潜在的改进方向可以探索,以进一步提升它的表现或扩展其应用范围。以下是一些可能的改进方向:
尽管SimSiam以其简洁性和有效性著称,以上改进方向可以帮助进一步提升它的性能或扩展其应用场景。无论是在模型结构、相似性度量、优化策略还是多任务学习方面,探索这些方向都有助于增强SimSiam在无监督表征学习中的实用性和通用性。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!