为什么我们在训练神经网络时要同时更新所有层?

人工智能 神经网络 深度学习 反向传播 梯度下降 批量标准化
2021-11-18 07:02:39

非常深的模型涉及多个功能或层的组合。在其他层不变的假设下,梯度告诉如何更新每个参数。在实践中,我们同时更新所有层。

以上是 Ian Goodfellow 的深度学习的摘录——其中谈到了批量标准化的必要性。

为什么我们同时更新所有层?相反,如果我们在反向传播期间一次更新一个层——它将消除批量标准化的需要,对吗?

参考:深度神经网络的批量归一化简介

PS 附加链接说:因为在更新期间所有层都发生了变化,所以更新过程永远追逐一个移动的目标除了主要问题之外,如果有人能解释为什么在上面的句子中准确地提到了一个移动目标,那就太好了。

1个回答

为什么我们在训练神经网络时要同时更新所有层?

我们通常使用梯度下降和反向传播来训练神经网络。梯度下降是用于更新参数的迭代算法,反向传播是用于计算每个参数的损失函数梯度的算法。

让我们表示一个包含神经网络的所有可学习参数的向量M经过w=[w1,,wn]Rn(所以M包含n可学习的参数),损失函数M经过L, 损失函数相对于每个参数的梯度wiM经过L=[Lw1,,Lwn]Rn,那么更新所有参数的梯度下降步骤是

(1)wwγL

在哪里γR是学习率。

在等式中1,我们分配给w价值wγL,所以我们正在更新所有参数w同时,所以我们也在同时更新所有层。

原则上,您可以更新每个参数wi分别。更准确地说,您将拥有以下更新规则

(2)wiwiγLwi,i

所以,你可以先更新w1, 然后w2, 等等。

实际上,您不需要按顺序更新参数(也因为参数没有真正的顺序)。您实际上可以以任何其他方式更新它们。您可以以任何方式更新参数,因为虽然梯度的计算高度依赖于神经网络的结构(所以如果你改变结构,梯度的计算也会改变),一旦计算了梯度,你已经拥有所有信息以相互独立地更新每个参数。

您通常会同时更新所有参数(或层),因为在实践中,您使用向量和矩阵而不是标量,以便从高效的矩阵乘法算法和硬件(即 GPU)中受益。