神经网络--误差反传
来源:互联网 发布:计算机编程天才 编辑:程序博客网 时间:2024/06/04 19:56
什么是神经网络
一般的,典型的三层神经网络的基本构成如下,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层。
我们现在手里有一堆数据
计算过程
假设,现在我们手里有这样一个网络层:
第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。现在对他们赋上初值,如下图:
其中,
目标:
也就是说要通过调整阈值让输入数据通过整个网络后,输出尽量跟上给定的数据,这里涉及到输入怎么通过网络得到输出(前向信号传播)以及怎样调整网络权值(反向误差传递)两个问题。
前向计算
1、输入层 → 隐含层
1)首先,计算神经元h1的输入加权和:
2)神经元h1的真正的输出o1(也就是这个加权和到底激不激活,值是多少?一般采用sigmoid函数作为激活函数):
同样的,可以计算神经元h2的真正输出
2、隐含层 → 输出层
计算输出层神经元o1和o2的值(真正得输出):
到此,前向传播也就结束了,我们得到输出值为
误差反传
1、总误差
总的误差就是样本所有的期望输出与实际输出误差平方和,值得注意的是这里的
于是乎,这里的总的误差就可以写成如下形式:
2、误差反传(权值更新)
注意,我们这里要做的事情是要通过权值调整来缩小上面的误差,一般的方法就是用负梯度来更新权值就可以了,也就是说我们需要知道误差对每个权值的梯度是多少,也就是要求
这里,我们以权重参数w5为例加以说明,如何求取这个梯度的(也就是链式求导法则):
针对上面的式子,分别看下每一项求导。
1、∂Etotal∂outo1
我们知道
上面的式子对
上述式子对平方项进行求导刚好就多出一个2,与
2、∂outo1∂neto1
这一步实际上是对激活函数进行求导,我们这里激活函数选取的是
3、∂neto1∂w5
我们知道
因此,根据上面三项的计算结果,总的误差对
加深一点印象
回过头来,我们再看看上面求导的式子,发现:
为了方便表达,用
于是乎
对于上面这个式子,什么意思?也就是说我只要求出一个神经元的层误差,那么连接我这个神经元的他的权值的梯度实际上就是层误差在乘上一个连接的神经元的输出即可,这样可以快速计算出连接到我这个神经元上的权值偏导。
上面梯度我们已经算到了,最后我们用负梯度来更新这个权值
其中,
隐含层 → 隐含层权值更新
方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)—->net(o1)—->w5,但是在隐含层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。
先看
为了简化公式,可以用
计算到梯度后,同样可以使用负梯度对
总结
前向是信号传播,后向则是误差传递。人类对正向问题比较擅长,对于逆向问题就很显得捉襟见肘了,对于后向传递有如下几点需要理解:
误差
对应于前向的信号,反向传递主要是以误差的形式在网络中流动,也是一个一个的数值。层误差
针对每个神经元的的误差是多少?以上述的h1为例,δh1=(∑oδo×who)×outh1(1−outh1)
1)∑oδo×who :后面每一层的误差通过连接加权汇总到h1。
2)outh1(1−outh1) :前向是使用了激活函数,所以这里误差反传的时候是不是应该在乘上激活函数的导数呢,这就是所谓的逆向。- 权值梯度
网络的学习是负梯度来更新的,有了层误差梯度如何计算。以w1 为例,∂Etotal∂w1=δh1i1
也就是,梯度 = 层误差 × 连接线的另一端的输出。
参考
一文弄懂神经网络
在线神经网络演示地址
- 神经网络--误差反传
- CNN卷积神经网络误差反传推导
- 神经网络误差反向传播
- 神经网络中反向误差反馈
- BP误差反传神经网络
- 运行BP神经网络预测误差大
- 误差!
- 误差
- 前馈神经网络模型-误差逆向传播算法
- CS231n作业笔记1.6:神经网络的误差与梯度计算
- BP神经网络误差反向传播公式简单推导
- 从NN到RNN再到LSTM(1):神经网络NN前馈和误差反向传播
- 神经网络中误差反向传播(back propagation)算法的工作原理
- 深入浅出——搞懂卷积神经网络误差分析(一)
- 经典的BPN带动量的误差反向传播神经网络类代码示例
- 编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程
- 神经网络学习率下降&平方误差和交叉熵的差异
- 基于全局误差重构的深度卷积神经网络压缩方法
- Python+Requests安装及抓取网页源码中文乱码问题的解决
- Java将文件、图片路径保存到数据库(九)
- 范例——批量添加用户并设置密码
- 重建二叉树
- 设计模式之六大原则
- 神经网络--误差反传
- GDB内存查看
- Python基础入门2--条件语句和循环语句
- ecmall 主表和从表的四种对应关系
- Apache Storm
- 某笔试题
- hashMap扩容机制
- css 模糊效果
- MySQL