误差逆传播算法公式理解及推导

news2025/5/30 13:05:06

前言:公式理解及推导参考自《机器学习》周志华 P101

BP网络

BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络。

给定训练集 D = { ( x 1 , y 1 ) D=\left\{\left(\boldsymbol{x}_1, \boldsymbol{y}_1\right)\right. D={(x1,y1), ( x 2 , y 2 ) , … , ( x m , y m ) } , x i ∈ R d , y i ∈ R l \left.\left(\boldsymbol{x}_2, \boldsymbol{y}_2\right), \ldots,\left(\boldsymbol{x}_m, \boldsymbol{y}_m\right)\right\}, \boldsymbol{x}_i \in \mathbb{R}^d, \boldsymbol{y}_i \in \mathbb{R}^l (x2,y2),,(xm,ym)},xiRd,yiRl,即输入示例由 d d d 个属性描述,输出 l l l 维实值向量。如下图所示,给出一个拥有 d d d 个输入神经元、 l l l 个输出神经元、 q q q 个隐层神经元的多层前馈网络结构。

对训练例 ( x k , y k ) , k ∈ ( 1 , m ) \left(\boldsymbol{x}_k, \boldsymbol{y}_k\right), k∈(1, m) (xk,yk),k(1,m),假定神经网终的输出为 y ^ k = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) \hat{\boldsymbol{y}}_k=\left(\hat{y}_1^k, \hat{y}_2^k, \ldots, \hat{y}_l^k\right) y^k=(y^1k,y^2k,,y^lk),即 y ^ j k = f ( β j − θ j ) \hat{y}_j^k=f\left(\beta_j-\theta_j\right) y^jk=f(βjθj)。关于 y ^ j k \hat{y}_j^k y^jk 的表达式来源于 MP 神经元模型,简单来说,当总输入超过阈值则输出一个信号,当总输入低于阈值会输出另一个信号。

网络在 ( x k , y k ) , k ∈ ( 1 , m ) \left(\boldsymbol{x}_k, \boldsymbol{y}_k\right), k∈(1, m) (xk,yk),k(1,m) 上的均方误差为 E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2} \sum_{j=1}^l\left(\hat{y}_j^k-y_j^k\right)^2 Ek=21j=1l(y^jkyjk)2,此处 1/2 是为了后面求导方便。

BP网络及算法中变量符号

参数更新式

网络中有 ( d + l + 1 ) q + l (d+l+1) q+l (d+l+1)q+l 个参数需确定:输入层到隐层的 d × q d \times q d×q 个连接权、隐层到输出层的 q × l q \times l q×l 个连接权、 q q q 个隐层神经元的阈值、 l l l 个输出层神 经元的阈值。以隐层到输出层的连接权 w h j w_{hj} whj 为例分析参数更新, w h j w_{hj} whj 参数更新估计式为:
w h j ′ = w h j + Δ v = w h j − η ∂ E k ∂ w h j w_{hj}'=w_{hj}+ \Delta v = w_{hj}-\eta \frac{\partial E_k}{\partial w_{hj}} whj=whj+Δv=whjηwhjEk
其中, η ∈ ( 0 , 1 ) \eta \in (0, 1) η(0,1),成为学习率(learning rate)。
因为每次更新只考虑一个参数,所以 E k E_k Ek 可视为关于 w h j w_{hj} whj 的一元函数。若 ∂ E k ∂ w h j \frac{\partial E_k}{\partial w_{hj}} whjEk 为正值,说明 w h j w_{hj} whj 越大, E k E_k Ek 越大,为使 E k E_k Ek 尽可能小,所以应减去这个正的导数;若 ∂ E k ∂ w h j \frac{\partial E_k}{\partial w_{hj}} whjEk 为负值,说明 w h j w_{hj} whj 越大, E k E_k Ek 越小,为使 E k E_k Ek 尽可能小,所以应减去这个负的导数,增大 w h j w_{hj} whj

计算导数–链式法则

