反向传播算法(Back Propagation)

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

反向传播算法

梯度下降和反向传播是神经网络训练过程中两个非常重要的概念,它们密切相关。梯度下降是一种常用的优化算法,它的目标是找到一个函数的最小值或最大值。在神经网络中,梯度下降算法通过调整每个神经元的权重,以最小化网络的损失函数。损失函数是用来衡量网络的输出与真实值之间的误差。梯度下降算法的核心思想是计算损失函数对权重的偏导数,然后按照这个偏导数的反方向调整权重。

反向传播是一种有效的计算梯度的方法,它可以快速计算网络中每个神经元的偏导数。反向传播通过先正向传播计算网络的输出,然后从输出层到输入层反向传播误差,最后根据误差计算每个神经元的偏导数。反向传播算法的核心思想是通过链式法则将误差向后传递,计算每个神经元对误差的贡献。

综上所述,梯度下降和反向传播是神经网络训练过程中两个重要的概念,梯度下降算法用于优化网络的权重,反向传播算法用于计算每个神经元的偏导数。它们密切相关,并在神经网络的训练中起着重要的作用。下面用一个例子演示神经网络层参数更新的完整过程。

(1)初始化网络,构建一个只有一层的神经网络,如下图所示。

神经网络图

假设图 2-9 中神经网络的输入和输出的初始化为: x_1=0.5,x_2=1.0,y=0.8 。参数的初始化为: w_1=1.0,w_2=0.5,w_3=0.5,w_4=0.7,w_5=1.0,w_6=2.0 。
(2) 前向计算, 如下图所示。

前向计算

根据输入和权重计算 h_1 得:

                                             \begin{aligned} h_{1}^{(1)}& =w_1\cdot x_1+w_2\cdot x_2 \\ &=1.0\cdot0.5+0.5\cdot1.0 \\ &=1.0 \end{aligned}

同理, 计算 h_2 等于 0.95 。将 h_1 和 h_2 相乘求和到前向传播的计算结果, 如下图所示。

相乘求和

\begin{aligned} y^{\prime}& =w_5\cdot h_1^{(1)}+w_6\cdot h_2^{(1)} \\ &=1.0\cdot1.0+2.0\cdot0.95 \\ &=2.9 \end{aligned}
(3) 计算损失: 根据数据真实值 y=0.8 和平方差损失函数来计算损失, 如下图所示。

损失计算

                                                          \begin{aligned} &\delta=\frac12(y-y^{\prime})^2 \\ &=0.5(0.8-2.9)^2 \\ &=2.205 \end{aligned}
(4) 计算梯度: 此过程实际上就是计算偏微分的过程, 以参数 w_5 的偏微分计算为例,如下图所示。

梯度计算

根据链式法则:

                                                      \frac{\partial\delta}{\partial w_5}=\frac{\partial\delta}{\partial y^{\prime}}\cdot\frac{\partial y^{\prime}}{\partial w_5}

其中:

                                              \begin{aligned} \frac{\partial\delta}{\partial y^{\prime}}& =2\cdot\frac12\cdot\left(y-y^{\prime}\right)(-1) \\ &=y^{\prime}-y \\ &=2.9-0.8 \\ &=2.1 \end{aligned}

                                              \begin{gathered} y'=w_5\cdot h_1^{(1)}+w_6\cdot h_2^{(1)} \\ \frac{\partial y^{\prime}}{\partial w_5}=h_1^{(1)}+0 \\ =1.0 \end{gathered}

所以:

\frac{\partial\delta}{\partial w_5}=\frac{\partial\delta}{\partial y^{\prime}}\cdot\frac{\partial y^{\prime}}{\partial w_5}=2.1\times1.0=2.1

(5) 反向传播计算梯度: 在第 4 步中是以参数w_5 为例子来计算偏微分的。如果以参数 w_1 为例子, 它的偏微分计算就需要用到链式法则, 过程如下图所示。

