草庐IT

MoCo中的InfoNCE

目录1.自监督,个体判别2.损失函数的意义3.总结4.伪代码1.自监督,个体判别训练编码器,做字典查找任务。结构如下图,论文中代理任务是instancediscrimination(个体判别),先将一个样本x分成两部分,分别为x11和x12,然后随机取mini-batch的样本x2、x3、…。然后将x11放进encoder,输出为q,x12放进momentumencoder,输出为k+,x2、x3、…同样放进momentumencoder,输出为key2、key3….。由于q与k+来自同一个样本x1,于是同属于正例,相似度最高,其余key2、key3…均为负例。Consideranencode

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

 MoColoss计算采用的损失函数是InfoNCE:​​下面是MoCo的伪代码,MoCo这个loss的实现就是基于crossentropyloss。将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量不同图像的视图。在具体python代码中(在/moco/builder.py和/main_moco.py)的实现如下:(1)首先计算正样本损失l_pos,大小为(N,1)。l_pos=torch.einsum('nc,nc->n',[q,k]).unsqueeze(-1)再计算负样本损失l_neg,大小为(N,K)。l_neg=torch

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

 MoColoss计算采用的损失函数是InfoNCE:​​下面是MoCo的伪代码,MoCo这个loss的实现就是基于crossentropyloss。将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量不同图像的视图。在具体python代码中(在/moco/builder.py和/main_moco.py)的实现如下:(1)首先计算正样本损失l_pos,大小为(N,1)。l_pos=torch.einsum('nc,nc->n',[q,k]).unsqueeze(-1)再计算负样本损失l_neg,大小为(N,K)。l_neg=torch

我想简单的写写nce和infonce

从概念上了解区分nce和infonce为什么有ncence方案:不算为什么有infonce所以infonce和nce啥关系参考文章我这两天都在看infonce的推导,我表示很头大。今天感觉看明白了,写出来大家讨论一下。为什么有nce为了解决一个问题:多分类问题,尤其是类别相当大的时候msoftmax函数中分母计算量大的问题。softmax:类别上百万的时候,咋算nce方案:不算咋算?不算,转化一下,二分类好算吧,用二分类来算。怎么转化:如上我们要求的是p(w|c)分布,nce方案是,我们转化为一个二分类问题。正样本是p(w,c)中的,负样本是噪声分布q(w)中的,那么根据后验概率,我们可以求p

推荐系统笔记(十):InfoNCE Loss 损失函数

背景        对比学习损失函数有多种,其中比较常用的一种是InfoNCEloss。最近学习实现了SGL推荐系统算法,对InfoNCELoss做一个总结。    InfoNCELoss损失函数是基于对比度的一个损失函数,是由NCELoss损失函数演变而来。那为什么要使用InfoNCELoss呢?将在下文介绍到。原理    介绍InfoNCELoss需要先介绍NCELoss损失函数。    NCELoss         NCE是基于采样的方法,将多分类问题转为二分类问题。以语言模型为例,利用NCE可将从词表中预测某个词的多分类问题,转为从噪音词中区分出目标词的二分类问题,一个类是数据类别d

推荐系统笔记(十):InfoNCE Loss 损失函数

背景        对比学习损失函数有多种,其中比较常用的一种是InfoNCEloss。最近学习实现了SGL推荐系统算法,对InfoNCELoss做一个总结。    InfoNCELoss损失函数是基于对比度的一个损失函数,是由NCELoss损失函数演变而来。那为什么要使用InfoNCELoss呢?将在下文介绍到。原理    介绍InfoNCELoss需要先介绍NCELoss损失函数。    NCELoss         NCE是基于采样的方法,将多分类问题转为二分类问题。以语言模型为例,利用NCE可将从词表中预测某个词的多分类问题,转为从噪音词中区分出目标词的二分类问题,一个类是数据类别d