神经网络的一种求解W的算法,分为信号“正向传播(FP)”求损失,“反向传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代。

BP算法也叫做δ算法。以三层的感知器为例(假定现在隐层和输出层均存在相同类型的激活函数)

  • 隐层 y = f(x * v)
  • 输出层 o = f(f(y) * w)
  • 输入层误差:
  • 隐层误差:   
  • 输入层误差:

误差E有了,那么为了使误差越来越小,可以采用随机梯度下降的方式进行ω和υ的求解,即求得ω和υ使得误差E最小

BP算法的例子

  • 初始值:w(0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65),   b(0.35,0.65)
  • 输出值:O=(0.01,0.99)
  • 学习率:η=0.5
  • 假设隐层和输出层都使用 sigmoid 激活函数

1、FP过程

先求out


同理可以得到:


同理可以得到:

输出层误差表示如下:


2、BP 过程

输出层到第二层隐层,以求   为例:

下面我们分别求上式的三个部分,其中第一部分:

第二分部因为:

第三部分,因为:

最终得到:

更新  的值:

同理可以求出:

第二层隐层到第一层隐层,以求  为例:

下面我们分别计算,第一部分:

其中:

注意:这里由于是反向传播,此时要用到之前更新后的 ​ 的值

同理计算:

接着计算第二部分:

接着计算第三部分:

最终整合起来:

于是更新

同理求出:

以上是第一次迭代,经过多次迭代,最终的误差会越来越小

上图可以看出,当迭代1000次时,输出为 O=(0.022971,0.977675) 和原本的 O=(0.01,0.99) 比较接近了。

python代码

https://github.com/flepeng/code/blob/master/DL/bp_demo.py

import numpy as np# 初始值
w = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65]
# 偏置项b不进行更新
b = [0.35, 0.65]l = [5, 10]# sigmoid函数
def sigmoid(z):return 1.0 / (1 + np.exp(-z))def f1(w, b, l):# 前向传播,计算结果值h1 = sigmoid(w[0] * l[0] + w[1] * l[1] + b[0])h2 = sigmoid(w[2] * l[0] + w[3] * l[1] + b[0])h3 = sigmoid(w[4] * l[0] + w[5] * l[1] + b[0])o1 = sigmoid(w[6] * h1 + w[8] * h2 + w[10] * h3 + b[1])o2 = sigmoid(w[7] * h1 + w[9] * h2 + w[11] * h3 + b[1])# 后向传播,更新w# 输出层到第二层隐层,前两项# 公式中的第一部分-(0.01 - o1),第二部分o1 * (l - o1)t1 = -(0.01 - o1) * o1 * (l - o1)# 第二层隐层到第一层隐层,前两项t2 = -(0.99 - o2) * o2 * (l - o2)# t1*第三部分,即输出层到第二层隐层的参数梯度w[6] = w[6] - 0.5 * (t1 * h1)w[8] = w[8] - 0.5 * (t1 * h2)w[10] = w[10] - 0.5 * (t1 * h3)w[7] = w[7] - 0.5 * (t2 * h1)w[9] = w[9] - 0.5 * (t2 * h2)w[11] = w[11] - 0.5 * (t2 * h3)# (t1 * w[6] + t2 * w[7])对于公式()中的两项,h1 * (1 - h1)对于第二项,l[0]对应第三项w[0] = w[0] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[0]w[1] = w[1] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[1]w[2] = w[2] - 0.5 * (t1 * w[8] + t2 * w[9]) * h2 * (1 - h2) * l[0]w[3] = w[3] - 0.5 * (t1 * w[6] + t2 * w[9]) * h2 * (1 - h2) * l[1]w[4] = w[4] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[0]w[5] = w[5] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[1]return o1, o2, wfor i in range(1000):r1, r2, w = f1(w, b, l)print("第{}次迭代后,结果值为:({},{}),权重更新为:{}".format(i+1, r1, r2, w))

