动手学深度学习读书笔记-正向传播、反向传播和计算图

本文介绍了深度学习中的正向传播、反向传播和计算图。正向传播从输入层到输出层计算并存储中间变量;反向传播依据链式法则,从输出层到输入层计算目标函数有关各层中间变量及参数的梯度。训练模型时交替进行正反向传播,训练比预测更占内存,深层网络大批次训练易超内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正向传播、反向传播和计算图

正向传播

  • 正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。
  • 为简单起见,假设输入是一个特征为x∈Rd\boldsymbol{x} \in \mathbb{R}^dxRd的样本,且不考虑偏差项,那么中间变量
    z=W(1)x,\boldsymbol{z} = \boldsymbol{W}^{(1)} \boldsymbol{x},z=W(1)x,
    其中W(1)∈Rh×d\boldsymbol{W}^{(1)} \in \mathbb{R}^{h \times d}W(1)Rh×d是隐藏层的权重参数。把中间变量z∈Rh\boldsymbol{z} \in \mathbb{R}^hzRh输入按元素运算的激活函数ϕ\phiϕ后,将得到向量长度为hhh的隐藏层变量
    h=ϕ(z).\boldsymbol{h} = \phi (\boldsymbol{z}).h=ϕ(z).
    隐藏层变量h\boldsymbol{h}h也是一个中间变量。假设输出层参数只有权重W(2)∈Rq×h\boldsymbol{W}^{(2)} \in \mathbb{R}^{q \times h}W(2)Rq×h,可以得到向量长度为qqq的输出层变量
    o=W(2)h.\boldsymbol{o} = \boldsymbol{W}^{(2)} \boldsymbol{h}.o=W(2)h.
    假设损失函数为ℓ\ell,且样本标签为yyy,可以计算出单个数据样本的损失项
    L=ℓ(o,y).L = \ell(\boldsymbol{o}, y).L=(o,y).
    根据L2L_2L2范数正则化的定义,给定超参数λ\lambdaλ,正则化项即
    s=λ2(∥W(1)∥F2+∥W(2)∥F2),s = \frac{\lambda}{2} \left(\|\boldsymbol{W}^{(1)}\|_F^2 + \|\boldsymbol{W}^{(2)}\|_F^2\right),s=2λ(W(1)F2+W(2)F2),
    其中矩阵的Frobenius范数等价于将矩阵变平为向量后计算L2L_2L2范数。最终,模型在给定的数据样本上带正则化的损失为
    J=L+s.J = L + s.J=L+s.

计算图

在这里插入图片描述

反向传播

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

训练深度学习模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值