【AI知识点】反向传播(Backpropagation)

news2024/10/8 17:06:31

反向传播(Backpropagation) 是训练神经网络的核心算法,它通过反向逐层计算损失函数对每个权重的梯度,来反向逐层更新网络的权重,从而最小化损失函数。


一、反向传播的基本概念

1. 前向传播(Forward Propagation)

在前向传播中,输入数据从输入层通过隐藏层传递到输出层。网络通过层与层之间的连接(即权重)来计算每个节点的输出,最终生成网络的预测结果。

2. 计算损失(Compute Loss)

将网络的预测输出与真实值进行比较,计算损失函数(如均方误差),用来衡量网络的预测输出与真实值的差距。

3. 反向传播(Backward Propagation)

反向传播的过程主要由链式法则驱动。它通过逐层计算误差对权重的偏导数(梯度),从输出层反向传递到隐藏层,再传递到输入层(与前向传播顺序相反),以反向更新每层的权重,减少预测误差。

  • 前向传播相当于将输入数据从输入层逐步传递到输出层,得到预测结果。
  • 反向传播相当于从输出层开始反向传递误差,更新每一层的权重,使得网络在下次预测时能够减少误差。

4. 权重更新(Weights Update)

使用优化算法(如梯度下降)根据梯度更新权重。使得下一次前向传播时损失函数值减小。


二、反向传播的数学推导

对于一个简单的神经网络,损失函数 L L L 是关于网络输出 y y y 和真实值 t t t 的函数,而网络输出 y y y 又是关于输入 x x x 和权重 w w w 的函数。

通过链式法则,损失函数对权重的梯度可以表示为:

∂ L ∂ w = ∂ L ∂ y ⋅ ∂ y ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial w} wL=yLwy


三、反向传播的图示

在这里插入图片描述
图片来源:https://ai.stackexchange.com/questions/31566/different-ways-to-calculate-backpropagation-derivatives-any-difference

  • 前向传播(蓝色箭头)负责计算输出预测值(Out)和误差(Err)。
  • 反向传播(绿色和红色箭头)从输出误差(Err)开始,将误差逐层传播到隐藏层( a a a)和输入层(X),计算每个权重(W)的梯度,用于后续的权重更新。

四、反向传播的简单计算示例

假设我们有一个简单的两层神经网络:

在这里插入图片描述

  • 输入层(x):一个节点,输入值为 x x x
  • 隐藏层(a):一个节点,激活函数为 Sigmoid 函数。
  • 输出层(y):一个节点,激活函数为线性函数,输出值为 y y y

网络的权重:

  • 输入层到隐藏层的权重: w 1 w_1 w1
  • 隐藏层到输出层的权重: w 2 w_2 w2

给定以下初始条件:

  • 输入 x = 1 x = 1 x=1
  • 目标输出 t = 0 t = 0 t=0
  • 初始权重 w 1 = 0.5 w_1 = 0.5 w1=0.5 w 2 = 0.5 w_2 = 0.5 w2=0.5
  • 学习率 η = 0.1 \eta = 0.1 η=0.1

步骤1:前向传播

  1. 计算隐藏层的输入和输出

z = w 1 ⋅ x = 0.5 ⋅ 1 = 0.5 z = w_1 \cdot x = 0.5 \cdot 1 = 0.5 z=w1x=0.51=0.5

隐藏层的激活输出(使用 Sigmoid 函数):

a = σ ( z ) = 1 1 + e − z = 1 1 + e − 0.5 ≈ 0.6225 a = \sigma(z) = \frac{1}{1 + e^{-z}} = \frac{1}{1 + e^{-0.5}} \approx 0.6225 a=σ(z)=1+ez1=1+e0.510.6225

  1. 计算输出层的输入和输出

y = w 2 ⋅ a = 0.5 ⋅ 0.6225 = 0.3112 y = w_2 \cdot a = 0.5 \cdot 0.6225 = 0.3112 y=w2a=0.50.6225=0.3112


步骤2:计算损失

使用均方误差(MSE)作为损失函数:

