暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

探索OpenAI背后的技术:MRL实现动态调节编码模型维度 并保持性能不变

Coggle数据科学 2024-01-29
681

unsetunsetGPT系列模型更新unsetunset

最近OpenAI推出了新一代的嵌入式模型,全新的GPT-4 Turbo和审查模型。

https://openai.com/blog/new-embedding-models-and-api-updates

其中比较引人关注的是推出了两款全新的嵌入式模型:一个是更小、高效的text-embedding-3-small模型,另一个是更大、更强大的text-embedding-3-large模型。嵌入模型是检索增强生成(RAG)的必备环节。

在博客中OpenAI声称两款新嵌入式模型都采用新的技术进行训练,使开发人员可以在使用嵌入式时在性能和成本之间进行权衡。可以通过传递维度API参数来缩短嵌入维度,而不会使嵌入式失去其表示概念的特性。

在MTEB基准测试中,text-embedding-3-large
嵌入维度可以缩短到256的大小,仍然能够胜过一个嵌入维度1536的text-embedding-ada-002
模型。


text-embedding-3-smalltext-embedding-3-large
嵌入维度5121536
MTEB得分61.662.3

OpenAI 所使用的「缩短嵌入」方法,随后引起了研究者们的广泛注意。人们发现,这种方法和 2022 年 5 月的一篇论文所提出的「Matryoshka Representation Learning」方法是相同的。

https://arxiv.org/abs/2205.13147

unsetunset可扩展的特征编码unsetunset

Matryoshka Representation Learning(MRL)
的是一种学习表示方法,用于服务于多种下游任务。在训练这种表示时,通常情况下每个下游任务的计算和统计约束是未知的。

论文提出了一个问题:我们是否可以设计出一种灵活的表示方法,能够适应具有不同计算资源的多个下游任务?**

MRL在不同的粒度上编码信息,并允许单个嵌入适应下游任务的计算约束,在推断和部署过程中不会增加额外成本。 MRL学习了粗粒度到细粒度的表示,至少与独立训练的低维度表示一样准确且丰富。

  • 对于ImageNet-1K分类,嵌入大小可以减少多达14倍,而准确度保持不变;
  • 对于ImageNet-1K和4K的大规模检索,速度提升多达14倍;
  • 对于长尾少样本分类,准确度提高多达2%,同时保持与原始表示一样的稳健性。
  • MRL可以无缝扩展到Web规模的数据集,如视觉(ViT,ResNet),视觉+语言(ALIGN)和语言(BERT)等。

unsetunsetMRL原理unsetunset

MRL旨在学习具有多个粒度的表示,以适应不同的任务和数据特征。

表示大小和多粒度学习

对于给定的表示大小,MRL考虑了一个表示大小的集合,其中每个元素表示一个嵌入的维度。MRL通过一个深度神经网络来学习一个维的表示向量,其中是可学习的参数。中的每个维度都可以独立地表示数据点的转移性和通用性。

损失函数和优化

MRL通过标准的经验风险最小化来优化每个嵌套维度的多类分类损失。 具体而言,针对每个,MRL使用一个独立的线性分类器,其中是标签的数量。损失函数通过加权求和来聚合每个嵌套维度的损失,权重由参数控制。

效率改进和适应性

MRL提出了Efficient Matryoshka Representation Learning(MRL-E)
变体,通过在所有线性分类器之间进行权重绑定来减少内存消耗。此外,MRL可以无缝适应大规模表示学习框架,并可以应用于不同的学习范式,如自监督学习和对比学习。

unsetunsetMRL代码unsetunset

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)

        # usually set to all ones
        self.relative_importance = relative_importance 

    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 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 self.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:
            # Instantiating one nn.Linear layer for MRL-E
            setattr(self, "nesting_classifier_0", nn.Linear(self.nesting_list[-1], self.num_classes, **kwargs))
            

    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

unsetunset实验对比unsetunset

表示学习

首先将MRL应用于各种表示学习设置,通过线性分类/探测(LP)和1-最近邻(1-NN)准确度来评估学习到的表示的质量和容量:

  • 视觉的监督学习:在ImageNet-1K上使用ResNet50,以及在JFT-300M上使用ViT-B/16
  • 视觉+语言的对比学习:在ALIGN数据上使用包含ViT-B/16视觉编码器和BERT语言编码器的ALIGN模型
  • 掩码语言建模:在英文维基百科和BooksCorpus上使用BERT

图像分类

在ImageNet-1K上训练和评估的ResNet50模型的线性分类准确度,实验结果表明,MRL模型在每个维度大小上至少与每个FF模型(常规训练的模型)一样准确,而MRL-E则在16维以上处于1%以内。

通过在ImageNet-1K上进行1-NN准确度评估来展示了学习表示质量的比较。MRL在较低维度时比固定特征的对应部分准确度高达2%。

自适应分类

MRL 不需要多个昂贵的神经网络前向传播。在 ImageNet-1K 上级联 MRL 表示(MRL-AC)和独立训练的固定特征(FF)模型之间的比较,所有 MRL-AC 模型在相当的表示大小上都比 FF 基线要准确得多。

图像检索

ResNet50 的单次前向传播成本4 GFLOPs
,而精确检索每个查询的成本为2.6 GFLOPs
。尽管检索开销占总成本的 ,但检索成本随数据库大小的增加而线性增长。

在ImageNet-1K 上的 mAP@ 10 性能,MRL、MRL-E、FF、可压缩网络以及使用 SVD 和随机特征选择的后续压缩的矢量。MRL通常是最准确的,而且比 FF 基线高出多达 3%.


少样本和长尾学习

MRL 学习的表示在不同 shots 和类别数量下的表现与 FF 表示相当。MRL 在分布尾部的新颖类上提供了高达 的准确度提升,而不会牺牲其他类别的准确度。

unsetunsetMRL方法总结unsetunset

  • MRL思路比较简单,并且对模型的网络结构并没有过多修改,有较强的普适性。
  • MRL可以在单个嵌入向量中以多个粒度编码信息,使得 MRL 能够适应下游任务。
  • MRL需要在原有模型的基础上增加额外的分类层,因此会增加少量的计算复杂度。
  • 在部署中MRL并不会因为编码维度而带来时间复杂度的差异,因为都需要完成整个正向传播。

文章转载自Coggle数据科学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论