神经网络的反向传播推导实例

假设,你有这样一个网络层:

  第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。

  现在对他们赋上初值,如下图:

  其中,输入数据  i1=0.05,i2=0.10;

     输出数据 o1=0.01,o2=0.99;

     初始权重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

           w5=0.40,w6=0.45,w7=0.50,w8=0.55

                    偏置b1=0.35,b2=0.6

  目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

 

Step 1 前向传播

  1.输入层---->隐含层:

  计算神经元h1的输入加权和:

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

同理,可计算出神经元h2的输出o2:

2.隐含层---->输出层:

  计算输出层神经元o1和o2的值:

这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

1.计算总误差

总误差:(square error)

但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:

 

2.隐含层---->输出层的权值更新:

以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)

下面的图可以更直观的看清楚误差是怎样反向传播的:

现在我们来分别计算每个式子的值:

计算

计算

(这一步实际上就是对sigmoid函数求导,比较简单,可以自己推导一下)

计算

最后三者相乘:

这样我们就计算出整体误差E(total)对w5的偏导值。

回过头来再看看上面的公式,我们发现:

为了表达方便,用来表示输出层的误差:

因此,整体误差E(total)对w5的偏导公式可以写成:

如果输出层误差计为负的话,也可以写成:

最后我们来更新w5的值:

(其中,是学习速率,这里我们取0.5)

同理,可更新w6,w7,w8:

3.隐含层---->隐含层的权值更新:

 方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

 

 

计算

先计算

同理,计算出:

          

两者相加得到总值:

再计算

再计算

最后,三者相乘:

 为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

最后,更新w1的权值:

同理,额可更新w2,w3,w4的权值:

 

  这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的。

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

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

相关文章

linux系统命令:yum和apt-get

转:http://my.oschina.net/liuyuanyuangogo/blog/546850 1.linux系统分类 一般来说著名的linux系统基本上分两大类: RedHat系列:Redhat、Centos、Fedora等 Debian系列:Debian、Ubuntu等 2.常见安装包 2.1 RedHat系列 1 常见…

AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天

大数据文摘出品2017年年初,Brain vs AI的德州扑克人机大战在卡耐基梅隆大学(CMU)落幕,由4名人类职业玩家组成的人类大脑不敌人工智能程序Libratus。获胜后人类还遭到了Libratus的无情嘲讽。但是那时候Libratus还只是个只能在1V1局里称霸的超级玩家&#…

pytorch报错RuntimeError: error in LoadLibraryA

这是因为腾讯管家把某个文件当成病毒删除了,恢复该文件即可 恢复腾讯管家杀毒误删文件方法: https://jingyan.baidu.com/article/6766299763dab854d41b8457.html

OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()

OpenCV示例学习&#xff08;二&#xff09;&#xff1a; 基本图形绘制算子&#xff1a;line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>using namespace cv;#define WINDOW_NAME1 "【绘制图1】" //为窗口标题定义的宏 #define W…

BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理

1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n]&#xff0c;程序必须回答这样的询问&#xff1a;对于给定的i,j,k&#xff0c…

动荡的 2019:数据和 AI 生态圈

来源&#xff1a;云头条这是数据领域又一个激烈动荡的年头&#xff0c;令人兴奋&#xff0c;但又错综复杂。随着越来越多的人上网&#xff0c;一切继续在加快“数据化”的步伐。这个大趋势的发展势头越来越猛&#xff0c;归因于基础设施、云计算、AI和开源各个领域取得的进步的…

卸载pytorch

1、使用conda卸载Pytorch conda uninstall pytorch conda uninstall libtorch2、使用pip卸载Pytorch pip uninstall torch 如果当初是用conda install 命令安装的pytorch&#xff0c;则用第一种方法&#xff0c;如果是用pip install命令安装的&#xff0c;则用第二种方法。或…

无线通信界的3大天王,谁能驾驭百亿台IoT设备?

来源&#xff1a;物联网智库导 读数量爆发式增长的背后&#xff0c;Wi-Fi、蓝牙、Zigbee三大无线连接技术正上演一场“争霸赛”。本文通过对三项技术的详细对比&#xff0c;以分析三项技术在具体应用场景中的优劣势。根据前瞻产业研究院发布的《2018—2023年中国物联网行业细分…

