本文将从这三个方面进行介绍:
- MRL(Mytroyoshka Representation Learning) 和 MRL-E(Mytroyoshka Representation Learning-Efficient)的原理
- 在分类和检索任务上的应用
- 2DMSE 2维MRL
MRL概述:
insight:可变长的表征向量 以适应不同算力资源限制的下流任务
MRL对训练框架尽可能的减少修改 在推理阶段没有增加额外开销
MRL在低维度上的表征能力至少与独立训练的低维表征模型一样准确
(a)在相同的精度水平下,ImageNet-1K 分类任务中最多可以减少 14 倍的嵌入尺寸
(b)在 ImageNet-1K 和 4K 上的大规模检索任务中最多可以实现 14 倍的实际速度提升
(c)对于长尾少样本分类任务,最多可以提高 2% 的准确性
此外,MRL 展现了其在跨多种模态的大规模数据集上的无缝扩展能力,包括视觉(如 ViT、ResNet)、视觉+语言(如 ALIGN)以及语言(如 BERT)。这表明 MRL 不仅适用于单一类型的模型,而且可以在不同领域和不同类型的数据上发挥作用。
MRL原理:
MRL通过显式优化O(log(d))个较低维度向量的方式,在同一个高维向量内学习不同容量的表示,因此得名套娃。MRL可以适应任何现有的pipline,并且很容易扩展到计算机视觉和自然语言处理中的许多标准任务。 下图说明了套娃表示学习(MRL)的核心思想。套娃表示的前m维,m ∈ [d],是一个信息丰富的低维向量,无需额外的训练成本,其准确性等同于独立训练的m维表示。套娃表示中的信息量随维度增加而增长,从而创建了一个从粗到细粒度的表示,这一切都不需要显著的训练或额外的部署开销。MRL赋予表示向量所需的灵活性和多保真度,确保近乎最优的准确性与计算之间的权衡。凭借这些优势,MRL可以根据准确性和计算约束实现自适应部署。
此公式描述了 Matryoshka 表示学习(MRL)的优化目标。这个目标是通过最小化一个损失函数来实现的,该损失函数衡量了模型在不同嵌入维度上的预测与真实标签之间的差异。
整个公式的目标就是调整网络 F的参数 θF 和各个线性分类器的权重 W(m),使得在不同粒度(即不同的 m值)下,模型能够对数据做出尽可能准确的分类预测。这样做的好处是可以让模型在不同的任务中灵活地利用不同级别的特征表示,并且可以在资源有限的情况下进行有效的部署。
Algorithm 1 Pytorch code for Matryoshka Cross-Entropy Loss
class Matryoshka_CE_Loss(nn.Module):
def __init__(self, relative_importance, **kwargs):
super(Matryoshka_CE_Loss, self).__init__()
self.criterion = nn.CrossEntropyLoss(**kwargs)
self.relative_importance = relative_importance # usually set to all ones
def forward(self, output, target):
loss=0
for i in range(len(output)):
loss+= self.relative_importance[i] * self.criterion(output[i], target)
return loss
两种模式MRL和MRL-E
MRL-E共享前M维的权重,内存节省一半,效果略有下降
我们以一个图像分类任务为例,其pipeline如下。图片首先通过一个Feature extractor提取特征,flatten后用一个W(m)来映射到表征空间,再接入一个classifier(也是个全连接层)得到该图片在类别上的概率分布。用这个方法训练,一次训练我们只能得到一种维度的图片表征(如图中是2048维)
Original:
MRL:
为了一次训练获得不同维度的图片表征,最简单粗暴的方法就是我们可以用多个W(m)及对应的Classifier进行联合训练。但由于W(m)和classifier多了,模型会大一些。
MRL-E:
对上面做了一个优化,它通过共享前m维的权重,使用一组W(m)和Classifier实现多种尺度的特征训练。pipeline如下图所示(图中同个颜色表示共享权重)。实现的核心就是:对同一组W(m)和Classifier进行分片,从而实现不同维度的表征训练。MRL-E 的内存相比MRL占用缩减一半,并且支持信息扩散到所有维度,性能略微下降。
Algorithm 2 Pytorch code for MRL Linear Layer
class MRL_Linear_Layer(nn.Module):
def __init__(self, nesting_list: List, num_classes=1000, efficient=False, **kwargs):
super(MRL_Linear_Layer, self).__init__()
self.nesting_list=nesting_list # set of m in M (Eq. 1)
self.num_classes=num_classes
self.is_efficient=efficient # flag for MRL-E
if not is_efficient:
for i, num_feat in enumerate(self.nesting_list):
setattr(self, f"nesting_classifier_{i}", nn.Linear(
num_feat, self.num_classes, **kwargs))
else:
setattr(self, "nesting_classifier_0", nn.Linear(self.
nesting_list[-1], self.num_classes, **kwargs)) #Instantiating one nn.Linear layer for MRL-E
def forward(self, x):
nesting_logits = ()
for i, num_feat in enumerate(self.nesting_list):
if(self.is_efficient):
efficient_logit = torch.matmul(x[:, :num_feat],
(self.nesting_classifier_0.weight[:, :
num_feat]).t())
else:
nesting_logits.append(getattr(self, f"nesting_classifier_{i}")(x[:, :num_feat]))
if(self.is_efficient):
nesting_logits.append(efficient_logit)
return nesting_logits
MRL应用:
MRL的作用:MRL允许在相同的高维向量内学习不同层次的表示,从而提供了一种灵活的方式来根据数据和任务需求进行自适应部署。
高效分类与检索:
在推理阶段,高效的分类和检索不仅需要考虑固定的深度特征化成本,还要考虑随标签空间大小和数据量增长的搜索成本。虽然有些技术可以解决这些问题,例如使用近似最近邻搜索(ANNS)减少对标签数量的线性依赖,但对于大数据集来说,仍然存在内存和计算资源的压力。
MRL通过学习多层次的嵌套表示来应对这种挑战。低维度的套娃表示与独立训练的对应表示一样准确,但不需要多次昂贵的前向传递。这样,在执行检索时,可以根据需要使用不同级别的表示,而无需重新编码整个数据库。这种方法提供了高维向量与其高效索引之间的中间抽象层,使得即使在大规模下也能实现有效的检索。MRL优化的是O(log(d))个嵌套维度,而不是全部的O(d)维度,同时它能够在优化后的表示之间准确地插值信息,从而使大规模的应用变得可行。
总之,MRL提供了一种新颖的方法,可以在保持准确性的同时,提高在大规模数据集上进行分类和检索的效率。
具体实验:
图像分类
- ResNet50 on ImageNet-1K:ResNet50是一种深度残差网络,它在ImageNet-1K数据集上被广泛用于图像分类任务。ImageNet-1K是一个大规模的图像数据集,包含1000个类别的图像。
- ViT-B/16 on JFT-300M:ViT-B/16是一种基于Transformer的视觉模型(Vision Transformer),在JFT-300M数据集上进行训练。JFT-300M是一个非常大的图像数据集,包含大约3亿张带有标签的图像。
视觉与语言的对比学习
- ALIGN模型:ALIGN(Aligned Multimodal Representations)模型结合了视觉和语言信息。它使用ViT-B/16作为视觉编码器,BERT作为语言编码器,并在ALIGN数据集上进行训练。这个模型旨在学习跨模态的一致表示。
掩码语言建模
- BERT on English Wikipedia and BooksCorpus:BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,它在英文wiki和BooksCorpus数据集上进行掩码语言建模任务。掩码语言建模是一种自监督学习方法,通过预测文本中的掩码词来学习语言表示。
没有为所有的MRL实验寻找最佳超参数,而是使用与独立训练的基线模型相同的超参数。ResNet50输出一个2048维的表示,而ViT-B/16和BERT-Base为每个数据点输出768维的嵌入。
分别使用M = {8, 16, 32, 64, 128, 256, 512, 1024, 2048} 和 M = {12, 24, 48, 96, 192, 384, 768} 作为显式优化的嵌套维度。最后,我们将MRL和MRL-E模型广泛地与独立训练的低维(固定特征)表示(FF)、降维(SVD)、可变宽度网络以及最高容量FF模型中随机选择的特征进行了比较。
分类任务:
通过线性分类/探针(LP)和1-最近邻(1-NN)准确性来评估所学习表示的质量和容量。实验表明,MRL模型在提供从粗到细的表示时,消除了对|M|个资源密集型独立训练模型的依赖,同时保持了相同的准确性。最后,我们展示了尽管只针对|M|个维度进行了优化,MRL模型还是以插值的方式将信息扩散到了所有d个维度上,提供了自适应部署所需的最精细粒度。
ResNet50 模型 输出2048维 采用的M = 8, 16, 32, 64, 128, 256, 512, 1024, 2048
比较了在ImageNet-1K上训练和评估的ResNet50模型的线性分类准确性。ResNet50-MRL模型在M中的每个表示尺寸下至少与每个固定特征(FF)模型一样准确,而MRL-E从16维开始精度相差不超过1%。同样地,下图展示了通过ImageNet-1K上的1-最近邻(1-NN)准确性来评估表征质量的对比结果(使用130万样本作为数据库和5万样本作为查询)。对于低维度,套娃表示比其固定特征对应版本最多高出2%的准确性,在其他维度上则保持同样的准确性。1-NN准确性是一个很好的指标,无需额外训练成本即可衡量学习到的表示在下游任务中的实用性。
我们还评估了在JFT-300M上训练ViT-B/16以及ALIGN模型中的ViT-B/16视觉编码器所得到的表征的质量。由于这些实验的成本高昂,我们只训练了最高容量的固定特征模型,并在低维度选择随机特征进行评估。对于MRL而言,大闺蜜是一个有吸引力的场景,因为它提供了相对低廉的训练开销,同时为下游任务提供多保真度表示。如图在ImageNet-1K上用1-NN进行了评估,显示了所有用于JFT和ALIGN的MRL模型都非常准确,同时在低维度提供了优秀的成本与准确性之间的权衡。这些实验表明,MRL可以无缝扩展到大规模模型和数据集,同时在这个过程中提供了原本可能非常昂贵的多粒度表示。我们在预训练BERT时也有类似的观察。我们的实验还表明,后处理压缩(SVD)、基于随机特征的线性探针以及子网风格的可变宽度网络在表示尺寸减小时相比MRL显著降低了准确性。
此外,如图,尽管MRL明确优化了O(log(d))嵌套表示——消除了O(d)的复杂度但粗细粒度信息被插值到了所有d个维度中,为自适应部署提供了最高的灵活性。
思考:
在实验中,明明缩小了嵌入维数,按理来说应该降低了精度,但实际反而升高了,猜测原因为在俄罗斯套娃的过程中去掉了一些干扰噪声
图中显示信息瓶颈存在于8-16维,MRL和FF同时下降,但是MRL-E显著下降,猜测由于共享权重导致信息扩散更为剧烈,导致信息密度有所下降,所以维度下降时,MRL-E的信息瓶颈可能出现得更早。
检索:
预训练ResNet50模型在两个大规模数据集ImageNet-1K和ImageNet-4K上的图像检索性能。ImageNet-1K的数据集大小约为130万,查询集包含50,000个样本,均匀分布于1000个类别。ImageNet-4K,其数据集大小约为420万,查询集包含约20万个样本,均匀分布于4202个类别。ResNet50的一次前向传递成本为4 GFLOPs,而ImageNet-1K上的精确检索每查询成本为2.6 GFLOPs。尽管检索开销占总成本的40%,但随着数据库大小的增长,检索成本呈线性增长。ImageNet-4K提供了一个检索基准,在这个基准上,精确搜索的成本成为了计算瓶颈(每查询8.6 GFLOPs)。在这两种设置下,大数据库也常常导致内存和磁盘使用成为瓶颈。然而,在大多数实际应用中,精确搜索O(dN)被近似最近邻搜索(ANNS)方法如HNSW 所取代,后者的时间复杂度为O(d log(N)),以少量准确性下降为代价换取额外的内存开销。
图像检索的目标是利用从预训练模型获得的表示找到与查询属于同一类别的图像。此实验使用平均精度@10 (mAP@10)来比较检索性能,这能够全面地捕捉大规模相关图像检索的设置。此实验使用MFLOPs测量每个查询的精确搜索成本。所有嵌入都是归一化的,并使用L2距离度量进行检索。实验采用了一系列指标,包括mAP@k和P@k(k = {10, 25, 50, 100})
上图比较了MRL、MRL-E、FF、可变宽度网络以及使用SVD和随机特征选择进行后处理压缩后的向量在不同维度下的ImageNet-1K上的mAP@10表现。套娃表示通常是最准确的,比FF基线最多高出3%。类似于分类任务,后处理压缩和可变宽度网络基线在≤256维时的检索mAP@10有显著下降。
我们在自适应检索设置(AR) 中对MRL进行了基准测试。对于给定的查询图像,我们使用低维表示(例如Ds=16)从数据库中获取一个短名单K=200,然后用更高容量的表示(例如Dr=2048)重新排名。检索最消耗资源的是最初的召回过程,重排即使是对200张2048维图像进行简单的重新排名,也只需400 KFLOPs。
上图展示了使用套娃表示的自适应检索与使用ResNet50固定特征的单次检索相比,在ImageNet-1K上的计算与准确性之间的权衡。对于ImageNet-1K,我们展示出使用Ds=16 & Dr=2048的AR模型与d=2048的单次检索同样准确,但在理论上大约提高了128倍的效率,在实践中大约快了14倍(在同一硬件上使用HNSW比较)。我们显示了ImageNet-4K类似的趋势,但注意到由于数据集难度增加,我们需要Ds=64。这分别带来了理论上的约32倍和实践中的约6倍的速度提升。最后,虽然K=200在我们的自适应检索实验中效果很好,超过某个点后准确性增益停止,进一步强化了套娃表示学习和自适应检索的使用案例。
即使是在自适应检索中,确定Ds和Dr的选择也是困难的。为了缓解这个问题,我们提出了漏斗检索(Funnel Retrieval),这是一种一致的级联自适应检索方法。漏斗通过一系列递增容量表示的重复重排和筛选来减少初始短名单。漏斗在每次重排步骤中将短名单大小减半并将表示大小加倍。例如,在ImageNet-1K上,一个从200 → 100 → 50 → 25 → 10逐步缩减短名单,同时使用16 → 32 → 64 → 128 → 256 → 2048维度的套娃表示级联,与单次2048维检索一样准确,但在理论上大约提高了128倍的效率。所有这些结果展示了MRL和AR在大规模多阶段搜索系统中的潜力。
跨维度的分歧。套娃表示中的信息打包通常会导致随着容量增加而逐渐提高的准确性。然而,我们观察到这种趋势并非普遍存在,某些实例和类别在低维度评估时更加准确。如果能够完美地将实例路由到适当的维度,MRL可以获得高达4.6%的分类准确性提升。同时,由于ImageNet层次结构中同一超类内的多个相似对象的存在,低维模型的准确性较低。上图展示了两个8维表示的例子。可以用来分析信息瓶颈。
- measuring device - 测量装置
- building - 建筑物
- garment - 衣物
- tool - 工具
- nourishment - 营养
- protective covering - 保护覆盖物
- vessel - 船
- oscine - 鸣禽(特指能够发出复杂鸣叫声的鸟类)
超类准确性。随着信息瓶颈变小,细粒度类别的整体准确性迅速下降。然而,在超类级别评估时,下降幅度并不显著(见表24)。第二张图展示这种现象既出现在MRL模型也出现在FF模型中;MRL在各个维度上都更准确。这表明虽然紧缩的信息瓶颈对于细粒度分类不是非常准确,但确实捕捉到了可用于检索和分类自适应路由所需的语义信息。套娃表示的多保真性自然地在一个模型中捕获了类别标签的基本层次结构。最后,第三张图展示了MRL在各个超类中的准确性趋势。“服装”类从8维到16维表示转换时,额外维度在区分同类中的其他类时的效用很明显,最高可提高11%。我们还观察到,“鸣禽”这样的超类在物体和背景之间有明显的视觉区别,因此即使使用8维也能在超类内实现良好的类间分离性。
局限性:
指标的局限性
2DMSE:
套娃表示学习(MRL)能够在最小化效率与准确性权衡的情况下缩短嵌入向量。开发者可以在嵌入向量的末端简单地丢弃一些维度,而不会损害其表示质量,从而提高下游任务的效率。OpenAI 使用 MRL 来缩短他们的嵌入。但它通过所有 Transformer 层计算嵌入,导致昂贵的推理阶段没有改变。
二维套娃句子嵌入(2DMSE),它通过在训练过程中随机选择 Transformer 的不同层并进行微调,提高了句子嵌入的效率和适应性。2DMSE模型支持在嵌入大小和Transformer 层数上进行弹性配置,使得模型能够在保持性能的同时,显著减少计算和内存消耗。实验结果表明,2DMSE在语义文本相似性(STS)任务上表现出色,且在不同嵌入维度和模型深度的配置下具有很好的可扩展性,使其适用于各种计算资源和任务需求。
下面这张图对比了传统嵌入,MRL 和 2DMSE 三种嵌入方法的区别,可以看出三者都是基于Transformer架构,但是传统句子嵌入不具有层可伸缩性,且推理速度传统句子嵌入<MRL<2DMSE,嵌入的利用率,传统的要慢于 MRL 和 2DMSE。且后两个都有嵌入可以独立使用。紫色块代表与套娃损失一起经过AngIE微调的Transformer层
整体框架:
- 2D Matryoshka Training(2D套娃式训练):
- 左边的框体代表了2D套娃式训练(2DMSE)的阶段。
- 这个过程涉及随机选择一个Transformer层和一个隐藏层的大小。图中显示了不同的隐藏层大小(例如8, 16, 32, ... 512)。
- 被选中的层(粉红色矩形)和选择的隐藏大小(紫色虚线矩形)用于句子嵌入的学习,而不改变隐藏层的大小。
- 在训练期间,通过KL散度(KL Divergence)优化,以将浅层与最后一层对齐。
- 2D Matryoshka Inference(2D套娃式推断):
- 右边的框体说明了推断阶段,在这个阶段,所有Transformer层都是可伸缩的,并且能够产生高质量的句子嵌入。
- 这些嵌入可用于下游应用,例如搜索和聚类,这些应用在图的右下角用图标表示。