对比学习的InfoNCE和交叉熵损失CrossEntroyLoss的关系

看MoCo的论文会看到以下代码

# positice logit: Nx1
l_pos=bmm(q.view(N,1,C),k.view(N,C,1))

# negitice logits: NxK
l_neg=mm(q.view(N,C),queue.view(C,K))

# logits: Nx(1+K)
logits=cat([l_pos,l_neg],dim=1)

#contrastive loss, Eqn.(1)
labels=zeros(N)# postives are the 0-th
loss=CrossEntropyLoss(logits/t,labels)

这前面三步很好理解,后面两句是什么意思呢?
先看CrossEntropyLoss的pytorch文档解释
The loss can be described as:
loss ( x , c l a s s ) = − log ⁡ ( exp ⁡ ( x [ c l a s s ] ) ∑ j exp ⁡ ( x [ j ] ) ) = − x [ c l a s s ] + log ⁡ ( ∑ j exp ⁡ ( x [ j ] ) ) \text{loss}(x, class) = -\log\left(\frac{\exp(x[class])}{\sum_j \exp(x[j])}\right) = -x[class] + \log\left(\sum_j \exp(x[j])\right) loss(x,class)=log(jexp(x[j])exp(x[class]))=x[class]+log(jexp(x[j]))
带入logits/tlabels,对于logits/t i i i行,labels i i i个数据来说
loss ( l o g i t s ( i ) / t , l a b e l s ( i ) ) = − log ⁡ ( exp ⁡ ( l o g i t s ( i ) [ l a b e l s ( i ) ] / t ) ∑ j = 0 N exp ⁡ ( l o g i t s ( i ) [ j ] / t ) ) \text{loss}(logits^{(i)}/t, labels^{(i)}) = -\log\left(\frac{\exp(logits^{(i)}[labels^{(i)}]/t)}{\sum_{j=0}^N \exp(logits^{(i)}[j]/t)}\right) loss(logits(i)/t,labels(i))=log(j=0Nexp(logits(i)[j]/t)exp(logits(i)[labels(i)]/t))
考虑labels=zeros(N)
loss ( l o g i t s ( i ) / t , 0 ) = − log ⁡ ( exp ⁡ ( l o g i t s ( i ) [ 0 ] / t ) ∑ j = 0 N exp ⁡ ( l o g i t s ( i ) [ j ] / t ) ) \text{loss}(logits^{(i)}/t,0) = -\log\left(\frac{\exp(logits^{(i)}[0]/t)}{\sum_{j=0}^N \exp(logits^{(i)}[j]/t)}\right) loss(logits(i)/t,0)=log(j=0Nexp(logits(i)[j]/t)exp(logits(i)[0]/t))
l o g i t s ( i ) [ 0 ] = q k + , l o g i t s ( i ) [ j ] = q k j logits^{(i)}[0]=qk_+,logits^{(i)}[j]=qk_j logits(i)[0]=qk+,logits(i)[j]=qkj
loss ( l o g i t s ( i ) / t , 0 ) = − log ⁡ ( exp ⁡ ( q k + / τ ) ∑ j = 0 N exp ⁡ ( q k j / t ) ) \text{loss}(logits^{(i)}/t,0) = -\log\left(\frac{\exp(qk_+/\tau)}{\sum_{j=0}^N \exp(qk_j/t)}\right) loss(logits(i)/t,0)=log(j=0Nexp(qkj/t)exp(qk+/τ))

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值