【发布时间】:2024-07-10 08:40:02
【问题描述】:
传统上,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,因此在采样期间我可以根据预测向量的最近邻居选择下一个单词。
【问题讨论】:
-
很难说为什么没有发生收敛,因为它可能是许多超参数的函数。但是,有一件事让我印象深刻:在损失计算中发生标准化的余弦距离不会模棱两可吗?可能有无限多个具有相同损失的向量(例如,任何重新缩放)。因此,也许在训练过程中,它会围绕相似向量的一系列不同缩放比例振荡,并且这些比例会不断产生相同的损失,因此看不出它们之间有任何区别。
-
也许在损失之前将归一化步骤添加为一层,因此网络只能产生归一化向量,而梯度将是 w.r.t.每个组件中的标准化值。否则,也许尝试使用不同的损失,例如向量差的均方误差,也许还添加一个核正则化器来惩罚预测向量的 l2 范数。至少,只是看看收敛特性是否与余弦距离情况不同。如果不是,那么可能需要研究批量大小、梯度问题和其他超参数。
-
我也被成本只有一个标量值所困扰,因为 word2vec 的“空间”信息会丢失。我也尝试过使用 MSE,但我无法让它工作。我会尝试你的建议,看看我是否能让 MSE 工作
标签: python tensorflow machine-learning deep-learning