![深度学习从0到1](https://wfqqreader-1252317822.image.myqcloud.com/cover/588/39479588/b_39479588.jpg)
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所示。
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_80_1.jpg?sign=1740111286-4zW6ArLMEJVRLLYjSRPzmUNjrNqLQ968-0-491163645d291951245f68d8e8f3b47d)
图4.18 2层的BP神经网络
该网络的输入向量为X=(x1,x2,…,xi,…,xn),图中x0=1表示输入层偏置值;隐藏层输出向量为,图中
表示隐藏层偏置值;输出层输出向量为
。期望输出
。输入层到隐藏层之间的权值用矩阵W1表示,
表示W1矩阵中第i行第j列的权值。隐藏层到输出层之间的权值用矩阵W2表示,
表示W2矩阵中第j行第k列的权值。另外,我们定义net1为隐藏层中权值W1乘以输入层信号X的总和,
表示隐藏层中第j个神经元得到的输入信号总和。net2为输出层中权值W2乘以隐藏层信号Y1的总和,
表示输出层中第k个神经元得到的输入信号总和。
对于隐藏层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_3.jpg?sign=1740111286-7I1r38NBY7dxuTMmNhrJKHVm7NOF9JTQ-0-e9da997dc8df94f24909293d6d3894e5)
对于输出层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_4.jpg?sign=1740111286-d1Ju6oNF1QBaYMszQC9kP7Gbgrl0LuAR-0-13ef05bf103510b6d4a5808226033487)
式(4.18)和式(4.20)中的激活函数假设我们都使用sigmoid函数,sigmoid函数的公式在上文中的式(4.13)。sigmoid函数具有连续、可导的特点,它的导数为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_5.jpg?sign=1740111286-BvXOTvXC6Wcdbo1RnST2RIQAP4781Pmn-0-8a4cb5cfde5cbf7c8bd15a50d7a63a6d)
4.6.2 BP算法推导
根据上文中提到的代价函数,当网络输出与期望输出不同时,会存在输出误差E,为了简单,我们只计算一个样本的均方差公式。如果是计算多个样本,则可以求所有样本代价函数的平均值。一个样本的均方差公式定义如下:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_6.jpg?sign=1740111286-yj6fbAGIGKiCIRnHOvMXsNEqtIBfu8d3-0-625d000281f1b457b7c1825477d6475c)
将以上误差定义式展开至隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_7.jpg?sign=1740111286-mLeiYY8AVy9ofaLrnpN5GbEwvpxspWjP-0-80cb2af343186bc324a4e0e687509b7b)
再进一步展开至输入层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_8.jpg?sign=1740111286-KhP3TEJ4P2x6WMIehVHlMZPjJHSPXOhf-0-d2bd0ec2967b3d84c66a7286ca7e8418)
从式(4.23)和式(4.24)中可以看出,网络的误差E是跟神经网络各层的权值和
相关的,因此调整各层的权值就可以改变误差E的值。我们的目标就是要得到比较小的误差值,所以我们可以采用梯度下降法来最小化误差E的值。根据梯度下降法,我们可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_11.jpg?sign=1740111286-Zo7zjF82NflSiAUNTLtLR6OsJvzQsN0X-0-4dbd9fa0f24cd31b264354bb494f1d29)
在下面的推导过程中均默认对于隐藏层有:i=0,1,2,…,n;j=1,2,…,m;对于输出层有:j=0,1,2,…,m;k=1,2,…,l。
根据微积分的链式法则可以得到,对于隐藏层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_1.jpg?sign=1740111286-7t2jdSg9znM59cBB6KIb7RnemD5hYhLU-0-9a5ee9e29a654ee2b4c2b4fb42e7f995)
根据微积分的链式法则可以得到,对于输出层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_2.jpg?sign=1740111286-rdKqScVaOX5JFubTrylgBvIvvLO7C7yb-0-2366a44c75d16be13ee8ea99991878c2)
我们可以定义一个误差信号,命名为δ,令:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_3.jpg?sign=1740111286-UdGZ3gevBGK9ydNPRNipqYoON5E76VAR-0-028c6d4c2bfb715cf581dca4f5a1d8aa)
综合式(4.17)、式(4.27)和式(4.29),可以得到输入层到隐藏层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_4.jpg?sign=1740111286-yZd14tZrn7sNoy62balBcz7tTfx70pHl-0-03fa54b290d5ad43a6ce9d0e936527fc)
综合式(4.19)、式(4.28)和式(4.30),可以得到隐藏层到输出层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_5.jpg?sign=1740111286-emOxFFG6mnXILPmgde2HIC1W7zOamA25-0-f66e30a4d8b6613866279cba859c4541)
从式(4.31)和式(4.32)可以看出,只要求出和
的值,就可以计算出
和
的值了。
对于隐藏层,可以展开为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_11.jpg?sign=1740111286-J6aVioNSaxk4ea7xO9bbpubdUBKjbcNh-0-23267020eaf463e69ebc721e0a547e35)
对于输出层,可以展开为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_13.jpg?sign=1740111286-ZANLIKsXKfQOLZHA48xaT3Ysv9GDwn2k-0-a7098468c1fa89d0f46b9c5ce8de98f8)
在式(4.33)和式(4.34)中,求网络误差对各层输出的偏导。
对于输出层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_14.jpg?sign=1740111286-5tEnu5a0zhW6ZLU37yiRzElQuqyr4Gp6-0-1d91b5e65364ed492e9f4695b4940719)
对于隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_15.jpg?sign=1740111286-zVo4hNvYnqHdu517p5qZV81JzWcymvKU-0-f778e613b02507e0ea6c705f99a56753)
将式(4.35)代入式(4.34),再根据sigmoid函数的求导式(4.21),可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_1.jpg?sign=1740111286-8TFu1DH1MQEVcJckeLcKiXVUuueGIGA9-0-361cb3d7e35b5aed715ef35941704429)
将式(4.37)代入式(4.32)中,得到隐藏层到输出层的权值调整:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_2.jpg?sign=1740111286-S9Iwws7gJFPRIrUBIlf87Oq8FZ65cqit-0-97db1a89542cc1f0ff4470999c91902f)
将式(4.38)代入式(4.31)中,得到输入层到隐藏层的权值调整:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_3.jpg?sign=1740111286-pVEEa3NpRInyYAR4gSeqdHUdTOHe9XA4-0-13c2c5b0b02807dd6fdc196a3ceb84d1)
对于一个多层的神经网络,假设一共有h个隐藏层,按顺序将各隐藏层的节点数分别记为m1,m2,…,mh,输入神经元的个数为n,输出神经元的个数为l;各隐藏层的输出分别记为Y1,Y2,…,Yh,输入层的输入记为X,输出层的输出记为Yh+1;各层的权值矩阵分别记为W1,W2,…,Wh+1,W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵;各层的学习信号分别记为δ1,δ2,…,δh+1,δh+1表示输出层计算出的学习信号。则各层的权值调整计算公式如下。
对于输出层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_4.jpg?sign=1740111286-AYj46hbKu9MtGG5oOHrbHlxHEZCBf4lb-0-ffc31beff59c1824b489d100c963e7df)
对于第h个隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_5.jpg?sign=1740111286-3jlL0Crbef8xIycG1lEv4059AKU5Eecr-0-05723c0f0d536192fb814f3bc8d58608)
按照以上规律逐层类推,则第一个隐藏层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_6.jpg?sign=1740111286-go1ZBMaRAIta88UGmabmGmUzkqBvF0sm-0-b4c782226aad55307550817215165119)
4.6.3 BP算法推导的补充说明
我们已经从头到尾详细推导了一遍BP算法的整个流程,在这一小节中,我们将对BP算法再做两点补充说明。
1.网络的偏置值
在上文中,我们的推导过程一直是使用权值w来进行计算的。如果我们把偏置值独立出来,那么偏置值的参数应该怎么调整呢?
从式(4.31)和式(4.32)中我们可以看到,在式(4.31)中,把i的取值设置为0,并且我们知道x0=1,所以我们可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_1.jpg?sign=1740111286-4msBNlyuq7IPihTbeobJvgAfl0a5FE59-0-80657b491a3490dc10ddffcaa2fbb17d)
在式(4.31)中,把j的取值设置为0,并且我们知道y0=1,所以我们可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_2.jpg?sign=1740111286-gjDJn1Yu1pqMTr9ZezchvLL5ecYsl8en-0-3a2a2b62fb5852ed30cdc16e36f03c82)
如果是把偏置值单独拿出来计算的话,就是式(4.44)和式(4.45)的表达式。
2.用矩阵形式来表达BP学习算法
下面我们直接给出BP学习算法矩阵表达形式的结果,具体的推导过程跟上文中的推导过程类似,但会涉及矩阵求导的相关知识,大家有兴趣的话可以自己推导一下。如果是把BP学习算法写成矩阵的形式来表达,假设一共有h个隐藏层。输入数据的矩阵为X,X中的每一行表示一个数据、列表示数据的特征。比如我们一次性输入3个数据,每个数据有4个特征,那么X就是一个3行4列的矩阵。
各隐藏层的输出分别记为Y1,Y2,…,Yh,输出层的输出记为Yh+1。Y中的每一个行表示一个数据的标签。比如我们有3个数据,每个数据有1个标签,那么Y就是一个3行1列的矩阵。
各层的权值矩阵分别记为W1,W2,…,Wh+1,W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵。权值矩阵的行等于前一层的神经元个数,权值矩阵的列对应于后一层的神经元个数。比如在输入层和第一个隐藏层之间的权值矩阵是W1,输入层有3个神经元,第一个隐藏层有10个神经元,那么W1就是一个3行10列的矩阵。
各层的学习信号分别记为δ1,δ2,…,δh+1,δh+1表示输出层计算出的学习信号。
对于输出层的学习信号δh+1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_3.jpg?sign=1740111286-Y5OE8iYixGchssgZaz3uqcyVDHgg79mo-0-37e5cd66651b2af478a9fa8f2828e1c5)
式(4.46)中的"◦"符号是element-wise multiplication,意思是矩阵中的元素对应相乘。例如,下面的例子:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_4.jpg?sign=1740111286-VJcOCLcnMncbcwYcXbSTfOu8vzowlEh7-0-ba6f88ac7e34220f1862ce1474a2fda1)
对于第h个隐藏层的学习信号δh:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_5.jpg?sign=1740111286-WTjEMnZfPqSwOIpd16fy9EcT6UKxGuc8-0-677a9e1573113d5f53d129db2e3f1a6e)
对于第1个隐藏层的学习信号δ1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_6.jpg?sign=1740111286-w2KYAYs3vvbxup4HCnRqUV36CsNJwYvt-0-668d71b8f7025975a71ef904934682c9)
对于输出层的权值矩阵Wh+1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_7.jpg?sign=1740111286-EabPIuclprDLESSGujNUnFkrCUl37aTI-0-e02622c81b67516ebfcf592fee138cca)
对于第h个隐藏层的权值矩阵Wh:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_8.jpg?sign=1740111286-yU85GGPGLJ6x9vszvOUV4YpE7kl4vDKj-0-6274643bdb2f391d4704b5758205be2b)
对于第1个隐藏层的权值矩阵W1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_85_1.jpg?sign=1740111286-0gcjNADoScp0uESbcOnjNojWCsRJccGu-0-ff9fcfa8a5133d7aea84ed76aef0e1e2)