神经网络反向传播交叉熵 计算损失函数对隐藏层偏置b1的梯度

embedded/2024/10/19 14:48:42/

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


公式 8-19 计算的是损失函数 L L L 对隐藏层偏置 b 1 b_1 b1 的梯度。这个步骤是反向传播算法中的关键部分,用来更新隐藏层偏置 b 1 b_1 b1,从而优化模型。下面我将详细解释公式 8-19 的推导过程及其含义。

公式 8-19 的表达式

∂ L ∂ b 1 = ∂ L ∂ a 2 ⋅ ∂ a 2 ∂ Z 2 ⋅ ∂ Z 2 ∂ a 1 ⋅ ∂ a 1 ∂ Z 1 ⋅ ∂ Z 1 ∂ b 1 = ( a 2 − y ) w 2 σ ′ ( Z 1 ) (8-19) \frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial a_2} \cdot \frac{\partial a_2}{\partial Z_2} \cdot \frac{\partial Z_2}{\partial a_1} \cdot \frac{\partial a_1}{\partial Z_1} \cdot \frac{\partial Z_1}{\partial b_1} = (a_2 - y) w_2 \sigma'(Z_1) \tag{8-19} b1L=a2LZ2a2a1Z2Z1a1b1Z1=(a2y)w2σ(Z1)(8-19)

1. 符号解释

  • L L L:损失函数,一般在分类任务中采用交叉熵损失。
  • b 1 b_1 b1:隐藏层的偏置项,它是加入到隐藏层神经元的输入上的一个常量。
  • Z 1 Z_1 Z1:隐藏层的加权和,即隐藏层的输入值,它是输入数据经过权重和偏置线性组合后的结果。
  • a 1 a_1 a1:隐藏层的激活值,是通过激活函数 σ ( Z 1 ) \sigma(Z_1) σ(Z1) 计算得到的输出。
  • Z 2 Z_2 Z2:输出层的加权和,即输出层的输入值。
  • a 2 a_2 a2:输出层的激活值,即模型预测的结果(通过 sigmoid 或其他激活函数计算)。
  • w 2 w_2 w2:连接隐藏层和输出层的权重。
  • y y y:真实标签,表示样本的实际类别。
  • σ ′ ( Z 1 ) \sigma'(Z_1) σ(Z1):隐藏层激活函数的导数,表示激活函数对输入 Z 1 Z_1 Z1 的变化率。

2. 推导过程:链式法则的应用

为了推导公式 8-19,我们应用链式法则,逐层计算损失函数 L L L 对隐藏层偏置 b 1 b_1 b1 的导数。

第一步:损失函数对输出层激活值 a 2 a_2 a2 的导数 ∂ L ∂ a 2 \frac{\partial L}{\partial a_2} a2L

根据公式 8-13,损失函数对输出层激活值 a 2 a_2 a2 的导数为:
∂ L ∂ a 2 = a 2 − y \frac{\partial L}{\partial a_2} = a_2 - y a2L=a2y

这是输出层的误差,表示模型的预测值 a 2 a_2 a2 和真实标签 y y y 之间的差异。

第二步:输出层激活值 a 2 a_2 a2 对输出层加权和 Z 2 Z_2 Z2 的导数 ∂ a 2 ∂ Z 2 \frac{\partial a_2}{\partial Z_2} Z2a2

输出层的激活值 a 2 a_2 a2 是通过激活函数(如 sigmoid)从加权和 Z 2 Z_2 Z2 计算得到的。因此:
∂ a 2 ∂ Z 2 = σ ′ ( Z 2 ) \frac{\partial a_2}{\partial Z_2} = \sigma'(Z_2) Z2a2=σ(Z2)

其中,sigmoid 函数的导数为:
σ ′ ( Z 2 ) = a 2 ( 1 − a 2 ) \sigma'(Z_2) = a_2(1 - a_2) σ(Z2)=a2(1a2)

第三步:输出层加权和 Z 2 Z_2 Z2 对隐藏层激活值 a 1 a_1 a1 的导数 ∂ Z 2 ∂ a 1 \frac{\partial Z_2}{\partial a_1} a1Z2

