传统上,似乎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)
更新 我试图预测word2vec所以在采样期间我可以根据预测矢量的最近邻居选择下一个单词。
答案 0 :(得分:4)
您想要预测单词嵌入的原因是什么?你从哪里得到“地面真相”一词嵌入?对于word2vec模型,您通常会在未来的模型中重复使用经过训练的字嵌入。如果您训练的word2vec
模型的嵌入大小为50,那么您将拥有50-d嵌入,您可以将其保存并在未来的模型中使用。如果您只想重新创建现有的地面实况word2vec模型,那么您可以使用这些值。典型的word2vec将通过continuous-bag-of-words or skip-gram定期进行softmax输出,然后保存生成的单词嵌入。
如果你真的有理由尝试生成一个创建试图匹配word2vec的模型,那么在这里查看你的损失函数是一些建议。我不相信你应该正常化你的输出或你的目标 - 你可能希望那些不受影响(如果你已将它们标准化,目标不再是“基本事实”目标。而且,它似乎你正在使用{{ 1}}现已被弃用并替换为dim=0
。您是否为axis
尝试了不同的值?这应该代表计算余弦距离的维度,我认为{{1}维度将是错误的维度(因为这可能应该是批量大小。我会尝试使用dim
(最后维度)或0th
的值,看看您是否观察到任何差异。
另外,你的优化/学习率是多少?如果学习率太小,那么实际上你可能无法向正确的方向移动。