误差逆传播算法是如今最成功,应用广泛的针对多层网络的学习算法,如今的许多学习算法都是它的变体与优化。不过初学很难理解,我也是学了不少时间才慢慢理解。
推荐大家观看3Blue1Brown的3个关于深度学习的视频https://www.bilibili.com/video/BV1bx411M7Zx深度学习之神经网络的结构 part1
https://www.bilibili.com/video/BV1Ux411j7ri深度学习之梯度下降法 part2
https://www.bilibili.com/video/BV16x411V7Qg深度学习之反向传播算法 part3
可以更好地理解BP算法。
一.概念与定义 from---百度百科---
BP算法(即误差反向传播算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。
反向传播算法主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。
BP算法的学习过程由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,网络的学习在权值修改过程中完成。误差达到所期望值时,网络学习结束。
激励传播
每次迭代中的传播环节包含两步:
(前向传播阶段)将训练输入送入网络以获得激励响应;
(反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得隐层和输出层的响应误差。
权重更新
对于每个突触上的权重,按照以下步骤进行更新:
将输入激励和响应误差相乘,从而获得权重的梯度;
将这个梯度乘上一个比例并取反后加到权重上。
这个比例将会影响到训练过程的速度和效果,因此称为“训练因子”。梯度的方向指明了误差扩大的方向,因此在更新权重的时候需要对其取反,从而减小权重引起的误差。
二.通俗解释,个人理解,可能有误
1.首先要定义一大堆变量与概念。
训练集D={(x1,y1),(x2,y2),...,(xm,ym)},xiRd,yiRl.输入示例由d个属性描述(比如28*28的手写数字图片,输入是d=28*28个灰度数据),输出l维实值向量(输出0到9的数字)。
然后转化为多层前馈神经网络,有d个输入神经元,q个隐层神经元(对各个隐层神经元,阈值为γh),L个输出神经元(对各个输出神经元,阈值为j)。
第i个输入神经元与第h个隐层神经元的连接权为Vih,第h个隐层神经元与第j个输出神经元的连接权为Whj。
对第h个隐层神经元,接收量为,即所有输入值乘对应的权重的和,同理, 对第j个输出神经元,接收量为,是隐层的输出量,用Sigmoid函数得出。
对训练例(xk,yk),假定神经网络的输出是中值最大的,即最有可能是结果的,然后对单个输出神经元的输出为,为了更好比较,都会用挤压函数,将接收量减阈值的结果浓缩到0到1间的某个数,常用的为Sigmoid函数
神经网络在(xk,yk)上的均方误差为,用来表示测了m个训练集,得到m个误差,求和除m求平均值,这个平均值表示这个神经网络判断的误差程度,误差小,说明测得准,反之越大,说明越垃圾。刚开始建立神经网络时,这个误差是很大的,因此我们要通过训练改一些数去减小预测的误差。
是哪些呢,我们发现通过修正权重和阈值可以减小误差,这个网络一共有d*q个Vih权重,q个γh阈值,q*L个Whj权重,L个阈值,这么多个数去修改,那改变量多大合适,可以更好得去减小误差。
这就是下一部分的内容,也是BP算法的精髓。
2.梯度下降策略
由高数微分学知识可得,函数值在某点沿梯度方向增长最快,加个负号,反方向及时下降最快。
(1).以Whj的改变量Δ为例,即,是学习率
接下来就是纯粹的数学知识:链式法则求导
由链式法则可得,分成两部分算
(1)
(2)这部分算别的修正值也会用,我们用代指这一部分,注意,加了个负号。,算这部分要用到Sigmoid的一个性质,,这样很方便的得出
从而
综上,可得
算都是类似过程,下面逐个写出公式
(2).,而,前两部分在第(1)算过了,接下来看
故有
(3),即有,也是分成两部分算
(1)
(2),这部分算下一个也会用到,用代指,注意,有个负号,
有,而
即可得,
综上,可得这也是书中5.13式的证明
(4),即有
故有
终于,四个修正量的公式证明出来,通过输入训练集,然后根据结果和正确答案的误差去根据公式算出这四个修正量,随着训练量的增大,网络也在不断修正,然后误差越来越小