反向传播算法(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.hqwc.cn/news/506509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

萝卜大杂烩 | 提高数据科学工作效率的 8 个 Python 库

本文来源公众号“萝卜大杂烩”,仅用于学术分享,侵权删,干货满满。 原文链接:提高数据科学工作效率的 8 个 Python 库 在进行数据科学时,可能会浪费大量时间编码并等待计算机运行某些东西。所以我选择了一些 Python 库…

STM32 DMA入门指导

什么是DMA DMA,全称直接存储器访问(Direct Memory Access),是一种允许硬件子系统直接读写系统内存的技术,无需中央处理单元(CPU)的介入。下面是DMA的工作原理概述: 数据传输触发&am…

UE 打包窗口及鼠标状态设置

UE 打包窗口及鼠标状态设置 打包后鼠标不锁定 显示鼠标图标 打包后设置窗口模式 找到打包路径下的配置文件GameUserSettings,设置相关项目 FullscreenMode0表示全屏模式,1表示窗口全屏模式,2表示窗口模式

安卓JNI基础知识

JNI基础知识 JNI简介NDK配置开发环境JNI实践配置CMakeJNI编码JNI注册1.静态注册2.动态注册 编译方式CMakeLists编译Makefile编译命令编译 JNI和C/C代码分离Java调用C/C查看so中包含的方法 C/C调用Java打印C/C的log生成多个共享库soJNI调试 本文整理了JNI技术基础知识 JNI简介 …

mac命令行下计算文件SHA-256散列值

源起 从国内的第三方网站下载了Android sutiod的zip包下载地址,为了安全起见还是得跟Android官网上的对应的zip包的SHA值做下对比。以前是经常使用md5命令的,所以理论在命令行下应该是有对应的命令行工具可以计算SHA值的。后来搜索到可以用 shasum命令来…

day02-JavaScript-Vue

文章目录 1 JavaScript1.1 介绍 1.2 引入方式1.3 基础语法1.3.1 书写语法1.3.2 变量1.3.3 数据类型和运算符 1.4 函数1.4.1 第一种定义格式1.4.2 第二种定义格式 1.5 JavaScript对象1.5.1 基本对象1.5.1.1 Array对象语法格式特点属性和方法 1.5.1.2 String对象语法格式属性和方…

竞争加剧下,登顶后的瑞幸该做什么?

瑞幸咖啡仅用短短18个月时间从品牌创立到纳斯达克上市,刷新全球最快上市记录。2020年因交易造假事件被勒令退市股价暴跌80%,有人说这个创造了赴美IPO奇迹的“巨婴”将是下一个倒下的ofo。2023年瑞幸咖啡以逆势超速增长领跑咖啡赛道有力回应了市场的质疑&…

消息中间件之RocketMQ源码分析(二十七)

Broker提交或回滚事务消息 当生产者本地事务处理完成并且Broker回查事务消息后,不管执行Commit还是Rollback,都会根据用户本地事务的执行结果发送一个End_transaction的RPC请求给Broker,Broker端处理该请求的类是EndTransactionProcessor 第一步&…

什么是张量?如何理解张量?

一、张量概念 张量(tensor)是一个多维数组,它是向量(一维数组)和矩阵(二维数组)的推广。在数学和物理学中,张量是一种广泛应用的概念,用来描述物理量在空间中的分布和变…

LLM 系列——BERT——论文解读

一、概述 1、是什么 是单模态“小”语言模型,是一个“Bidirectional Encoder Representations fromTransformers”的缩写,是一个语言预训练模型,通过随机掩盖一些词,然后预测这些被遮盖的词来训练双向语言模型(编码器…

HTML~

HTML HTML是一门语言,所有的网页都是用HTML这门语言编写出来的HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容 标记语言:由标签构成的语言 …

下载github项目到pycharm

一、下载git 1.下载git链接 https://git-scm.com/ 2.一路点击next,最后finish 二、使用git 1.安装成功后在开始菜单栏会找到如下内容,其中常用的是Git Bash 2.点击Git Bash 3.这里就可以克隆github上的代码了 点击复制,在命令行输入…