L = 1 2 ( y − t ) 2 = 1 2 ( 0.3112 − 0 ) 2 ≈ 0.0484 L = \frac{1}{2}(y - t)^2 = \frac{1}{2}(0.3112 - 0)^2 \approx 0.0484 L=21(yt)2=21(0.31120)20.0484


步骤3:反向传播

  1. 计算输出层对权重 w 2 w_2 w2 的梯度

∂ L ∂ w 2 = ∂ L ∂ y ⋅ ∂ y ∂ w 2 \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial w_2} w2L=yLw2y

计算各部分:

  • 损失函数对输出 y y y 的导数:

∂ L ∂ y = y − t = 0.3112 − 0 = 0.3112 \frac{\partial L}{\partial y} = y - t = 0.3112 - 0 = 0.3112 yL=yt=0.31120=0.3112

  • 输出 y y y 对权重 w 2 w_2 w2 的导数:

∂ y ∂ w 2 = a = 0.6225 \frac{\partial y}{\partial w_2} = a = 0.6225 w2y=a=0.6225

  • 合并计算梯度:

∂ L ∂ w 2 = 0.3112 × 0.6225 ≈ 0.1938 \frac{\partial L}{\partial w_2} = 0.3112 \times 0.6225 \approx 0.1938 w2L=0.3112×0.62250.1938

  1. 计算隐藏层对权重 w 1 w_1 w1 的梯度

∂ L ∂ w 1 = ∂ L ∂ a ⋅ ∂ a ∂ z ⋅ ∂ z ∂ w 1 \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w_1} w1L=aLzaw1z

计算各部分:

  • 损失函数对隐藏层输出 a a a 的导数:

∂ L ∂ a = ∂ L ∂ y ⋅ ∂ y ∂ a = ( y − t ) ⋅ w 2 = 0.3112 ⋅ 0.5 = 0.1556 \frac{\partial L}{\partial a} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial a} = (y - t) \cdot w_2 = 0.3112 \cdot 0.5 = 0.1556 aL=yLay=(yt)w2=0.31120.5=0.1556

  • 隐藏层输出 a a a 对输入 z z z 的导数(Sigmoid 函数导数):

∂ a ∂ z = a ( 1 − a ) = 0.6225 ⋅ ( 1 − 0.6225 ) ≈ 0.2350 \frac{\partial a}{\partial z} = a (1 - a) = 0.6225 \cdot (1 - 0.6225) \approx 0.2350 za=a(1a)=0.6225(10.6225)0.2350

  • 输入 z z z 对权重 w 1 w_1 w1 的导数:

∂ z ∂ w 1 = x = 1 \frac{\partial z}{\partial w_1} = x = 1 w1z=x=1

  • 合并计算梯度:

∂ L ∂ w 1 = 0.1556 × 0.2350 × 1 ≈ 0.0365 \frac{\partial L}{\partial w_1} = 0.1556 \times 0.2350 \times 1 \approx 0.0365 w1L=0.1556×0.2350×10.0365


步骤4:更新权重

使用梯度下降法更新权重:

  1. 更新权重 w 2 w_2 w2

w 2 new = w 2 − η ⋅ ∂ L ∂ w 2 = 0.5 − 0.1 × 0.1938 ≈ 0.4806 w_2^{\text{new}} = w_2 - \eta \cdot \frac{\partial L}{\partial w_2} = 0.5 - 0.1 \times 0.1938 \approx 0.4806 w2new=w2ηw2L=0.50.1×0.19380.4806

  1. 更新权重 w 1 w_1 w1

w 1 new = w 1 − η ⋅ ∂ L ∂ w 1 = 0.5 − 0.1 × 0.0365 ≈ 0.4963 w_1^{\text{new}} = w_1 - \eta \cdot \frac{\partial L}{\partial w_1} = 0.5 - 0.1 \times 0.0365 \approx 0.4963 w1new=w1ηw1L=0.50.1×0.03650.4963


步骤5:验证更新后的网络

再次进行前向传播,计算新的输出和损失。

  1. 新的隐藏层输入和输出

z ′ = w 1 new ⋅ x = 0.4963 ⋅ 1 = 0.4963 z' = w_1^{\text{new}} \cdot x = 0.4963 \cdot 1 = 0.4963 z=w1newx=0.49631=0.4963

