![深度学习从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=1739220672-zG2HSJ8sDehJPiWxcrZyzuAkirfmarDk-0-10da31534ef8758dda70763b8bb338a1)
图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=1739220672-HVco67oPB5oI5vUCnWPekFVwdbFZfB4M-0-6db213d137fd1b49c31f990c53210b3d)
对于输出层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_4.jpg?sign=1739220672-U9FdRbmcTMZfNA2dh5uNUsdIyefzSUiI-0-90d6401a2dae3625a4e66ffb081575b3)
式(4.18)和式(4.20)中的激活函数假设我们都使用sigmoid函数,sigmoid函数的公式在上文中的式(4.13)。sigmoid函数具有连续、可导的特点,它的导数为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_5.jpg?sign=1739220672-EyvcZHTTk9U3yNe7T9G8wcPCP1CntNrN-0-409b5cc8af5344d5e77e017006a14509)
4.6.2 BP算法推导
根据上文中提到的代价函数,当网络输出与期望输出不同时,会存在输出误差E,为了简单,我们只计算一个样本的均方差公式。如果是计算多个样本,则可以求所有样本代价函数的平均值。一个样本的均方差公式定义如下:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_6.jpg?sign=1739220672-5gatFMaFZbAWJBdGAA5Cmgi7XXzxCA7N-0-d297d9771552d39883088b4e243e18e2)
将以上误差定义式展开至隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_7.jpg?sign=1739220672-g9ZJACeQAqry45aVwezxEBt1Ua8cr0QV-0-e9a60697794e7347f66a248e7cbce7e4)
再进一步展开至输入层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_8.jpg?sign=1739220672-GLdK7Mhj1K1pKfLZYvYbz4pINv03ESlb-0-70763a9656f84d174239fe1198183845)
从式(4.23)和式(4.24)中可以看出,网络的误差E是跟神经网络各层的权值和
相关的,因此调整各层的权值就可以改变误差E的值。我们的目标就是要得到比较小的误差值,所以我们可以采用梯度下降法来最小化误差E的值。根据梯度下降法,我们可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_81_11.jpg?sign=1739220672-BLzxg3X6Ix51CUjbAkWijt5DxWuMLe3k-0-041d3e634264d40136cc3c532646b4ef)
在下面的推导过程中均默认对于隐藏层有: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=1739220672-sdRdgcqvhiNRN5gbkm6lPDqPwBw0Oh2K-0-b46d5937e1b70f2e04656d35fb0b2628)
根据微积分的链式法则可以得到,对于输出层有:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_2.jpg?sign=1739220672-8r5tX1HcIDt1eMuiCaLypeysHWAuEOYn-0-d40f54bf2b4318835f86296ea310f79f)
我们可以定义一个误差信号,命名为δ,令:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_3.jpg?sign=1739220672-TIT0ty2Z3hsYB7HL7uVDFqWCPi3rpN5V-0-6604fbd619d826faadcedd878af59382)
综合式(4.17)、式(4.27)和式(4.29),可以得到输入层到隐藏层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_4.jpg?sign=1739220672-cnIIkyKj9KnOVx3zhqDepSdDALnrMkG7-0-d9f32e8c13a1dd181301e0f82ae2f929)
综合式(4.19)、式(4.28)和式(4.30),可以得到隐藏层到输出层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_5.jpg?sign=1739220672-r3GYGXyt9WTaz2LWL8aDCkgPQlVP6HjN-0-1fbe40d9469988c6ff4d2ccbfa4765f5)
从式(4.31)和式(4.32)可以看出,只要求出和
的值,就可以计算出
和
的值了。
对于隐藏层,可以展开为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_11.jpg?sign=1739220672-Yc72bhXdeRbZooZi527imGfIePb5ldXE-0-447f55ce059910b57d701af3981522f0)
对于输出层,可以展开为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_13.jpg?sign=1739220672-y94T8WhqZVuRhEUzpTvfX1B4wzQmHjrf-0-2e6aca6c54aeace97f16af8130a0f705)
在式(4.33)和式(4.34)中,求网络误差对各层输出的偏导。
对于输出层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_14.jpg?sign=1739220672-qTBGX3dF6eL9sQvGzEmDRyECA4k6kcPs-0-05d30ba572649ccc7c7e0439916f6f2b)
对于隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_82_15.jpg?sign=1739220672-3LQ0gJJoztqjiPtOp6Z2Ph2IVvz18Z67-0-5df79bf5a38acb57fa1568231357ef64)
将式(4.35)代入式(4.34),再根据sigmoid函数的求导式(4.21),可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_1.jpg?sign=1739220672-Mt0YGoo58MKJggrCJ5nw27D45vUcbWvf-0-fc5a678109487160eda4da8d30762539)
将式(4.37)代入式(4.32)中,得到隐藏层到输出层的权值调整:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_2.jpg?sign=1739220672-KHEaBnB2eADwh3gAQKjNGJ0nrDUjhDAF-0-cc770edf993703b6387b6428c810e69a)
将式(4.38)代入式(4.31)中,得到输入层到隐藏层的权值调整:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_3.jpg?sign=1739220672-V1u3Hb0sCmk3qF9fn8ZGfHVJI3x7q9jM-0-d3ce253c389756bf823050b2a085887c)
对于一个多层的神经网络,假设一共有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=1739220672-BOmFbvfPG9pfWSlMJzelcgUhJ5hie3OL-0-c59c41ec74145db50be6d6cf88c1c5ea)
对于第h个隐藏层:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_5.jpg?sign=1739220672-WGGu6xGCMvMLBJmadXNwmEFdC8sTMc9v-0-98e998fdfcb6e5b88bed2e76f4fdc6bd)
按照以上规律逐层类推,则第一个隐藏层的权值调整公式为
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_83_6.jpg?sign=1739220672-sAytTLBvclr0x2Qyc1nrIIJeL2IoMybA-0-1d918cbf85d25052c6ca21ff07b29d14)
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=1739220672-ljJkAi7R8bzO1PdsbbfXhKwcHg411CIz-0-bf42275d1e7a8deebc695bffe345effa)
在式(4.31)中,把j的取值设置为0,并且我们知道y0=1,所以我们可以得到:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_2.jpg?sign=1739220672-YmjsfQFKjU6FxFiMPjorRDCHgc5yYaC3-0-afcbecc63fc6e726c6aa6735ff56023b)
如果是把偏置值单独拿出来计算的话,就是式(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=1739220672-zdWD7a7SK07TojpxDEzPbH2Memp8MutD-0-4eaf755932dcb13c280feb36f8c4be9c)
式(4.46)中的"◦"符号是element-wise multiplication,意思是矩阵中的元素对应相乘。例如,下面的例子:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_4.jpg?sign=1739220672-HEYqU4HKJXifpm20JGSn1yf94qOWfOdX-0-524be30db72005a50a8a3b34cfe0261f)
对于第h个隐藏层的学习信号δh:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_5.jpg?sign=1739220672-uNmimFuGfO9tbV8PgMNnNhFYt42wDwIx-0-b1300ea2275edc0bba336b934e50d423)
对于第1个隐藏层的学习信号δ1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_6.jpg?sign=1739220672-4ijFrzyZVaM69hknYFoXWMnvW69f7xV0-0-9a7260889c2b9519b063290cace3d702)
对于输出层的权值矩阵Wh+1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_7.jpg?sign=1739220672-ucLXVlGykjpPOXbjMTKUOaAJ8mx9gIx8-0-0ec1e69cb9db1c29f543b9f763f9548b)
对于第h个隐藏层的权值矩阵Wh:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_84_8.jpg?sign=1739220672-7xgqKZURNvK9GoJOr50wrU4kkKx3g0R8-0-cab9b6a06d53d889dfa4b4e6bd5d197e)
对于第1个隐藏层的权值矩阵W1:
![](https://epubservercos.yuewen.com/3560BA/20637463908664506/epubprivate/OEBPS/Images/41193_85_1.jpg?sign=1739220672-10mtwM3UrKsSL1CwQddRcwB84akggFxs-0-d874e894fac1136b260fd7f7fe85cc7b)