首页 文章

训练RNN输出word2vec而不是logits

提问于
浏览
10

传统上,似乎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)

Update: 我试图预测word2vec所以在采样过程中我可以根据预测矢量的最近邻点选择下一个单词 .

1 回答

  • 4

    您想要预测单词嵌入的原因是什么?你从哪里得到"ground truth"字嵌入?对于word2vec模型,您通常会在未来的模型中重复使用经过训练的单词嵌入 . 如果您训练了嵌入大小为50的 word2vec 模型,那么您将拥有50-d嵌入,您可以将其保存并在未来的模型中使用 . 如果您只想重新创建现有的地面实况word2vec模型,那么您可以使用这些值 . 典型的word2vec将通过continuous-bag-of-words or skip-gram进行常规softmax输出,然后保存生成的字嵌入 .

    如果你确实有理由尝试生成一个创建试图匹配word2vec的模型,那么在这里查看你的损失函数是一些建议 . 我不相信你应该正常化你的输出或你的目标 - 你可能希望那些不受影响(如果你已将它们标准化,目标不再是"ground truth"目标 . 而且,它似乎你正在使用 dim=0 ,现在已经弃用并替换为 axis . 您是否尝试了 dim 的不同值?这应该表示计算余弦距离的维度,我认为 0th 维度是错误的维度(因为这可能应该是批量大小 . 我会尝试使用 axis=-1 (最后一个维度)或 axis=1 的值,看看你是否观察到任何差异 .

    另外,你的优化/学习率是多少?如果学习率太小,那么实际上你可能无法向正确的方向移动 .

相关问题