[NN] 对于BackPropagation(BP, 误差反向传播)的一些理解

本文大量参照 David E. Rumelhart, Geoffrey E. Hinton and Ronald J. Williams, Learning representation by back-propagating errors, Nature, 323(9): p533-536, 1986.

在现代神经网络中, 使用最多的算法当是反向传播(BP). 虽然BP有着收敛慢, 容易陷入局部最小等缺陷, 但其易用性, 准确度却是其他算法无可比拟的.

在本文中, $w_{ji}$为连接前一层$unit_{i}$和后一层$unit_{j}$的权值.

在MLP中, 对于后一层神经元$unit_{j}$, 它的输入$x_{j}$按下式进行计算(忽略偏置):

$x_{j} = \sum_{i} y_{i} w_{ji}$

可以看到它的输入等于前一层所有神经元的输出$y_{i}$和对应连接的加权和.

而$unit_{j}$的输出按下式计算:

$y_{j} = \frac{1}{1+e^{-x_{j}}}$.

对于有监督训练, 有期望输出$d$和实际输出$y$, 可以定义误差为:

$E=\frac{1}{2}\sum_{c} \sum_{j}(y_{j,c}-d_{j,c})^2$

为求出$\partial E/\partial w_{ji}$, 我们先求$\partial E/\partial y_{j}$(之后就知道为何如此):

$\partial E/\partial y_{j} = y_{j} - d_{j}$

由链式法则:

$\partial E/\partial x_{j} = \partial E/\partial y_{j} * d y_{j}/d x_{j}$, 及上面的输入输出的关系式

$d y_{j}/d x_{j} = (\frac{1}{1+e^{-x_{j}}})‘ = \frac{e^{-x_{j}}}{(1+e^{-x_{j}})^{2}} = y_{j} * (1-y_{j})$可得:

$\partial E/\partial x_{j} = \partial E/\partial y_{j} * y_{j} * (1-y_{j})$

至此, 我们得到了$Layer_{j}$的误差$E$对于输入$x_{j}$的偏导, 但网络训练的是权值(偏置), 所以我们必须知道$E$对于$w_{ji}$的偏导表达式.

同样由链式法则:

$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * \partial x_{j}/\partial w_{ji}$, 及本层输入和权值的关系式:

$x_{j} = \sum_{i} y_{i} w_{ji}$, 可得 $\partial x_{j}/\partial w_{ji} = y_{i}$, 即:

$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * y_{i}$, 整理一下,

$\partial E/\partial w_{ji} = (y_{j} - d_{j}) * y_{j} * (1-y_{j}) * y_{i}$

其中$y_{i}$为$unit_{i}$的输出(经过了非线性变换), $y_{j}$为$Layer_{j}$的输出.

同样是按照链式法则, 对于第i个神经元, 我们可以求得误差对其输出的梯度:

$\partial E/\partial y_{i} = \partial E/\partial x_{j} * \partial x_{j}/\partial y_{i} = \partial E/\partial x_{j} * w_{ji}$, 考虑到第

到此为止, 使用上式, 只要知道已知的期望输出$d_{j}$和每层的输出$y_{i}$, 我们就可以倒推出误差相对于每层的权值的梯度, 从而对权值进行调整, 调整的公式如下:

$\delta w = -\epsilon \partial E/\partial w$

时间: 2024-08-11 09:50:51

[NN] 对于BackPropagation(BP, 误差反向传播)的一些理解的相关文章

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) [email protected] http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此.曾记得,我们绞尽脑汁,搓手顿足,大喊“为什么我跑的模型不work?”,“为什么我实现的效果那么差?”,“为什么我复现的结果没有他论文里面说的那么好?”.有人会和你说“你不懂调参!

手写BP(反向传播)算法

