购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.3 BP算法

多层感知机(Multi-Layer Perceptron,MLP)是由单层感知机推广而来的,其最主要的特点是有多个神经元层。一般将MLP的第一层称为输入层,中间层称为隐藏层,最后一层称为输出层。MLP并没有规定隐藏层的数量,因此可以根据实际处理需求选择合适的隐藏层的数量。另外,MLP对于隐藏层和输出层中每层神经元的个数也没有限制。

图1.17和图1.18所示分别为单隐藏层前馈网络和多隐藏层前馈网络。

图1.17 单隐藏层前馈网络

图1.18 多隐藏层前馈网络

多层感知机的关键问题在于训练其中各层间的连接权值,其训练方法大致可以分为两类:一类是将其他连接权值固定,只训练某两层间的连接权值,研究者已从数学上证明了这种方法对所有非线性可分的样本集都是收敛的;另一类是大家所熟知的BP神经网络,其通常使用Sigmoid和Tanh等连续函数模拟神经元对激励的响应,使用反向传播BP算法对神经网络的连接权值进行训练。

下面将推导BP算法公式,以便让大家对BP算法有一个直观的理解。

表示第 l -1层的第 i 个神经元到第 l 层的第 j 个神经元的连接权值, 表示第 l 层第 j 个神经元的输入, 表示第 l 层第 j 个神经元的输出, 表示第 l 层第 j 个神经元的偏置, C 表示代价函数(Cost Function),相关变量计算如下。

其中, f · )表示激活函数,如Sigmoid函数。

训练多层网络的目的是使代价函数 C 最小化。对于一个单独的训练样本 X ,其标签为 Y ,定义其代价函数为

可以看出,这个函数依赖实际的目标值 Y y L 表示预测结果,它是权值和偏置的函数,通过不断地修改权值和偏置值可改变神经网络的预测结果。

那么如何更新权值和偏置值呢?

首先定义误差 δ ,令 表示第 l 层第 j 个神经元上的误差,可定义为

结合式(1.2)和式(1.3),由链式法则可得输出层的误差为

因为当前层神经元的输入是上一层神经元输出的线性组合,由链式法则可知,通过下层神经元的误差来表示当前层的误差:

因为 的函数,继续推导可以得到

求偏导,可得

故有

这就是反向传播过程,即第 l 层神经元 j 的误差值,等于第 l +1层所有与神经元 j 相连的神经元的误差值的权重之和乘以该神经元 j 的激活函数的梯度。

可以通过以下公式更新权值:

由梯度下降法可得更新规则:

由此可以看出,反向传播过程就是更新神经元的误差值,然后再根据所求出的误差值更新权值和偏置值的过程。

下面给出基于BP算法的多层感知机解决异或问题的Python实例。本例中对神经元添加了非线性输入,使等效的输入维度变大,划分对象不再是线性的。

具体代码如下。

最后多层感知机解决异或问题结果示意如图1.19所示。

图1.19 多层感知机解决异或问题结果示意

虽然BP算法应用广泛,但它仍然属于传统的机器学习算法,需要我们对图像进行手工特征提取以作为输入,这限制了模型的学习能力。

经过近10年的迭代后,1997年,LSTM模型被发明,并且在序列建模上取得了重大突破;LeNet网络系列的最终版LeNet5卷积神经网络在1998年被提出,并且在银行手写数字识别任务中取得了很好的成绩。随着大数据时代的到来,以及GPU等硬件计算能力的飞速发展,深度学习悄然孕育。 1wu28VqMmVHX8IN2Oealea7OvFP8WdSNNGlH3fTWwx+/+XzSfaDReRmT+QTY0Hbt

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开