深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导
文章目录
- 补充知识:∇ 和 ⊙ 运算符详解
- ∇ (nabla) 运算符
- ⊙ (圆圈点) 运算符
- 反向传播基本公式
- 计算图和基本定义
- BP1:输出层误差推导
- BP1公式的重要性
- 实际例子
- BP2第 l l l层误差推导
- BP3 :损失函数关于偏置(b)偏导的推导
- BP4: 损失函数关于权值(w)偏导推导
补充知识:∇ 和 ⊙ 运算符详解
- 在神经网络的反向传播算法中,我们经常会遇到像 δ L = ∇ a L ⊙ f ′ ( z L ) δᴸ = ∇ₐL ⊙ f'(zᴸ) δL=∇aL⊙f′(zL) 这样的表达式。让我们来深入探讨其中的 ∇ (nabla) 和 ⊙ (圆圈点) 运算符。
∇ (nabla) 运算符
-
∇ 符号在数学中被称为 “nabla” 或 “del” 运算符,它表示梯度(gradient)。在神经网络中:
-
∇ₐL 表示损失函数 L 相对于网络最后一层激活输出 aᴸ 的梯度
-
这是一个向量,其中每个元素是损失函数对相应激活值的偏导数
-
数学表达式为: ∇ a L = [ ∂ L / ∂ a 1 , ∂ L / ∂ a 2 , . . . , ∂ L / ∂ a n ] T ∇ₐL = [∂L/∂a₁, ∂L/∂a₂, ..., ∂L/∂aₙ]ᵀ ∇aL=[∂L/∂a1,∂L/∂a2,...,∂L/∂an]T
-
在反向传播中, ∇ a L ∇ₐL ∇aL 告诉我们如果稍微改变输出层的激活值,损失函数会如何变化。这是误差从损失函数向后传播的第一步。
⊙ (圆圈点) 运算符
-
⊙ 符号表示逐元素乘法(也称为 Hadamard 乘积):
-
它作用于两个相同维度的向量或矩阵。不是矩阵乘法,而是简单地对相应位置的元素相乘
-
数学表达式为: ( A ⊙ B ) i j = A i j × B i j (A ⊙ B)ᵢⱼ = Aᵢⱼ × Bᵢⱼ (A⊙B)ij=Aij×Bij
反向传播基本公式
方程 | 含义 |
---|---|
δ L = ∇ a L ⊙ f ′ ( z L ) \delta^{L} = \nabla_{a} L \odot f^{\prime}(z^{L}) δL=∇aL⊙f′(zL) | BP1 输出层误差 |
δ l = ( ( w l ) T δ l + 1 ) ⊙ f ′ ( z l ) \delta^{l} = ((w^{l})^{T} \delta^{l+1}) \odot f^{\prime}(z^{l}) δl=((wl)Tδl+1)⊙f′(zl) | BP2 第 l l l 层误差 |
∂ L ∂ b i l = δ i l \frac{\partial L}{\partial b_{i}^{l}} = \delta_{i}^{l} ∂bil∂L=δil | BP3 损失函数关于偏置(b)的偏导 |
∂ L ∂ w i , j l = a j l − 1 δ i l \frac{\partial L}{\partial w_{i,j}^{l}} = a_{j}^{l-1} \delta_{i}^{l} ∂wi,jl∂L=ajl−1δil | BP4 损失函数关于权值(w)的偏导 |
计算图和基本定义
- 损失函数: L = 1 2 ( y − a l ) 2 L=\frac{1}{2}(y-a^l)^2 L=21(y−al)2
- 通项: a l = δ ( z l ) = δ ( w l a l − 1 + b l ) a^l=\delta(z^l)=\delta(w^la^{l-1}+b^l) al=δ(zl)=δ(wlal−1+bl)
- 定义第 l l l层的第 i i i个神经元的误差为 δ i l \delta_i^l δil
δ i l = ∂ L ∂ z i l \delta_i^l=\frac{\partial L}{\partial z_i^l} δil=∂zil∂L
BP1:输出层误差推导
- 前置公式
- 损失函数: L = 1 2 ( y − a l ) 2 L=\frac{1}{2}(y-a^l)^2 L=21(y−al)2
- 第 l l l层神经元关系 a l = δ ( z l ) a^l = \delta(z^l) al=δ(zl)
-
采用上图中 l − 1 l-1 l−1层 z 1 z_1 z1节点为例
δ = ∂ L ∂ z 1 l = ∂ L ∂ a 1 l × ∂ a 1 l ∂ z 1 l = ∂ [ 1 2 ( y 1 − a 1 l ) 2 ] ∂ a 1 l × ∂ a 1 l ∂ z 1 l = 2 × 1 2 ( a 1 l − y 1 ) × ∂ a 1 l ∂ z 1 l = ( a 1 l − y 1 ) δ ′ ( z 1 l ) = ∇ a L ⊙ f ′ ( z 1 L ) \begin{align*} \delta &=\frac{\partial L}{\partial z_1^l} \\ &=\frac{\partial L}{\partial a_1^l} \times \frac{\partial a_1^l}{\partial z_1^l} \\ &=\frac{\partial [\frac{1}{2}(y_1-a_1^l)^2]}{\partial a_1^l}\times \frac{\partial a_1^l}{\partial z_1^l} \\ &=2\times \frac{1}{2} (a_1^l-y_1) \times \frac{\partial a_1^l}{\partial z_1^l} \\ &=(a_1^l-y_1) \delta^{'}(z_1^l) \\ &= \nabla_{a} L \odot f^{\prime}(z_1^{L}) \\ \end{align*} δ=∂z1l∂L=∂a1l∂L×∂z1l∂a1l=∂a1l∂[21(y1−a1l)2]×∂z1l∂a1l=2×21(a1l−y1)×∂z1l∂a1l=(a1l−y1)δ′(z1l)=∇aL⊙f′(z1L) -
总结:输出层误差通用公式为: δ L = ∇ a L ⊙ f ′ ( z L ) \delta^{L} = \nabla_{a} L \odot f^{\prime}(z^{L}) δL=∇aL⊙f′(zL)
-
f ′ ( z L ) f'(zᴸ) f′(zL) 是激活函数的导数在 z L zᴸ zL 处的值
-
这个逐元素乘法将梯度信息与激活函数的局部变化率结合起来
BP1公式的重要性
- 这个 δᴸ 公式是输出层的误差项,它是反向传播的起点。通过它,误差可以继续向网络的前层传播:
- ∇ a L ∇ₐL ∇aL告诉我们损失函数对输出的敏感度
- f ′ ( z L ) f'(zᴸ) f′(zL)告诉我们激活函数在当前输入下的变化率
- 它们的逐元素乘积给出了完整的误差信号 δ L δᴸ δL
实际例子
- 假设我们有一个简单的输出层,使用 sigmoid 激活函数:
- 设 a L = [ 0.8 , 0.3 ] , y = [ 1 , 0 ] aᴸ = [0.8, 0.3], y = [1, 0] aL=[0.8,0.3],y=[1,0] (真实标签)
- 使用平方误差损失: L = ½ ∣ ∣ y − a L ∣ ∣ 2 L = ½||y - aᴸ||² L=½∣∣y−aL∣∣2
- 则 ∇ a L = a L − y = [ − 0.2 , 0.3 ] ∇ₐL = aᴸ - y = [-0.2, 0.3] ∇aL=aL−y=[−0.2,0.3]
- sigmoid 的导数 f ′ ( z ) = a ( 1 − a ) f'(z) = a(1-a) f′(z)=a(1−a),设 f ′ ( z L ) = [ 0.16 , 0.21 ] f'(zᴸ) = [0.16, 0.21] f′(zL)=[0.16,0.21]
- 那么 δ L = [ − 0.2 , 0.3 ] ⊙ [ 0.16 , 0.21 ] = [ − 0.032 , 0.063 ] δᴸ = [-0.2, 0.3] ⊙ [0.16, 0.21] = [-0.032, 0.063] δL=[−0.2,0.3]⊙[0.16,0.21]=[−0.032,0.063]
BP2第 l l l层误差推导
- 前置公式:
- z l + 1 = w l + 1 a l + b l + 1 z^{l+1}=w^{l+1}a^{l}+b^{l+1} zl+1=wl+1al+bl+1
- a l + 1 = δ ( z l ) a^{l+1}=\delta(z^l) al+1=δ(zl)
δ l = ∂ L ∂ z l = ∂ L ∂ z i l + 1 × ∂ z i l + 1 ∂ z i l = δ i l + 1 × ∂ z i l + 1 a l × ∂ a l ∂ z l = δ i l + 1 × ( w l ) T × δ ′ ( z l ) = ( ( w l ) T δ i l + 1 ) ⊙ δ ′ ( z l ) \begin{align*} \delta^{l} &= \frac{\partial L}{\partial z^{l}}\\ &=\frac{\partial L}{\partial z_i^{l+1}} \times \frac{\partial z_i^{l+1}}{\partial z_i^{l}} \\ &=\delta_i^{l+1} \times \frac{\partial z_i^{l+1}}{a^l} \times \frac{\partial a^l}{\partial z^{l}}\\ &=\delta_i^{l+1} \times (w^l)^T \times \delta^{'}(z^l)\\ &=((w^l)^T \delta_i^{l+1}) \odot \delta^{'}(z^l) \end{align*} δl=∂zl∂L=∂zil+1∂L×∂zil∂zil+1=δil+1×al∂zil+1×∂zl∂al=δil+1×(wl)T×δ′(zl)=((wl)Tδil+1)⊙δ′(zl)
- 总结:BP2第 l l l层误差公式为: δ l = ( ( w l ) T δ l + 1 ) ⊙ f ′ ( z l ) \delta^{l} = ((w^{l})^{T} \delta^{l+1}) \odot f^{\prime}(z^{l}) δl=((wl)Tδl+1)⊙f′(zl)
BP3 :损失函数关于偏置(b)偏导的推导
-
前置公式
- a 1 l = δ ( z 1 l ) a_1^l=\delta(z_1^l) a1l=δ(z1l)和 a 2 l = δ ( z 2 l ) a_2^l=\delta(z_2^l) a2l=δ(z2l)
- z l = w l a l − 1 + b l z^l=w^la^{l-1}+b^l zl=wlal−1+bl
-
求上图中 b 1 b_1 b1的偏导
∂ L ∂ b 1 = ∂ L ∂ z 1 l × ∂ z 1 l ∂ b 1 l = δ 1 l × 1 = δ 1 l \begin{align*} \frac{\partial L}{\partial b_1} &=\frac{\partial L}{\partial z_1^l} \times \frac{\partial z_1^l}{\partial b_1^l} \\ &= \delta_1^l \times 1 \\ &= \delta_1^l \end{align*} ∂b1∂L=∂z1l∂L×∂b1l∂z1l=δ1l×1=δ1l -
求上图中 b 2 b_2 b2的偏导
∂ L ∂ b 2 = ∂ L ∂ z 2 l × ∂ z 2 l ∂ b 2 l = δ 2 l × 1 = δ 2 l \begin{align*} \frac{\partial L}{\partial b_2} &=\frac{\partial L}{\partial z_2^l} \times \frac{\partial z_2^l}{\partial b_2^l} \\ &= \delta_2^l \times 1 \\ &= \delta_2^l \end{align*} ∂b2∂L=∂z2l∂L×∂b2l∂z2l=δ2l×1=δ2l -
总结:BP3 损失函数关于偏置(b)偏导为: ∂ L ∂ b i l = δ i l \frac{\partial L}{\partial b_{i}^{l}} = \delta_{i}^{l} ∂bil∂L=δil
BP4: 损失函数关于权值(w)偏导推导
- 前置公式
- z l = w l a l − 1 + b l z^l=w^la^{l-1}+b^l zl=wlal−1+bl
- δ i l = ∂ L ∂ z i l \delta_i^l=\frac{\partial L}{\partial z_i^l} δil=∂zil∂L
- 详细推导过程:
∂ L ∂ w i , j l = ∂ L ∂ z i l × ∂ z i l ∂ w i , j l = ∂ L ∂ z i l × a j l − 1 = δ i l × a j l − 1 = a j l − 1 × δ i l \begin{align*} \frac{\partial L}{\partial w_{i,j}^l} &=\frac{\partial L}{\partial z_i^l} \times \frac{\partial z_i^l}{\partial w_{i,j}^l} \\ &=\frac{\partial L}{\partial z_i^l} \times a_j^{l-1} \\ &= \delta_i^l \times a_j^{l-1} \\ &= a_j^{l-1} \times \delta_i^l \end{align*} ∂wi,jl∂L=∂zil∂L×∂wi,jl∂zil=∂zil∂L×ajl−1=δil×ajl−1=ajl−1×δil - 总结:BP4: 损失函数关于权值(w)偏导为: ∂ L ∂ w i , j l = a j l − 1 δ i l \frac{\partial L}{\partial w_{i,j}^{l}} = a_{j}^{l-1} \delta_{i}^{l} ∂wi,jl∂L=ajl−1δil