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

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

首先计算损失 L 对输出层线性组合z(3)\mathbf{z}^{(3)}z(3) 的梯度,我们称之为误差 δ(3)δ^{(3)}δ(3)

根据定义我们写出计算公式如下 δ(3)=∂L∂z3\delta^{(3)} = \frac{∂L}{∂z_{3}}δ(3)=∂z3∂L

我们来推导下通解 ∂L∂zk\frac{∂L}{∂z_{k}}∂zk∂L

可按链式法则写为 ∂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}}∂zk∂L=∑i=1K∂ai∂L∂zk∂ai

因为交叉熵损失为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}}∂ai∂L=−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}. ∂zk∂L=i=1∑K(−aiti)∂zk∂ai.

接下来需要求出 ∂ai∂zk\frac{\partial a_i}{\partial z_k}∂zk∂ai(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=k 和 i≠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(1−ak)=−tk(1−ak).

当 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=k∑−aiti(−aiak)=i=k∑tiak.

因为 aka_kak与求和无关,因此项2=ak∑i≠kti.\text{项2} = a_k \sum_{i\neq k} t_i.项2=aki=k∑ti.因为 one-hot 编码下,只有某一个分量为 1,其余为 0。假设目标类别为 k∗k^*k∗,那么对于 k=k∗k=k^*k=k∗有 tk∗=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. ∂zk∗∂L=−1(1−ak∗)+ak∗i=k∗∑0=ak∗−1.

对于 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}∂zk∂L=−0(1−ak)+ak(1)=ak

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

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

权重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)∂L⋅∂W(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=1∑2Wji(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=1∑2Wjk(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 这个转置是链式法则中的维度匹配,是元素级求导和维度匹配共同的结果,当然也符合反向传递和矩阵乘法逻辑要求。后面这个结论可以直接用。