BP算法

2023-10-29

只限于自己看!

预先说明

首先,这里面什么看成变量,什么看成常量。
变量:网络的权值W(偏置b默认在W内。)以及输入X。
常量:就是target
你可能会说呃呃呃,不是输入都是有值吗,不都是数吗,怎么会是变量啊。。一般来说网络的反向传播就是两种类型。一种是更新网络权值W,这是属于常规的,一种是更新输入X。 不管哪种情况,我们都要把W和X看成变量,才能有反向传播。
推导过程中,W和X都是变量,输出是W和X的函数。

字母说明

  • W(l)ij W i j ( l ) :第 l l 层到第l+1l+1层的权值,并且是 l l 层的第jj个单元到 l+1 l + 1 层的第 i i 个单元的权值。

  • Z(l)iZi(l):第 l l 层的第ii个结点的输入和
    显然 Z(l)i=s(l1)j=0Wl1ijxj Z i ( l ) = ∑ j = 0 s ( l − 1 ) W i j l − 1 x j , 其中 sl1 s l − 1 代表 l1 l − 1 层的结点个数(不计算偏置单元)。可以这样说,第0个单元是偏置,1~ s(n1) s ( n − 1 ) 是权重项。

  • a(l)i a i ( l ) :表示第 l l 层的第ii个结点的激活值,就是下面说的out的输出,或是说 a=f(net) a = f ( n e t ) ,写成 a=f(z) a = f ( z ) 也是一样的。

  • δ(l)i δ i ( l ) : 叫做“残差”,这里表示第 l l 层的第ii个节点的残差。这个非常重要,残差的定义就是——总的代价函数对于某个节点的“net”的偏导。注意的是这里的“net”指的是W*x+b这样的函数结构。可以这样看网络:

    现在只需要看每个结点是如何处理数据的。不要看箭头,可以看到,h1和h2再加上“1”共三个结点输入,构成输入 x⃗  x → , 而相应的权值 W⃗  W → w5 w 5 , w6 w 6 , b2 b 2 , 也就是说 W⃗ x⃗  W → ∗ x → 就是这里的“net”,然后“out”是指激活后的值,就是 f(net) f ( n e t ) . 残差就是 Enet ∂ E ∂ n e t ,*不是 Eout ∂ E ∂ o u t 哦!

BP算法细节

参数说明:假设有n层。J表示代价函数,和上面的E是同样的意思,只不过用不同的字母写而已。
1: 首先当然是正向计算咯,分别求出 L2,L3,... L 2 , L 3 , . . . 直至最后一层 Ln L n 激活值。我们这里把输入当做第一层。下面是真正的反向传播。

2: 对于第n层(最后一层是特殊的,必须单独拿出来)每个输出单元 i i ,下面的ll的值为 n n , 计算每个结点的残差:

δ(l)i=J(W,b;x,y)z(l)i=z(l)i12yhW,b(x)2=(yia(l)i)f(z(l)i)(1)(1)δi(l)=J(W,b;x,y)zi(l)=zi(l)12yhW,b(x)2=(yiai(l))f(zi(l))

注意:这里最后乘上了对“net”的导,如果是用sigmoid的函数的话,根据 f(z(l)i)=a(l)i(1a(l)i) f ′ ( z i ( l ) ) = a i ( l ) ( 1 − a i ( l ) ) , 最后一层的第 i i 个结点的残差δ(l)i=(yia(l)i)a(l)i(1a(l)i)δi(l)=(yiai(l))ai(l)(1ai(l))

3: 从倒数第二层开始,也就是说 l=n1,n2,n3,...,2 l = n − 1 , n − 2 , n − 3 , . . . , 2 的各层,第 l l 层的第ii个结点的残差计算:

δ(l)i=(j=1sl+1W(l)jiδ(l+1)j)f(z(l)i) δ i ( l ) = ( ∑ j = 1 s l + 1 W j i ( l ) δ j ( l + 1 ) ) f ′ ( z i ( l ) )

分析:要想知道第 l l 层的第ii个结点的残差,必须知道该节点所连接的下一层的各个结点的权值,以及这些结点的残差,幸亏第 l+1 l + 1 层已经计算出来了残差,你只要把后面一层的每个结点 j j 的残差乘以该结点与这一层的结点ii相连的权值,然后加和,最后别忘了乘以这一层的激活方式的导数。 不吹不黑,如果你不太懂得话,这段话可以够你看10遍,你就懂了。

