如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值。我们有一组训练数据:

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计算的损失将是相同的,因为对于经典的均方误差损失来说,它将意味着所有错误的总和。

PyTorch如何在不知道错误来源的情况下正确地训练神经网络呢?


回答:

你的问题并不仅限于PyTorch,而是关于一般的神经网络训练。

最终,每次训练都需要最小化损失。损失可以是多种形式,但最终必须是标量,因为最小化一个向量是模糊的。

神经网络的优化器不仅计算损失,还计算该损失相对于神经网络所有可训练参数的梯度。所以,简单来说(不涉及大量方法),对损失影响大的参数会发生较大的变化,而对损失影响小的参数几乎不会改变。

这样,它就能某种程度上知道“错误来自哪里”。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注