注意到 w h j w_{h j} whj 先影响到第 j j j 个输出层神经元的输入值 β j \beta_j βj,再影响到其输出值 y ^ j k \hat{y}_j^k y^jk,然后影响到 E k E_k Ek,有:
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j . \frac{\partial E_k}{\partial w_{h j}}=\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{h j}} . whjEk=y^jkEkβjy^jkwhjβj.
根据定义 β j = ∑ h = 1 q w h j b h \beta_j = \sum_{h=1}^q w_{h j} b_h βj=h=1qwhjbh ,有
∂ β j ∂ w h j = b h \frac{\partial \beta_j}{\partial w_{h j}}=b_h whjβj=bh
计算 ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j \frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}}{\partial \beta_{\mathrm{j}}} y^jkEkβjy^jk
= ∂ E k ∂ y ^ j k ⋅ ∂ [ f ( β j − θ j ) ] ∂ β j = ∂ E k ∂ y ^ j k ⋅ f ′ ( β j − θ j ) = ∂ E k ∂ y ^ j k ⋅ f ( β j − θ j ) × [ 1 − f ( β j − θ j ) ] = ∂ E k ∂ y ^ k k ⋅ y ^ j k ( 1 − y ^ j k ) = ∂ [ 1 2 ∑ j = 1 1 ( y ^ j k − y j k ) 2 ] ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) = 1 2 × 2 ( y ^ j k − y ^ j k ) × 1 × y ^ j k ( 1 − y ^ j k ) = ( y ^ j k − y ^ j k ) y ^ j k ( 1 − y ^ j k ) =\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathbf{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial\left[\mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)\right]}{\partial \beta_{\mathrm{j}}}=\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \mathrm{f}^{\prime}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)=\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right) \times\left[1-\mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)\right] = \frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{k}}^{\mathrm{k}}} \cdot \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \\ =\frac{\partial\left[\frac{1}{2} \sum_{\mathrm{j}=1}^1\left(\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}-\mathrm{y}_{\mathrm{j}}^{\mathrm{k}}\right)^2\right]}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right)=\frac{1}{2} \times 2\left(\hat{y}_{\mathrm{j}}^{\mathrm{k}}-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \times 1 \times \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right)=\left(\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) =y^jkEkβj[f(βjθj)]=y^jkEkf(βjθj)=y^jkEkf(βjθj)×[1f(βjθj)]=y^kkEky^jk(1y^jk)=y^jk[21j=11(y^jkyjk)2]y^jk(1y^jk)=21×2(y^jky^jk)×1×y^jk(1y^jk)=(y^jky^jk)y^jk(1y^jk)

上式计算 f ′ ( β j − θ j ) \mathrm{f}^{\prime}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right) f(βjθj) 时,涉及 Sigmoid 函数 f ( x ) f(x) f(x) 的导数: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{\prime}(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))

再令
g j = − ∂ E k ∂ β j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j g_j=-\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \beta_{\mathrm{j}}}=-\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}}{\partial \beta_{\mathrm{j}}} gj=βjEk=y^jkEkβjy^jk
综上,得到关于 w h j w_{hj} whj 的更新公式为:
Δ w h j = − η ∂ E k ∂ w h j = − η ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j = − η ( − g j ) b h = η g j b h \Delta w_{hj} =-\eta \frac{\partial E_k}{\partial w_{hj}}=-\eta \frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{h j}}= -\eta (-g_j) b_h= \eta g_j b_h Δwhj=ηwhjEk=ηy^jkEkβjy^jkwhjβj=η(gj)bh=ηgjbh
同理可得 θ j \theta_j θj v i h v_{ih} vih γ h \gamma_h γh 的更新公式。需注意的是,在计算过程中,确定链式求导公式是关键。


补充 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1 的导数:
f ′ ( x ) = e − x ( 1 + e − x ) 2 = 1 + e − x − 1 ( 1 + e − x ) 2 = 1 1 + e − x − 1 ( 1 + e − x ) 2 = f ( x ) − ( f ( x ) ) 2 = f ( x ) [ 1 − f ( x ) ] f'(x)=\frac{e^{-x}}{(1+e^{-x})^2} = \frac{1+e^{-x}-1}{(1+e^{-x})^2}= {\frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2}}=f(x)-(f(x))^2=f(x)[1-f(x)] f(x)=(1+ex)2ex=(1+ex)21+ex1=1+ex1(1+ex)21=f(x)(f(x))2=f(x)[1f(x)]


参考文章:

梯度下降的参数更新公式是如何确定的? - 老董的回答 - 知乎

神经网络之反向传播算法(BP)公式推导 - jsfantasy - 博客园 (cnblogs.com)

DATAWHALE - 一个热爱学习的社区 (linklearner.com)

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

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

相关文章

2023年我的Flag已准备完毕

前言: 😄作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭&#xff1a…

用力过猛,把服务压挂了?

背景 在刚开始进行压测的时候,我也不知道需要提前分析下压测的QPS目标,也不知道说第一步压测的预估值是多少,结果一下子干上去,就把测试环境的服务给整挂了,然后就迎来了一大波的投诉(好惨呐&#xff09…

【6-循环神经网络】北京大学TensorFlow2.0

课程地址:【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲:神经网络计算:神经网络的计算过程,搭建第一个神经网络模型神经网络优化:神经网络的优化方法,掌握学习率、激活函数、损…

基于微信小程序的校园自助打印系统小程序

文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…

GJB 5000B二级-RDM需求开发与管理

一、主要变化情况 新增3项(金色)、合并12->5项(绿色)、修订3项(蓝色) 合并的主要内容 1、合并过程域:原标准中RD与ReqM合并为RDM   需求开发与需求管理的过程活动紧密相关,在全生命周期中不可分割。 2、合并实践条目:精炼实践,聚焦重点   a)ReqM SP1.1“获…

UE运行时动态设置屏幕分辨率

文章目录 1.实现目标2.实现过程2.1 控制台直接输入命令2.2 通过蓝图设置3.参考资料1.实现目标 在UE中以独立进程(Standalone Game)方式启动游戏,并在运行时动态修改游戏窗口的屏幕分辨率大小,如下图所示屏幕大小从1000x800修改为600x400。 2.实现过程 参考文档和资料,通…

