神经网络算法——反向传播 Back Propagation

news2025/1/16 1:44:47

文章目录

前言

1、反向传播的本质

(1)前向传播(Forward Propagation)

(2)反向传播(Back Propagation)

2、反向传播的原理

(1)链式法则(Chain Rule)

(2)偏导数

3、反向传播的案例:简单神经网络

(1)网络结构

(2)前向传播

(3)损失计算

(4)反向传播

(5)参数更新

(6)迭代


前言

本文将从反向传播的本质、反向传播的原理、反向传播的案例三个方面,详细介绍反向传播(Back Propagation)

反向传播


1、反向传播的本质

(1)前向传播(Forward Propagation)

前向传播是神经网络通过层级结构和参数,将输入数据逐步转换为预测结果的过程,实现输入与输出之间的复杂映射。

前向传播

  • 输入层:

        输入层接收训练集中的样本数据。

        每个样本数据包含多个特征,这些特征被传递给输入层的神经元。

        通常,还会添加一个偏置单元来辅助计算。

  • 隐藏层:

        隐藏层的每个神经元接收来自输入层神经元的信号。

        这些信号与对应的权重相乘后求和,并加上偏置。

        然后,通过激活函数(如sigmoid)处理这个求和结果,得到隐藏层的输出。

  • 输出层:

        输出层从隐藏层接收信号,并进行类似的加权求和与偏置操作。

        根据问题的类型,输出层可以直接输出这些值(回归问题),或者通过激活函数(如softmax)转换为概率分布(分类问题)。

(2)反向传播(Back Propagation)

反向传播算法利用链式法则,通过从输出层向输入层逐层计算误差梯度高效求解神经网络参数的偏导数,以实现网络参数的优化和损失函数的最小化。

反向传播

  • 利用链式法则:

        反向传播算法基于微积分中的链式法则,通过逐层计算梯度来求解神经网络中参数的偏导数。

  • 从输出层向输入层传播:

        算法从输出层开始,根据损失函数计算输出层的误差,然后将误差信息反向传播到隐藏层,逐层计算每个神经元的误差梯度。

  • 计算权重和偏置的梯度:

        利用计算得到的误差梯度,可以进一步计算每个权重和偏置参数对于损失函数的梯度

  • 参数更新:

        根据计算得到的梯度信息,使用梯度下降或其他优化算法来更新网络中的权重和偏置参数,以最小化损失函数。

2、反向传播的原理

(1)链式法则(Chain Rule)

链式法则是微积分中的一个基本定理,用于计算复合函数的导数。如果一个函数是由多个函数复合而成,那么该复合函数的导数可以通过各个简单函数导数的乘积来计算。

链式法则

  • 简化梯度计算:

        在神经网络中,损失函数通常是一个复合函数,由多个层的输出和激活函数组合而成。链式法则允许我们将这个复杂的复合函数的梯度计算分解为一系列简单的局部梯度计算,从而简化了梯度计算的过程。

  • 高效梯度计算:

        通过链式法则,我们可以从输出层开始,逐层向前计算每个参数的梯度,这种逐层计算的方式避免了重复计算,提高了梯度计算的效率。

  • 支持多层网络结构:

        链式法则不仅适用于简单的两层神经网络,还可以扩展到具有任意多层结构的深度神经网络。这使得我们能够训练和优化更加复杂的模型。

(2)偏导数

偏导数是多元函数中对单一变量求导的结果,它在神经网络反向传播中用于量化损失函数随参数变化的敏感度,从而指导参数优化。

偏导数

  • 偏导数的定义:

        偏导数是指在多元函数中,对其中一个变量求导,而将其余变量视为常数的导数。

        在神经网络中,偏导数用于量化损失函数相对于模型参数(如权重和偏置)的变化率。

  • 反向传播的目标:

        反向传播的目标是计算损失函数相对于每个参数的偏导数,以便使用优化算法(如梯度下降)来更新参数。

        这些偏导数构成了梯度,指导了参数更新的方向和幅度。

  • 计算过程:

        输出层偏导数:首先计算损失函数相对于输出层神经元输出的偏导数。这通常直接依赖于所选的损失函数。

        隐藏层偏导数:使用链式法则,将输出层的偏导数向后传播到隐藏层。对于隐藏层中的每个神经元,计算其输出相对于下一层神经元输入的偏导数,并与下一层传回的偏导数相乘,累积得到该神经元对损失函数的总偏导数。

        参数偏导数:在计算了输出层和隐藏层的偏导数之后,我们需要进一步计算损失函数相对于网络参数的偏导数,即权重和偏置的偏导数。

3、反向传播的案例:简单神经网络