输出层的加权和 Z 2 Z_2 Z2 是通过隐藏层激活值 a 1 a_1 a1 和权重 w 2 w_2 w2 线性组合得到的,因此:
∂ Z 2 ∂ a 1 = w 2 \frac{\partial Z_2}{\partial a_1} = w_2 a1Z2=w2

这表示输出层的输入 Z 2 Z_2 Z2 对隐藏层激活值 a 1 a_1 a1 的变化率等于连接隐藏层和输出层的权重 w 2 w_2 w2

第四步:隐藏层激活值 a 1 a_1 a1 对隐藏层加权和 Z 1 Z_1 Z1 的导数 ∂ a 1 ∂ Z 1 \frac{\partial a_1}{\partial Z_1} Z1a1

隐藏层的激活值 a 1 a_1 a1 是通过激活函数 σ ( Z 1 ) \sigma(Z_1) σ(Z1) 计算得到的,因此:
∂ a 1 ∂ Z 1 = σ ′ ( Z 1 ) \frac{\partial a_1}{\partial Z_1} = \sigma'(Z_1) Z1a1=σ(Z1)

这个导数表示隐藏层的激活函数对输入 Z 1 Z_1 Z1 的变化率。

第五步:隐藏层加权和 Z 1 Z_1 Z1 对偏置 b 1 b_1 b1 的导数 ∂ Z 1 ∂ b 1 \frac{\partial Z_1}{\partial b_1} b1Z1

隐藏层的加权和 Z 1 Z_1 Z1 是通过输入数据 x x x 和权重 w 1 w_1 w1 线性组合后,再加上偏置 b 1 b_1 b1 得到的。由于偏置 b 1 b_1 b1 是直接加到 Z 1 Z_1 Z1 上的,因此:
∂ Z 1 ∂ b 1 = 1 \frac{\partial Z_1}{\partial b_1} = 1 b1Z1=1

这意味着隐藏层的输入 Z 1 Z_1 Z1 对偏置 b 1 b_1 b1 的变化率为 1,因为偏置是直接加到输入中的,不受其他参数的影响。

3. 结合链式法则

现在我们可以将这些部分结合起来,得到损失函数 L L L 对隐藏层偏置 b 1 b_1 b1 的导数:
∂ L ∂ b 1 = ∂ L ∂ a 2 ⋅ ∂ a 2 ∂ Z 2 ⋅ ∂ Z 2 ∂ a 1 ⋅ ∂ a 1 ∂ Z 1 ⋅ ∂ Z 1 ∂ b 1 \frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial a_2} \cdot \frac{\partial a_2}{\partial Z_2} \cdot \frac{\partial Z_2}{\partial a_1} \cdot \frac{\partial a_1}{\partial Z_1} \cdot \frac{\partial Z_1}{\partial b_1} b1L=a2LZ2a2a1Z2Z1a1b1Z1

将每一部分的结果代入:
∂ L ∂ b 1 = ( a 2 − y ) ⋅ w 2 ⋅ σ ′ ( Z 1 ) ⋅ 1 \frac{\partial L}{\partial b_1} = (a_2 - y) \cdot w_2 \cdot \sigma'(Z_1) \cdot 1 b1L=(a2y)w2σ(Z1)1

简化得到:
∂ L ∂ b 1 = ( a 2 − y ) w 2 σ ′ ( Z 1 ) \frac{\partial L}{\partial b_1} = (a_2 - y) w_2 \sigma'(Z_1) b1L=(a2y)w2σ(Z1)

这就是公式 8-19 的推导结果。

4. 公式的含义

公式 8-19 表示的是损失函数 L L L 对隐藏层偏置 b 1 b_1 b1 的导数。这个梯度用于调整隐藏层的偏置 b 1 b_1 b1,以最小化损失函数。具体来说:

  • a 2 − y a_2 - y a2y:这是输出层的误差,表示模型的预测值 a 2 a_2 a2 与真实标签 y y y 之间的差异。
  • w 2 w_2 w2:这是连接隐藏层和输出层的权重,反映了隐藏层对输出层的影响。
  • σ ′ ( Z 1 ) \sigma'(Z_1) σ(Z1):这是隐藏层激活函数对输入 Z 1 Z_1 Z1 的导数,表示激活函数对输入变化的敏感性。

