ranking loss

补充知识:

hinge loss

ℓ ( y ) = max ⁡ ( 0 , 1 − t ⋅ y ) \ell(y) = \max(0, 1-t \cdot y) (y)=max(0,1ty)

释义: t t t是目标值, y y y是预测值,1是margin,当 t t t y y y的符号相同时,则代表类别一样,此时 t t t y y y的相似度与高则loss值越小,当相似度超过一个阈值时如1,则loss值为零,即模型在训练过程中不再对该对样本产生兴趣,该样本的结果也不会对训练参数产生影响。而当二者符号相反是,表示类别分错,此时loss值一定大于1,这些是模型感兴趣的训练数据。

pair math

在文本对匹配任务中,主要就是构建样本对,根据样本对的相似度来判定两者是否属于同一类别。这类应用有找到图片所对应的标题(picture~caption)、问答等任务。而hinge loss正好是一种基于两个样本之间相似度计算loss值的损失函数。因此其各种变形便构成了ranking loss家族。

ranking loss:

  1. pairwise ranking loss

    • 生成匹配对,具有标签,标签表达正负样本,
      在这里插入图片描述

    • 在抽样时有多重策略,以防训练过程在easy样本对上浪费时间

    • pair hinge loss,

    在这里插入图片描述

    pair wise hinge loss是基于样本对之间的距离来得到loss函数,m是margin。具体而言:当样本对是正例时,其样本对的距离越大则 L L L值遇到;当是负例时则反之,但距离越大越好,但若超过一定阈值 m m m则该样本对对模型带来的影响就微乎其微,因此直接设置为零。用下图来形象表示其含义:
    在这里插入图片描述

    n n n(negative)样本可以分布在图中的任意区域,与 a a a(anchor样本,被 p , n p,n p,n的参照样本)的距离代表二者的相似度,距离越远相似度越小,模型的目标就是让正样例样本对( p   a p~a p a)之间的距离变小,负样例样本对( n   a n~a n a)的距离变大。

    对公式变形,得:
    模型公式

  2. triplet ranking loss

    这是针对三元组的文本对损失函数,在二元组中,正样本与负样本被分开单独的与锚点样本(anchor)组成单个sample,而在三元组中,每个样例格式为 < a , p , n > <a,p,n> <a,p,n>既包含正样例,又包含负样例,模型通过最大化 < a , p > <a,p> <a,p> < a , n > <a,n> <a,n>之间的距离来匹配样本对。

    在这里插入图片描述

    目标函数如下:
    在这里插入图片描述

梳理:

->探究如何基于现有数据采样生成匹配对

动机: 探究生成文本对构建训练数据集以用于模型训练,以及采用各种损失函数的效果。

loss类:

  1. ContrastiveLoss:遍历数据集,将当前样本作为anchor,随着生成正负类label,根据label决定其匹配样本是p还是n,p是就从同一类中选择其他样本,n是从其他类选择样本,最终得到的是与数据集规模相同的训练集,不保证每个样本都有正例样本对。
    
  2.  TripletLoss:类似于ContrastiveLoss,但是使用三元组。
    
  3.  OnlineContrastiveLoss:上述的两种采样方式是在全部数据输入前进行,而这个是以数据流的方式每次取一个batch,在这个batch上采样得到pair,然后计算损失函数。
     具体过程如下:
     - 将原始文本通过模型进行编码,得到其文本表示。
     - 在计算loss函数中,根据输入的label进行采样,得到匹配对。其中在采样中可加入一定的筛选策略(因为已经有了初步的文本表示向量,可以算一个相似度),根据相似度进行排序。找到所谓的“hard”样本作为负例对。
     - 在得到的匹配对上计算损失函数,而此时的数据规模被大幅扩增,因为每个样本会产生多个正负例。
    

数据采样类:

  1. SiameseMNIST:二元样本对
    ...
    
    

模型:

  1. EmbeddingNet:基础模型框架
    SiameseNet:内含一个EmbeddingNet模型,两个输入的文本都会经过该模型进行编码,得到各自的输出表示。
    	class SiameseNet(nn.Module):
        def __init__(self, embedding_net):
            super(SiameseNet, self).__init__()
            self.embedding_net = embedding_net
    
        def forward(self, x1, x2):
            output1 = self.embedding_net(x1)
            output2 = self.embedding_net(x2)
            return output1, output2
    其他类似...
    

参考文献
siamese-triplet
ranking loss

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ranking loss(排序损失)是一种用于训练排序模型的损失函数。在信息检索、推荐系统等应用中,常常需要将一组项目(例如文档、商品等)进行排序,以便将最相关或最合适的项目排在前面。Ranking loss的目标是通过比较和排序不同项目的相关性来训练模型。 一种常见的Ranking loss是pairwise ranking loss(成对排序损失),其中通过比较每对项目的相关性来定义损失。给定一对项目,我们希望将相关性高的项目排在前面。假设我们有一个训练集,其中每个样本包含两个项目和它们的相关性标签(例如,0表示不相关,1表示相关)。对于这个训练集中的每个样本,我们可以计算两个项目的相关性分数,并使用损失函数来优化模型。 一种常用的pairwise ranking loss是pairwise hinge loss(成对合页损失)。对于一对项目(正负样本),如果模型对正样本的预测分数低于负样本的预测分数加上一个预定义的边界值(例如1),则会产生损失。这样的损失函数鼓励模型将相关性高的项目得分提高,不相关性高的项目得分降低。 除了pairwise ranking loss,还有其他类型的Ranking loss,如pointwise ranking loss和listwise ranking loss。pointwise ranking loss独立地处理每个项目,将排序问题转化为回归问题,而listwise ranking loss则考虑整个项目列表的排序。 总结来说,Ranking loss是一种用于排序模型训练的损失函数,通过比较和排序不同项目的相关性来优化模型。其中pairwise ranking loss是常见的一种形式,它通过比较每对项目的相关性来定义损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值