【问题标题】:How can PyTorch train NN with only scalar loss?PyTorch 如何只用标量损失训练 NN?
【发布时间】:2021-05-29 19:14:08
【问题描述】:

假设我们有一个神经网络,我们想要训练它从输入中预测 3 个值。我们有一组训练数据:

x_train = ((1, 5, 3, 2, 6), (1, 8, 6, 9, 3), ...) 

和目标

y_train = ((25, 32, 0.12), (.125, -5, 8), ...)

如果 pytorch 只计算一个标量作为损失函数,它如何进行训练?为什么它不能计算与每个输出神经元相关的损失?例如,如果 x_train[0] 的答案是 (20, 32, 0.12),我们不想更新与答案相同的权重是 (25, 37, 0.12),对吧?但在这种情况下,使用 pytorch 计算的损失将是相同的,因为它(对于经典的 MSE 损失)意味着所有错误。

pytorch 如何在不知道错误来自何处的情况下训练正确的神经网络?

【问题讨论】:

  • 我投票结束这个问题,因为它不是关于 help center 中定义的编程,而是关于 ML 理论/方法。

标签: python machine-learning deep-learning neural-network


【解决方案1】:

您的问题与 pytorch 无关,而是与一般 NN 培训有关。

最后,每次训练都需要尽量减少损失。损失可能是很多东西,但最终它必须是标量的,因为最小化向量是不明确的。

NN 优化器不仅计算损失,还计算该损失相对于 NN 的所有可训练参数的梯度。所以在hand-waving中(不涉及大量方法),对loss影响大的参数会移动很多,而对loss影响不大的参数几乎不会变化。

这样它就知道“错误来自哪里”

【讨论】:

  • 感谢您的回答,它使事情变得更清楚了。但是,如果我有一个输出大小很大的 NN,并且一次有一个已知目标(即大输出层的一个预期结果),那么 NN 如何训练呢?例如在深度 Q 学习的情况下动作空间大:对于给定的 700 个输出,我只知道 700 个目标中的 1 个。我还能用标量损失训练我的 NN 吗?我有点不知道在这种情况下应该如何更新权重
猜你喜欢
  • 2020-10-24
  • 2016-08-26
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多