对于深度学习,拥有百万级别的参数的神经网络,使用梯度下降中计算梯度的方法一个一个更新参数找到最优参数的效率低。所以引入新的算法

继续使用前面计算梯度的方法(数值微分法):

  • 对于100万个参数,计算着100万个参数的梯度需要跑100万次。每次只改变一个参数的值,保持其余参数值不变得到lll 后计算梯度。使用反向传播就只需要前向传播一次就能够得到所有参数的梯度(后面解释)。
    反向传播(Backpropagation)可以让你计算梯度的向量时,有效率的计算出来。

链式法则

在这里插入图片描述

反向传播主要用到链式法则:
对于case2:背后的逻辑是线性近似。当 sss 有一个微小的变化 Δs\Delta sΔs 时,zzz 的总变化量 Δz\Delta zΔz 等于各条路径贡献的变化量之和:
dzds=∂z∂xdxds+∂z∂ydyds\frac{dz}{ds} = \frac{\partial z}{\partial x} \frac{dx}{ds} + \frac{\partial z}{\partial y} \frac{dy}{ds}dsdz=xzdsdx+yzdsdy

反向传播

  • 损失函数(Loss function):定义在单个训练样本上。
  • 代价函数(cost function):定义在整个训练集上,是所有样本的误差的综合的平均→\rightarrow 损失函数总和的平均。
  • 总体损失函数(total loss function):定义整个训练集上,所有样本误差的总和。(反向传播需要最小化的值)
    在这里插入图片描述

对于L(θ)L(\theta)L(θ)就是所有lnl^nln的损失之和。根据链式法则中的case2化为对每个损失函数的偏微分之和。
先在整个神经网络中抽取一小部分的神经(Neuron):
![[attachment/Pasted image 20260328224601.png]]

取其中一个神经元(Neuron)分析:
![[attachment/Pasted image 20260328225251.png]]

计算梯度分为两个部分(链式法则):

  • 计算∂z∂w\frac{\partial z}{\partial w}wz(Forward pass的部分)
  • 计算∂l∂z​\frac{\partial l}{\partial z}​zl ( Backward pass的部分 )

前向传播(Forward pass)

∂z∂w\frac{\partial z}{\partial w}wz:根据目前的式子,∂z∂w1=x1∂z∂w2=x2\frac{\partial z}{\partial w_1} = x_1 \\ \frac{\partial z}{\partial w_2} = x_2w1z=x1w2z=x2
在这里插入图片描述

反向传播(Back Pass)

计算 ∂l∂z\frac{\partial l}{\partial z}zl 部分复杂一些,因为lll是最后一层才能计算出来:
在这里插入图片描述

激活函数以sigmoid函数为例:
∂l∂a=σ′(z)\frac{\partial l}{\partial a}={\sigma}'(z)al=σ(z)
在这里插入图片描述

最终化简结果:
在这里插入图片描述

  1. 对于∂l∂z′\frac{\partial l}{\partial z'}zl∂l∂z′′​\frac{\partial l}{\partial z''}​z′′l是最后一层的隐藏层
    在这里插入图片描述

能够直接计算出∂l∂z′\frac{\partial l}{\partial z'}zl∂l∂z′′​\frac{\partial l}{\partial z''}​z′′l
2. 对于∂l∂z′\frac{\partial l}{\partial z'}zl∂l∂z′′​\frac{\partial l}{\partial z''}​z′′l是不是最后一层的隐藏层
在这里插入图片描述

我们就需要继续往后面计算,知道遇到输出层,然后从后往前计算得到∂l∂w\frac{\partial l}{\partial w}wl
所以对于:
在这里插入图片描述

采用这样的计算方法:
在这里插入图片描述

实际上进行反向传播的时候和前向传播的计算量差不多

总结

通过计算∂z∂w\frac{\partial z}{\partial w}wz(Forward pass的部分)和计算∂l∂z\frac{\partial l}{\partial z}zl ( Backward pass的部分 ),然后把∂z∂w\frac{\partial z}{\partial w}wz∂l∂z\frac{\partial l}{\partial z}zl相乘,得到∂l∂w​\frac{\partial l}{\partial w}​wl 。得到所有神经网络中所有参数的梯度,然后就可以使用梯度下降的算法不断更新参数得到损失最小的函数。
![[attachment/Pasted image 20260329001424.png]]

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