当专家建议Word2Vec不使用偏差时,为什么Tensorflow的采样softmax损耗会迫使您使用偏差?

当专家建议Word2Vec不使用偏差时,为什么Tensorflow的采样softmax损耗会迫使您使用偏差?,tensorflow,deep-learning,word2vec,word-embedding,Tensorflow,Deep Learning,Word2vec,Word Embedding,我所看到的Word2Vec的所有tensorflow实现在负采样softmax函数中都有偏差,包括在tensorflow官方网站上 这是来自谷歌的免费深度学习课程 然而,从Andrew Ng和Richard Socher的讲座中,他们不包括在他们的负面抽样软词典中的偏差。 即使在这个想法产生的地方,米科洛夫说: 在神经网络中不使用偏差,因为没有显著差异 在奥卡姆剃须刀之后,性能得到了改善, 解决方案尽可能简单 Mikolov,T.:基于神经网络的统计语言模型,p。29 那么,为什么官方tens

我所看到的Word2Vec的所有tensorflow实现在负采样softmax函数中都有偏差,包括在tensorflow官方网站上

这是来自谷歌的免费深度学习课程

然而,从Andrew Ng和Richard Socher的讲座中,他们不包括在他们的负面抽样软词典中的偏差。 即使在这个想法产生的地方,米科洛夫说:

在神经网络中不使用偏差,因为没有显著差异 在奥卡姆剃须刀之后,性能得到了改善, 解决方案尽可能简单

Mikolov,T.:基于神经网络的统计语言模型,p。29

那么,为什么官方tensorflow实施有偏差,为什么似乎没有一个选项不在采样的softmax损耗函数中包含偏差?

将softmax偏差定义为零:

softmax_biases = tf.Variable(tf.zeros([vocabulary_size]))
也就是说:他们在word2vec示例中没有使用任何实际的偏差


采样的_softmax_损失函数是通用的,用于许多神经网络;它要求偏差参数的决定与特定神经网络应用word2vec的最佳情况无关,并通过允许此处的所有零来适应word2vec的情况。

我是否还需要指定不训练偏差以便它们保持在零?我不知道;如果你在训练后检查偏差,它们是否被改变了?它们被改变了,所以我必须明确地告诉它只训练其他变量。啊哈!好奇的是,如何指定不训练偏差?optimizer=tf.train.AdamOptimizer.minimizecost,var_list=[要训练的变量1,要训练的变量2,等等]
 loss = tf.reduce_mean(
    tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=embed,
                               labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))
softmax_biases = tf.Variable(tf.zeros([vocabulary_size]))