神经网络参数的反向传播算法
神经网络损失函数
假设,用神经网络实现一个分类问题,有一个神经网络如下图所示:
用 表示这个网络的层数,
用表示这个网络层的单元。
这个分类问题如果是二元分类,输出层输出的结果是一个实数,可能
是0,也可能是1,输出层的单元数目是1,通常可以用表示。
如果是多元分类,输出层的单元数目则为,且假设函数的输出是一个维向量,假设,则输出结果可以用以下方式表示:
逻辑回归中,带有正则项的损失函数如下所示:
神经网络的损失函数用如下公式表示:
其中,是维向量,表示第个输出。
反向传播算法
- 算法介绍:
根据以上公式,我们已经得到了损失函数的计算公式,与逻辑回归算法一样,需要最小化损失函数,与逻辑回归算法最小化的方法一样,需要对求导,重点在于,对关于的偏导该如何计算?
假设,我们只有一个训练样本,在上述的神经网络中,根据前向传播算法,计算方式如下所示:
为了计算的导数,将会采用一种反向传播(BackPropagation)的算法,以上述神经网络为例,就是计算第四层每一个输出单元的输出值与训练样本真实值之间的差,如下所示:
根据前向传播算法,可以有以下计算:
其中,
以上,我们介绍了一个训练样本的反向传播算法的计算过程,在一个大小为训练集中,其计算过程如下所示:
初始化设置,
使用前向传播算法计算
根据,计算
根据反向传播算法,计算
最后,带有正则项的计算方式如下所示:
注意:利用反向传播算法计算时,从一直计算到,不用计算,因为输入项没有误差。
- 深入理解反向传播算法
在神经网络的学习中,我们已经详细了解了神经网络的计算原理,即前向传播算法,如下公式所示:
有了以上前向传播算法的计算原理,反向传播算法的只是跟前向传播算法的计算方向不一样而已。
不带正则项的损失函数计算方法如下所示:
梯度的值,可以用以下公式表示:
其中,是一个极小值,一般取
以上,我们只考虑了是实数的情况,神经网络的算法中,是一个n个元素的向量(),其梯度计算方式可以如下表示:
通过以上数值估计的方法得到的关于的偏导数,与反向传播算法得到的偏导数相比较,如果两者大小接近,则说明反向传播算法得到的梯度是正确的。
随机初始化
梯度下降算法中,需要对参数初始化,在逻辑回归中,初始化的参数一般全部取0,但是在神经网络中,这一做法是无效的。参数是神经网络中权重参数,当取为0时,会导致输入参数乘0的情况,导致神经网络相邻两层的参数的不会发生变化。也会导致同一个神经单元的权重参数相一致。这样就会导致神经网络的高度冗余,最后导致神经网络的输出只有一个特征。
随机初始化的过程中,取值通常如下所示,随机初始化取得的值一般在0到1之间。
总结
以上,介绍了神经网络中的反向传播算法,结合之前的内容,训练一个神经网络的步骤如下所示:
-
确定神经网络的架构:
神经网络的组成由输入层,输出层和隐藏层构成,其架构选择基本遵循以下原则:- 输入层:神经网络的输入层有输入参数的维数决定。
- 输出层:由输出参数确定,例如,在手写数字识别中,输出层的结构就能确定是10个类别。
- 隐藏层:一个神经网络中,隐藏层的层数一般默认为1,如果有多个隐藏层,则应该保证每个隐藏层的神经单元数目相同。隐藏层的单元数目可以和输入层的单元数目相匹配,也可以比输入层的单元数目大几倍。
-
神经网络的训练
神经网络的训练大致可以有以下几个步骤确定,如下所示:-
随机初始化权重参数,一般取很小的值,接近于0。
-
执行前向传播算法,即也就是对于任意输入,都有输出
-
计算损失函数
-
利用反向传播算法计算出关于的偏导数
-
使用梯度检测,即也就是比较数值方法得到导数值与反向传播算法得到的到数值是否接近。
-
停止使用梯度检测,
-