下面的过程参考西瓜书

注意是标准BP噢,意思是一个单拿出一个样本来看的bp,单位是一个样本噢~

一、图解以及符号定义

我要再啰嗦一遍,写成我习惯的方式:

二、过程解释

①表示的是第一层第i个权值向量和第j个输入相乘的权值

②表示的是第二层第j个权值向量和第y个输入相乘的权值,很明显,只有一个输出所以j=1,y取值1~S

由此我们可以继续得到下面这些参数:

a:隐藏层的输入

隐藏层的输出:

解释一下b和f:

b是偏置值:

f是sigmoid激活函数

再看从隐藏层到输出层的过程:

上面其实就是正向传播的过程,重点来了,下面是反向传播的过程。

我们需要根据输出来修改每一层的权值向量了,这里分为两类讨论,一类是修改输出层的权值向量,另一类是修改中间层(隐藏层)的权值向量,以上面为例,这两类分别就是修改W(2)和修改W(1)。

三、反向传播

我们知道误差与输出y(2)有关,而输出与输入a(2)有关,输入又与w(2)有关,所以根据链式求导法则:

同理更新b,

到此为止,第一类更新就写完了,下面要写修改中间层的权值更新了。

四、python代码实现

import numpy as npx=np.array([[1,2,3],[4,5,6]
],dtype=np.float64)w1=np.random.rand(3,4)#第一层四个神经元,三个特征
b1=np.random.rand(1,4)w2=np.random.rand(4,2)#输出层有两个神经元,上一层每个神经元生成一个特征,共四个特征
b2=np.random.rand(1,2)lr=0.1#学习率#真正的y
y=np.array([[8,2]
],dtype=np.float64)
def sigmoid(x):return 1/(1+np.exp(-x))for index,i in enumerate(x):#对x中的每一个样本进行正`向传播#中间层的输入a1=np.dot(i,w1)#[1,4]#隐藏层的输出y1=sigmoid(a1+b1)#[1,4]#输出层的输入a2=np.dot(y1,w2)#[1,2]#输出层的输出y2=sigmoid(a2+b2)#[1,2]#反向传播g=np.multiply((y-y2),np.multiply(y2,(1-y2)))#更新输出层的权值w和偏置值bw2=w2+lr*np.dot(y1.T,g)b2=b2+lr*gprint("第"+str(index+1)+"个样本")print("更新后的输出层权重w2",w2)print("更新后的输出层b2",b2)print("下面开始更新中间层权重w1和偏置值b1")w1=w1+lr*i.reshape(3,1)*np.multiply(np.multiply(y1,(1-y1)),np.dot(w2,g.T).T)b1=b1+lr*np.multiply(np.multiply(y1,(1-y1)),np.dot(w2,g.T).T)print("更新后的输出层权重w1", w1)print("更新后的输出层b1", b1)

公式都懂,但是这个向量化的过程着实是让我费了一番功夫。

用书上公式来讲吧:

实在是难以描述,我们看到西瓜书的102页上的图

以及103页的公式,很明显bh影响的只是权值的行,对于每一列的乘积是一样的,哎,不讲了,不好说。总之代码是对的。

------------------------------------------------第二天更新--------------------------------------------------

不描述出来还是咽不下这口气,下面的图示可能只有我能看懂吧,哈哈

正向传播:

反向传播更新输出层权重:

反向传播更新中间层权重:

上面公式推导倒不是很难,主要是代码向量化的过程,不想看算法推导的直接用上面python代码就好。

