本文是交叉熵损失函数为代表的两层神经网络的反向传播量化求导计算公式中的一个公式,单独拿出来做一下解释说明。
公式 8-13 是反向传播过程中的一个关键步骤,用于计算损失函数对输出层激活值的导数。这个公式来自于链式法则,结合了交叉熵损失函数和 sigmoid 激活函数的导数。下面我们详细解释公式 8-13 的推导过程。
公式 8-13 的表达式:
∂ L ∂ z 2 = a 2 − y \frac{\partial L}{\partial z_2} = a_2 - y ∂z2∂L=a2−y
其中:
- L L L 是损失函数,具体是交叉熵损失函数 L ( y , a 2 ) L(y, a_2) L(y,a2)。
- z 2 z_2 z2 是输出层神经元的加权输入值(在应用 sigmoid 激活函数之前的值)。
- a 2 a_2 a2 是输出层神经元的激活值,即应用 sigmoid 函数后的输出。
- y y y 是真实标签。
- 公式 8-13 表示的是损失函数 L L L 对输出层加权输入 z 2 z_2 z2 的导数。
推导步骤:
1. 交叉熵损失函数:
交叉熵损失函数的表达式为(参考公式 8-11):
L
(
y
,
a
2
)
=
−
[
y
log
a
2
+
(
1
−
y
)
log
(
1
−
a
2
)
]
L(y, a_2) = -[y \log a_2 + (1 - y) \log(1 - a_2)]
L(y,a2)=−[yloga2+(1−y)log(1−a2)]
其中:
- y y y 是真实的标签, a 2 a_2 a2 是模型的输出(经过 sigmoid 激活函数的输出层激活值)。
我们希望通过反向传播来计算损失函数对输出层加权输入 z 2 z_2 z2 的导数。因此,我们需要结合交叉熵损失和 sigmoid 函数进行链式求导。
2. 激活函数(sigmoid):
sigmoid 函数的定义为:
a
2
=
σ
(
z
2
)
=
1
1
+
e
−
z
2
a_2 = \sigma(z_2) = \frac{1}{1 + e^{-z_2}}
a2=σ(z2)=1+e−z21
sigmoid 函数的导数可以通过如下推导得到:
d
σ
(
z
2
)
d
z
2
=
σ
(
z
2
)
(
1
−
σ
(
z
2
)
)
=
a
2
(
1
−
a
2
)
\frac{d\sigma(z_2)}{dz_2} = \sigma(z_2) (1 - \sigma(z_2)) = a_2 (1 - a_2)
dz2dσ(z2)=σ(z2)(1−σ(z2))=a2(1−a2)
其中,导数
d
σ
(
z
2
)
d
z
2
\frac{d\sigma(z_2)}{dz_2}
dz2dσ(z2) 表示激活值
a
2
a_2
a2 对加权输入
z
2
z_2
z2 的变化率。
3. 链式法则的应用:
为了计算损失函数对 z 2 z_2 z2 的导数 ∂ L ∂ z 2 \frac{\partial L}{\partial z_2} ∂z2∂L,我们可以利用链式法则。根据链式法则,损失函数对 z 2 z_2 z2 的导数可以表示为:
∂ L ∂ z 2 = ∂ L ∂ a 2 ⋅ ∂ a 2 ∂ z 2 \frac{\partial L}{\partial z_2} = \frac{\partial L}{\partial a_2} \cdot \frac{\partial a_2}{\partial z_2} ∂z2∂L=∂a2∂L⋅∂z2∂a2
即:损失函数对 z 2 z_2 z2 的导数等于损失函数对 a 2 a_2 a2 的导数乘以 a 2 a_2 a2 对 z 2 z_2 z2 的导数。
4. 计算损失函数对 a 2 a_2 a2 的导数:
根据交叉熵损失函数的公式,我们可以直接求出损失函数对
a
2
a_2
a2 的导数:
∂
L
∂
a
2
=
∂
∂
a
2
[
−
y
log
a
2
−
(
1
−
y
)
log
(
1
−
a
2
)
]
\frac{\partial L}{\partial a_2} = \frac{\partial}{\partial a_2} \left[ -y \log a_2 - (1 - y) \log (1 - a_2) \right]
∂a2∂L=∂a2∂[−yloga2−(1−y)log(1−a2)]
通过对两个项分别求导,可以得到:
∂
L
∂
a
2
=
−
y
a
2
+
1
−
y
1
−
a
2
\frac{\partial L}{\partial a_2} = -\frac{y}{a_2} + \frac{1 - y}{1 - a_2}
∂a2∂L=−a2