一、从根本理解BP神经网络
BP神经网络是一种多层前馈神经网络,特点是:信号向前传播,误差反向传播。通俗理解就是,BP神经网络通过层与层向前传播,得到最终实际输出后,与期望输出做对比,通过“梯度下降”策略,逐层调节权重和阈值,最终得到与期望输出在误差允许范围内的神经网络模型。
二、基础知识(神经元模型和激活函数)
神经元的模型(阈值加权和),简称为M-P模型,,是神经网络的处理单元。每个符号在图中都有对应的标示,要对应着动物的神经系统去理解神经系统的精髓。在这个模型中,神经元接收到来自n个其他的神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值与神经元的阈值进行比较,然后通过“激活函数”处理,神经元再将处理结果进行输出。
理想中的激活是a(阶跃函数),它将输入值映射为输出值0或1,1对应神经元兴奋,0对应神经元抑制。如果我们期望得到离散的输出,我们可以选用阶跃激活函数但;如果我们期望得到连续的输出,我们可以选用Sigmoid函数,因为Sigmoid函数是处处连续可导的,并且导数均大于0.实际常用b(Sigmoid函数)作为激活函数。
三、BP神经网络
BP网络在前面已经介绍过了,下面带着大家推导一下。
给定训练集D={(x1,y1),(x2,y2),...(xm,ym)}, 即输入示例由d个属性描述,输出l维实值向量。如图所示,Xi表示输入层第i个输入;Vih表示输入层第i个输入与隐层第h个神经元的连接权重;bh表示隐层第h个神经元的输入,Whj表示隐层第h个神经元到输出层第j个神经元的连接权重。其中输出层第j个神经元的阈值用
表示,隐层第h个神经元的阈值用
表示。假设隐层和输出层神经元神经元都是用Sigmoid函数。
(1)
上面公式表示输出层第j个神经元实际输出为输出层f函数处理结果,其中函数输入值为第j个神经元输入减去阈值。
(2)
上面公式表示在(Xk,Yk)上的均方误差。
(3)
上面公式表示隐层到输出层权重的差值,
表示给定的学习率,
表示误差,所以这个公式理解为误差对于权重的导数就是实际权重与理论权重相差值。
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。这个地方向小白介绍一下什么是地图下讲策略。我们在最后评估模型的时候,我们是观察测试集的实际输出结果与期望值的差值,差值越小越好。我们把梯度下降法形象的理解下:我们假设需要有画的参数有两个,则参数空间是二维的平面,我们加入实际输出结果与期望值的差值(后面我们叫做损失值)作为第三个维度,这样就形成了一个高低不同的地形图,经纬度表示参数,高度表示损失值。优化的目的是找到最低的经纬度,也就是损失值最低的两个参数。梯度下降法的思路是,首先任意选择一个地点,然后在当前找到坡度最陡的地方,沿着该方向向下坡方向迈出一步,作为新地点进行下一次迭代,这样就可以迈着最少的步,走到海拔最低的地方,也就是参数差改变最小,找到模型最好的时候。下面两幅图帮助大家理解:
因为首先影响输出层第j个神经元输出值
,再影响到其输出值
,然后影响到Ek,所以推导出下面的公式:
(4)
根据的定义,我们可以得到公式:
(5)
上面这个公式理解为第j个神经元输出对的导数。
Sigmoid函数有一个性质(感兴趣的可以自己去推导):
(6)
根据公式1和公式2我们可以推导出输出层梯度项:
(7)
我们将公式7、公式5、公式3带入公式4,可以得到BP算法关于的更新公式:
(8)
这个公式表示的是隐层到阈值的变化量,现在跳出来思考,其实变化量(德尔塔)= 学习率 * 梯度项 * 原始输入。
同理可推导出:
以上分别表示输出层阈值的变化量、隐层权重的变化量、隐层阈值的变化量。感兴趣可以自己推导一下,非常简单。
学习率范围为(0,1),控制者算法每一轮迭代中的更新步长,如果太大容易震荡,太小又会导致收敛速度过慢,有时为了做精细调节,可令公式8、公式9和公式10、公式11的学习率必相等。
接下来就是不断的迭代,通过数据集去训练权重和阈值,又回到了本文开始的地方。