度量学习DML之Cross-Batch Memory

13 篇文章 12 订阅
10 篇文章 0 订阅

度量学习DML之Contrastive Loss及其变种_程大海的博客-CSDN博客

度量学习DML之Triplet Loss_程大海的博客-CSDN博客

度量学习DML之Lifted Structure Loss_程大海的博客-CSDN博客

度量学习DML之Circle Loss_程大海的博客-CSDN博客

度量学习DML之Cross-Batch Memory_程大海的博客-CSDN博客

度量学习DML之MoCO_程大海的博客-CSDN博客

数据增强之SpecAugment_程大海的博客-CSDN博客

数据增强之MixUp_程大海的博客-CSDN博客

 基于pytorch-metric-learning实现的度量学习模板代码:pytorch-metric-learning-template   


度量学习的目标:

  1. 相似的或者属于同一类的样本提取到的embedding向量之间具有更高的相似度,或者具有更小的空间距离
  2. 对于out-of samples的样本,也就是未见过的样本,希望也能提取到有效的embedding,也就是模型的泛化能力更好

Cross-Batch Memory(无痛涨点)

        论文:《Cross-Batch Memory for Embedding Learning》

        参考:跨越时空的难样本挖掘 - 知乎

        通过前面分析的几种pair-based的损失函数可能看到,基于pair的损失函数通常在mini-batch中挖掘具有高价值的样本来进行模型训练,这样一来,在训练时使用的batch size越大,得到的模型的性能就越好,这在上述的一些论文中大部分作者都会提及到。但是,现实情况是,受限于计算资源、显卡显存、显卡数量等的限制,绝大部分用户在实际使用过程中根本无法达到有些论文SOTA结果使用的batch size,作者也通过实验验证了batch size对模型性能的影响:

         Cross-Batch Memory的作者带来了一个优雅的解决方案。通过论文的题目可以看到,这是一个跨batch的方法。在我们的一般认知中,神经网络在训练过程中,不同迭代轮数得到的模型是完全不同的,他们之间基本上无法进行直接比较。比如对于同一张人脸图像,使用epoch=100和epoch=101分别提取两个embedding,然后比较他们之间的相似性,结果必然是非常不相似。但是本文作者在实验中发现了一个有意思的现象,就是随着网络模型训练的逐渐稳定,对于同一个样本在不同迭代之间得到的feature差异是趋于稳定的,作者给这个差异起了个名字叫漂移(Drift),通过计算同一样本在两个迭代之间的欧式距离来衡量feature在不同迭代之间的漂移:

         作者实验发现,当网络模型趋于稳定是,即使两个迭代之间相差了1000轮,对于同一样本得到的特征之间的欧氏距离相差也是非常小的。作者把特征的这种现象叫做“slow drift”,“slow drift”自然而然的带来了一种启发,就是当网络模型趋于稳定之后,能不能使用连续的多个batch的输出结果组成的embedding集合,在这个集合之上进行难样本挖掘来训练网络。毕竟对于一张224 * 224的三通道图像来说,一个256维的embedding占用的显存是微乎其微的。通过这种巧妙的方式,无痛的增大了计算Loss时的batch。

参考:深度度量学习-论文简评 - 知乎

参考:深度度量学习中的损失函数 - 知乎

参考:https://github.com/KevinMusgrave/pytorch-metric-learning

参考:PyTorch Metric Learning

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值