我正在尝试训练一个自动编码器(在 PyTorch 中)来重建基因图谱。目前我正在使用均方误差 (MSE) 损失进行训练:模型没有过度拟合,并且训练和验证损失都在减少。问题是原始向量和重构向量之间验证集的余弦相似度的平均值为 0.4。我正在考虑使用余弦相似度作为损失函数而不是 MSE。
在以下链接(幻灯片 18)中,作者提出了以下损失:
我不完全确定这是否是正确的方法,但即使理解公式我也遇到了一些困难。什么是 (余弦相似度 和 ?) 为什么它是损失的输入?
我正在尝试训练一个自动编码器(在 PyTorch 中)来重建基因图谱。目前我正在使用均方误差 (MSE) 损失进行训练:模型没有过度拟合,并且训练和验证损失都在减少。问题是原始向量和重构向量之间验证集的余弦相似度的平均值为 0.4。我正在考虑使用余弦相似度作为损失函数而不是 MSE。
在以下链接(幻灯片 18)中,作者提出了以下损失:
我不完全确定这是否是正确的方法,但即使理解公式我也遇到了一些困难。什么是 (余弦相似度 和 ?) 为什么它是损失的输入?
嘿,所以 Cosine Similarity 的 Keras 实现称为 Cosine Proximity。它只有一个小的变化,就是cosine proximity = -1*(Cosine Similarity)
两个向量。这样做是为了与梯度下降中最小化的损失函数保持一致。
x_pred
详细地说,和之间的角度更高x_true
。较低的是余弦值。该值接近 0x_pred
并x_true
变为正交。如果 和 之间的角度x_true
很小x_pred
,则值接近 1。
因此,从逻辑上讲,随着模型的收敛,余弦邻近损失值接近 -1。
至于用法,我建议仅在生成向量的大小不如它们之间的角度重要时才使用此损失。这实际上取决于您要解决的问题。
深度学习与其说是一门科学,不如说是一门艺术,这意味着没有统一的“正确”或“错误”解决方案。在某些情况下,余弦相似度完全有可能比 MSE 效果更好。
在训练机器学习模型方面,没有任何损失函数被证明在系统上优于其他任何损失函数。您唯一能做的就是尝试所有可用选项并选择更适合您的数据和模型的选项。