我注意到在TensorFlow中有两个函数可以用于计算损失,分别为sampled_softmax_loss和nce_loss。这两个函数的参数非常相似,但我真的想知道它们之间的区别是什么?
我注意到在TensorFlow中有两个函数可以用于计算损失,分别为sampled_softmax_loss和nce_loss。这两个函数的参数非常相似,但我真的想知道它们之间的区别是什么?
样本softmax的主要目标是选取给定数量的样本并尝试获得softmax损失。 这里的主要目标是使采样softmax的结果等于我们真实的softmax。 因此,算法基本上集中在从给定分布中选择这些样本。
另一方面,NCE损失更多地是选择噪声样本并尝试模仿真实的softmax。 它只会考虑一个真正的类别和K个噪声类别。
看一下这篇论文,在其中他们解释了为什么在单词嵌入中使用它:http://papers.nips.cc/paper/5165-learning-word-embeddings-efficiently-with-noise-contrastive-estimation.pdf。默认情况下,这使用对数均匀(Zipfian)分布进行采样,因此您的标签必须按降频顺序排序才能获得良好的结果。有关更多详细信息,请参见log_uniform_candidate_sampler。
看看 TensorFlow 的这份文档 https://www.tensorflow.org/extras/candidate_sampling.pdf 吧。
它们看起来非常相似,但是 Sampled Softmax 只适用于单标签的情况,而 NCE 扩展到标签为多重集的情况。NCE 可以建模期望计数而不是标签的存在/不存在。我不清楚何时使用 Sampled Softmax 的确切示例。