神经网络反向传播交叉熵 损失函数对输出层激活值Z2的导数

本文是交叉熵损失函数为代表的两层神经网络的反向传播量化求导计算公式中的一个公式,单独拿出来做一下解释说明。


公式 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=−a2y+1−a21−y

5. 化简

我们可以将上面的结果进一步化简。首先,将两个分数合并成一个分数:
∂ L ∂ a 2 = − ( y ( 1 − a 2 ) ) + ( 1 − y ) a 2 a 2 ( 1 − a 2 ) \frac{\partial L}{\partial a_2} = \frac{-(y (1 - a_2)) + (1 - y) a_2}{a_2 (1 - a_2)} ∂a2∂L=a2(1−a2)−(y(1−a2))+(1−y)a2

分子部分可以整理为:
− ( y − y a 2 ) + ( a 2 − y a 2 ) = a 2 − y -(y - y a_2) + (a_2 - y a_2) = a_2 - y −(y−ya2)+(a2−ya2)=a2−y

因此,最终得到的结果是:
∂ L ∂ a 2 = a 2 − y a 2 ( 1 − a 2 ) \frac{\partial L}{\partial a_2} = \frac{a_2 - y}{a_2 (1 - a_2)} ∂a2∂L=a2(1−a2)a2−y

6. 结合 sigmoid 函数的导数

根据链式法则,我们现在需要将损失函数对 a 2 a_2 a2 的导数与 a 2 a_2 a2 对 z 2 z_2 z2 的导数相乘。由于 ∂ a 2 ∂ z 2 = a 2 ( 1 − a 2 ) \frac{\partial a_2}{\partial z_2} = a_2 (1 - a_2) ∂z2∂a2=a2(1−a2),可以抵消掉前面结果中的分母 a 2 ( 1 − a 2 ) a_2 (1 - a_2) a2(1−a2)。

因此,最终的结果为:
∂ L ∂ z 2 = a 2 − y \frac{\partial L}{\partial z_2} = a_2 - y ∂z2∂L=a2−y

7. 公式的直观理解

公式 ∂ 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 之间的差值。

这个结果很直观:

  • 如果预测值 a 2 a_2 a2 和真实值 y y y 很接近,那么导数接近于 0,说明此时的参数不需要大幅度调整。
  • 如果预测值 a 2 a_2 a2 和真实值 y y y 相差很大,导数会很大,表示需要显著调整权重,以减少误差。

总结:

公式 8-13 的推导过程基于交叉熵损失函数和 sigmoid 激活函数。通过应用链式法则,我们将损失函数的导数逐步分解成每个部分的导数,最终得到了损失函数对输出层输入值 z 2 z_2 z2 的导数,即 ∂ L ∂ z 2 = a 2 − y \frac{\partial L}{\partial z_2} = a_2 - y ∂z2∂L=a2−y。这个公式表示损失函数的梯度等于模型输出与真实值的差值,用于指导神经网络的反向传播过程。

相关推荐
做程序员的第一天25 分钟前
在PyTorch中,钩子(hook)是什么?在神经网络中扮演什么角色?
pytorch·python·深度学习
程序员小范31 分钟前
孙玲:从流水线工人到谷歌程序员
人工智能·程序员·谷歌·远程工作
醉酒柴柴34 分钟前
【代码pycharm】动手学深度学习v2-07 自动求导
ide·深度学习·pycharm
风走茶未凉1 小时前
转置卷积与全卷积网络FCN在语义分割中的应用
网络·深度学习·cnn
命里有定数1 小时前
Paper -- 洪水深度估计 -- 利用图像处理和深度神经网络绘制街道照片中的洪水深度图
图像处理·人工智能·dnn·洪水深度·高度估计
Guofu_Liao1 小时前
大语言模型中Softmax函数的计算过程及其参数描述
人工智能·语言模型·自然语言处理
非自律懒癌患者1 小时前
Transformer中的Self-Attention机制如何自然地适应于目标检测任务
人工智能·算法·目标检测
IT闫1 小时前
使用微信小程序调用飞桨PaddleX平台自行训练的模型——微信小程序用训练的牡丹花模型Demo测试
人工智能·paddlepaddle
Jurio.1 小时前
Conda 管理项目环境
人工智能·python·深度学习·conda·virtualenv·pip
曼城周杰伦2 小时前
自然语言处理:第六十二章 KAG 超越GraphRAG的图谱框架
人工智能·pytorch·神经网络·自然语言处理·chatgpt·nlp·gpt-3