4: 你可能会说要残差干嘛?当然是计算 Jw ∂ J ∂ w Jb ∂ J ∂ b 用的。
只要:

W(l)ijJ(W,b;x,y)=a(l)jδ(l+1)ib(l)iJ(W,b;x,y)=δ(l+1)i(2)(3) (2) ∂ ∂ W i j ( l ) J ( W , b ; x , y ) = a j ( l ) δ i ( l + 1 ) (3) ∂ ∂ b i ( l ) J ( W , b ; x , y ) = δ i ( l + 1 )

结论:求J对“结点j到i的线路”的导数,求出后者i的残差,然后乘以这条线路的流量即可。

分析:其实是这样的, Wlij W i j l 是第 l l 层到l+1l+1层的权值,并且是从结点 j j 到结点ii的权值。根据链式法则:

J(W,b;x,y)w(l)ij=J(W,b;x,y)outioutinetinetiwij ∂ J ( W , b ; x , y ) ∂ w i j ( l ) = ∂ J ( W , b ; x , y ) ∂ o u t i ∗ ∂ o u t i ∂ n e t i ∗ ∂ n e t i ∂ w i j

请仔细看上面的公式,好好理解。
残差的定义就是 J(W,b;x,y)neti ∂ J ( W , b ; x , y ) ∂ n e t i ,根据链式法则:
δ(l+1i=J(W,b;x,y)neti=J(W,b;x,y)outioutineti δ i ( l + 1 ) = ∂ J ( W , b ; x , y ) ∂ n e t i = ∂ J ( W , b ; x , y ) ∂ o u t i ∗ ∂ o u t i ∂ n e t i
这下明白了吧,就是说第 l+1 l + 1 层,
Jw(l)ij=δ(l+1)inetiwij=δ(l+1)ia(l)j ∂ J ∂ w i j ( l ) = δ i ( l + 1 ) ∗ ∂ n e t i ∂ w i j = δ i ( l + 1 ) a j ( l )

注意,第 l+1 l + 1 层的 netiwij ∂ n e t i ∂ w i j 就是该层的输入,也就是第 l l 层的输出a(l)jaj(l).

最后一个问题,为啥

δ(l)i=(j=1sl+1W(l)jiδ(l+1)j)f(z(l)i) δ i ( l ) = ( ∑ j = 1 s l + 1 W j i ( l ) δ j ( l + 1 ) ) f ′ ( z i ( l ) )
呢?

δ(l1)i=z(l1)iJ(W,b;x,y)=z(l1)i12yhW,b(x)2=z(l1)i12j=1Sl(yja(l)j)2=12j=1Slz(l1)i(yja(l)j)2=12j=1Slz(l1)i(yjf(z(l)j))2=j=1Sl(yjf(z(l)j))z(l1)if(z(l)j)=j=1Sl(yjf(z(nl)j))f(z(l)j)z(l)jz(l1)i=j=1Slδ(l)jz(l)jz(l1)i=j=1Slδ(l)jz(l1)ik=1S(l1)f(z(l1)k)W(l1)jk=j=1Slδ(l)jW(l1)jif(z(l1)i)=(j=1SlW(l1)jiδ(l)j)f(z(l1)i) δ i ( l − 1 ) = ∂ ∂ z i ( l − 1 ) J ( W , b ; x , y ) = ∂ ∂ z i ( l − 1 ) 1 2 ‖ y − h W , b ( x ) ‖ 2 = ∂ ∂ z i ( l − 1 ) 1 2 ∑ j = 1 S l ( y j − a j ( l ) ) 2 = 1 2 ∑ j = 1 S l ∂ ∂ z i ( l − 1 ) ( y j − a j ( l ) ) 2 = 1 2 ∑ j = 1 S l ∂ ∂ z i ( l − 1 ) ( y j − f ( z j ( l ) ) ) 2 = ∑ j = 1 S l − ( y j − f ( z j ( l ) ) ) ⋅ ∂ ∂ z i ( l − 1 ) f ( z j ( l ) ) = ∑ j = 1 S l − ( y j − f ( z j ( n l ) ) ) ⋅ f ′ ( z j ( l ) ) ⋅ ∂ z j ( l ) ∂ z i ( l − 1 ) = ∑ j = 1 S l δ j ( l ) ⋅ ∂ z j ( l ) ∂ z i ( l − 1 ) = ∑ j = 1 S l ( δ j ( l ) ⋅ ∂ ∂ z i ( l − 1 ) ∑ k = 1 S ( l − 1 ) f ( z k ( l − 1 ) ) ⋅ W j k ( l − 1 ) ) = ∑ j = 1 S l δ j ( l ) ⋅ W j i ( l − 1 ) ⋅ f ′ ( z i ( l − 1 ) ) = ( ∑ j = 1 S l W j i ( l − 1 ) δ j ( l ) ) f ′ ( z i ( l − 1 ) )

慢慢看,看懂问题不大。

编码

  1. 进行前馈传导计算,利用前向传导公式,得到 L2,L3, L 2 , L 3 , … 直到输出层 Ll L l 的激活值。
  2. 对输出层(第 l l 层),计算:
    δ(nl)=(ya(nl))f(z(nl))δ(nl)=(ya(nl))f(z(nl))
  3. 对于 l=nl1,nl2,nl3,,2 l = n l − 1 , n l − 2 , n l − 3 , … , 2 的各层,计算:
    δ(l)=((W(l))Tδ(l+1))f(z(l)) δ ( l ) = ( ( W ( l ) ) T δ ( l + 1 ) ) ∙ f ′ ( z ( l ) )
  4. 计算最终需要的偏导数值:
    W(l)J(W,b;x,y)=δ(l+1)(a(l))T,b(l)J(W,b;x,y)=δ(l+1). ∇ W ( l ) J ( W , b ; x , y ) = δ ( l + 1 ) ( a ( l ) ) T , ∇ b ( l ) J ( W , b ; x , y ) = δ ( l + 1 ) .

最后说明一点,BP传播,计算各层的各点的残差是关键,残差是总的代价函数对于该点的net的偏导,从倒数第二层开始,求残差就要用到其后面的一层的各个残差,只要用后面一层的各个结点残差乘以其与这一层这个的结点所连接的权值,再求和,最后乘以这一层这个结点的out对net的偏导就可以了。如此一来,残差乘以这个结点的输入,就可以得到整个代价函数对于这个结点的w偏导了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BP算法 的相关文章

随机推荐

  • echarts自定义tooltip样式

    修改echarts的tooltip样式 let option title text 反馈问题处 n理不及时 使用 n可以文字换行 left 30 top 50 textStyle color fff fontSize 10 tooltip
  • 【计算机算法】递归——递归实现逆序输出整数

    题目 本题目要求读入1个正整数n 然后编写递归函数reverse int n 实现将该正整数逆序输出 输入格式 输入在一行中给出1个正整数n 输出格式 对每一组输入 在一行中输出n的逆序数 输入样例 12345 输出样例 54321 我的实
  • 规则引擎Drools使用 第十二篇 Drools 的高级语法之RHS加强

    RHS部分是规则体的重要组成部分 当LHS部分的条件匹配成功后 对应的RHS部分就会触发执行 一般在RHS部分中需要进行业务处理 在RHS部分Drools为我们提供了一个内置对象 名称就是drools 本小节我们来介绍几个drools对象提
  • IDEA常用插件之代码规范检查

    Alibaba Java Coding Guidelines 安装 使用 手动扫描 这里扫描可以扫描某一个类 某一个包 整个项目都支持 扫描结果 实时扫描 开启实时扫描在代码编写过程中也会实时提醒
  • 【Objective-C】07-自定义构造方法和description方法

    本文目录 知识回顾 一 自定义构造方法 二 description方法 说明 这个Objective C专题 是学习iOS开发的前奏 也为了让有面向对象语言开发经验的程序员 能够快速上手Objective C 如果你还没有编程经验 或者对O
  • TCP三次握手详解

    TCP 传输控制协议 面向连接的可靠传输协议 在完成了传输层的基础工作外 还需要保障传输的可靠性 面向连接 在传输数据前 需要通过三次握手建立端到端的虚链路 可靠传输 传输过程中使用到4种可靠传输机制 确认 排序 流控 滑动窗口 重传 TC
  • [sdio] Common Information Area (CIA) 分析及初始化过程

    一 CIA 概述 SDIO 卡寄存器存储区中有一固定的公共端口区域 简称为 CIA CIA 中的寄存器包括了对 I O 端口功能 中断产生以及端口工作信息 可以通过读写功能 0 对 CIA 所定义的寄存器进行相关操作 CIA 包含了 CCC
  • 做外贸怎么收款?2020最新外贸B2B收款结汇方法详解!

    做外贸怎么收款 很多做外贸的朋友 因为外贸收款的需要 注册了Payoneer外贸e户通 虽然 大家清楚Payoneer外贸e户通功能非常强大 就如我们的文章 Payoneer推出外贸e户通 5种外贸收款方式 提现仅0 5 里面介绍的一样 但
  • mysql 密码共用_数据库密码加密公用秘要生成器,数据库密码加密解密入口(转)...

    public classEncryptor public static final String HUNDSUN VERSION system 管理平台 version 2 0 1 lastModiDate describe protect
  • 【满分】【华为OD机试真题2023 JS】木板

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 木板 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 小明有n块木板 第i 1 i n 块木板的长度为ai 小明买了一块长度为m的木料 这块木料可以切割成任意块
  • 获得一个类的Class类对象的三种方法(Class.forName()方法;类实例对象.getClass()方法;类名.class;)

    Class forName 方法 注意 需要捕获异常ClassNotFoundException 好处 不用创建实例对象 就可以获得Class引用 只需要知道类的全路径地址即可 类实例对象 getClass 方法 注意 如果有该类型的实例对
  • 【React】 13课 安装react脚手架

    第一步 安装脚手架之前需要电脑已安装node与npm 首先按住 shift 鼠标右键 按下 在此处打开命令行窗口 进入命令行窗口 或者 win R 键 输入cmd 进入命令行窗口 输入 node v 与 npm v 查看有无安装node与n
  • Linux安装MySQL5.7.37

    下载地址 https dev mysql com downloads mysql 5 7 html downloads 点击download进入以下页面 可以找到下载链接地址 https dev mysql com get Download
  • python3 sha256加密用法

    hashlib模块简介 hashlib模块为不同的安全哈希 安全散列 Secure Hash Algorithm 和 信息摘要算法 Message Digest Algorithm 实现了一个公共的 通用的接口 也可以说是一个统一的入口 因
  • vue-router之addRoutes使用遇到的坑

    最近项目中使用了vue router的addRoutes这个api 遇到了一个小坑 记录总结一下 场景复现 做前端开发的同学 大多都遇到过这种需求 页面菜单根据用户权限动态生成 一个常见的解决方案是 前端初始化的时候 只挂载不需要权限路由
  • 解决Tomcat后台修改前端无变化问题

    在用tomcat8 9 eclipse ssm开发java web项目的时候 有时会发现后台代码修改了 而前端显示却没有变化 两种情况及解决方案如下 状况一 修改了JSP页面代码 但是浏览器显示出来的还是之前的页面 原因 服务器为提高响应速
  • 统计单词出现的最多次数(Trie树)

    A Time Limit 60ms Memory limit 65536K 有疑问 点这里 题目描述 给出n 1 lt n n lt 2 10 6 个字符串 每个字符串只包含小写英文字母 且最多有五个 问这n个字符串中出现次数最多的有多少个
  • 1.c++环境配置及第一个环境运行

    开发IDE与环境 最好是使用ubuntu系统进行开发 如果没有的话 基于windows使用vs code 进行ssh连接到远程的ubuntu主机进行开发也可以 开发的过程跟本地差不多 vs code IDE 插件的安装 1 变成中文菜单与提
  • ByteBridge数据标注平台:自动驾驶相关数据标注

    ByteBridge Dashboard是一个Saas型数据采集标注平台 利 强大的标注工具 运 智能算法技术 依靠交叉审核质检机制 借助标注运营及管理 动 体化系统 为客户按时提供安全 稳定 质量的数据标注服务 满 在模式识别领域进 科研
  • BP算法

    只限于自己看 预先说明 首先 这里面什么看成变量 什么看成常量 变量 网络的权值W 偏置b默认在W内 以及输入X 常量 就是target 你可能会说呃呃呃 不是输入都是有值吗 不都是数吗 怎么会是变量啊 一般来说网络的反向传播就是两种类型