深度学习之 BP 算法相关推荐

  1. bp 神经网络 优点 不足_深度学习之BP神经网络--Stata和R同步实现(附Stata数据和代码)

    说明:本文原发于"计量经济圈"公众号,在此仅展示Stata的部分.R部分请移步至本人主页的"R语言与机器学习--经济学视角"专栏,或点击下方链接卡跳转. 盲区行 ...

  2. 深度学习之 神经网络算法原理

    深度学习之 神经网络算法原理 什么是神经网络算法? 初中映射 神经网络 求映射? 求解参数 图解求参 参考文献 什么是神经网络算法? 初中映射 初中的时候 y = f(x) 老师进过 映射 . 通过 ...

  3. 专访DeepID发明者孙祎:关于深度学习与人脸算法的深层思考

    专访DeepID发明者孙祎:关于深度学习与人脸算法的深层思考 发表于2015-11-18 09:51 作者周建丁 CNN卷积神经网络DeepID人脸算法深度学习孙祎Linkface 摘要:DeepID ...

  4. AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟

    AI公开课:19.05.29 浣军 百度大数据实验室主任<AutoDL 自动化深度学习建模的算法和应用>课堂笔记以及个人感悟 导读        浣军博士,汉族,1975年出生于江苏苏州, ...

  5. 【百家稷学】从传统方法到深度学习,人脸算法和应用的演变(河南平顶山学院技术分享)...

    继续咱们百家稷学专题,本次聚焦在人脸方向.百家稷学专题的目标,是走进100所高校和企业进行学习与分享. 分享主题 本次分享是在河南平顶山学院,主题是<从传统方法到深度学习,人脸算法和应用的演变& ...

  6. 基于深度学习的多目标跟踪算法——ReID与MOT的联系

    ©PaperWeekly 原创 · 作者|黄飘 学校|华中科技大学硕士 研究方向|多目标跟踪 最近基于深度学习的多目标跟踪算法越来越多,有用于特征提取的,有改进单目标跟踪器的,也有提升数据关联的.如果 ...

  7. 基于深度学习的多目标跟踪算法(上):端到端的数据关联

    ©PaperWeekly 原创 · 作者|黄飘 学校|华中科技大学硕士生 研究方向|多目标跟踪 最近基于深度学习的多目标跟踪算法越来越多,有用于特征提取的,有改进单目标跟踪器的,也有提升数据关联的.如 ...

  8. [深度学习-实践]BP神经网络的Helloworld(手写体识别和Fashion_mnist)

    前言 原理部分请看这里 [深度学习-原理]BP神经网络 Tensorflow2 实现一个简单的识别衣服的例子 数据集Fashion_mnist, 此数据集包含10类型的衣服 ('T-shirt/top ...

  9. keras faster物体检测_全网 | 深度学习目标检测算法(精选12篇)

    太多的公众号每天的文章是否让你眼花缭乱?刷了好多文章,发现大都是转来转去?今天我在全网公众号里为大家精选主题为深度学习目标检测算法的文章12篇,其中包括综述,R-CNN,SPP-Net,Fast R- ...

最新文章

  1. 使用WebEx录制视频并转换为MP4
  2. C# App.config 自定义 配置节
  3. 使用AOP动态调用WebService
  4. vue --- compoent妙用
  5. 集合之ArrayList(含JDK1.8源码分析)
  6. mysql CASE WHEN的基础和多种用法
  7. Apache Flink Meetup 8.7 深圳站改为线上
  8. 计算机网络 8 报文交换和分组交换2
  9. windows启动时自动运行程序四种方法(登录或不登录都可以的)
  10. java 自动点击网页_JS脚本实现网页自动秒杀点击
  11. Gradle报错:Could not find ××× ,‘dependencies.× .× ‘ for × must specify an absolute path but is ${env.
  12. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  13. 滴滴自动驾驶网约车落地上海,而这些中国公司早已拿到美国Robotaxi牌照
  14. linux删除文件最后一行换行符,linux - 使用sed删除最后一个换行符 - 堆栈内存溢出...
  15. [week1]每周总结与工作计划
  16. crc16 ibm c语言,CRC16IBM(A001)的16字表长查表程序
  17. 毫米波雷达数据处理_“毫米波雷达+5G”的新战场
  18. 关于Keil5 jlink 与DFP包安装及排错经验笔记
  19. 【NCL】ENSO冷暖事件海温异常合成与t检验
  20. 雷赛闭环步进电机驱动跟上位机通讯CL2C-RS86

热门文章

  1. 广州科目三考试 不得不看的十条提醒(图)
  2. 国际C语言混乱代码大赛结果公布
  3. springCloud - 第11篇 - Eureka 注册中心集群的实现
  4. 超详细设置 Idea 类注释模板和方法注释模板
  5. Docker 环境:Nexus3.x 的私有仓库
  6. JAXB: XML绑定的Java体系结构
  7. Bootstrap简介
  8. Hystix熔断解决雪崩问题
  9. C#指南,重温基础,展望远方!(4)表达式
  10. iOS工程中创建pch文件