一、多层前馈神经网络

要解决非线性可分问题,需考虑使用多层功能神经元。

输入层和输出层之间的一层神经元,被称为隐层或隐含层(hidden layer)。

隐含层和输出层神经元都是拥有激活函数的功能神经元。

更一般的,常见的神经网络如下图所示的层级结构:

神经网络 隐藏层有多少层 神经网络隐含层_算法

图1 多层前馈神经网络结构示意图

每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),其中输入层神经元接受外界输入,隐层和输出层神经元对信号进行加工,最终结果由输出层神经元输出。

(换句话说,输入层神经元仅接受输入,不进行函数处理。)

(a)图通常称为“两层神经网络”,为避免歧义,将其命名为单隐层网络(只需包含隐层,即可称为多层网络)。

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值,换言之,神经网络学到的东西,蕴含在连接权和阈值中。

二、标准误差逆传播算法(标准BP算法)

BP算法亦称为“反向传播算法”。

通常说的“BP网络”一般是指BP算法训练的多层前馈神经网络。

下面讲解什么是BP算法?

BP算法的基本思想是:

(1)正向传播FP(求损失):在这个过程中,我们根据样本的输入,给定的初始化权重值W和偏置项的值b,计算最终输出值以及输出值与实际值之间的损失值。如果损失值不在给定的范围内则进行反向传播的过程,否则停止W,b的更新。

(2)反向传播BP(回传误差):将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号。此误差信号即作为修正各单元权值的依据。

以三层感知机结构为例,说明BP算法的一般计算方法

给定训练集

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_02

即输入示例由d个属性描述,输出l维实值向量。

为了便于讨论,给出下图:

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_03

上图给出了一个拥有d个输入神经元,l个输出神经元、q个隐层神经元的多层前馈神经网络。

输出层第j个神经元的阈值用

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_04

表示,隐层第h个神经元的阈值用

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_05

表示。输入层第i个神经元与隐层第h个神经元之间的连接权用

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_06

表示。隐层第h个神经元与输出层第j个神经元之间的连接权用

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_07

表示。 记隐层第h个神经元接收到的输入为

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_08

输出层第j个神经元接收到的输入为

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_09

,其中

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_10

为隐层第h个神经元的输出。

假设隐层和输出层都是用sigmoid函数。

对训练例

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_11

,假定神经网络的输出为

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_12

,即

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_13

则网络在

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_11

上的均方误差为:

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_15

 网络中需要确定的参数为:输入层到隐层的

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_16

个权值,隐层到输出层的

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_17

个权值,q个隐层神经元的阈值,l个输出层神经元的阈值。一共是

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_18

个参数。

BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计。

以隐层到输出层的连接权

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_07

为例来进行推导。

BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,给定学习率η,有:

神经网络 隐藏层有多少层 神经网络隐含层_算法_20

注意到

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_07

先影响到第j个输出层神经元的输入值

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_22

,再影响到其输出值

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_23

,然后影响到

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_24

,

根据链式法则有:

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_25

 因为

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_09

,所以:

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_27

 Sigmoid函数有一个很好的性质为:

神经网络 隐藏层有多少层 神经网络隐含层_算法_28

因为:

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_13

,所以

神经网络 隐藏层有多少层 神经网络隐含层_算法_30

因为:

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_15

,所以

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_32

,故:

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_33

(输出层神经元的梯度项)所以,

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_34

类似地,注意到

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_04

首先影响到输出值

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_23

,再影响到

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_24

,所以有:

神经网络 隐藏层有多少层 神经网络隐含层_算法_38

类似地,隐层神经元的梯度项

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_39

的求解为:首先注意到

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_06

首先影响到第h个隐层神经元的输入值

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_41

,在影响到隐层神经元的输出值

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_42

,最后影响到

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_24

,所以有:

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_44

其中,由于

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_42

是隐层神经元的输出,则

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_46

,那么 

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_47

(隐层神经元的梯度项)所以, 

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_48

类似地,注意到

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_05

首先影响到输出值

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_42

,再影响到

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_24

,所以有:

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_52

经过推导,得出(标准)BP算法的步骤为:


输入:训练集

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_02

;学习率

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_54

过程:

在(0,1)范围内随机初始化网络中所有连接权和阈值

repeat:

        for all(

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_55


神经网络 隐藏层有多少层 神经网络隐含层_人工智能_56

                根据当前参数和计算当前样本的输出

神经网络 隐藏层有多少层 神经网络隐含层_神经网络_23

;                计算输出层神经元的梯度项

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_58

;                计算隐层神经元的梯度项

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_39

;                更新连接权

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_60

与阈值

神经网络 隐藏层有多少层 神经网络隐含层_机器学习_61

        end for

until 达到停止条件

输出:连接权与阈值确定的多层前馈神经网络


需要注意的是,BP算法的目标是要最小化训练集D上的累积误差

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_62

但是从我们上面的BP算法过程来看,我们每次针对一个训练样例更新连接权和阈值,也就是说,上述算法的更新规则是基于单个的Ek推导而得。

如果类似地推导出基于累积误差最小化得更新规则,就得到了累积误差逆传播算法。他在读取整个数据集D一遍后,才对参数进行更新

由于BP神经网络强大得表示能力,所以其经常遭遇过拟合。即训练误差持续降低,但测试误差却可能上升。有两种策略缓解BP网络得过拟合:

(1)早停:将数据分成训练集和测试集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低,但验证集误差升高,则停止训练,同时返回最小验证集误差的连接权和阈值。

(2)正则化:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和。仍令Ek表示第k个训练样例上的误差,wi表示连接权和阈值,则误差目标函数为:

神经网络 隐藏层有多少层 神经网络隐含层_人工智能_63

其中,

神经网络 隐藏层有多少层 神经网络隐含层_神经网络 隐藏层有多少层_64

在(0,1)中,用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法估计。