【LLM论文日更】| 俄罗斯套娃嵌入模型

  • 论文:https://proceedings.neurips.cc/paper_files/paper/2022/file/c32319f4868da7613d78af9993100e42-Paper-Conference.pdf
  • 代码:GitHub - RAIVNLab/MRL: Code repository for the paper - "Matryoshka Representation Learning"
  • 机构:McGill University, Mila ServiceNow Research ,Facebook CIFAR AI Chair
  • 领域:embedding model
  • 发表:NeurIPS 2022

研究背景

  1. 研究问题:这篇文章要解决的问题是如何设计一种灵活的表示学习方法,使其能够适应多个下游任务,并且能够根据任务的计算资源需求进行调整。
  2. 研究难点:该问题的研究难点包括:现有固定容量的表示在学习新任务时可能过度或不足;如何在保持准确性的前提下,显著减少表示的大小和计算成本;如何扩展表示学习方法以适应不同模态(如视觉、语言)和数据规模(如网页规模)。
  3. 相关工作:该问题的研究相关工作包括大规模数据集上的通用表示学习(如ImageNet和JFT),对比学习(如Contrastive Learning),以及自然语言处理中的预训练模型(如BERT)。这些工作通常依赖于独立的低维模型、子网络优化或后处理压缩来实现表示的灵活性,但这些方法在训练/维护开销、多次前向传播、存储和内存成本等方面存在不足。

研究方法

这篇论文提出了Matryoshka Representation Learning(MRL)用于解决表示学习中的灵活性问题。具体来说,

  1. 多粒度表示:MRL通过显式优化嵌套的O(log(d))个低维向量,在高维向量中捕获多粒度信息。每个嵌入的前几个维度是一个信息丰富的低维向量,随着维度的增加,表示逐渐变得粗糙。

优化目标:MRL的目标是学习一个d维表示向量z∈Rd,使得每个嵌套维度m∈M都能独立地作为数据点x的可迁移通用表示。优化目标是使用标准经验风险最小化方法,通过单独的线性分类器来优化每个嵌套维度的多类分类损失。

其中,L是多类softmax交叉熵损失函数,cm​是相对重要性权重。
3. 高效实现:为了提高效率,MRL采用了权重绑定技术,即所有线性分类器的权重相同,从而减少内存成本。这种变体称为Efficient Matryoshka Representation Learning(MRL-E)。

实现代码为:
 

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_listself.num_classes = num_classes # Number of classes for classificationself.efficient = efficientif self.efficient:setattr(self, f"nesting_classifier_{0}", nn.Linear(nesting_list[-1], self.num_classes, **kwargs))		else:	for i, num_feat in enumerate(self.nesting_list):setattr(self, f"nesting_classifier_{i}", nn.Linear(num_feat, self.num_classes, **kwargs))	def reset_parameters(self):if self.efficient:self.nesting_classifier_0.reset_parameters()else:for i in range(len(self.nesting_list)):getattr(self, f"nesting_classifier_{i}").reset_parameters()def forward(self, x):nesting_logits = ()for i, num_feat in enumerate(self.nesting_list):if self.efficient:if self.nesting_classifier_0.bias is None:nesting_logits += (torch.matmul(x[:, :num_feat], (self.nesting_classifier_0.weight[:, :num_feat]).t()), )else:nesting_logits += (torch.matmul(x[:, :num_feat], (self.nesting_classifier_0.weight[:, :num_feat]).t()) + self.nesting_classifier_0.bias, )else:nesting_logits +=  (getattr(self, f"nesting_classifier_{i}")(x[:, :num_feat]),)return nesting_logits

借用一张图,很直观:

实验设计

  1. 数据集:实验使用了多个大规模数据集,包括ImageNet-1K、JFT-300M和ALIGN数据集。对于视觉任务,使用了ResNet50和ViT-B/16模型;对于视觉+语言任务,使用了ALIGN模型;对于语言任务,使用了BERT模型。
  2. 实验设置:实验中,MRL和MRL-E模型与独立训练的低维表示(FF)、降维(SVD)、子网络方法(slimmable networks)和随机选择的高容量特征进行比较。实验评估了线性分类/探测(LP)和1-最近邻(1-NN)准确性。
  3. 参数配置:实验中使用的超参数与独立训练的基线模型相同。例如,ResNet50输出2048维表示,ViT-B/16和BERT-Base输出768维嵌入。

本文将MRL/MRL-E模型与单独训练的低维表征(FF),SVD分解,子网络[2]方法进行了比较

首先是分类任务。对于在ImageNet上训练的模型,线性分类准确率基本和FF保持一致,1-NN准确率甚至在低维时高于FF。

对于大规模数据集上训练的模型也取得了很好的精度与速度间的平衡

对于适应性分类,期望的表征大小相比FF减小了14倍。

图像检索的结果也超越了baseline,最高超过了FF 3%。适应性图像检索也达到了效率和精度的权衡,16维度做粗排,2048维度做精排的准确率已经和直接使用2048维度做排序的精度还高,但计算量大幅减小。值得一提的是本文提出了一个漏斗检索方法,即使用逐渐增大的维度16-32-64-128-256-2048 对前200-100-50-25-10个样本的逐步重排,这种方法可以省去调参,应用比较方便。

不足与反思

  1. 嵌套损失权重的优化:未来的工作可以探索自适应损失平衡方法,以实现更优的准确性-效率权衡。
  2. 不同保真度的损失函数:可以考虑使用针对不同保真度的损失函数,以解决特定方面的自适应部署问题,例如高召回率的8维表示和鲁棒的2048维表示。
  3. 搜索数据结构的集成:可以在MRL上学习一个可微分的k-d树,以实现数据集和表示感知的检索。
  4. 多目标MRL的联合优化:结合端到端可学习的搜索数据结构,进行数据驱动的自适应大规模检索,适用于Web规模的搜索应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148112.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

线程池动态设置线程大小踩坑

在配置线程池核心线程数大小和最大线程数大小后,如果调用线程池setCorePoolSize方法来调整线程池中核心线程的大小,需要特别注意,可能踩坑,说不定增加了线程让你的程序性能更差。 ThreadPoolExecutor有提供一个动态变更线程池核心…

linux中vim编辑器的应用实例

前言 Linux有大量的配置文件,其中编辑一些配置文件,最常用的工具就是 Vim ,本文介绍一个实际应用的Vim编辑器开发文档的实例。 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。…

单片机原理及应用详解

