深度学习从0到1
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.6 BP神经网络模型和公式推导

这一节我们将学习BP算法的推导流程,如果觉得这个节的内容有一定的难度,可以直接跳到下一节进行学习。BP算法其实是在Delta学习规则的基础上做了进一步的推广。Delta学习规则是对单层感知器定义了计算流程和代价函数,然后用梯度下降法来最小化代价函数;BP算法是对多层神经网络定义了计算流程和代价函数,然后再使用梯度下降法来最小化代价函数。由于BP算法的广泛使用,所以一般的全连接多层神经网络我们也称为BP神经网络。

BP神经网络中不仅有输入层和输出层,而且在输入层和输出层中间还可以添加隐藏层。输入层的神经元个数一般跟输入数据相关,输出层的神经元个数一般跟标签相关,而网络中间的隐藏层的层数和隐藏层神经元的个数都是超参数。也就是说隐藏层的层数,以及隐藏层每一层的神经元个数我们都可以随意设置,主要靠经验和实验来决定。通常来说,隐藏层的层数越多,隐藏层每一层的神经元个数越多,这个神经网络的结构就越复杂,越能拟合复杂的函数曲线,处理复杂的分类回归问题。反之,隐藏层的层数越少,隐藏层每一层的神经元个数越少,网络结构就越简单,它所能够拟合的函数曲线就越简单,比较适合处理简单的分类回归问题。

网络的结构不是越复杂越好,也不是越简单越好。网络结构的复杂度需要跟我们要解决的问题相关。如果问题越复杂,那么网络结构就要越复杂;如果问题简单,那么就要用结构简单的网络来建模。如果网络结构的复杂度跟要解决的问题不匹配,则会出现欠拟合(Under-Fitting)或者过拟合(Over-Fitting)。什么是欠拟合(Under-Fitting)和过拟合(Over-Fitting),在后面的章节中再详细介绍。总之,一个好的网络结构需要很多的经验加大量的实验才能获得。

4.6.1 BP网络模型[3]

假设我们有一个2层(统计神经网络层数的时候,一般输入层可忽略不计)的BP神经网络如图4.18所示。

图4.18 2层的BP神经网络

该网络的输入向量为X=(x1x2,…,xi,…,xn),图中x0=1表示输入层偏置值;隐藏层输出向量为,图中表示隐藏层偏置值;输出层输出向量为。期望输出。输入层到隐藏层之间的权值用矩阵W1表示,表示W1矩阵中第i行第j列的权值。隐藏层到输出层之间的权值用矩阵W2表示,表示W2矩阵中第j行第k列的权值。另外,我们定义net1为隐藏层中权值W1乘以输入层信号X的总和,表示隐藏层中第j个神经元得到的输入信号总和。net2为输出层中权值W2乘以隐藏层信号Y1的总和,表示输出层中第k个神经元得到的输入信号总和。

对于隐藏层有:

对于输出层有:

式(4.18)和式(4.20)中的激活函数假设我们都使用sigmoid函数,sigmoid函数的公式在上文中的式(4.13)。sigmoid函数具有连续、可导的特点,它的导数为

4.6.2 BP算法推导

根据上文中提到的代价函数,当网络输出与期望输出不同时,会存在输出误差E,为了简单,我们只计算一个样本的均方差公式。如果是计算多个样本,则可以求所有样本代价函数的平均值。一个样本的均方差公式定义如下:

将以上误差定义式展开至隐藏层:

再进一步展开至输入层:

从式(4.23)和式(4.24)中可以看出,网络的误差E是跟神经网络各层的权值相关的,因此调整各层的权值就可以改变误差E的值。我们的目标就是要得到比较小的误差值,所以我们可以采用梯度下降法来最小化误差E的值。根据梯度下降法,我们可以得到:

在下面的推导过程中均默认对于隐藏层有:i=0,1,2,…,nj=1,2,…,m;对于输出层有:j=0,1,2,…,mk=1,2,…,l

根据微积分的链式法则可以得到,对于隐藏层有:

根据微积分的链式法则可以得到,对于输出层有:

我们可以定义一个误差信号,命名为δ,令:

综合式(4.17)、式(4.27)和式(4.29),可以得到输入层到隐藏层的权值调整公式为

综合式(4.19)、式(4.28)和式(4.30),可以得到隐藏层到输出层的权值调整公式为

从式(4.31)和式(4.32)可以看出,只要求出的值,就可以计算出的值了。

对于隐藏层,可以展开为

对于输出层,可以展开为

在式(4.33)和式(4.34)中,求网络误差对各层输出的偏导。

对于输出层:

对于隐藏层:

将式(4.35)代入式(4.34),再根据sigmoid函数的求导式(4.21),可以得到:

将式(4.37)代入式(4.32)中,得到隐藏层到输出层的权值调整:

将式(4.38)代入式(4.31)中,得到输入层到隐藏层的权值调整:

对于一个多层的神经网络,假设一共有h个隐藏层,按顺序将各隐藏层的节点数分别记为m1m2,…,mh,输入神经元的个数为n,输出神经元的个数为l;各隐藏层的输出分别记为Y1Y2,…,Yh,输入层的输入记为X,输出层的输出记为Yh+1;各层的权值矩阵分别记为W1W2,…,Wh+1W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵;各层的学习信号分别记为δ1δ2,…,δh+1δh+1表示输出层计算出的学习信号。则各层的权值调整计算公式如下。

对于输出层:

对于第h个隐藏层:

按照以上规律逐层类推,则第一个隐藏层的权值调整公式为

4.6.3 BP算法推导的补充说明

我们已经从头到尾详细推导了一遍BP算法的整个流程,在这一小节中,我们将对BP算法再做两点补充说明。

1.网络的偏置值

在上文中,我们的推导过程一直是使用权值w来进行计算的。如果我们把偏置值独立出来,那么偏置值的参数应该怎么调整呢?

从式(4.31)和式(4.32)中我们可以看到,在式(4.31)中,把i的取值设置为0,并且我们知道x0=1,所以我们可以得到:

在式(4.31)中,把j的取值设置为0,并且我们知道y0=1,所以我们可以得到:

如果是把偏置值单独拿出来计算的话,就是式(4.44)和式(4.45)的表达式。

2.用矩阵形式来表达BP学习算法

下面我们直接给出BP学习算法矩阵表达形式的结果,具体的推导过程跟上文中的推导过程类似,但会涉及矩阵求导的相关知识,大家有兴趣的话可以自己推导一下。如果是把BP学习算法写成矩阵的形式来表达,假设一共有h个隐藏层。输入数据的矩阵为XX中的每一行表示一个数据、列表示数据的特征。比如我们一次性输入3个数据,每个数据有4个特征,那么X就是一个3行4列的矩阵。

各隐藏层的输出分别记为Y1Y2,…,Yh,输出层的输出记为Yh+1Y中的每一个行表示一个数据的标签。比如我们有3个数据,每个数据有1个标签,那么Y就是一个3行1列的矩阵。

各层的权值矩阵分别记为W1W2,…,Wh+1W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵。权值矩阵的行等于前一层的神经元个数,权值矩阵的列对应于后一层的神经元个数。比如在输入层和第一个隐藏层之间的权值矩阵是W1,输入层有3个神经元,第一个隐藏层有10个神经元,那么W1就是一个3行10列的矩阵。

各层的学习信号分别记为δ1δ2,…,δh+1δh+1表示输出层计算出的学习信号。

对于输出层的学习信号δh+1

式(4.46)中的"◦"符号是element-wise multiplication,意思是矩阵中的元素对应相乘。例如,下面的例子:

对于第h个隐藏层的学习信号δh

对于第1个隐藏层的学习信号δ1

对于输出层的权值矩阵Wh+1

对于第h个隐藏层的权值矩阵Wh

对于第1个隐藏层的权值矩阵W1