文章目录
- 1、2层前馈神经网络模型
- (1) 单个样本
- (2) 多个样本时的矩阵表示
- 2、2层前馈NN的误差反向传播(BP)算法
- (1) 单个样本
- (2) 多个样本时的矩阵表示
- 3、BP多层前馈网络
本文主要参考文献如下:
1、吴恩达《深度学习》视频。
2、周志华. 《机器学习》3.2.清华大学出版社。
3、陈明等,《MATLAB神经网络原理与实例精解》,清华大学出版社。
这部分强烈推荐吴恩达的《深度学习》视频,讲解得非常浅显易懂。
前面介绍的Logistic回归,实际上就构成了一个神经元。如果有多个层,同时每个层有多个神经元,就形成了多层神经网络。我们这里所说的BP神经网络,实际上是多层前馈神经网络+误差反向传播算法,换句话说前者计算神经网络的输出,后者则根据估计输出与实际输出的误差,从后往前逆向更新每一层的参数。我们想从一个简单的两层BP网络入手,再推广到多层的情况。
1、2层前馈神经网络模型
,
,
,前馈NN模型如图1所示,我们从输出层向后,逐层推导其输出
。
图1 多层前馈神经网络模型
(1) 单个样本
我们先来推导单个样本是BP网络的前馈输出。
- 输入层
- 隐含层
其中,每一行对应一个神经元的加权系数。显然,每个神经元会进行两步运算,第一步是线性叠加
第二步为激活函数,因此隐含层的输出为
这里的
为激活函数,后面我们设其为sigmoid函数。
- 输出层
由于,即只有一个输出,因此可以得到
同样需要两步处理,第一步
第二步输出为
因此,对于二分类问题,与Logistic回归类似,我们会将
作为
的概率进行判决。
(2) 多个样本时的矩阵表示
个样本输入的情况。
- 输入层
显然输入层不再是向量,而变成矩阵。 - 隐含层
隐含层的参数不受样本数的影响,重写如下因此,可以得到
则隐含层的输出为
- 输出层
同样,参数矩阵与单样本时相同,即可以得到
最后输出为
2、2层前馈NN的误差反向传播(BP)算法
和
。我们继续考虑图1中的两层网络,同样分成单个样本和多个样本两种情况。
(1) 单个样本
。下面我们推导如何从右往左逐层更新参数
、
、
和
。当然这中间也会涉及到
、
、
、
的变化。
图2 图1中2层NN的误差反向传播算法模型
- 代价函数
与Logistic回归类似,这里代价函数定义为对数似然函数,即这里
,由于只有一个输出单元,因此为标量。
由于为标量,因此根据(21)有
进一步,我们知道,这里考虑Sigmoid函数,即
,因此有
事实上,一般来说输出层的激活函数都用Sigmoid函数。
由此,得到
和
再进一步,根据(6),有
因此,这里
是标量函数,对行向量
求偏导,仍为行向量,即
因而,可以得到
根据(6),有,因此
因此,这里
是标量函数,对列向量
求导,仍为列向量,即
根据(4.4),由于,若考虑Sigmoid函数,有
这里
表示逐项相乘。
注意这里
,因此是逐项把
求导,再代回向量中。上式考虑Sigmoid函数,注意乘法为逐项相乘,才能保证向量维度不变。
因此
和
根据(3),即
似乎这里只取其中一个行向量,即
有
(2) 多个样本时的矩阵表示
个样本的情况。,如图3所示。
图3 $m$个样本的2层前馈NN反向传播模型
- 代价函数
对于个样本,我们定义代价函数为
我们把
个样本表示成矩阵形式,有
因此,可以得到
由于
这里考虑Sigmoid函数,即
,因此有
由此,得到
因此,有
进一步,由于因此
同样,由于因此
进一步,由于我们可以得到
故
3、BP多层前馈网络
层NN,输入个数为
,第
层神经元个数为
,共有
个数据样本的情况。
层而言,
,有
其中,每一行对应当前层每个神经元的加权系数,因此,可以得到
这里
当前层(第
层)的输出为
这里的
为第
层的激活函数。参数更新则按照下式进行: