当前位置: 首页 > news >正文

对比学习MoCo损失函数infoNCE理解(附代码)

 MoCo loss计算采用的损失函数是InfoNCE: ​​

下面是MoCo的伪代码,MoCo这个loss的实现就是基于cross entropy loss。

将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量不同图像的视图。

在具体python代码中的实现如下:

(1)首先计算正样本损失l_pos, 大小为(N, 1)。

l_pos = torch.einsum('nc,nc->n', [q, k]).unsqueeze(-1)

再计算负样本损失l_neg, 大小为(N, K)。

l_neg = torch.einsum('nc,ck->nk', [q, self.queue.clone().detach()])

(2)将l_pos和l_neg进行cat操作,并除以温度参数temperature(控制concentration level of distribution),得到logits, 大小为(N, 1+K)。

# logits: Nx(1+K)
logits = torch.cat([l_pos, l_neg], dim=1)# apply temperature
logits /= self.T

目标是正样本都为1,负样本都为0。

(3)那么可以把logits看做分类,分成1+K个类别,期望都是第一个类别,则可以把labels设为0(为什么呢?)

# labels: positive key indicators
labels = torch.zeros(logits.shape[0], dtype=torch.long).cuda()

(4)最后函数返回,再使用nn.CrossEntropyLoss计算损失函数。

criterion = nn.CrossEntropyLoss().cuda(args.gpu)
# ...
loss = criterion(output, target)

前面提到的可以把labels设为0(为什么呢?)

我们可以结合nn.CrossEntropyLoss详解_Lucinda6的博客-CSDN博客_nn.crossentropyloss()和https://www.cnblogs.com/marsggbo/p/10401215.html 理解一下。

交叉熵的计算公式为:

其中p表示真实值,在这个公式中是one-hot形式;q是预测值,在这里假设已经是经过softmax后的结果了。

下面详细分析一下nn.CrossEntropyLoss。

仔细观察上面的交叉熵的计算公式可以知道,因为p的元素不是0就是1,而且又是乘法,所以很自然地我们如果知道1所对应的index,那么就不用做其他无意义的运算了。所以在pytorch代码中target不是以one-hot形式表示的,而是直接用scalar表示。所以交叉熵的公式(m表示真实类别)可变形为:

仔细看看,是不是就是等同于log_softmaxnll_loss两个步骤。

所以Pytorch中的F.cross_entropy会自动调用上面介绍的log_softmaxnll_loss来计算交叉熵,其计算方式如下:


参考文章:

自监督学习MOCO算法解析 - 知乎

对比学习损失(InfoNCE loss)与交叉熵损失的联系,以及温度系数的作用 - 知乎

nn.CrossEntropyLoss详解_Lucinda6的博客-CSDN博客_nn.crossentropyloss()

https://www.cnblogs.com/marsggbo/p/10401215.html

nn.Softmax_harry_tea的博客-CSDN博客_nn.softmax

torch.einsum详解 - 知乎

相关文章:

对比学习MoCo损失函数infoNCE理解(附代码)

MoCo loss计算采用的损失函数是InfoNCE: ​​ 下面是MoCo的伪代码,MoCo这个loss的实现就是基于cross entropy loss。 将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量…...

logd守护进程

logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…...

【汽车雷达通往自动驾驶的关键技术】

本文编辑:调皮哥的小助理 现代汽车雷达装置比手机还小,能探测前方、后方或侧方的盲点位置是否存在障碍物,但这还不百分之百实现全自动驾驶的。传统的汽车雷达分辨率都不高,只能“看到”一团东西,可以检测到汽车周围存在…...

2023实习面经

实习面经 秋招笔试面试全记录 字节-电商 字节实习一面: 二分类的损失函数是什么,怎么算?多分类的损失函数怎么算?如果文本分类的标签有多个,比如一个文本同时属于多个label那怎么办?如果文本分类里面的…...

linux shell 入门学习笔记2shell脚本

什么是shell脚本 当命令或者程序语句写在文件中,我们执行文件,读取其中的代码,这个程序就称之为shell脚本。 有了shell脚本肯定是要有对应的解释器了,常见的shell脚本解释器有sh、python、perl、tcl、php、ruby等。一般这种使用文…...

Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

前言想必大家曾经被各种Native Crash折磨过,本地测试没啥问题,一到线上或者自动化测试就出现各种SIGSEGV、SIGABRT、SIGILL、SIGBUS、SIGFPE异常,而且堆栈还是崩溃到libc.so这种,看起来跟我们的代码没啥关系,关键还不好…...

HyperOpt-quniform 范围问题

在使用 quniform 的时候,可能会出现超出指定范围的值,例如对于 GBDT 设置参数空间为 learning_rate:hp.quniform(learning_rate,0.05,2.05,0.2),但是仍然会报错 ValueError: learning_rate must be greater than 0 but was 0.0,但…...

Pycharm搭建一个Django项目

File->new project 点击create, 等待一下即可 查看安装 Django 版本: 在 Pycharm 底部选择 Terminal 然后在里面输入:python -m django --version 启动项目: 在 Terminal 里面输入: python manage.py runserver 查看文件目…...

浅析前端工程化中的一部曲——模块化

在日益复杂和多元的 Web 业务背景下,前端工程化经常会被提及。工程化的目的是高性能、稳定性、可用性、可维护性、高效协同,只要是以这几个角度为目标所做的操作,都可成为工程化的一部分。工程化是软件工程中的一种思想,当下的工程…...

新版bing(集成ChatGPT)申请通过后在谷歌浏览器(Chrome)上的使用方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

Time-distributed 的理解

前言 今天看到论文中用到 Time-distributed CNN,第一次见到 Time-distributed,不理解是什么含义,看到代码实现也很懵。不管什么网络结构,外面都能套一个TimeDistributed。看了几个博客,还是不明白,问了问C…...

