本文是交叉熵损失函数为代表的两层神经网络的反向传播量化求导计算公式中的一个公式,单独拿出来做一下解释说明。
公式 8-14 是反向传播算法中,计算损失函数对输出层权重 w 2 w_2 w2 的梯度。它表示的是在反向传播过程中,如何通过链式求导计算出损失函数 L L L 对权重 w 2 w_2 w2 的影响。
公式 8-14 的表达式为:
∂
L
∂
w
2
=
1
m
∑
i
=
1
m
(
a
2
−
y
)
a
1
(8-14)
\frac{\partial L}{\partial w_2} = \frac{1}{m} \sum_{i=1}^{m} (a_2 - y) a_1 \tag{8-14}
∂w2∂L=m1i=1∑m(a2−y)a1(8-14)
让我们详细推导和解释这个公式。
背景
反向传播的目的是通过最小化损失函数来调整神经网络中的参数。为了调整参数,我们需要计算损失函数关于每个参数的梯度。在这个公式中,我们计算的是输出层的权重 w 2 w_2 w2 对损失函数的影响,即梯度 ∂ L ∂ w 2 \frac{\partial L}{\partial w_2} ∂w2∂L。
公式中的符号解释
- L L L:损失函数,通常在二分类问题中使用交叉熵损失。
- w 2 w_2 w2:输出层的权重,它连接隐藏层神经元和输出层神经元。
- a 1 a_1 a1:隐藏层神经元的激活值,是通过激活函数(如 sigmoid 或 ReLU)计算得来的。
- a 2 a_2 a2:输出层的激活值,通常通过 sigmoid 函数从加权和 z 2 z_2 z2 中计算出来。
- y y y:真实标签,表示样本的真实类别(0 或 1)。
- m m m:训练集中的样本数量。
- i i i:样本的索引。
公式的含义
公式 8-14 计算的是损失函数对每个输出层权重 w 2 w_2 w2 的梯度,这个梯度用于指导权重的更新。通过链式法则,损失函数对权重的导数可以表示为损失对输出层加权和 z 2 z_2 z2 的导数与隐藏层激活值 a 1 a_1 a1 的乘积。
公式中的梯度更新过程基于梯度下降法,我们通过逐层传播误差来更新权重。
推导过程
为了推导公式 8-14,让我们从损失函数对权重的导数入手,并结合反向传播的步骤来进行推导。
-
损失函数对 w 2 w_2 w2 的导数:
通过链式法则,损失函数 L L L 对权重 w 2 w_2 w2 的导数可以写为:
∂ L ∂ w 2 = ∂ L ∂ z 2 ⋅ ∂ z 2 ∂ w 2 \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial z_2} \cdot \frac{\partial z_2}{\partial w_2} ∂w2∂L=∂z2∂L⋅∂w2∂z2其中:
- ∂ L ∂ z 2 \frac{\partial L}{\partial z_2} ∂z2∂L 是损失函数对输出层加权和 z 2 z_2 z2 的导数。
- ∂ z 2 ∂ w 2 \frac{\partial z_2}{\partial w_2} ∂w2∂z2 是输出层加权和 z 2 z_2 z2 对权重 w 2 w_2 w2 的导数。
-
计算 ∂ z 2 ∂ w 2 \frac{\partial z_2}{\partial w_2} ∂w2∂z2:
输出层的加权和 z 2 z_2 z2 的定义为:
z 2 = w 2 ⋅ a 1 + b 2 z_2 = w_2 \cdot a_1 + b_2 z2=w2⋅a1+b2因此, z 2 z_2 z2 对 w 2 w_2 w2 的导数是:
∂ z 2 ∂ w 2 = a 1 \frac{\partial z_2}{\partial w_2} = a_1 ∂w2∂z2=a1这表示输出层的加权和 z 2 z_2 z2 对每个权重 w 2 w_2 w2 的导数等于隐藏层的激活值 a 1 a_1 a1,因为权重 w 2 w_2 w2 是与 a 1 a_1 a1 直接相连的。
-
计算 ∂ L ∂ z 2 \frac{\partial L}{\partial z_2} ∂z2∂L:
公式 8-13 给出了损失函数对输出层加权和 z 2 z_2 z2 的导数为:
∂ L ∂ z 2 = a 2 − y \frac{\partial L}{\partial z_2} = a_2 - y ∂z2∂L=a2−y这表示输出层的激活值 a 2 a_2 a2 与真实标签 y y y 之间的差异。
-
结合链式法则:
现在,我们将这两个导数结合起来,得到:
∂ L ∂ w 2 = ( a 2 − y ) ⋅ a 1 \frac{\partial L}{\partial w_2} = (a_2 - y) \cdot a_1 ∂w2∂L=(a2−y)⋅a1这表示损失函数对权重 w 2 w_2 w2 的导数等于输出层误差 ( a 2 − y ) (a_2 - y) (a2−y) 和隐藏层激活值 a 1 a_1 a1 的乘积。
-
对所有样本求和并取平均:
由于我们通常是在批量(mini-batch)或整个训练集上更新权重,因此需要对所有样本的梯度求和并取平均。假设我们有 m m m 个训练样本,那么公式 8-14 中,我们需要对所有样本的导数求和,得到:
∂ L ∂ w 2 = 1 m ∑ i = 1 m ( a 2 ( i ) − y ( i ) ) a 1 ( i ) \frac{\partial L}{\partial w_2} = \frac{1}{m} \sum_{i=1}^{m} (a_2^{(i)} - y^{(i)}) a_1^{(i)} ∂w2∂L=m1i=1∑m(a2(i)−y(i))a1(i)这里的 i i i 表示第 i i i 个样本, a 2 ( i ) a_2^{(i)} a2(i) 和 y ( i ) y^{(i)} y(i) 分别表示第 i i i 个样本的输出和真实标签。
总结公式 8-14
公式 8-14 总结了反向传播中损失函数对输出层权重 w 2 w_2 w2 的梯度计算方式。通过链式法则,我们知道:
- 损失函数对权重 w 2 w_2 w2 的导数等于输出层的误差 ( a 2 − y ) (a_2 - y) (a2−y) 乘以隐藏层的激活值 a 1 a_1 a1。
- 最终,我们对所有样本的梯度求和并取平均,以得到在整个训练集上的梯度。
这个梯度用于更新输出层的权重,以便在下一次前向传播中,模型的预测结果能够更加接近真实值,逐渐最小化损失函数。