5. 直观理解

从公式 8-19 可以看出,隐藏层偏置的更新受到以下因素的影响:

  • 输出层的误差 a 2 − y a_2 - y a2y:输出层的误差直接决定了模型需要多大程度地更新参数。如果误差较大,意味着模型的预测不够准确,偏置 b 1 b_1 b1 需要大幅度更新;如果误差较小,偏置只需要微小调整。
  • 输出层的权重 w 2 w_2 w2:输出层的权重 w 2 w_2 w2 决定了隐藏层对输出层的影响程度。如果 w 2 w_2 w2 较大,则隐藏层的输出对最终结果的影响较大,偏置更新也会较大。
  • 激活函数的导数 σ ′ ( Z 1 ) \sigma'(Z_1) σ(Z1):激活函数的导数反映了隐藏层神经元的敏感度。如果激活函数的导数较大,说明隐藏层对输入的变化非常敏感,偏置需要较大的调整。

6. 反向传播中的作用

公式 8-19 是反向传播中的一个关键步骤。反向传播的目标是通过损失函数对每个参数(如权重和偏置)的导数来更新这些参数,使得损失函数逐步减小。公式 8-19 计算了隐藏层偏置 b 1 b_1 b1 的梯度,这个梯度用于更新偏置,从而帮助模型更好地拟合数据。

7. 总结

公式 8-19 给出了损失函数对隐藏层偏置 b 1 b_1 b1 的梯度。这个梯度结合了输出层误差、输出层权重以及隐藏层激活函数的导数,是通过链式法则逐层传播计算得到的。通过这个梯度,反向传播算法能够逐步调整隐藏层的偏置 b 1 b_1 b1,从而优化模型的预测性能。


http://www.ppmy.cn/embedded/128762.html

相关文章

计算机毕业设计Python深度学习房价预测 房源可视化 房源爬虫 二手房可视化 二手房爬虫 递归决策树模型 机器学习 深度学习 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 房地产是促进我国经济持续增…

OpenHarmony 入门——ArkUI 自定义组件内同步的装饰器@State小结(二)

文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言 前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结(一&…

优化漏洞扫描流程以保障企业数字化业务安全

漏洞扫描技术历经二十余年发展,已从人工搜索演进至开源及商业扫描平台,其应用紧随IT环境与数字业务变迁而不断革新。为有效提升漏洞检测效果,确保企业数字化业务安全运行,安全专家建议遵循以下关键步骤实施漏洞扫描: …

Qt- QSS风格选择器常用属性选择器样式表盒子

1. 风格设置 Qt 提供了 3 种整体风格,使用 QStyleFactory::keys() 来获取 (windowsvista 、Windows 、Fusion) 可以在 main.cpp 中调用 setStyle 方法对应用程序进行全局风格的设置 int main(int argc, char *argv[]) {QApplication a(arg…

wpf 窗口关闭前 弹出提示窗口

使用 Closing 事件 在 WPF 中,可以处理窗口的Closing事件。当窗口即将关闭时,这个事件会被触发。在该事件处理程序中,可以显示一个提示窗口来询问用户是否真的要关闭窗口。以下是一个示例代码: public partial class MainWindow :…

数据结构与算法--递归以及相关排序算法示例

直接上代码,闲话不多说 排序(递归,冒泡,插入排序) package com.zy;import java.util.Arrays;/*** @Author: zy* @Date: 2024-10-13-14:59* @Description: 冒泡排序*/ public class BubbleSort

rabbitMQ消息重复问题怎么解决的?

RabbitMQ 消息重复的问题通常发生在消息的传递过程中,特别是在网络异常、生产者或消费者宕机等场景下,消息可能被重复消费。这种重复是由于 RabbitMQ 的 "至少一次投递" 保证机制引起的。为了解决消息重复的问题,可以采取以下几种常…

AndroidStudio实验报告——实验一、二

实验一: AS安装与安卓环境搭建 实验目标和实验内容: 一、实验目标 掌握Android Studio的安装过程 搭建安卓开发环境 安装和配置Java Development Kit (JDK),理解JDK版本与Android Studio的兼容性。 安装Android SDK(S…