标准BP算法详细解析相关推荐

  1. 根据《机器学习》(周志华)第五章内容,用Python实现标准BP算法

    BP神经网络由一层输入层.任意隐层(一般为1).一层输出层组成.假定输入向量为n维向量,即输入神经元数量为n,隐层的层数为num,每一层隐层的神经元数量为eachCount,输出向量为yCount维向 ...

  2. POS基本算法详细解析

    标题POS基本算法详细解析 粒子xi(t)与群相互交流,保存更新自己的最优点Pi(t),并且与群交流后得知全局(群)的最优点g(t),由原来的方向Vi(t)变到Vi(t+1). 首先看懂上面两张图!再 ...

  3. 标准BP算法、累积BP算法Python实现

    标准BP,累积BP算法原理及MATLAB自编写实现在这里 以下是自己编写的Python的代码,欢迎指正 标准BP算法: import numpy as npx=np.matrix(np.random. ...

  4. bp算法和nlp算法_西瓜书5.5 编程实现BP神经网络——标准BP算法、累积BP算法

    这里照着书上的公式,实现了一下标准BP算法,和累积BP算法,BP是error Back Propagation的意思,误差逆传播.BP网络通常是指用BP算法训练的多层前馈神经网络.代码是照着书本公式自 ...

  5. 标准BP算法matlab实现,简单易懂

    机器学习的实验课要求自编写一份简易的标准BP(神经网络)算法,我用matlab基本实现了,现将自己的思想记录下来,方便自己以后重温.话不多说,让我们进入正题 调用matlab的神经网络算法解决具体问题 ...

  6. 标准BP算法用Python编程实现

    1.需要导入两个模块 import pandas as pd import numpy as np 2.定于激活函数 def sigmoid(x):return 1/(1+np.exp(-x)) 3. ...

  7. PID算法详细解析——基于单片机

    本文主要是分享资料,讲解不会太多,因为分享的资料里面就有具体的详细解析,而且百度上面也有详细的资料,所以本次博文主要是讲解我用PID算法调温的经验. PID算法调整温度最大的问题的温度的上升问题以及温 ...

  8. 一文读懂BP算法,BP算法通俗解析

    BP算法是机器学习中常用算法之一,全称是误差反向传播(Error Back Propagation, BP)算法,对应的神经网络为前馈网络,因此前馈网络也被称之为BP网络 BP算法由数据的正向传播和反 ...

  9. yolo算法的优缺点分析_YOLO算法详细解析(一)

    目标检测和目标分类 图像识别算法是计算机视觉的基础算法,例如VGG,GoogLeNet,ResNet等,这类算法主要是判断图片中目标的种类. 目标检测算法和图像识别算法类似,但是目标检测算法不仅要识别 ...

最新文章

  1. python课程将主要介绍哪些内容-Python窗口的基本介绍
  2. find = in a string
  3. Linux实用命令总结
  4. Scala _04Scala字符串
  5. jquery在线预览PDF文件,打开PDF文件
  6. impala的substr从第几位截到最后一位_冰雪奇缘2彩蛋:片名内含深意,艾莎是第13位公主象征着背叛...
  7. ext教程_exe_作者blackant
  8. CSS层叠样式表的理解(一)
  9. php遍历指定目录下的文件,PHP遍历指定目录下所有文件和目录
  10. 在窗体创建时显示窗体
  11. 7款纯CSS3实现的炫酷动画应用
  12. 高等数学-不定积分基本公式
  13. c语言宠物管理系统,请用C语言编出一个简单的宠物管理系统。
  14. MATLAB学习笔记02-MATLAB的数据类型
  15. excel 表中几个关联汇总函数
  16. Android初学------系统设置之设置输入法
  17. Java中整数常量池的概念
  18. 机械设备标识标牌_设备标识规定
  19. c盘根目录在哪里(在c盘根目录下建立一个名为)
  20. Windows XP 的 TCP/IP 和 NBT 配置参数

热门文章

  1. 基于nodejs+vue+elementUI在线跑腿系统 含在线地图功能(前后端分离)#毕业设计
  2. 网络程序设计结课总结——神经网络篇
  3. 全民k歌爬虫 by--Python
  4. 斐波那契数列通项公式的推导证明----举一反三
  5. 普通大专自学java有出路吗?
  6. Windows迁移系统盘的步骤,系统迁移,从旧硬盘迁移系统到新硬盘步骤
  7. 安卓手机安装google浏览器
  8. 比翼新电影计划”十大人气漫改网大片单发布 爱奇艺将独家上线
  9. 智能天线的原理学习与理解
  10. pytorch加载模型报错Unexpected key(s) in state_dict: module.conv1.weight, module.bn1