BP算法为深度学习中参数更新的重要角色,一般基于loss对参数的偏导进行更新. 一些根据均方误差,每层默认激活函数sigmoid(不同激活函数,则更新公式不一样) 假设网络如图所示: 则更新公式为: 以上列举了最后2层的参数更新方式,第一层的更新公式类似,即上一层的误差来自于下一层所有的神经元,e的更新就是不断建立在旧的e上(这里g可以当做初始的e) 下面上代码: 1,BP算法 # 手写BP算法 import numpy as np # 先更新参数,再继续传播 # layers:包括从输入层到输

编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程

原创文章 转载请注册来源http://blog.csdn.net/tostq 上一节我们介绍了卷积神经网络的前向传播过程,这一节我们重点介绍反向传播过程,反向传播过程反映神经网络的学习训练过程. 误差反向传播方法是神经网络学习的基础,网络上已经有许多相关的内容了,不过关于卷积网络的误差反向传递的公式推导却比较少,而且也不是很清晰,本文将会详细推导这个过程,虽然内容很复杂,但却值得学习. 首先我们需要知道的是误差反向传播的学习方法,实际是梯度下降法求最小误差的权重过程.当然我们的目的是求误差能量关

神经网络和深度学习之——误差反向传播算法

在讲解误差反向传播算法之前,我们来回顾一下信号在神经网络中的流动过程.请细细体会,当输入向量\(X\)输入感知器时,第一次初始化权重向量\(W\)是随机组成的,也可以理解成我们任意设置了初始值,并和输入做点积运算,然后模型通过权重更新公式来计算新的权重值,更新后的权重值又接着和输入相互作用,如此迭代多次,得到最终的权重. 信号向前传播,权重的更新反向传播,是这样吗? 是的,你的直觉没错,确实是反向传播. 1. 前馈的实质 反向传播这个术语经常被误解为用于多层神经网络的整个学习算法.实际上,反向传

python: 深度学习-误差反向传播法

ReLU层的设计: ReLU函数: 导数: class Relu: def __init__(self): self.mask=None def forword(self,x): self.mask=(x<0) #变量mask是由True/False构成的Numpy数组 out=x.copy() out[self.mask]=0 return out def backward(self,dout): dout[self.mask]=0 dx=dout return dx Sigmoid层的设计:

cs231n(三) 误差反向传播

摘要 本节将对反向传播进行直观的理解.反向传播是利用链式法则递归计算表达式的梯度的方法.理解反向传播过程及其精妙之处,对于理解.实现.设计和调试神经网络非常关键.反向求导的核心问题是:给定函数 $f(x)$  ,其中 $x$ 是输入数据的向量,需要计算函数 $f$ 关于 $x$ 的梯度,也就是 $\nabla f(x)$ . 之所以关注上述问题,是因为在神经网络中 $f$ 对应的是损失函数 $L$,输入里面包含训练数据和神经网络的权重.举个例子,损失函数可以是 Hinge Loss ,其输入则包

DL学习笔记-反向传播算法的理解

作者:杜客链接:https://zhuanlan.zhihu.com/p/21407711来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和巩子嘉进行校对修改.译文含公式和代码,建议PC端阅读. 原文如下: 内容列表: 简介 简单表达式和理解梯度 复合表达式,链式法则,反向传播 直观理解反向传播 模块:Si

反向传播算法的理解

反向传播算法从大体上理解就是通过计算最终误差与某个权值参数的梯度,来更新权值参数. 梯度就是最终误差对参数的导数,通过链式求导法则求出. 然后通过赋予学习率计算得出,例如: 其中  为学习率. Python代码如下: import numpy as np def nonlin(x, deriv = False): if(deriv == True): return x * (1 - x) return 1 / (1 + np.exp(-x))//计算s函数,以及用于反向传播的函数 X = np.

基于误差反向传播法的神经网络学习的全貌图

前提 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习.神经网络的学习分为下面4 个步骤. 步骤1(mini-batch)     从训练数据中随机选择一部分数据.步骤2(计算梯度)      计算损失函数关于各个权重参数的梯度.步骤3(更新参数)      将权重参数沿梯度方向进行微小的更新.步骤4(重复)      重复步骤1.步骤2.步骤3. 原文地址:https://www.cnblogs.com/latencytime/p/11079285.html