四时宝库

程序员的知识宝库

AI课堂第12讲:DL深度学习——模型正向传播、反...


在前面几节课的代码演示中,我们都是先通过模型的正向传播(forward propagation)对输入计算模型输出,利用损失函数得出预测值和真实值的损失值,然后使用反向传播算法(back-propagation)快速计算目标函数关于各个参数的梯度,最后使用随机梯度下降算法(Stochastic Gradient Descent,SGD)基于前面得到的梯度值计算loss函数局部最小值,从而求解权重并更新网络参数。

基于反向传播算法(back-propagation)的?动求梯度极?简化了深度学习模型训练算法的实现。

这?节我们将使?数学和计算图(computational graph)两个?式来描述正向传播和反向传播。具体地,我们将以带 L2 范数正则化的单隐藏层感知机为样例模型解释正向传播和反向传播。

1.正向传播

正向传播是指对神经?络沿着从输?层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。为简单起?,假设输?是?个特征为 x ∈ Rd 的样本,且不考虑偏差项,那么中间变量


其中W(1) ∈ Rh×d 是隐藏层的权重参数。把中间变量z ∈ Rh 输?按元素操作的激活函数? 后,

我们将得到向量?度为h 的隐藏层变量

h = ?(z).

隐藏变量h 也是?个中间变量。假设输出层参数只有权重W(2) ∈ Rq×h,我们可以得到向量?度

为q 的输出层变量

o = W(2)h.

假设损失函数为?,且样本标签为y,我们可以计算出单个数据样本的损失项

L = ?(o, y)

根据L2 范数正则化的定义,给定超参数λ,正则化项即


其中矩阵的Frobenius 范数等价于将矩阵变平为向量后计算L2 范数。最终,模型在给定的数据

样本上带正则化的损失为

J = L + s.

我们将J 称为有关给定数据样本的?标函数,并在以下的讨论中简称?标函数。

2.正向传播的计算图

通常绘制计算图来可视化运算符和变量在计算中的依赖关系,一般来说,计算图中左下角是输入,右上角是输出。其中方框代表变量,圆圈代表运算符,箭头表示从输入到输出之间的依赖关系。


3.反向传播

反向传播指的是计算神经网络参数梯度的方法。总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。对输入或输出X , Y , Z 为任意形状张量的函数Y = f ( X ) 和Z = g ( Y ) ,通过链式法则,有:

?

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

例中的模型,它的参数是W(1) 和W(2) ,因此反向传播的目标是计算目标函数对参数的导数?J/?W(1)和?J/?W(2)。

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

首先,分别计算目标函数J = L + s 有关损失项L和正则项s 的梯度:


其次,依据链式法则计算目标函数有关输出层变量的梯度?J/?o ∈ Rq:

?接下来,计算正则项有关两个参数的梯度:

?


现在,我们可计算最靠近输出层的模型参数的梯度?J/?W(2) ∈ Rq×h。依据链式法则,得到:

?

沿着输出层向隐藏层继续反向传播,隐藏层变量的梯度?J/?h ∈ Rh 计算如下:

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


最终,可以得到最靠近输入层的模型参数的梯度?J/?W(1) ∈ Rh×d。依据链式法则,得到:


4.正向传播和反向传播的训练关系

在训练深度学习模型时,正向传播和反向传播之间相互依赖。

一方面,正向传播的计算可能依赖于模型参数的当前值。而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。

例如,计算正则化项


依赖模型参数W(1) 和 W(2) 的当前值。而这些当前值是优化算法最近?次根据反向传播算出梯度后迭代得到的。

另一方面,反向传播的梯度计算可能依赖于各变量的当前值。而这些变量的当前值是通过正向传播计算得到的。举例来说,参数梯度 ?J/?W(2) = (?J/?o)hT + λW(2) 的计算需要依赖隐藏层变量的当前值 h。这个当前值是通过从输?层到输出层的正向传播计算并存储得到的。

因此,在模型参数初始化完成后,我们交替地进?正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。既然我们在反向传播中使?了正向传播中计算得到的中间变量来避免重复计算,那么这个重?也导致正向传播结束后不能?即释放中间变量内存。这也是训练要?预测占?更多内存的?个重要原因。另外需要指出的是,这些中间变量的个数跟?络层数线性相关,每个变量的?小跟批量?小和输?个数也是线性相关的,它们是导致较深的神经?络使?较?批量训练时更容易超内存的主要原因。

总结

正向传播沿着从输?层到输出层的顺序,依次计算并存储神经?络的中间变量。

反向传播沿着从输出层到输?层的顺序,依次计算并存储神经?络中间变量和参数的梯度。

所谓反向传播,传播的是损失,也就是根据最后的损失,计算网络中每一个节点的梯度,这里利用了链式法则,使得梯度的计算并不是很复杂。

在训练深度学习模型时,正向传播和反向传播相互依赖。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接