深度学习理论:正向传播与反向传播

摘自《动手学习深度学习》

这里将带L2范数正则化的含单隐藏层的多层感知机为例解释

 

正向传播(forward propagation)

指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出),下图中左下角x为输入,右上角J为输出,方框代表变量,圆圈代表运算符,箭头表示从输入到输出之间的依赖关系。

输入样本为:x∈Rd,不考虑偏差,则中间变量为:

 是隐藏层的权重。将  输入按元素计算的激活函数  ,得到长度为h的向量(隐藏层变量) ,h 也是中间变量。

假设输出层只有权重  ,可得长度为q的向量(输出层变量)

设损失函数为ℓ ,且样本标签为y,则单个数据样本的损失为:

由L2范数定义,给定超参数λ ,正则化项为:

矩阵的Frobenius范数等价于将矩阵变平为向量后计算L2范数,最终模型带正则化的损失为:

 

反向传播(back-propagation)

是指计算神经网络参数梯度的方法。依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度

链式法则

对输入或输出X,Y,Z 为任意形状张量的函数Y=f(X) 和Z=g(Y) ,根据链式法则有:

prod运算符将根据两个输入的形状,在必要的操作(如转置和互换输入位置)后对两个输入做乘法

根据以上计算图,反向传播目标是求: 和 

这里应用链式法则依次计算各中间变量和参数的梯度,其计算次序与前向传播中相应中间变量的计算次序恰恰相反

目标函数  关于损失L和正则化项s的梯度为:

J 关于输出层变量o 的梯度 为:

(J 和L 为标量,o 为长度为q的向量,所有求导后变成q维向量,详见矩阵求导)

正则化项s 关于两个权重参数的梯度:

先计算靠近输出层的参数W(2) 的梯度: :

沿输出层向隐藏层继续反向传播,隐藏层变量h的梯度: 为:

于激活函数ϕ是按元素运算的,中间变量z的梯度  的计算需要使用按元素乘法符⊙:

 

最终得到最靠近输入层的模型参数W(1)的梯度: 为:

 

正向传播与反向传播关系

  • 在训练深度学习模型时,正向传播和反向传播之间相互依赖
  • 正向传播的计算可能依赖于模型参数的当前值,而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的,如计算正则化项s,依赖模型参数W(1)和W(2)的当前值,而这些当前值是优化算法最近一次根据反向传播算出梯度后迭代得到的
  • 反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传播计算得到的,如∂J/∂W(2)计算需要依赖隐藏层变量的当前值hh。这个当前值是通过从输入层到输出层的正向传播计算并存储得到的
  • 在反向传播中使用了正向传播中计算得到的中间变量来避免重复计算,这导致正向传播结束后不能立即释放中间变量内存。这也是训练要比预测占用更多内存的一个重要原因
  • 中间变量的个数大体上与网络层数线性相关,每个变量的大小与批量大小和输入个数也是线性相关的,它们是导致较深的神经网络使用较大批量训练时更容易超内存的主要原因

 

转自:3.14. 正向传播、反向传播和计算图

矩阵求导

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(深度学习)