输出误差公式从定义出发的推导过程
首先计算损失 L 对输出层线性组合z(3) 的梯度,我们称之为误差 δ(3)
根据定义我们写出计算公式如下 δ(3)=∂z3∂L,我们要求同解 ∂zk∂L ,可按链式法则写为 ∂zk∂L=∑i=1K∂ai∂L∂zk∂ai
因为交叉熵损失为L=−∑i=13tiln(ai) 根据基本函数导数,第一部分等于 ∂ai∂L=−aiti
接下来需要求出 ∂zk∂ai(Softmax 的雅可比矩阵),接下来需要求出 ∂zk∂ai(Softmax 的雅可比矩阵)。其结果为:
∂zk∂ai={ai(1−ai),−aiak,i=k,i=k.
代入链式法则,有
∂zk∂L=i=1∑K(−aiti)∂zk∂ai.
将求和拆开,分两种情况讨论 i=k 和 i=k:
当 i=k 时:项1=−aktkak(1−ak)=−tk(1−ak).
当 i=k 时:项2=∑i=k−aiti(−aiak)=∑i=ktiak.
因为 ak与求和无关,因此项2=ak∑i=kti.因为 one-hot 编码下,只有某一个分量为 1,其余为 0。假设目标类别为 k∗,那么对于 k=k∗有 tk∗=1 和对其他 i ti=0。
因此对于 k=k∗(正确类别):
∂zk∗∂L=−1(1−ak∗)+ak∗i=k∗∑0=ak∗−1.
对于 k=k∗: ∂zk∂L=−0(1−ak)+ak(1)=ak.
因此可以统一写成∂zk∂L=ak−tk,
权重梯度公式从定义出发的推导过程
权重W(2) 的梯度按照定义其公式∂W(2)∂L
通过链式法则如下:
∂W(2)∂L=∂z(3)∂L⋅∂W(2)∂z(3)
把z(3)=W(2).a(2)+b(2)展开
zj(3)=i=1∑2Wji(2)⋅ai(2)+bj(2)(j=1,2,3)
对单个元素求导(根据求导规则只有k=i时,Wji(2) 会出现在求和公式中化简如下)
∂Wji(2)∂zj(3)=∂Wji(2)∂(k=1∑2Wjk(2)⋅ak(2)+bj(2))=ai(2)
其实求偏导的时候不用考虑bj(2) ,会变成0,所以我们可以把矩阵乘法∑k=12Wjk(2)⋅ak(2) 展开
w11a1+w21a2w12a1+w22a2w13a1+w23a2
对W(2) 任意元素wij求偏导导 为 aj ,矩阵求偏导具体结果如下:
∂W(2)∂z(3)=a1a1a1a2a2a2
这就是一个雅可比矩阵,就是因变量对自变量的一阶偏导数构成的矩阵。因为δ(3) (3x1矩阵)和 ∂W(2)∂z(3) (3x2矩阵)按照正规矩阵无法相乘,但由于∂W(2)∂z(3) 每行都相同都是 (a(2))T (1x2矩阵),可以用向量与矩阵的逐行加权做"乘法",具体就是把δ(3) 看作3个标量(δ1(3),δ2(3),δ3(3)) , 然后每一个δi(3) 与 ∂W(2)∂z(3) 的第i行((a(2))T)相乘, 结果按照行堆叠,最终结果和δ(3)⋅(a(2))T 完全等价。所以
∂Wij(2)∂L=δi(3)⋅aj(2)
其中 i 表示输出层的神经元索引 (1 到 3),j 表示隐层神经元索引 (1 到 2)。故可写成矩阵形式:
∇W(2)L=δ(3)⋅(a(2))T
这个转置是链式法则中的维度匹配,是元素级求导和维度匹配共同的结果,当然也符合反向传递和矩阵乘法逻辑要求。后面这个结论可以直接用。