非常深的模型涉及多个功能或层的组合。在其他层不变的假设下,梯度告诉如何更新每个参数。在实践中,我们同时更新所有层。
以上是 Ian Goodfellow 的深度学习的摘录——其中谈到了批量标准化的必要性。
为什么我们同时更新所有层?相反,如果我们在反向传播期间一次更新一个层——它将消除批量标准化的需要,对吗?
PS 附加链接说:因为在更新期间所有层都发生了变化,所以更新过程永远追逐一个移动的目标。除了主要问题之外,如果有人能解释为什么在上面的句子中准确地提到了一个移动目标,那就太好了。
非常深的模型涉及多个功能或层的组合。在其他层不变的假设下,梯度告诉如何更新每个参数。在实践中,我们同时更新所有层。
以上是 Ian Goodfellow 的深度学习的摘录——其中谈到了批量标准化的必要性。
为什么我们同时更新所有层?相反,如果我们在反向传播期间一次更新一个层——它将消除批量标准化的需要,对吗?
PS 附加链接说:因为在更新期间所有层都发生了变化,所以更新过程永远追逐一个移动的目标。除了主要问题之外,如果有人能解释为什么在上面的句子中准确地提到了一个移动目标,那就太好了。
为什么我们在训练神经网络时要同时更新所有层?
我们通常使用梯度下降和反向传播来训练神经网络。梯度下降是用于更新参数的迭代算法,反向传播是用于计算每个参数的损失函数梯度的算法。
让我们表示一个包含神经网络的所有可学习参数的向量经过(所以包含可学习的参数),损失函数经过, 损失函数相对于每个参数的梯度的经过,那么更新所有参数的梯度下降步骤是
在哪里是学习率。
在等式中,我们分配给价值,所以我们正在更新所有参数同时,所以我们也在同时更新所有层。
原则上,您可以更新每个参数分别。更准确地说,您将拥有以下更新规则
所以,你可以先更新, 然后, 等等。
实际上,您不需要按顺序更新参数(也因为参数没有真正的顺序)。您实际上可以以任何其他方式更新它们。您可以以任何方式更新参数,因为虽然梯度的计算高度依赖于神经网络的结构(所以如果你改变结构,梯度的计算也会改变),一旦计算了梯度,你已经拥有所有信息以相互独立地更新每个参数。
您通常会同时更新所有参数(或层),因为在实践中,您使用向量和矩阵而不是标量,以便从高效的矩阵乘法算法和硬件(即 GPU)中受益。