matlab 计算矩阵的Moore-Penrose 伪逆

目录 一、Moore-Penrose 伪逆1、主要函数2、输入输出参数二、代码示例使用伪逆求解线性方程组一、Moore-Penrose 伪逆 Moore-Penrose 伪逆是一种矩阵,可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。    对于任何矩阵…...

简历制作方面的经验与建议

专栏推荐:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏内容: 笔试复盘篇 2023秋招过程中整理的笔试题,来源包括我自己求职笔试以及整理其他同学的笔试。包含华为、中兴、联发科、AMD、大…...

C语言--static、const、volatile关键字

Static static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。 static 修饰局部变量 改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是…...

Rust学习入门--【18】Rust结构体

系列文章目录 Rust 语言是一种高效、可靠的通用高级语言,效率可以媲美 C / C 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。 Rust学习入门–【1】引言 Rust学习入门–【2】Rust 开发环境配置 Rust学习入门–【3】Cargo介绍 Rust学习入门–【4】Rust 输…...

LeetCode142 环形链表Ⅱ

题目: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评…...

JavaScript刷LeetCode拿offer-高频链表题

首先需要了解链表的概念 先把 next 记录下来 无论是插入,删除,还是翻转等等操作,先把 next 指针用临时变量保存起来,这可以解决 90% 重组链表中指向出错的问题, 如果不知道什么时候需要用到守卫,那就都用…...

linux系统编程2--网络编程

在linux系统编程中网络编程是使用socket(套接字),socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址端口号”就称为socket。在TCP协议中&#…...

Allegro如何重命名光绘操作指导

Allegro如何重命名光绘操作指导 在做PCB设计的时候,光绘设置是输出生产文件必要的流程,设置好光绘之后,如何对光绘重新命名,如下图 如何把L1改成TOP,L6改成BOTTOM,具体操作步骤如下 点击Manufacture选择Artwork...

[PMLR 2018] Hyperbolic entailment cones for learning hierarchical embeddings

Contents IntroductionEntailment Cones in the Poincar BallConvex cones in a complete Riemannian manifoldAngular cones in the Poincar ballfour intuitive propertiesClosed form expression of the optimal ψ \psi...

彻底移除Windows Defender:释放30%系统性能的终极指南

彻底移除Windows Defender:释放30%系统性能的终极指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/…...

【Tessent Shell实战指南】【Ch4】层次化设计中的DFT架构规划与实现策略

1. 层次化DFT设计基础与挑战 第一次接触大型SoC层次化设计时,我被复杂的时钟域和物理分区搞得晕头转向。直到在Tessent Shell中实践了完整的hierarchical DFT流程,才发现这套方法论的精妙之处。层次化DFT就像搭积木,需要先规划整体结构&…...

Full Page Screen Capture:智能捕获技术实现无缝网页完整截图体验

Full Page Screen Capture:智能捕获技术实现无缝网页完整截图体验 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-c…...

Omni-Vision Sanctuary 与低代码平台 Dify 集成:构建无需编程的 AI 图像生成工作流

Omni-Vision Sanctuary 与低代码平台 Dify 集成:构建无需编程的 AI 图像生成工作流 1. 引言:当视觉大模型遇上低代码平台 想象一下,电商公司的产品经理小王需要为即将上新的100款商品制作主图。传统方式需要找设计师一张张设计,…...

2001-2024年我国农作物分布栅格数据(小麦、玉米、水稻、甘蔗等)

1 数据介绍 中国农作物分布栅格数据集(2001-2024) 数据简介 本数据集由Yangyang Fu团队开发,提供2001-2024年中国28个省份30米分辨率的农作物分布栅格数据,涵盖单季稻、双季稻、冬小麦、玉米等主要作物类型及其轮作模式。 数…...

lite-avatar形象库真实体验:如何快速找到并应用心仪的数字人形象

lite-avatar形象库真实体验:如何快速找到并应用心仪的数字人形象 1. 引言:为什么选择lite-avatar形象库? 在数字人应用开发中,找到高质量且风格合适的虚拟形象往往是最耗时的环节之一。传统方式需要从零开始训练模型&#xff0c…...

Betterlockscreen缓存机制解析:为什么它比传统锁屏更快

Betterlockscreen缓存机制解析:为什么它比传统锁屏更快 【免费下载链接】betterlockscreen 🍀 sweet looking lockscreen for linux system 项目地址: https://gitcode.com/gh_mirrors/be/betterlockscreen Betterlockscreen是一款为Linux系统设计…...

Keystone变换不止于校正:在FMCW雷达与高速目标成像中的隐藏玩法

Keystone变换不止于校正:在FMCW雷达与高速目标成像中的隐藏玩法 当FMCW雷达遇到时速300公里的无人机,传统信号处理算法往往会在高速目标检测中"失焦"。这种现象背后,是雷达回波中难以避免的距离走动(Range Walk&#xf…...

RMBG-2.0部署避坑指南:常见问题解决方案

RMBG-2.0部署避坑指南:常见问题解决方案 1. 引言 最近RMBG-2.0这个开源背景去除模型确实火得不行,效果确实惊艳,精确到发丝级别的抠图能力让很多开发者跃跃欲试。但在实际部署过程中,不少朋友都遇到了各种坑:环境配置…...

【2026必看】临沂销售增长咨询,哪家公司最权威?

在当前竞争激烈的市场环境中,商贸和生产型企业要想实现销售额的稳步增长,选择一家专业的管理咨询公司至关重要。那么,在临沂,哪家公司在销售增长咨询方面最具权威性呢?本文将为您详细解析,并推荐山东润行管…...