训练RNN输出word2vec而不是logits

sil*_*min 10 python machine-learning deep-learning tensorflow

传统上,似乎RNN使用logits来预测序列中的下一个时间步.在我的情况下,我需要RNN输出word2vec(50深度)矢量预测.这意味着成本函数基于2个向量:Y系列中下一个单词的实际向量和Y_hat网络预测.

我尝试过使用cosine distance成本函数,但网络似乎没有学习(我让它在AWS P3上运行其他10个小时,成本总是在0.7左右)

这种模式有可能吗?如果是这样,应该使用什么成本函数?

TF中的余弦距离:

cosine_distance = tf.losses.cosine_distance(tf.nn.l2_normalize(outputs, 2), tf.nn.l2_normalize(targets, 2), axis=2)
Run Code Online (Sandbox Code Playgroud)

更新: 我正在尝试预测word2vec,因此在采样期间我可以根据预测矢量的最近邻居选择下一个单词.

ree*_*106 5

您想预测词嵌入的原因是什么?你从哪里得到“ground truth”词嵌入?对于 word2vec 模型,您通常会在未来的模型中重新使用经过训练的词嵌入。如果您训练了word2vec一个嵌入大小为 50的模型,那么您将拥有 50 维嵌入,您可以将其保存并在未来的模型中使用。如果您只想重新创建现有的真实 word2vec 模型,那么您可以只使用这些值。典型的 word2vec 将通过连续词袋或跳过词获得常规的 softmax 输出,然后保存生成的词嵌入。

如果您确实有理由尝试生成一个创建尝试匹配 w​​ord2vec 的模型,那么看看您的损失函数,这里有一些建议。我不认为你应该标准化你的输出或你的目标——你可能希望它们不受影响(如果你对它们进行了标准化,目标不再是“基本事实”目标。此外,看来你正在使用dim=0which 有现在已弃用并替换为axis。您是否尝试过不同的值dim?这应该代表计算余弦距离的0th维度,我认为该维度将是错误的维度(因为这可能应该是批量大小。我会尝试使用axis=-1(最后一个维度)的值,或者axis=1看看您是否观察到任何差异。

另外,您的优化器/学习率是多少?如果学习率太小,那么您实际上可能无法朝着正确的方向前进。