神经网络误差和梯度公式推导

发布于:2025-07-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

输出误差公式从定义出发的推导过程

首先计算损失 L 对输出层线性组合z(3)\mathbf{z}^{(3)}z(3) 的梯度,我们称之为误差 δ(3)δ^{(3)}δ(3)
根据定义我们写出计算公式如下 δ(3)=∂L∂z3\delta^{(3)} = \frac{∂L}{∂z_{3}}δ(3)=z3L
我们来推导下通解 ∂L∂zk\frac{∂L}{∂z_{k}}zkL

可按链式法则写为 ∂L∂zk=∑i=1K∂L∂ai∂ai∂zk\frac{∂L}{∂z_{k}}=\sum_{i=1}^{K}\frac{∂L}{∂a_{i}} \frac{∂a_{i}}{∂z_{k}}zkL=i=1KaiLzkai

因为交叉熵损失为L=−∑i=13tiln⁡(ai)L=−\sum_{i=1}^{3}t_{i}\ln(a_{i})L=i=13tiln(ai) 根据基本函数导数,第一部分等于 ∂L∂ai=−tiai\frac{∂L}{∂a_{i}}=-\frac{t_{i}}{a_{i}}aiL=aiti

代入链式法则,有
∂L∂zk=∑i=1K(−tiai)∂ai∂zk. \frac{\partial L}{\partial z_k} = \sum_{i=1}^{K} \left(-\frac{t_i}{a_i}\right) \frac{\partial a_i}{\partial z_k}. zkL=i=1K(aiti)zkai.

接下来需要求出 ∂ai∂zk\frac{\partial a_i}{\partial z_k}zkai(Softmax 的雅可比矩阵)其结果为:

$$
\frac{\partial a_i}{\partial z_k} =
\begin{cases}
a_i (1 - a_i), & i=k,\[1mm]

  • a_i a_k, & i \neq k.
    \end{cases}
    $$

将求和拆开,分两种情况讨论 i=ki=ki=ki≠ki \neq ki=k
i=ki=ki=k 时:项1=−tkak ak(1−ak)=−tk(1−ak).\text{项1} = -\frac{t_k}{a_k}\, a_k (1-a_k) = -t_k (1-a_k).1=aktkak(1ak)=tk(1ak).
i≠ki \neq ki=k 时:项2=∑i≠k−tiai (−aiak)=∑i≠kti ak.\text{项2} = \sum_{i\neq k} -\frac{t_i}{a_i} \,(-a_i a_k) = \sum_{i\neq k} t_i\, a_k.2=i=kaiti(aiak)=i=ktiak.
因为 aka_kak与求和无关,因此项2=ak∑i≠kti.\text{项2} = a_k \sum_{i\neq k} t_i.2=aki=kti.因为 one-hot 编码下,只有某一个分量为 1,其余为 0。假设目标类别为 k∗k^*k,那么对于 k=k∗k=k^*k=ktk∗=1t_{k^*}=1tk=1 和对其他 iii ti=0t_i=0ti=0

因此对于 k=k∗k=k^*k=k(正确类别):
∂L∂zk∗=−1(1−ak∗)+ak∗∑i≠k∗0=ak∗−1. \frac{\partial L}{\partial z_{k^*}} = -1(1-a_{k^*}) + a_{k^*}\sum_{i\neq k^*} 0 = a_{k^*} - 1. zkL=1(1ak)+aki=k0=ak1.
对于 k≠k∗k \neq k^*k=k∂L∂zk=−0 (1−ak)+ak (1)=ak\frac{\partial L}{\partial z_k} = -0\,(1-a_{k}) + a_{k}\, (1) = a_{k}zkL=0(1ak)+ak(1)=ak

因此可以统一写成∂L∂zk=ak−tk,\frac{\partial L}{\partial z_k} = a_k - t_k,zkL=aktk,

权重梯度公式从定义出发的推导过程

