tensorflow中samples_softmax_loss和nce_loss有什么区别?

王乐义*_*王乐义 9 sampling tensorflow

我注意到有两个函数关于张量流中的负采样来计算损失(sampled_softmax_lossnce_loss).这两个函数的参数类似,但我真的想知道这两个函数有什么区别?

rme*_*ens 1

采样的 softmax 尝试对输出中的所有样本进行标准化。具有非正态分布(标签上的对数),这不是最佳损失函数。请注意,尽管它们具有相同的参数,但使用该函数的方式不同。查看此处的文档: https: //github.com/calebchoo/Tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard4/tf.nn.nce_loss.md并阅读这一行:

默认情况下,这使用对数均匀 (Zipfian) 分布进行采样,因此您的标签必须按频率降序排序才能获得良好的结果。有关更多详细信息,请参阅 log_uniform_candidate_sampler。

看看这篇论文,他们解释了为什么将其用于词嵌入:http://papers.nips.cc/paper/5165-learning-word-embeddings-efficiently-with-noise-contrastive-estimation.pdf

希望这可以帮助!