AI课堂第12讲DL深度学习模型正向传播反向传播计算图
在前面几节课的代码演示中,我们都是先通过模型的正向传播(forwardpropagation)对输入计算模型输出,利用损失函数得出预测值和真实值的损失值,然后使用反向传播算法(backpropagation)快速计算目标函数关于各个参数的梯度,最后使用随机梯度下降算法(StochasticGradientDescent,SGD)基于前面得到的梯度值计算loss函数局部最小值,从而求解权重并更新网络参数。
模型训练关键步骤
基于反向传播算法(backpropagation)的动求梯度极简化了深度学习模型训练算法的实现。
这节我们将使数学和计算图(computationalgraph)两个式来描述正向传播和反向传播。具体地,我们将以带L2范数正则化的单隐藏层感知机为样例模型解释正向传播和反向传播。
1。正向传播
正向传播是指对神经络沿着从输层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。为简单起,假设输是个特征为xRd的样本,且不考虑偏差项,那么中间变量
网络计算的中间变量
其中W(1)Rhd是隐藏层的权重参数。把中间变量zRh输按元素操作的激活函数后,
我们将得到向量度为h的隐藏层变量
h(z)。
隐藏变量h也是个中间变量。假设输出层参数只有权重W(2)Rqh,我们可以得到向量度
为q的输出层变量
oW(2)h。
假设损失函数为,且样本标签为y,我们可以计算出单个数据样本的损失项
L(o,y)
根据L2范数正则化的定义,给定超参数,正则化项即
正则化惩罚项
其中矩阵的Frobenius范数等价于将矩阵变平为向量后计算L2范数。最终,模型在给定的数据
样本上带正则化的损失为
JLs。
我们将J称为有关给定数据样本的标函数,并在以下的讨论中简称标函数。
2。正向传播的计算图
通常绘制计算图来可视化运算符和变量在计算中的依赖关系,一般来说,计算图中左下角是输入,右上角是输出。其中方框代表变量,圆圈代表运算符,箭头表示从输入到输出之间的依赖关系。
正向传播的计算图
3。反向传播
反向传播指的是计算神经网络参数梯度的方法。总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。对输入或输出X,Y,Z为任意形状张量的函数Yf(X)和Zg(Y),通过链式法则,有:
链式法则求导
其中prod运算将根据两个输入的形状,在必要的操作(如转置和互换输入位置)后对两个输入做乘法。
例中的模型,它的参数是W(1)和W(2),因此反向传播的目标是计算目标函数对参数的导数JW(1)和JW(2)。
应用链式法则则依次计算各中间变量和参数的梯度,其计算次序与前向传播中相应中间变量的计算次序恰恰相反。
首先,分别计算目标函数JLs有关损失项L和正则项s的梯度:
其次,依据链式法则计算目标函数有关输出层变量的梯度JoRq:
接下来,计算正则项有关两个参数的梯度:
现在,我们可计算最靠近输出层的模型参数的梯度JW(2)Rqh。依据链式法则,得到:
沿着输出层向隐藏层继续反向传播,隐藏层变量的梯度JhRh计算如下:
由于激活函数是按元素运算的,中间变量z的梯度JzRh的计算需要使用按元素乘法符:
最终,可以得到最靠近输入层的模型参数的梯度JW(1)Rhd。依据链式法则,得到:
4。正向传播和反向传播的训练关系
在训练深度学习模型时,正向传播和反向传播之间相互依赖。
一方面,正向传播的计算可能依赖于模型参数的当前值。而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。
例如,计算正则化项
依赖模型参数W(1)和W(2)的当前值。而这些当前值是优化算法最近次根据反向传播算出梯度后迭代得到的。
另一方面,反向传播的梯度计算可能依赖于各变量的当前值。而这些变量的当前值是通过正向传播计算得到的。举例来说,参数梯度JW(2)(Jo)hTW(2)的计算需要依赖隐藏层变量的当前值h。这个当前值是通过从输层到输出层的正向传播计算并存储得到的。
因此,在模型参数初始化完成后,我们交替地进正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。既然我们在反向传播中使了正向传播中计算得到的中间变量来避免重复计算,那么这个重也导致正向传播结束后不能即释放中间变量内存。这也是训练要预测占更多内存的个重要原因。另外需要指出的是,这些中间变量的个数跟络层数线性相关,每个变量的小跟批量小和输个数也是线性相关的,它们是导致较深的神经络使较批量训练时更容易超内存的主要原因。
总结
正向传播沿着从输层到输出层的顺序,依次计算并存储神经络的中间变量。
反向传播沿着从输出层到输层的顺序,依次计算并存储神经络中间变量和参数的梯度。
所谓反向传播,传播的是损失,也就是根据最后的损失,计算网络中每一个节点的梯度,这里利用了链式法则,使得梯度的计算并不是很复杂。
在训练深度学习模型时,正向传播和反向传播相互依赖。