热门标签 | 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


推荐阅读
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
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社区 版权所有