权重W(2)\mathbf{W}^{(2)}W(2) 的梯度按照定义其公式∂L∂W(2)\frac{∂L}{∂W^{(2)}}W(2)L
通过链式法则如下:
∂L∂W(2)=∂L∂z(3)⋅∂z(3)∂W(2) \frac{∂L}{∂W^{(2)}}=\frac{∂L}{∂z^{(3)}}\cdot \frac{∂z^{(3)}}{∂W^{(2)}} W(2)L=z(3)LW(2)z(3)
z(3)=W(2).a(2)+b(2)z^{(3)}=W^{(2)}.a^{(2)}+b^{(2)}z(3)=W(2).a(2)+b(2)展开
zj(3)=∑i=12Wji(2)⋅ai(2)+bj(2)(j=1,2,3) z_{j}^{(3)}=\sum_{i=1}^{2}W_{ji}^{(2)} \cdot a^{(2)}_{i}+b^{(2)}_{j} (j=1,2,3) zj(3)=i=12Wji(2)ai(2)+bj(2)(j=1,2,3)
对单个元素求导(根据求导规则只有k=i时,Wji(2)W_{ji}^{(2)}Wji(2) 会出现在求和公式中化简如下)
∂zj(3)∂Wji(2)=∂∂Wji(2)(∑k=12Wjk(2)⋅ak(2)+bj(2))=ai(2) \frac{∂z_{j}^{(3)}}{∂W_{ji}^{(2)}}=\frac{∂}{∂W_{ji}^{(2)}} \left( \sum_{k=1}^{2}W_{jk}^{(2)} \cdot a^{(2)}_{k}+b^{(2)}_{j} \right)=a_{i}^{(2)} Wji(2)zj(3)=Wji(2)(k=12Wjk(2)ak(2)+bj(2))=ai(2)

其实求偏导的时候不用考虑bj(2)b_{j}^{(2)}bj(2) ,会变成0,所以我们可以把矩阵乘法∑k=12Wjk(2)⋅ak(2)\sum_{k=1}^{2}W_{jk}^{(2)} \cdot a^{(2)}_{k}k=12Wjk(2)ak(2) 展开
[w11a1+w21a2w12a1+w22a2w13a1+w23a2] \begin{bmatrix} w_{11}a_{1}+ w_{21}a_{2} \\ w_{12}a_{1}+ w_{22}a_{2} \\ w_{13}a_{1}+ w_{23}a_{2} \\ \end{bmatrix} w11a1+w21a2w12a1+w22a2w13a1+w23a2
W(2)W^{(2)}W(2) 任意元素wijw_{ij}wij求偏导导 为 aja_{j}aj ,矩阵求偏导具体结果如下:
∂z(3)∂W(2)=[a1a2a1a2a1a2] \frac{∂z^{(3)}}{∂W^{(2)}}=\begin{bmatrix} a_{1} & a_{2} \\ a_{1} & a_{2} \\ a_{1} & a_{2} \\ \end{bmatrix} W(2)z(3)= a1a1a1a2a2a2
这就是一个雅可比矩阵,就是因变量对自变量的一阶偏导数构成的矩阵。因为δ(3)\delta^{(3)}δ(3) (3x1矩阵)和 ∂z(3)∂W(2)\frac{∂z^{(3)}}{∂W^{(2)}}W(2)z(3) (3x2矩阵)按照正规矩阵无法相乘,但由于∂z(3)∂W(2)\frac{∂z^{(3)}}{∂W^{(2)}}W(2)z(3) 每行都相同都是 (a(2))T(\mathbf{a}^{(2)})^T(a(2))T (1x2矩阵),可以用向量与矩阵的逐行加权做"乘法",具体就是把δ(3)\delta^{(3)}δ(3) 看作3个标量(δ1(3),δ2(3),δ3(3)\delta_{1}^{(3)},\delta_{2}^{(3)},\delta_{3}^{(3)}δ1(3),δ2(3),δ3(3)) , 然后每一个δi(3)\delta_{i}^{(3)}δi(3)∂z(3)∂W(2)\frac{∂z^{(3)}}{∂W^{(2)}}W(2)z(3) 的第i行((a(2))T(\mathbf{a}^{(2)})^T(a(2))T)相乘, 结果按照行堆叠,最终结果和δ(3)⋅(a(2))T\delta^{(3)} \cdot (\mathbf{a}^{(2)})^Tδ(3)(a(2))T 完全等价。所以

∂L∂Wij(2)=δi(3)⋅aj(2) \frac{\partial L}{\partial W_{ij}^{(2)}} = \delta_i^{(3)} \cdot a_j^{(2)} Wij(2)L=δi(3)aj(2)

其中 iii 表示输出层的神经元索引 (1 到 3),jjj 表示隐层神经元索引 (1 到 2)。故可写成矩阵形式:
∇W(2)L=δ(3)⋅(a(2))T \nabla_{\mathbf{W}^{(2)}} L = \delta^{(3)} \cdot (\mathbf{a}^{(2)})^T W(2)L=δ(3)(a(2))T
这个转置是链式法则中的维度匹配,是元素级求导和维度匹配共同的结果,当然也符合反向传递和矩阵乘法逻辑要求。后面这个结论可以直接用。


网站公告

今日签到

点亮在社区的每一天
去签到