当给它提供多个训练样本时如何优化神经网络的权重?

数据挖掘 神经网络
2022-03-06 06:37:02

在此处输入图像描述

我的问题是:

假设我们有一个 3 x 1 的神经网络,类似于图像中的那个(输入层有 3 个神经元,输出层有一个神经元但没有隐藏层),我发现计算前向和反向传播的输出没有问题当用一个训练样本(即 feature1、feature2、feature3 输入)给神经网络喂食时,我确切地知道我的初始权重是如何优化的,我发现的问题是每次给 NN 喂食多个训练输入时,在这里,我没有不知道如何优化初始权重。

例如,我们有 3 × 3 矩阵的训练输入。

[[195, 90, 41],
[140, 50, 30],
[180, 85, 43]]

第一列是身高,第二列:体重,第三列:鞋码,我们先给 NN 输入第一行,然后是第二行和第三行。我们知道,要在给 NN 提供一个训练样本时计算新的权重,我们依赖这个公式:New_weights = Initial_weights - learning_rate ×(损失函数对权重的导数)。

但是,当我们为 NN 提供多个训练示例时,我们使用哪个公式?我们是计算所有 dw 的平均值(损失函数对权重的导数),还是我们将所有这些求和然后乘以学习率并从初始权重中减去它们还是什么?我在这里有点困惑。

如果你们中的任何人能解释在为 NN 提供多个训练输入时如何修改初始权重,我将不胜感激。

2个回答

但是,当我们为 NN 提供多个训练示例时,我们使用哪个公式?我们是计算所有 dw 的平均值(损失函数对权重的导数),还是我们将所有这些求和然后乘以学习率并从初始权重中减去它们还是什么?

这是批量梯度优化,因此您可以对batch 中所有训练示例的梯度进行平均。

旁注:原则上,您可以使用多个训练时期(= 对整个数据集进行多次迭代)并在每个时期更新一次权重。但是,对于大型数据集(如 ImageNet),您将数据集划分为多个批次,并且每批次更新一次权重。您还可以将每个批次进一步细分为小批次,并在每个小批次中更新一次。细分完全取决于您,并且是一种临时性的,但最近的一篇论文2表明,使用和之间的小 minibatch 可以获得始终如一的更高性能32此外,您的学习率应根据批量大小适当调整。

我们是计算所有 dw 的平均值(损失函数对权重的导数),还是我们将所有这些求和然后乘以学习率并从初始权重中减去它们还是什么?

如果你这样做也没关系。权重更新公式为:

new_weights = initial_weights - learning_rate * average(gradient_over_all_samples).

虽然计算平均值是经验法则,但这并不重要,因为计算平均值只是将它乘以一个标量,该标量1/n可以被分解并乘以学习率。因此,无需显式计算平均值,只需将其包含在其中即可learning_rate节省您的时间、计算和代码。

SGD 和您正在进行的批量学习之间的唯一区别是,更新是在遍历整个数据集之后进行的,而在 SGD 中,更新是在遍历单个示例之后进行的。