(1)网络结构

  • 假设我们有一个简单的两层神经网络,结构如下:

        输入层:2个神经元(输入特征 x1 和 x2)

        隐藏层:2个神经元(带有激活函数 sigmoid)

        输出层:1个神经元(带有激活函数 sigmoid)

  • 网络的权重和偏置如下(这些值是随机初始化的,实际情况中会使用随机初始化):

        输入层到隐藏层的权重矩阵 W1:[0.5, 0.3], [0.2, 0.4]

        隐藏层到输出层的权重向量 W2:[0.6, 0.7]

        隐藏层的偏置向量 b1:[0.1, 0.2]

        输出层的偏置 b2:0.3

(2)前向传播

  • 给定输入 [0.5, 0.3],进行前向传播:

        隐藏层输入:[0.5*0.5 + 0.3*0.2 + 0.1, 0.5*0.3 + 0.3*0.4 + 0.2] = [0.31, 0.29]

        隐藏层输出(经过 sigmoid 激活函数):[sigmoid(0.31), sigmoid(0.29)] \approx [0.57, 0.57]

        输出层输入:0.6*0.57 + 0.7*0.57 + 0.3 = 0.71

        输出层输出(预测值,经过sigmoid激活函数):sigmoid(0.71) \approx 0.67

(3)损失计算

  • 假设真实标签是 0.8,使用均方误差(MSE)计算损失:

        损失 = (0.8-0.67)^2\approx 0.017

(4)反向传播

计算损失函数相对于网络参数的偏导数,并从输出层开始反向传播误差。

  • 输出层偏导数:

        损失函数对输出层输入的偏导数 (\delta 2):2 * (0.67 - 0.8) * sigmoid_derivative(0.71) \approx -0.05

Sigmoid函数的导数:sigmoid(x) * (1 - sigmoid(x))

  • 隐藏层偏导数:

        损失函数对隐藏层每个神经元输出的偏导数(\delta 1):[δ2 * 0.6 * sigmoid_derivative(0.31), δ2 * 0.7 * sigmoid_derivative(0.29)]

        计算后得到 δ1 ≈ [-0.01, -0.01](这里简化了计算,实际值可能有所不同)

  • 参数偏导数:

        对于权重 W2:[δ2 * 隐藏层输出1,δ2 * 隐藏层输出2] = [-0.03, -0.04]

        对于偏置 b2:δ2 = -0.05

        对于权重 W1 和 偏置 b1,需要更复杂的计算,因为它们影响到隐藏层的输出,进而影响到输出层的输入和最终的损失。这些偏导数依赖于 δ1 和输入层的值。

(5)参数更新

  • 使用梯度下降更新参数(学习率设为 0.1):

        更新 W2:w2 - 学习率 * 参数偏导数

        更新 b2:b2 - 学习率 * 参数偏导数

        同样地更新 W1 和 b1

(6)迭代

  • 重复步骤 2-5,直到网络收敛或达到预设的迭代次数。

参考:架构师带你玩转AI

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

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

相关文章

arm架构服务器使用Virtual Machine Manager安装的kylin v10虚拟机

本文中使用Virtual Machine Manager安装kylin v10的虚拟机 新建虚拟机 新建虚拟机 选择镜像,下一步 设置内存和CPU,下一步 选择或创建自定义存储(默认存储位置的磁盘空间可能不够用) 点击管理,打开选择存储卷页…

“轻松掌握财务状况:智能筛选银行卡收支明细,一键统计总花销”

在快节奏的现代生活中,财务管理成为我们日常的重要任务。你是否经常为了查看银行卡账户的收支明细而烦恼?是否想要快速统计出账户的总花销,以便更好地掌握自己的财务状况?现在,我们为你带来了一款全新的财务管理工具&a…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家&am…

【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件

文章目录 一、Cloth组件解释基本介绍出于性能的考虑, 可以对Cloth产生影响的Collider只有两种打开编辑模式绘制 二、基本使用1. 创建出一个空物体2. 在空物体上添加cloth组件,可以直接点击Add Component搜索cloth添加,也可以在工具栏 Component–>phy…

动态规划(算法竞赛、蓝桥杯)--树形DP树的中心

1、B站视频链接&#xff1a;E34 树形DP 树的中心_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N20010; int n,a,b,c,ans2e9; struct edge{int v,w;}; vector<edge> e[N]; int d1[N],d2[N],path[N],up[N];//path记录d1 void dfs1(in…

【Datawhale组队学习:Sora原理与技术实战】