a ′ = σ ( z ′ ) = 1 1 + e − 0.4963 ≈ 0.6216 a' = \sigma(z') = \frac{1}{1 + e^{-0.4963}} \approx 0.6216 a=σ(z)=1+e0.496310.6216

  1. 新的输出层输出

y ′ = w 2 new ⋅ a ′ = 0.4806 ⋅ 0.6216 ≈ 0.2988 y' = w_2^{\text{new}} \cdot a' = 0.4806 \cdot 0.6216 \approx 0.2988 y=w2newa=0.48060.62160.2988

  1. 新的损失

L ′ = 1 2 ( y ′ − t ) 2 = 1 2 ( 0.2988 − 0 ) 2 ≈ 0.0447 L' = \frac{1}{2}(y' - t)^2 = \frac{1}{2}(0.2988 - 0)^2 \approx 0.0447 L=21(yt)2=21(0.29880)20.0447


结果分析

更新权重后,损失从 0.0484 减少到 0.0447,说明网络朝着最小化损失的方向更新,模型性能有所提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行: 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具: yum install bind bind-utils -y配置 BIND 编辑主配置文件: 使用文本编辑器打开 BIND 的主配…

双十一购物清单:这五款爆款科技好物绝不能错过!买到就是赚到!

随着一年一度的双十一购物狂欢节即将拉开帷幕,各大电商平台纷纷推出了一系列优惠活动,吸引着无数消费者的目光。对于科技爱好者而言,这无疑是一个绝佳的机会,能够以优惠的价格购得心仪的电子产品和智能设备。然而,在琳…

HTTPS介绍 --- 超详细保姆级知识讲解

目录 一. 认识HTTPS 二. 使用HTTPS加密的重要性 三. HTTPS的工作流程 四. 常见的加密方式 4.1 对称加密 4.2 非对称加密 五. 数据摘要 && 数据指纹 5.1 数据摘要 5.2 数据签名 六. HTTPS加密过程探究 6.1 方案一:只使用对…

晶体规格书及匹配测试

一、晶体参数介绍 晶体的电气规格相对比较简单,如下: 我们逐一看看每个参数, FL就是晶体的振动频率,这个晶体是24.576MHz的。 CL就是负载电容,决定了晶体频率是否准确,包括外接的实际电容、芯片的等效电容以及PCB走线的寄生电容等,核心参数。 Frequency Tolerance是…

骨传导耳机哪个牌子好?五大精选抢手骨传导耳机分享!

在数字化时代背景下,音乐和音频内容已经成为人们日常生活不可或缺的一部分。随着技术的发展,骨传导耳机凭借其独特的传输方式和健康优势,迅速赢得了市场和消费者的青睐。不同于传统耳机通过空气传导声音,骨传导耳机通过骨骼直接传…

《独自骑行与群骑之旅:探索不同的自由与氛围》

在快节奏的现代生活中,骑行作为一种既环保又健康的出行方式,越来越受到人们的青睐。然而,选择一个人骑车还是加入一群人的行列,这不仅仅是一种出行方式的选择,更是一种生活态度和价值观的体现。本文将探讨这两种骑行方…

【读书笔记·VLSI电路设计方法解密】问题1:什么是芯片

芯片(集成电路或IC)是在半导体材料的薄基底表面上制造的微型电子电路。在功能上,芯片是一种硬件组件,能够执行某些特定的功能。例如,一个简单的芯片可能被设计用来执行逻辑NOR(或非)的简单功能&…

如何在VSCode上运行C/C++代码

诸神缄默不语-个人CSDN博文目录 我是Win10,其他系统仅供参考。 文章目录 1. 下载所需插件2. 安装编译器3. 不借助编辑器的cpp代码执行3. 建立VSCode cpp项目3.1 c_cpp_properties.json3.2 settings.json3.3 tasks.json 4. 运行C代码参考资料 1. 下载所需插件 2. 安…

记一次N5105 NAS功耗测量

