nce loss 和

Posted charlesblc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nce loss 和相关的知识,希望对你有一定的参考价值。

今天在训练word vec的时候,用的是nce_loss. 官方sample和我写的可视化示例里面,都用的这个 nce_loss。

 

今天找了一下解释,找到这个页面:

https://www.zhihu.com/question/50043438/answer/254300443

 

说实话,没怎么看懂,先摘抄下来:


Tensorflow实现了两种常用与word2vec的loss,sampled softmax和NCE,这两种loss本身可以用于任意分类问题。

之前一直不太懂这两种方法,感觉高深莫测,正好最近搞懂了,借tensorflow的代码和大家一起分享一下我的理解,也记录一下思路。

这两个方法跟绝大多数deep learning的方法一样,相当粗暴。

目的

两个方法的目标是在分类的数量太大时,简化softmax计算,采取估算的方法得到softmax的值。

 


 

Intuitive explanation

NCE loss的直观想法:把多分类问题转化成二分类。

之前计算softmax的时候class数量太大,NCE索性就把分类缩减为二分类问题。

之前的问题是计算某个类的归一化概率是多少,二分类的问题是input和label正确匹配的概率是多少。

二分类问题群众喜闻乐见,直接上logistic regression估算一下概率。

(这算不算是通俗易懂回答了答主的问题)

 


 

Sampled softmax则是只抽取一部分样本计算softmax。这个想法也很好理解,训练的时候我不需要特别精准的softmax归一化概率,我只需要一个粗略值做back propoagation就好了。当然这么粗糙的计算会不会出什么问题,从我个人的理解上看,不会。

大部分优化器很可能比这粗糙的多,deep learning就是门乱拳打死老师傅的学科。

 

以上是关于nce loss 和的主要内容,如果未能解决你的问题,请参考以下文章

4 关于word2vec的skip-gram模型使用负例采样nce_loss损失函数的源码剖析

Keras 自定义loss函数 focal loss + triplet loss

L1 loss L2 loss

交叉熵损失函数和focal loss

深度学习训练集和测试集loss损失值关系

loss函数之triplet loss