在训练深度学习模型时,正向传播和反向传播之间相互依赖。一方面正向传播的计算可能依赖于模型参数的当前值而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。另一方面,反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传播计算得到的。
因此,在模型参数初始化完成后,我们交替地进行正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。
正向传播是指对神经网络沿输入层到输出层的顺序,依次计算并存储模型的中间变量(每一层的输出)。
下面以一个使用权重衰减的单隐藏层的多层感知机为例,描述一下正向传播。
假设输入,隐藏层(h个隐藏单元)权重参数不考虑偏差参数的情况下,产生的中间变量为
将中间变量输入按元素运算的激活函数后,得到隐藏层的输出为
假设输出层(q个神经单元)权重参数为不考虑偏差参数的情况下,得到的输出层输出为
至此,正向传播完成,下面计算一下损失。
假设损失函数为,样本标签为,得到单个数据样本的损失项为
根据权重衰减的定义,给定超参数,惩罚项为
最终得到模型在样本上代正则化的损失为
将称为有关给定数据样本的目标函数。
通过计算图,我们可以可视化运算符和变量在计算中的依赖关系。其中左下角是输入,右上角是输出,箭头指向为输入,圆形为运算符号,方形为变量。
总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。
我们首先来回顾一下链式法则。对于函数和,通过链式法则,存在
反向传播就是依据链式法则的原理来计算神经网络中的参数梯度。对于上述无偏差参数的神经网络而言,它的参数是和。因此反向传播的目的就是计算和。
首先,根据目标函数,我们首先需要计算关于和的偏导数。
根据链式法则关于的梯度表达式和上式,可以得到
接下来,计算惩罚项关于和的梯度表达式
然后将沿着目标函数传播向输出层,可以计算出输出层变量与隐藏层权重参数之间的梯度表达式
现在,我们可以计算出关于的梯度表达式
沿着输出层向隐藏层继续反向传播,隐藏层变量的梯度可以这样计算
由于激活函数是按元素运算的,中间变量的梯度的计算需要使用按元素乘法符⊙
最终得到关于的梯度表达式
根据两式,我们可以计算并存储目标函数有关神经网络参数的梯度。