微服务服务治理

服务治理什么是服务治理?第一部分 服务注册第二部分 服务发现Nacos(常见注册中心)入门搭建Nacos环境Nacos远程调用实现商品服务的负载均衡什么是负载均衡?手动实现负载均衡利用组件实现负载均衡修改负载均衡策略什么是服务治理? 服务治理是微…

PySpark sql 中一些函数的总结(持续更新)

看到什么函数就记录了,没有什么逻辑关系 spark 中DataFrame 和 pandas的DataFrame的区别 1. F.split() 和 df.withColumn() from pyspark.sql import SparkSession from pyspark.sql import functions as F from pyspark.sql.types import *df spark.sql(sql) sp…

打开Jupyter notebook没有虚拟环境内核

放了个假,今天准备打开anaconda中的jupyter notebook重温一下之前的文档,结果双击Anaconda-Navigator出现了【应用程序“Anaconda-Navigator”无法打开】,想着利用终端也可以操作,于是使用下面命令激活了环境并打开jupter noteboo…

JZ11 旋转数组的最小数字

【答案解析】:暴力破解:遍历数组找出最小值即可 更优思想:采用二分查找,这个题主要分析三种旋转情况[1, 2, 3, 4, 5],使用中间值与右端进行比较。 1. 中间大于右边[3, 4, 5, 1, 2],这种情况下,最…

Spring Framework-01

Spring两大核心技术 1.IOC 2.AOP Spring 1 Spring Framework 1.核心层 Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块 2.AOP层 AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前…

国内那么多的低代码平台,究竟哪家比较强?

国内有特色的低代码快速开发平台产品有哪些?这篇就来介绍下目前市面上主要的几家低代码开发平台! 简道云、明道云、IVX这几家目前是无代码赛道的明星选手,在市场综合表现上名列前茅。宜创、红圈营销虽也极具潜力,但在市场表现力上…

virsh日常管理命令

virsh日常管理命令virsh日常管理命令创建vm实例规范网卡编号从0开始Centos7最小化安装环境勾选VM实例建议只分配/分区查看vm列表启动vm实例--startvm实例(软)关机--shutdownvm实例断电关机--destroyvm实例(软)重启--rebootvm实例重命名--domrenamevm实例挂起--suspend查看vm实例…

Elasticsearch:从 Kafka 到 Elasticsearch 的实时用户配置文件数据管道

如今,网络服务、数字媒体、传感器日志数据等众多来源产生了大量数据,只有一小部分数据得到妥善管理或利用来创造价值。读取大量数据、处理数据并根据这些数据采取行动比以往任何时候都更具挑战性。 在这篇文章中,我试图展示: 在…

Discord教程:Discord账号注册、Discord多账号登录和管理

Discord最初是为游戏玩家在群聊和交流而创建的。但自疫情爆发以来,许多企业、公司和初创公司发现,居家办公时使用Discord进行日常沟通非常便捷。 Discord不再是仅限于游戏玩家,平台建立了不同于其他任何社交空间的新空间,封闭又开…

9、矩阵的简单运算

目录 一、矩阵的加减运算 二、矩阵的乘方运算 1.数与矩阵的乘法 2.矩阵与矩阵的乘法 三、矩阵的除法 四、矩阵的幂运算 五、矩阵元素的查找 六、矩阵元素的排序 七、矩阵元素的求和 八、矩阵元素的求积 九、矩阵元素的差分 一、矩阵的加减运算 进行矩阵加法、减法运…

前端学习第四站——CSS全面学习基础篇

目录 一、基础认知 1.1 CSS的介绍 1.2 语法规则 1.3 CSS初体验 1.4 CSS初识-小结 2.1 CSS引入方式 二、基础选择器 1.1 选择器的作用 1.2 标签选择器 1.3. 类选择器 1.4 id选择器 补充:类和id的区别 1.5 通配符选择器 三、字体和文本样式 1. 字体样式 …

python数据可视化开发(2):pandas读取Excel的数据格式处理(数据读取、指定列数据、DataFrame转json、数学运算、透视表运算输出)

系列文章目录 python开发低代码数据可视化大屏:pandas.read_excel读取表格python实现直接读取excle数据实现的百度地图标注python数据可视化开发(1):Matplotlib库基础知识 文章目录系列文章目录前言实践目标一、读取Excel数据read_excel参数说明读取全部…

Launcher应用列表内搜索框显示异常

问题描述 应用列表界面搜索框显示异常。本地试验后发现以下规律。 1、删除几个底边栏图标 2、旋转屏幕 3、进入应用列表,观察上方搜索框显示 问题分析 此问题是launcher内部界面显示问题,比较初级。找到规律后,发现应用列表内搜索框和底边…

【Hadoop】MapReduce数据倾斜问题解决方案

默认情况下Map任务的数量与InputSplit数量保持一致,Map阶段的执行效率也与InputSplit数量相关,当遇到大量的小文件时我们采用SequenceFile合并成一个大文件,以此来提高运行效率(【Hadoop】MapReduce小文件问题解决方案&#xff08…