什么意味着word2vec上的nce_weights的stddev?

时间:2016-07-12 04:38:48

标签: tensorflow word2vec

我试图了解word2vec示例的工作原理,并且不太明白为什么设置nce_weights的stddev。

nce_weights = tf.Variable(
  tf.truncated_normal([vocabulary_size, embedding_size],
                      stddev=1.0 / math.sqrt(embedding_size)))

我尝试删除stddev参数然后运行它。但是找不到任何差异。

stddev表示标准偏差。为什么使用stddev参数以及示例中的stddev值是什么意思?

谢谢。

1 个答案:

答案 0 :(得分:0)

nce_weights 是用于实现噪声对比估计训练技术的分类器权重,这是一种训练具有大量标签的分类器的有效方法(参见第34节中的解释;缩放在最初链接的word2vec tutorial中进行噪音对比训练"

这些权重将在培训期间学习,但首先需要在培训开始时进行初始化。我们通过从截断的正态分布中绘制随机权重(正态分布,其中所有值均在其均值的2个标准差内)来实现。这是通过在tf.truncated_normal的调用中将tf.Variable op作为初始化程序传递来实现的。截断的常规初始值设定项将形状,均值和标准差作为参数(请参阅上面链接的参数及其定义页面)。最后两个是我们将要绘制的截断高斯分布的充分统计数据。

当你没有传递这些内容时(正如你所提到的),它们只是初始化为默认值(在stddev的情况下为1.0)。