Python删除文件夹和建立文件夹

import os import shutilif os.path.isdir(dir): #判断文件夹dir是否存在shutil.rmtree(dir, True) #删除文件夹dir os.mkdir(dir) #建立文件夹dir

C++使用流进行输入输出

首先应用 #include <iostream> #include <iomanip> 1.进制读写 int val10;//十进制数 cout<<"输出8进制"<<oct<<val<<endl; cout<<"输出16进制"<<hex<<val<<endl; cout<<"输出10进…

C++学习:两个vector对象拼接

C学习&#xff1a;两个vector对象拼接 方法一&#xff1a;insert() 函数 方法二&#xff1a;重载一下号运算符 方法三&#xff1a;copy()函数 #include <iostream> #include <vector>using namespace std;// 重载一下号运算符 template <typename T> vecto…

TypeError: 'numpy.ndarray' object is not callable

取ndarray的某几个数&#xff0c;若写为&#xff1a; a np.array([0,1,2,3,4,5,6]) index np.array([1,2,3]) b a(index) print(b) 则会报错TypeError: numpy.ndarray object is not callable 正确写法为&#xff1a; a np.array([0,1,2,3,4,5,6]) index np.array([1,…

腾讯张正友:计算机视觉的三生三世

本文转载自&#xff1a;腾讯AI实验室本文将介绍腾讯 AI Lab & Robotics X 主任张正友博士在 CCF-GAIR 2019 大会上所做的报告&#xff0c;讲述计算机视觉研究的历史和未来。7 月 12 日-7 月 14 日&#xff0c;2019 第四届全球人工智能与机器人峰会&#xff08;CCF-GAIR 201…

2016年度,这40项IT技能年薪轻松超过10万美元

众所周知&#xff0c;科技行业聚集了大批高薪职位&#xff0c;但这同样也是一个快速变化的市场。今天的热门技能明天就有可能惨遭淘汰。 求职网站Dice.com最近发布了《2016薪酬调查》&#xff0c; 列举了年薪最高的各种科技技能。 Dice在2015年秋天对16301名IT专业人士进行了调…

TypeError: 'numpy.int64' object is not iterable ,'int' object is not iterable

想用一个list来动态地增加numpy类型数据&#xff0c;如下面的代码所示&#xff0c;发现报错TypeError: numpy.int64 object is not iterable a [] b np.array([1,2,3]) a.extend(b[0]) a.extend(b[1]) a.extend(b[2]) print(a) 于是将numpy数据转为list类型&#xff0c;如…

未来50亿年科学预测

来源&#xff1a;宇宙解码近期未来史现今——公元2500年公元2020年 三维全息电视将进入生活&#xff0c;人们可以通过付费点播观看。公元2025年 氢燃料电池技术将给交通运输领域带来革命&#xff0c;氢燃料电池汽车将开始中批量生产。餐桌上会出现具有肉类营养特征的植物。培养…

div无法触发blur事件解决的方法

默认情况下div无法获取焦点&#xff0c;无法触发focus与blur事件&#xff0c;推測span&#xff0c;a等标签也无法触发焦点事件(input:button。及button标签能够触发) 怎样使div触发blur事件&#xff1a;能够给div加上tabindex属性 在线演示&#xff1a;http://sandbox.runjs.cn…

OpenCV学习笔记(二):3种常用访问图像中像素的方式

OpenCV学习笔记&#xff08;二&#xff09;&#xff1a;3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace std;int main() {//【1】创建原始图并显示Mat srcImage imread("F:/C/2. OPENCV 3.1.0/TEST/11.jpg"…

Detected call of `lr_scheduler.step()` before `optimizer.step()`.

在使用pytorch的指数衰减学习率时&#xff0c;出现报错UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). In PyTorch 1.1.0 and later, you should call them in the opposite order: optimizer.step() before lr_scheduler.step(). Failure to d…

水题 UVA 1586 - Ancient Cipher化学式分子量计算

原题见&#xff1a;http://acm.hust.edu.cn/vjudge/contest/view.action?cid106424#overview 题目要求&#xff0c;根据所给化学量与原子量计算化学式的相对分子质量。。。其实就是怎么对应起来的事。 代码如下&#xff1a; 1 #include <stdio.h>2 //给出一种物质的分子…