记一次N5105 NAS功耗测量 一、设备说明 HA500机器,N5105CPU,32GB内存。unraid最新6.12.13系统硬盘有一根500G M2硬盘和一个512G sata接口ssd硬盘,用于组成zfs raid 1,作为cache盘位。另外有三个4T机械硬盘,组成21的形…

鸿蒙应用示例:DevEco Testing 工具的常用功能及使用场景

DevEco Studio 是鸿蒙生态中的集成开发环境(IDE),而 DevEco Testing 工具则是专门用于测试鸿蒙应用的强大工具。本文将详细介绍 DevEco Testing 中几个常用的测试功能及其使用场景,并给出相应的代码示例。 【1】安装应用 使用场景:在鸿蒙系统…

imx6q 的 header.s的理解

首先是 非设备树的。 就是这三个文件。 header 是配置文件。 .c 文件应该是对这个文件的操作。 那么 header 怎么生成呢? 它这里调整好的 应该参数 应该就是 这个 header.s 了。 但是 这个程序 是 设备树的 流程 ,不知道 对于 非设备树 是不是 适用。 然后是设备树的。 设…

基于Arduino的遥控自平衡小车

基于Arduino的遥控自平衡小车 一、项目简介二、所需材料三、理论支持四、外壳设计五、线路连接六、检查MPU6050连接七、烧录库八、PID控制设置九、设置传感器参数十、无线移动控制十一、超声波模块 一、项目简介 一个使用Arduino Nano、MPU-6050以及便宜的6伏直流齿轮电机的自…

Vue中使用富文本编辑框的实践与探索

在Web开发中,富文本编辑框是一个常见的功能。本文将介绍如何在Vue项目中集成和使用富文本编辑框,并分享一些实践经验。 一、为什么需要富文本编辑框 在开发网站、博客、论坛等应用时,用户往往需要编辑和发布带格式的文本内容。传统的文本输…

分布式事务seata AT和XA性能对比

1. AT模式和XA模式性能对比: AT的阻塞是阻塞在了业务服务层,全局锁。 而XA模式是阻塞在了数据库,对数据库的性能影响很大。 肯定是优选AT,可以提升数据库的性能。 (由于AT模式数据库事务阻塞小,那么同一…

公司监控电脑都能监控哪些信息?深刻回答,一文详解!

在当今数字化办公环境中,公司监控电脑已成为许多企业保障信息安全、提升工作效率的重要手段。 然而,这种监控行为也引发了关于员工隐私权的广泛讨论。 本文将深入探讨公司监控电脑所能监控的信息范围,以及如何在保障企业安全与尊重员工隐私…

omron fins 内存区域写入(MEMORY AREA WRITE)

1. 完整的代码如下: import socket import binasciiclass Omron:def __init__(self, ip, port9600):self.ip ip # PLC的IP地址self.port port # PLC的端口,默认为9600def send_receive_fins(self):with socket.socket(socket.AF_INET, socket.SOCK_…

某个应用的CPU使用率居然达到100%,我该怎么办?

摘至https://learn.lianglianglee.com/ CPU使用率 Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。 为了维护 CPU 时间,Linux 通过事先定…

使用标签实现MyBatis的基础操作

目录 前言 1.配置MyBatis⽇志打印 2.参数传递 2.1 #{} 和 ${}区别 2.2传递多个参数 3.增删改查 3.1增(Insert) 3.2删(Delete) 3.3改(Update) 3.4查(Select) 前言 接下来我们会使用的数据表如下: 对应的实体类为:UserInfoMapper 所有的准备工作都…

全局数据在Python包中模块间管理方法探讨

在开发大型 Python 应用程序时,有时需要多个模块共享和管理全局数据。如何优雅地在 Python 包内的不同模块间共享全局数据是一个常见的设计问题。我们希望避免全局变量的混乱和难以维护的代码,但同时能够安全、高效地管理这些共享数据。 下面我们将探讨…

低代码赋能汽车制造产业链场景系列

当前汽车行业数字化智能化转型浪潮下,整车及其上下游产业链的协同创新正变得至关重要。头部车企与上下游供应链企业正逐步解决在生产管理、业务互通、系统集成等方面的痛点与挑战。电动化、智能化、网联化作为汽车产业的三大趋势,正共同推动未来汽车产业…