反向传播计算梯度

                                                \frac{\partial\delta}{\partial w_1}=\frac{\partial\delta}{\partial y^{\prime}}\cdot\frac{\partial y^{\prime}}{\partial h_1^{(1)}}\cdot\frac{\partial h_1^{(1)}}{\partial w_1}

                                                \begin{gathered} y'=w_5\cdot h_1^{(1)}+w_6\cdot h_2^{(1)} \\ \frac{\partial y^{\prime}}{\partial h_1^{(1)}}=w_5+0 \\ =1.0 \end{gathered}

                                              \begin{aligned}h_1^{(1)}&=w_1\cdot x_1+w_2\cdot x_2\\\frac{\partial h_1^{(1)}}{\partial w_1}&=x_1+0\\&=0.5\end{aligned}

                         \frac{\partial\delta}{\partial w_1}=\frac{\partial\delta}{\partial y^{\prime}}\cdot\frac{\partial y^{\prime}}{\partial h_1^{(1)}}\cdot\frac{\partial h_1^{(1)}}{\partial w_1}=2.1\times1.0\times0.5=1.05

(6)梯度下降更新网络参数
假设这里的超参数 “学习速率” 的初始值为 0.1 , 根据梯度下降的更新公式, w1 参数的更新计算如下所示:

                   w_1^{(\mathrm{update})}=w_1-\eta\cdot\frac{\partial\delta}{\partial w_1}=1.0-0.1\times1.05=0.895

同理, 可以计算得到其他的更新后的参数:w_1=0.895,w_2=0.895,w_3=0.29,w_4=0.28,w_5=0.79,w_6=1.8005

到此为止, 我们就完成了参数迭代的全部过程。可以计算一下损失看看是否有减小, 计算如下:                                                         \begin{aligned} &\text{} \delta=\frac12(y-y^{\prime})^2 \\ &=0.5(0.8-1.3478)^2 \\ &=0.15 \end{aligned}

此结果相比较于之间计算的前向传播的结果 2.205, 是有明显的减小的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rt thread stdio如何同时生成bin和hex

一、rt thread stdio默认生成bin文件: rt thread stdio 软件编译时,默认生成bin文件; 二、rt thread stdio如何同时生成bin和hex 右键单击-->项目-->属性-->C/C构建-->设置-->构建步骤-->(构建后步骤)命令: …

【Java】Base理论的核心思想和理论三要素

