热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跨批次记忆在度量学习DML中的应用

度量学习DML之ContrastiveLoss及其变种_程大海的博客-CSDN博客度量学习DML之TripletLoss_程大海的博客-CSDN博客度量学习DML之Lifted

度量学习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博客


 

度量学习的目标:
  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


推荐阅读
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文详细介绍了Windows网络编程中常用的几个关键结构体,包括sockaddr_in、in_addr和hostent,解释了它们的定义和用途,并提供了实际应用中的示例。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • 在开发一个网页音乐播放器时遇到问题,需要从不同源读取MP3文件的ID3标签信息,包括流派、歌手和歌曲名称等。尝试使用PHP未果后转而考虑使用JavaScript进行跨域读取,但不清楚具体配置方法,寻求技术指导。 ... [详细]
  • 新浪微博热搜暂停更新;即刻APP回归;Android 11 Beta版发布 | 科技新闻速递
    为您带来最新的科技资讯,涵盖社交媒体动态、软件更新及行业重大事件。CSDN携手您共同关注科技前沿。 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 线段树详解与实现
    本文详细介绍了线段树的基本概念及其在编程竞赛中的应用,并提供了一个具体的线段树实现代码示例。 ... [详细]
  • 微软等企业捐赠首批AI有声读物,助力视障人士
    12月2日,微软联合鹿音苑文化传播公司及150多名志愿者,共同捐赠了首批由人工智能生成的有声内容,旨在为视障人士提供更多文化资源。 ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
author-avatar
学习小菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有