1.SimMatch:基于相似度匹配的半监督学习
# 摘要
在计算机视觉和机器学习研究领域,使用少量标记数据进行学习一直是一个长期存在的问题。本文提出了一种新的半监督学习框架 SimMatch,该框架同时考虑了语义相似度和实例相似度。在 SimMatch 中,一致性正则化将同时应用于语义级和实例级。鼓励同一实例的不同增强视图具有与其他实例相同的类预测和相似关系。接下来,我们实例化一个标记的内存缓冲区,以充分利用实例级的基本事实标签,并弥合语义和实例相似性之间的差距。最后,我们提出了一种可使这两个相似点相互同构变换的展开和聚合运算。通过这种方式,语义伪标签和实例伪标签可以相互传播,从而生成更高质量和更可靠的匹配目标。大量的实验结果表明,SimMatch 提高了跨不同基准数据集和不同设置的半监督学习任务的性能。值得注意的是,在 400 轮次的训练中,SimMatch 在 ImageNet 上 1% 和 10% 的标记示例中获得了 67.2% 和 74.4% 的 Top-1 准确性,显著优于基线方法,优于以前的半监督学习框架。代码和预先训练的模型可在 https://github.com/KyleZheng1997/simmatch 获得。
# 1. 导语
得益于过去几十年大规模标注数据集的可用性和不断增长的计算资源,深度神经网络已经证明了它们在各种视觉任务上的成功 [19,21,22,26,36,48,56]。然而,在现实场景中收集大量的标记数据是非常昂贵的。在计算机视觉和机器学习研究领域,使用少量标记数据进行学习一直是一个长期存在的问题。在各种方法中,半监督学习 (SSL)[12,44,51,63] 借助海量的无标记数据,是一种有效的解决方案,并取得了显著的性能。
图 1 所示。SimMatch 的草图。全连通层向量可以被视为每个类别的语义代表或类中心。然而,由于标记样本有限,语义级信息并不总是可靠的。在 SimMatch 中,我们同时考虑了实例级和语义级的信息,并采用带标签的内存缓冲区来充分利用实例级的 ground truth 标签。
一种简单但非常有效的半监督学习方法是在大规模数据集上对模型进行预训练,然后通过使用少量标记样本对预训练的模型进行微调来转移学习到的表示。由于自监督学习的最新进展 [10,14,15,20,24,25,52],这种预训练和微调管道在 SSL 中表现出了良好的性能。大多数自我监督学习框架关注借口任务的设计。例如,实例区分 [53] 鼓励同一实例的不同视图共享相同的特性,而不同实例应该具有不同的特性。基于深度聚类的方法 [3,9,10] 期望将同一实例的不同增强视图分类到同一聚类中。然而,这些借口任务大多是在完全没有监督的情况下设计的,没有考虑到手头为数不多的标记数据。
目前流行的方法不是独立的两阶段预训练和精细调优,而是直接将标记数据与伪标记 [33] 或一致性正则化 [45] 联合在一个特征学习范式中进行。这些方法背后的主要思想是训练带有标记样本的语义分类器,并使用预测的分布作为未标记样本的伪标签。这样,伪标签一般由弱增广视图 [5,46] 或多个强增广视图 [6] 的平均预测产生。目标将由不同的强增强视图和伪标签之间的交叉熵损失来构建。还需要注意的是,伪标签通常会被锐化或由 argmar 操作,因为每个实例都被归入一个类别。然而,当标注数据非常有限时,语义分类器就不再可靠;应用伪标签方法会导致 “过度自信” 问题 [13,59],这意味着模型将适合自信但错误的伪标签,导致性能较差。
在本文中,我们介绍了一种新的半监督学习框架 SimMatch,如图 1 所示。在 SimMatch 中,我们将两者连接起来,并提出在不同的扩展中同时匹配语义级和实例级的相似关系。具体来说,我们首先要求强增强视图与弱增强视图具有相同的语义相似性 (即标签预测); 此外,我们还鼓励强增强与弱增强具有相同的实例特征 (即实例之间的相似度),以获得更多的内在特征匹配。此外,不同于以往的工作将弱增强视图的预测简单地视为伪标签。在 SimMatch 中,语义伪标签和实例伪标签可以通过实例化一个保存所有标记示例的内存缓冲区进行交互。这样,通过引入聚合和展开技术,可以实现这两个相似点之间的同构转换。这样语义伪标签和实例伪标签就可以相互传播,从而生成更高质量、更可靠的匹配目标。大量的实验证明了 SimMatch 在不同设置下的有效性。我们的贡献可以概括如下:
・我们提出了一种新的半监督学习框架 SimMatch,它同时考虑语义相似度和实例相似度。
・为了传递这两种相似之处,我们利用一个标记的内存缓冲区,以便语义和实例伪标签可以通过聚合和展开技术相互传播。
・SimMatch 为半监督学习建立了一种新的最先进的性能。SimMatch 只训练了 400 个阶段,在 ImageNet 上有 1% 和 10% 的标记示例,获得了 67.2% 和 74.4% 的 Top-1 准确性。
# 2. 相关工作
# 2.1 半监督学习
一致性正则化是半监督学习中广泛采用的一种方法。其主要思想是强制模型为同一实例的不同受扰动版本输出一致的预测。例如,[32,45] 通过最小化两个变换视图的预测概率分布的均方差来达到这种一致性要求。在这种情况下,转换既可以是特定领域的数据增强 [5,6,46],也可以是网络中的一些正则化技术 (例如,删除 [47] 和随机最大池 [45])。此外,[32] 还提出了一种时间集合策略,将多个先前网络的预测集合起来,使得预测分布更加可靠。Mean Teacher [50] 进一步扩展了这一想法,用指数移动平均 (EMA) 模型的输出取代了聚合预测。
MixMatch [6]、ReMixMatch [5] 和 FixMatch [46] 是三种基于增强锚定的方法,它们充分利用了增强一致性。具体来说,MixMatch 采用多个强增强视图的锐化平均预测作为伪标签,并利用 MixUp 技巧 [60] 进一步增强伪标签。ReMixMatch 通过生成带有弱增强视图的伪标签改进了这一思想,还引入了一种分布对齐策略,该策略鼓励伪标签分布与地面真实类标签的边缘分布相匹配。FixMatch 简化了这些想法,只有在模型产生高置信度伪标签时,才保留未标记的图像。尽管 FixMatch 很简单,但它在基于增强锚定的方法中取得了最先进的性能。
# 2.2 自监督预训练
除了典型的半监督学习方法外,自监督和对比学习 [14,25,53] 也在这一研究领域获得了很大的关注,因为使用标记样本对预训练模型进行微调显示了有前景的分类结果,特别是 SimCLR v2 [15] 表明,大 (深度和广度) 预训练模型是强半监督学习者。大多数对比学习框架采用实例辨别 [53] 作为借口任务,将同一实例的不同增强视图定义为正对,而将不同实例的视图采样形成负对。但是,由于相似样本的存在,将不同实例作为负对处理会导致类冲突问题 [2],不利于下游任务 (特别是分类任务)。以前的一些工作通过无监督聚类解决了这个问题 [9,10,35,61],将相似的样本聚到同一个类中。还有一些方法设计了各种消极自由借口任务 [17,24,28,29,62] 来避免类冲突问题。基于聚类的方法和基于无负极性的方法对于下游分类任务都有显著的改进。
图 2。SimMatch 伪标签生成过程的概述。SimMatch 将使用弱增强视图生成语义伪标签和实例伪标签。具体来说,我们将首先通过类中心和标签嵌入计算语义和实例相似度,然后使用展开和聚合操作将这两个相似度融合,最后得到伪标签。请在下面的方法部分查看更多详细信息。
CoMatch [34] 结合了一致性正则化和对比学习的思想,通过两个类概率分布之间的相似性来衡量两个实例的目标相似性,在半监督学习中取得了目前最先进的性能。然而,它对超参数非常敏感,对于不同的数据集和设置,最佳温度和阈值是不同的。与 commatch 相比,SimMatch 速度更快、健壮性更强、性能更高。
# 3. 方法
我们将半监督图像分类问题定义如下。给定一批 B 标记的样本,我们随机应用弱增强函数 (例如,只使用翻转和裁剪) Tw (-) 来获得弱增强样本。然后,使用基于卷积神经网络的编码器 F (・) 从这些样本中提取特征信息,即 h= F (T (x))。最后,利用一个全连接的类预测头 φ(・) 将 hb 映射为语义相似度,可以写成:p = φ(h)。标记样本可以通过与真实标签的交叉熵损失直接优化:
(1)
让我们定义一批 未标记的样本 。按照 [5,6],我们随机应用弱增广和强增广 Tw (-), Ts (-),采用与标记样本相同的处理步骤,得到弱增广样本 pW (伪标签) 和强增广样本 p * 的语义相似性。那么无监督分类损失可以定义为这两个预测之间的交叉误差:
(2)
其中 r 为置信阈值。在 [46] 之后,我们只保留伪标签中最大类概率大于 t 的未标记样本。DA (・) 表示来自 [5] 的平衡伪标签分布的分布对齐策略。我们只需要遵循 [34w] 的实现,在这里我们保持 的移动平均值,并使用 调整当前的 p。另外请注意,我们不采用锐化版或 one-hot (独热) 的, 将直接作为伪标签。
# 3.2 实例相似性匹配
在 SimMatch 中,我们还考虑了先前讨论过的实例级相似度。鼓励强增强视图与弱增强视图具有相似的相似度分布。假设我们有一个非线性投影头 g (・),它将表示 h 映射到低维嵌入。遵循基于锚定的方法,我们使用 和 来表示来自弱增强视图和强增强视图的嵌入。现在,让我们假设我们对一堆不同的样本有 K 个弱增广嵌入 $\lbrace z_k: k ∈(1,…, K)\rbrace $,我们通过使用相似度函数 来计算 和第 i 个实例之间的相似度,它表示 归一化向量。softmax 层可以处理计算出的相似度,然后产生一个分布:
其中 为控制分布锐度的温度参数。另一方面,我们可以计算强增广视图 和 之间的相似度,如。得到的相似度分布可以写成:
最后,通过最小化 和 之间的差异来实现一致性正则化。这里我们采用交叉熵损失,它可以表述为:
请注意,实例一致性正则化只应用于未标记的示例。我们模型的总体训练目标是:
其中 和 是控制两种损失权重的平衡因素。
# 3.3 通过 SimMatch 进行标签传播
虽然我们的总体训练目标也考虑了实例级的一致性正则化,但是实例伪标签 的生成仍然是完全无监督的,这绝对是对标记信息的浪费。为了提高伪标签的质量,在本节中,我们将演示如何在实例级别上利用标记信息,并介绍一种允许语义相似性和实例相似性相互交互的方法。
我们实例化了一个带标签的内存缓冲区来保存所有带注释的示例,如图 2 所示 (红色分支)。这样,我们在 Eq.(3) 和 Eq.(4) 中使用的每个 都可以分配给一个特定的类。如果我们将 中的向量解释为 “居中” 类引用,那么标记内存缓冲区中的嵌入可以被视为一组 “单独的” 类引用。
通过给定一个弱增广样本,首先计算语义相似度 和实例相似度 。(注意 L 通常比 K 小得多,因为每个类至少需要一个样本。) 为了用 标_w 定,我们需要将 展开到 K 维空间中,我们将其表示为 。我们通过为每个标记的嵌入匹配相应的语义相似度来实现这一点:
其中 class (・) 是返回基础真值类的函数。具体来说, 表示内存缓冲区中第 j 个元素的标签, 表示第 i 个类。现在,我们通过 缩放 来重新生成校正后的实例伪标签,可以表示为:
将校正后的实例伪标签 作为新目标,取代式 (5) 中的旧目标 。另一方面,我们也可以利用实例相似度来调整语义相似度。要做到这一点,我们首先需要将 q 聚合到 L 维空间中,我们将其标记为 。我们通过对具有相同基础真理标签的实例相似性求和来实现这一点:
现在,我们用 平滑 ,重新生成调整后的语义伪标签,可以写成:
其中 α 是控制语义和实例信息权重的超参数。同理,调整后的语义伪标签将取代公式 (2) 中原来的 p。通过这种方式,伪标签 p 和 q 都将包含语义级和实例级信息。正如我们在图 3 中所示,当语义和实例相似性相似时,这意味着这两个分布彼此的预测一致,那么结果伪标签将更加清晰,并为某些类产生高置信度。另一方面,如果这两个相似点不同,结果伪标签将更平坦,不包含高概率值。在 SimMatch 中,我们分别对 q 和 p 采用了缩放和平滑策略,我们也尝试了这两种策略的不同组合,详情请参见我们的烧蚀研究部分。
图 3。标签传播背后的直觉。如果语义和实例相似,结果伪标签将更加清晰,并为某些类产生高置信度。当这两个相似点不同时,结果伪标签会更平坦。
# 3.4 高效内存缓冲区
如前所述,SimMatch 需要一个内存缓冲区来保存标记示例的嵌入。在这样做的过程中,我们需要同时存储特征嵌入和基础真实标签。具体来说,我们定义了一个特征内存缓冲区 $Q_f} ∈ R $ 和一个标签内存缓冲区 $Q_l ∈ R^{K × l} $ ,其中 K 为可用的标注样本数量,D 为嵌入大小。在我们的实验中最大的 K 大约是 (ImageNet 10% 设置),这只需要 64M GPU 内存用于 。对于 ,我们只需要为每个标签存储一个标量,聚合和展开操作可以通过 和 函数轻松实现,这应该已经在最近的深度学习库中得到了有效的实现 [1,42]。在这种情况下, 的成本只比 IM GPU 内存 (K = ) 低,这几乎可以忽略不计。
根据 [25] 的说法,内存缓冲区的快速变化特性将大大降低性能。在 SimMatch 中,我们针对不同的缓冲区大小采用了两种不同的实现。当 K 较大时,我们遵循 MoCo [25] 来利用一个基于师生的框架,我们将其表示为 和 。在这种情况下,标记示例和强增强样本将被传递到 中,弱增强样本将被输入到 中生成伪标签。 的参数将按以下方式更新:
另一方面,当 K 较小时,不需要维护教师网络,我们简单地采用时间集成策略 [32,53] 来平滑内存缓冲区中的特征,可写为:
在这种情况下,所有的样本将直接传递到相同的编码器。SimMatch 的师生版已在算法 1 中说明。
# 4. 实验
在本节中,我们将首先在各种数据集和设置上测试 SimMatch,以显示其优越性,然后我们将消融每个组件,以验证框架中每个组件的有效性。
# 4.1 CIFAR-10 和 CIFAR-100
表 1. 在 CIFAR-10 和 CIFAR-100 上使用不同的标签设置尺寸进行精度比较 (平均值和标准超过 5 次)。
我们首先在 CIFAR-10 和 CIFAR100 [31] 数据集上评估 SimMatch。CIFAR-10 包含 60000 张 32x32 彩色图像,分为 10 个类,每类 6000 张图像。有 50000 张训练图片和 10000 张测试图片。CIFAR-100 与 CIFAR-10 类似,只是它有 100 个类,每个类包含 600 张图像。每个类别有 500 张训练图片和 100 张测试图片。对于 CIFAR-10,我们从训练集中随机抽取 4、25 和 400 个样本作为标记数据,并使用训练集的其余部分作为未标记数据。对于 CIFAR-100,我们执行相同的实验,但每个类使用 4、25 和 100 个样本。
实现细节。我们的大多数实现都遵循 [46]。具体来说,我们分别为 CIFAR-10 和 CIFAR-100 采用 WRN28-2 和 WRN28-8 [57]。我们使用带有 Nesterov 动量的标准 SGD 优化器,并设置初始学习率为 0.03。对于学习率计划,我们使用余弦学习率衰减 [38],它将学习率调整为 ,其中 s 是当前的训练步骤,S 是训练步骤的总数。我们还使用模型参数的指数移动平均报告最终性能。注意,我们对两个数据集使用了相同的超参数集 $ α = 0.9$ , , , , , ) 。对于分布对齐,我们累积过去 32 步 来计算移动平均 。我们采用时间集合内存缓冲区 [32],因为这两个数据集的大多数设置都有一个相对较小的 k。对于强增强和弱增强的实现,我们严格遵循 FixMatch [46]。
结果。结果已在表 1 中表明。对于基线,我们主要考虑方法 I-Model [32],伪标签 [33],Mean Teacher [50], UDA [54], Mix 匹配 [6]、ReMixMatch [5]、FixMatch [46] 和 CoMatch [34]。我们计算精度的平均值和方差,当训练 5 个不同的 “折叠” 标签数据。正如我们所看到的,SimMatch 在各种设置上实现了最先进的性能,特别是在 CIFAR-100 上。对于 CIFAR-10, SimMatch 在 40 个标签设置上有很大的性能提高,但在 250 和 4000 标签设置上的改进相对较小。我们怀疑这是因为 95% ~ 96% 的准确性已经非常接近监督性能
# 4.2 ImageNet-1k
表 2.ImageNet 上 1% 和 10% 标记示例的实验结果。
我们还在大规模 ImageNet-1k 数据集 [19] 上进行了 SimMatch,以显示其优越性。具体来说,我们在 1% 和 10% 的设置下测试我们的算法。我们遵循与 CoMatch [34] 中相同的标签生成过程,其中每个类将分别为 1% 和 10% 的设置选择 13 和 128 个标记样本。
实现细节。对于 ImageNet-1k,我们采用 ResNet-50 [27],并使用具有 Nesterov 动量的标准 SGD 优化器。我们对模型进行 5 个周期的预热,直到它达到初始学习率 0.03,然后余弦衰减到 0。我们对 1% 和 10% 的设置使用相同的超参数集 ( = 10, =5, = 0.1, = 0.9, = 0.7, =5, = 0.999, = 64)。我们保留过去的 256 步 用于分布对齐。我们选择了学生 - 教师版本的内存缓冲区,并在学生网络上测试了性能。对于强增强,我们在 MoCo v2 [16] 中遵循相同的策略。
结果。我们在表 2 中显示了结果。可以看到,在 400 课时的训练下,SimMatch 在 1% 和 10% 的标记样例上的 Top-1 准确率分别为 67.2% 和 74.4%,显著优于之前的方法。FixMatch-EMAN [8] 在 10% 设置下的性能略低 (74.0%)。然而,它需要 800 代的自监督预训练 (MoCoEMAN), SimMatch 可以直接从头开始训练。最新的工作 PAWS [4] 在 300 课时的训练下,在 1% 和 10% 的设置下达到 66.5% 和 75.5% 的 Top-1 准确率。然而,PAWS 需要多作物策略 [10] 和 970 x 7 标记的例子来构建支持集。在每个时代,PAWS 的实际训练 FLOPS 是 SimMatch 的 4 倍。因此,报告的 300 epoch PAWS 应该具有与 1200 epoch SimMatch 相似的训练 FLOPS。由于 GPU 资源有限,我们无法将这项研究推进到这样的规模,但由于 SimMatch 在 1% 设置下,用 1/3 训练成本 (400 epoch) 超过了 PAWS,我们相信它已经可以证明我们方法的优越性
表 3. 使用 ImageNet 预训练的 ResNet-50 转移学习性能。根据 [14,24] 的评估协议,我们报告了除宠物和鲜花以外的 Top-1 分类精度,我们报告的是每类平均精度。
迁移学习。我们还评估了学习到的多个下游分类任务的表示。我们遵循 [14,24] 中描述的线性评估设置。具体来说,我们训练了一个 l2 正则化多项式逻辑回归分类器,从冻结的预训练网络 (400 期 10% SimMatch) 提取特征,然后我们使用 L-BFGS [37] 优化 softmax 交叉熵目标,我们没有应用数据增强。我们从验证分段中选取最佳 l2 正则化参数和学习率,并将其应用于测试集。在这个基准测试中使用的数据集如下:CIFAR-10 [31], CIFAR-100 [31], 食品 101 [7], 汽车 [30],DTD [18],宠物 [41],鲜花 [40]。结果如表 3 所示。我们可以看到,SimMatch 仅用 400 个 epoch 的训练,就在 CIFAR-10, CIFAR-100, Cars 和 Flowers 数据集上取得了与 BYOL 相当的最佳性能,并明显优于 SimCLR, MoCo V2 和有监督的基线。这些结果进一步验证了 SimMatch 在分类任务上的表示质量。
表 4. 不同方法的 GPU 小时每 epoch。在 8 个 NVIDIA V100 gpu 上测试速度。
训练效率。接下来,我们测试 FixMatch、CoMatch 和 SimMatch 的实际训练速度。结果如表 4 所示,SimMatch 比 FixMatch 和 CoMatch 快近 17%。在 FixMatch 中,弱增强的 11 将被传递到在线网络中,这将为额外的计算图消耗更多的资源。但是在 SimMatch 中,U 只需要传入 EMA 网络,所以不需要保留计算图。与 CoMatch 对 EMA 网络需要两次向前通过 (强增强和弱增强 1U) 相比,SimMatch 只需要一次通过。此外,CoMatch 采用 4 个内存库 (258M memory) 计算伪标签;对于 1% 和 10% 的标签,SimMatch 只需要两个 6.4M / 64M 内存的内存库,因此伪标签的生成也会更快。
# 4.3 消融实验
图 4.(a) 伪标签的准确性 - p 的置信度高于阈值的准确性,(b) 未标记样本的准确性 - 所有不考虑阈值的准确性,(c) FixMatch 和 SimMatch 在 1% 和 10% 设置下的验证准确性。
图 5. 改变 t 和 a 的结果 (ImageNct-1k 1% - 100 cp)
表 5 所示。去除尺度和平滑策略的结果。(图片网 - 1k 1% - 100 EP)
表 6 所示。不同组合的缩放和平滑策略的结果。(ImageNet-1k 1% - 100ep)
Pseudo-Label 准确性。首先,我们想展示 SimMatch 的伪标签准确性。在图 4 中,我们可视化了 FixMatch 和我们的方法的训练进度。SimMatch 总是可以生成高质量的伪标签,并且在未标记的样本和验证集上始终具有更高的性能。
温度。Eq.(4) 和 Eq.(3) 中的温度 控制了实例分布的锐度。(注意 等价于 运算)。我们在图 5a 中展示了不同 t 值的变化结果。可以看出,当 $ t = 0.1$ 时,Top-1 精度最好,当 时,Top-1 精度略有下降。这与最近的对比学习研究一致, 通常是最佳温度 [10,11,14,15]。
平滑的参数。我们还在图 5b 中展示了不同光滑参数 a Eq.(10) 的有效性。具体来说,我们对 a 扫过 [0.8,0.9,0.95,1.0],可以清楚地看到 a = 0.9 达到了最好的结果。注意,a = 1.0 相当于直接取等式 (2) 的原始伪标签 pW,这会导致 1.8% 的性能下降。
标签传播。接下来,我们要验证标签传播的有效性。结果如表 5 所示。当我们删除 p 时,a = 1.0 也是一样的情况,所以我们不再进一步讨论这个设置。如果我们删除 ,这意味着投影头将以完全无监督的方式进行训练,如 [62] 所示,我们可以看到性能明显低于标准 SimMatch,这表明了我们的标签传播策略的重要性。
传播策略。然后,我们尝试了缩放和平滑策略的不同组合来生成。从表 6 可以看出,对 p 取平滑,对 q 取缩放,得到的结果最好。我们可能会注意到,对 p 和 q 应用平滑可以获得相似的性能 (61.5%)。然而,平滑策略将引入一个平滑参数。因此,为了保持我们的框架简单,我们更倾向于选择 q 的缩放策略。
实例匹配损耗设计。为了验证实例相似度匹配项 的有效性,我们将 替换为 InfoNCE 和 SwAV 。当使用 InfoNCE 损耗时,我们将温度扫过 [0.07,0.1,0.2]。在这种情况下,我们能得到的最佳结果是 53.5%,比 SimMatch 低 8.2%。这是由于分类问题和 InfoNCE 目标之间的自然冲突。具体来说,分类问题的目的是将相似的样本分组在一起,而 InfoNCE 的目的是区分每个实例。在使用 SwAV 时,我们尝试将原型数量设置为 1000、3000 和 10000。最终得到的最好结果为 49.7%,比 SimMatch 降低了 12%。SwAV 的目标是将样本平均分配给每个原型,防止模型崩溃。然而,分布对齐也有类似的目标,SimMatch 在 Eq (2) 中采用了这一目标。此外,SwAV 损失将以完全无监督的方式进行训练,这将失去标签的力量。 的优点是标签信息可以很容易地与实例相似度相配合。
# 5. 结论
在本文中,我们提出了一种新的半监督学习框架 SimMatch,该框架同时考虑了语义级和实例级的一致性正则化。我们还引入了一个标记内存缓冲区,以充分利用实例级的数据注释。最后,我们定义的展开和聚合操作允许标签在语义级和实例级信息之间传播。大量的实验证明了我们的框架中每个组件的有效性。在 ImageNet-1K 上的结果展示了半监督学习的最先进性能。