目录 简介 BASE 理论的核心思想 BASE 理论三要素 1. 基本可用 2. 软状态 3. 最终一致性 总结 简介 BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(最终一致性&#xf…

软件分层(数据结构/软件逻辑上分层+举例),相连节点的概念+如何相连,为什么是层状结构(软件分层,网络协议分层+梳理协议顺序),协议分层(打电话例子)

目录 软件分层 介绍 举例 类的继承 虚拟文件系统 线程接口封装 虚拟地址空间 总结 为什么是层状的 软件分层 网络协议 原因 梳理协议顺序 相连节点 协议分层 引入 示例 实际上 逻辑上 制定出协议 软件分层 介绍 通过将软件系统划分为不同的层次,每一层都有…

递归学习资料

思路 例题 package 递归;public class 反向打印字符串 {public static void main(String[] args) {f("ABC",0);}static void f(String str,int n){if (nstr.length()){return;}f(str,n1);System.out.println(str.charAt(n)"");} }多路递归 递归优化 -剪枝…

解决prettier 报错 Delete `␍`

根目录(么有的话)新建 .prettierrc.js配置文件 module.exports {tabWidth: 2,semi: true,printWith: 80,singleQuote: true,quoteProps: consistent,htmlWhitespaceSensitivity: strict,vueIndentScriptAndStyle: true,// 主要是最后一行endOfLine:aut…

J013_简易商家外卖系统

一、需求描述 1、完成菜品的上架功能 2、完成菜品的浏览功能 二、开发设计 1、需要设计一个菜品类,用于创建菜品对象 2、需要一个菜品操作类,用于封装菜品上架和菜品浏览功能 3、测试程序 三、代码实现 3.1 Food类 package com.itheima.arrayli…

Vue中如何进行非父子组件通信?

当谈及Vue中非父子组件通信时,我们通常会考虑使用Event Bus或者Vuex来实现。以下是我为您准备的一些面试题内容和示例代码: 面试题:“Vue中如何进行非父子组件通信?” 在Vue中,父子组件之间的通信通常是通过props和e…

【小迪安全】2022年全栈渗透测试工程师培训视频

🚫 禁止任何非授权的网络攻击! 🚓 谨记双刃剑之道,以防引火烧身! 观看地址 【小迪安全】2022年全栈渗透测试工程师培训视频 说明 资料均收集自互联网,本站不对任何视频资源进行出售!感谢视频…

Vue.js+SpringBoot开发音乐偏好度推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1.2 我的喜好模块2.1.3 每日推荐模块2.1.4 通知公告模块 2.2 用例图设计2.3 实体类设计2.4 数据库设计 三、系统展示3.1 登录注册3.2 音乐档案模块3.3 音乐每日推荐模块3.4 通知公告模…

关于docker容器存储问题

一、容器的存储可以分为两大类: 一种是与镜像相关的即容器层Copy-On-Write特性。默认情况下,在容器内创建的所有文件都存储在可写容器层上,这种直接将文件存储在容器层的方式数据难以持久化和共享,由于依赖存储驱动与使用直接写入…

139.乐理基础-一四五八度为何用纯?

上一个内容:138.乐理基础-等音、等音程的意义-CSDN博客 上一个内容里练习的答案: 以乐理里写的知识,没办法完全解释透彻 一四五八度为何用纯?这个问题,要透彻的话要从各个文明怎么发现音高、发明音高、制定规则等&…

javascript学习快速入门

JavaScript 基本语法 快速入门 数据类型 123 // 整数123 123.1 //浮点数123.1 1.123e3 //科学计数法-99//复数 NaN// not a numberInfinity //表示无限大注意点 NaNNaN,这个与所有的数值都不相等,包括自 己 只能通过isNaN(NaN)来判断这个数是否是Na…

第1章:绪论 1.1数据库系统概述

文章目录 1.1 数据库系统概述1.1.1 数据库的4个基本概念1.1.2 数据管理技术的产生和发展1.1.3 数据库系统的特点 1.1 数据库系统概述 1.1.1 数据库的4个基本概念 数据(Data) 是数据库中存储的基本对象 数据的定义:描述事物的符号记录 数据的种类:文本、…

双重检验锁

双重检验锁:设计模式中的单例模式,细分为单例模式中的懒加载模式。 单例模式 单例模式:指的是一个类只有一个对象。最简单的实现方式是设一个枚举类,只有一个对象。缺点是当对象还没有被使用时,对象就已经创建存在了…

MATLAB读取txt文本数据及可视化指南

MATLAB读取txt文本数据的说明指南 目录 MATLAB读取txt文本数据的说明指南摘要1. 数据准备2. 读取数据3. 绘制图形4. 小结 摘要 在MATLAB中,读取txt文本格式文件数据是一项基本的操作,特别是在数据分析和可视化方面。本文将介绍如何使用MATLAB读取txt文本…

【代码随想录算法训练营Day35】435.无重叠区间;763.划分字母区间;56.合并区间

文章目录 ❇️Day 36 第八章 贪心算法 part05✴️今日任务❇️435. 无重叠区间自己的思路自己的代码(✅通过81.59%)随想录思路随想录代码 ❇️763.划分字母区间自己的思路自己的代码(✅通过55.30%)随想录思路随想录代码 ❇️56. 合…

利用Python自动化日常任务

在快节奏的现代生活中,时间就是一切。幸运的是,Python提供了一系列强大的库和工具,可以帮助我们自动化那些乏味且重复的任务,从而释放我们的时间,让我们可以专注于更有创造性和有意义的工作。下面,我们将探…

【网站项目】158企业人事管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

chatgpt-next-web搭建教程,超低成本部署属于自己的ChatGPT

随着AI的应用变广,各类AI程序已逐渐普及,尤其是在一些日常办公、学习等与撰写/翻译文稿密切相关的场景,大家都希望找到一个适合自己的稳定可靠的ChatGPT软件来使用。 ChatGPT-Next-Web就是一个很好的选择。它是一个Github上超人气的免费开源…

加密与安全_探索签名算法

文章目录 概述应用常用数字签名算法CodeDSA签名ECDSA签名小结 概述 在非对称加密中,使用私钥加密、公钥解密确实是可行的,而且有着特定的应用场景,即数字签名。 数字签名的主要目的是确保消息的完整性、真实性和不可否认性。通过使用私钥加…