Transformersdiffusion技术背景简介 Transformers diffusion背景 近期大火的OpenAI推出的Sora模型&#xff0c;其核心技术点之一&#xff0c;是将视觉数据转化为Patch的统一表示形式&#xff0c;并通过Transformers技术和扩散模型结合&#xff0c;展现了卓越的scale特性。 被…

iStoreOS系统-HomeAssistant服务下载安装HACS

iStoreOS系统-HomeAssistant服务下载安装HACS 1. HACS HACS&#xff08;Home Assistant Community Store&#xff09;是Home Assistant的一个插件商店&#xff0c;它允许用户轻松地浏览、安装和管理各种为Home Assistant开发的自定义插件和集成。通过HACS&#xff0c;用户可以…

Linux Ubuntu系统安装MySQL并实现公网连接本地数据库【内网穿透】

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…

创新驱动!HubSpot引领CRM革命

在当今高速发展的数字化时代&#xff0c;企业的国际化布局和市场开拓已经成为了一种必然的趋势。随着企业出海步伐的加快&#xff0c;有效的客户关系管理&#xff08;CRM&#xff09;和营销自动化工具变得尤为重要。这就是HubSpot发力的领域。HubSpot&#xff0c;作为一家领先的…

【MATLAB】 CEEMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 CEEMD信号分解算法 CEEMD 分解又叫互补集合经验模态分解&#xff0c;英文全称为 Complementary Ensemble Empirical Mode Decomposition。 CEEMD是对EEMD的改进&#xff0c;它在EEMD的基础上引入了一个…

CRichEditUI中文乱码问题(Duilib)

这是遇到问题的时候&#xff0c;我还以为是韩文 解决方案&#xff1a; //HMODULE hmod LoadLibrary(_T("msftedit.dll"));HMODULE hmod LoadLibrary(_T("riched20.dll"));//修改一下使用的动态库&#xff0c;兼容性问题需要自己测

[HackMyVM]靶场 Wild

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 …

【MySQL】用户管理 -- 详解

如果我们只能使用 root 用户&#xff0c;这样存在安全隐患。这时就需要使用 MySQL 的用户管理。 一、 用户 1、用户信息 MySQL 中的用户都存储在系统数据库 MySQL 的 user 表中。 字段解释&#xff1a; host&#xff1a;表示这个用户可以从哪个主机登陆&#xff0c;如果…

【深度学习笔记】优化算法——随机梯度下降

随机梯度下降 在前面的章节中&#xff0c;我们一直在训练过程中使用随机梯度下降&#xff0c;但没有解释它为什么起作用。为了澄清这一点&#xff0c;我们刚在 :numref:sec_gd中描述了梯度下降的基本原则。本节继续更详细地说明随机梯度下降&#xff08;stochastic gradient d…

销售管理之反向与正向目标控制

在销售活动中&#xff0c;控制力是关键。但控制力其实分为两种&#xff1a;反向控制和正向控制。本文将深入探讨这两种控制方式&#xff0c;并阐述如何在销售活动中加以应用&#xff0c;以提升销售效果。 一、反向控制&#xff1a;以客户为中心&#xff0c;引导客户需求 反向控…

BJFU|算法设计与分析-期末考试凡人AK备考模板

感谢这套模板&#xff0c;本人不是ACM佬但是在期末的时候打出了凡人AK的成绩&#xff0c;真的很强&#xff0c;谁用谁赞。 另外还给我押中了压轴题&#xff0c;非常幸运。 文件下载地址在文章末尾 文件下载地址&#xff1a;【免费】BJFU算法设计与分析备考模板.docx资源-CSD…

SICP解读指南:深度阅读 “计算机领域三巨头” 之一(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 书籍介绍1.1 SICP侧重点1.2 SICP章节介绍 二. 书籍推荐2.1 书籍介绍2.2 推…

如何在Linux系统Docker本地部署SimpleMindMap并实现远程访问?

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性&#xff0c;包含插件化架构、多种结构类型&…

探索SRM软件:了解SRM在企业中的作用

作为供应商&#xff0c;对于SRM软件并不陌生&#xff0c;但对于刚刚进入采购行业的新手来说&#xff0c;就可能不太了解这个软件的作用了。现在让我们来科普一下&#xff1a;通常&#xff0c;我们将SRM称为供应商关系管理&#xff0c;其全称为Supplier Relationship Management…

java在cmd中乱码的问题解决

本文深入探讨了在使用 Java 命令行&#xff08;cmd&#xff09;时可能出现的中文乱码问题&#xff0c;并提供了两种解决方案。首先&#xff0c;通过临时的方式&#xff0c;用户可以执行命令 chcp 936 选择字符集&#xff0c;然后再运行 Java 命令&#xff0c;确保在选择字符集过…