目录 1. 什么是单片机? 2. 单片机的基本组成 3. 单片机的工作原理 4. 常见的单片机分类 5. 单片机的应用领域 6. 单片机开发流程 7. 单片机开发中的常见问题及解决方案 8. 单片机的未来发展趋势 9. 总结 1. 什么是单片机? 单片机(Mi…

solidwork中圆角的快捷操作

第一步 第二步: 选择一条边 快捷选择多个边,就不用一个个去点

代码随想录算法day37 | 动态规划算法part10 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

今天开始正式子序列系列!!!!! 300.最长递增子序列 本题是比较简单的,感受感受一下子序列题目的思路。 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长…

视频怎么剪切掉一部分?6款视频剪切软件,零基础也能快速学会!

您是否也曾遇到了这样的一个问题:在录制完视频之后,发现视频中存在一些多余或者不想要的片段,想要将它剪切掉却不知道具体要怎么操作?别担心,几乎所有视频都会需要这样的调整才能更加出色。如果您是刚入门的视频剪辑初…

排序算法的分析和应用

自己设计一个长度不小于10的乱序数组,用希尔排序,自己设定希尔排序参数 画出每一轮希尔排序的状态 自己设计一个长度不小于10的乱序数组,用堆排序,最终要生成升序数组,画出建堆后的状态 画出每一轮堆排序的状态 自…

9.20日学习记录及相关问题解答

部分一 今天看了一本古老的书。学到了一些有关计算机的远古的知识。弥补了一些之前没有意识到的空白点。 原来上个世纪就有AI这个东西了 现阶段的主流模式,在许多年前其实是将来要发展的对象。 B/S指的是客户机/服务器结构模式 C/S是在B/S基础上发展过来的。三层结…

9月16日笔记

访问控制列表 访问控制列表(ACL)是访问控制项(Access Control Entry , ACE)的列表。安全对象的安全描述可以通过两种访问控制列表DACL和SACL进行。 DACL DACL 是由一条条的访问控制项(ACE)条目构成的,每条ACE定义了哪些用户或组对该对象拥有怎样的访问权限。DACL…

DeepCross模型实现推荐算法

1. 项目简介 A032-DeepCross项目是一个基于深度学习的推荐算法实现,旨在解决个性化推荐问题。随着互联网平台上信息和内容的爆炸式增长,用户面临着信息过载的困境,如何为用户提供高效、精准的推荐成为了关键。该项目背景基于现代推荐系统的发…

数仓规范:命名规范如何设计?

目录 0 前言 1 表命名规范 2 字段命名规范 3 任务命名规范 4 层级命名规范 5 自定义函数命名规范 6 视图和存储过程的命名规范 7 综合案例分析 8 常见陷阱和如何避免 9 工具和最佳实践 10 小结 想进一步了解数仓建设这门艺术的,可以订阅我的专栏数字化建设…

笔尖划出秋季的声息

笔尖划出秋季的声息 进入秋分,天气渐趋凉爽,天空青蓝明朗,难言伤感。 九月,把一些句子记录好,明年拿出来晒一晒,秋季也就有了答案。 1、经历 9月6日,台风“摩羯”席卷而过粤西,…

[Excel VBA]如何使用VBA按行拆分Excel工作表

如何使用VBA按行拆分Excel工作表 在Excel中,按行拆分工作表并生成多个新工作表是一项实用的技能,尤其在处理大量数据时。以下是一个VBA代码示例,能帮助你轻松实现这一功能。 1. 代码说明 本代码会根据源工作表中每个姓名创建一个新工作表&a…

mybatis 配置文件完成增删改查(二):根据条件查询一个

文章目录 参数占位符#{}:会将其替换为? ——为了防止sql注入${}:会将其替换为实际接收到的数据,拼sql ——无法防止sql注入 查询一个sql特殊字符的处理 参数占位符 #{}:会将其替换为? ——为了防止sql注入 ${}:会将其替换为实际接收到的数据…

2024年一区极光优化+分解+深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测

2024年一区极光优化分解深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测 目录 2024年一区极光优化分解深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.中秋献礼&#…

python如何跨文件调用自己定义的函数

当自己定义函数过多时,只有一个python文件时代码会很长,不易理清代码框架,比如下面这段代码,如何隐藏具体函数细节呢?也就是把def函数放到另外一个python文件里步骤如下: 一个python文件代码篇幅过长 imp…

面试中如何回答关于 `RecyclerView` 性能优化的理解和实践经验

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在面试中展示对 RecyclerView 性能优化的理解和实践经验,你可以从以下几个方面进行阐述: 1. 理解 RecyclerView 的工作…

Maven-五、属性

Maven 文章目录 Maven前言属性定义properties文件加载pom文件属性总结 前言 使用maven中的属性可以来简化我们的配置工作。 属性定义 在pom文件中可以使用**标签设置属性,属性名自定义,然后可以在使用${属性名}**文件中引用自己定义的属性。 使用属性进行配置&a…

干货 | 2024数智新时代制造业数字化创新实践白皮书(免费下载)

导读:本白皮书将对制造业发展历程、现状、趋势与核心难题做深入解读,并在此基础上提出了相应的制造行业解决方案,结合业内实践成功的客户案例来详析信息化转型的有效方法,以供生产制造行业的从业者参考交流。

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…