IT评测·应用市场-qidao123.com

标题: 【LLM论文日更】| 俄罗斯套娃嵌入模型 [打印本页]

作者: 饭宝    时间: 2024-9-23 10:01
标题: 【LLM论文日更】| 俄罗斯套娃嵌入模型
研究背景

研究方法

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

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

其中,L是多类softmax交叉熵丧失函数,cm​是相对重要性权重。
3. 高效实现:为了提高效率,MRL采用了权重绑定技术,即全部线性分类器的权重类似,从而减少内存本钱。这种变体称为Efficient Matryoshka Representation Learning(MRL-E)。
实现代码为:
 
  1. class MRL_Linear_Layer(nn.Module):
  2.         def __init__(self, nesting_list: List, num_classes=1000, efficient=False, **kwargs):
  3.                 super(MRL_Linear_Layer, self).__init__()
  4.                 self.nesting_list = nesting_list
  5.                 self.num_classes = num_classes # Number of classes for classification
  6.                 self.efficient = efficient
  7.                 if self.efficient:
  8.                         setattr(self, f"nesting_classifier_{0}", nn.Linear(nesting_list[-1], self.num_classes, **kwargs))               
  9.                 else:       
  10.                         for i, num_feat in enumerate(self.nesting_list):
  11.                                 setattr(self, f"nesting_classifier_{i}", nn.Linear(num_feat, self.num_classes, **kwargs))       
  12.         def reset_parameters(self):
  13.                 if self.efficient:
  14.                         self.nesting_classifier_0.reset_parameters()
  15.                 else:
  16.                         for i in range(len(self.nesting_list)):
  17.                                 getattr(self, f"nesting_classifier_{i}").reset_parameters()
  18.         def forward(self, x):
  19.                 nesting_logits = ()
  20.                 for i, num_feat in enumerate(self.nesting_list):
  21.                         if self.efficient:
  22.                                 if self.nesting_classifier_0.bias is None:
  23.                                         nesting_logits += (torch.matmul(x[:, :num_feat], (self.nesting_classifier_0.weight[:, :num_feat]).t()), )
  24.                                 else:
  25.                                         nesting_logits += (torch.matmul(x[:, :num_feat], (self.nesting_classifier_0.weight[:, :num_feat]).t()) + self.nesting_classifier_0.bias, )
  26.                         else:
  27.                                 nesting_logits +=  (getattr(self, f"nesting_classifier_{i}")(x[:, :num_feat]),)
  28.                 return nesting_logits
复制代码
借用一张图,很直观:



实验设计

本文将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个样本的渐渐重排,这种方法可以省去调参,应用比较方便。

不敷与反思


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4