机器学习(七)——神经网络参数的反向传播算法
目录
一、前言
- 吴恩达机器学习第十章神经网络参数的反向传播算法
- 需要的数学知识:多元函数求导、链式求导法则
二、代价函数
L=神经网络的层数
S_l=第l层的的单元数
K=输出层的单元数
三、反向传播算法
首先需要实现正向传播算法
:第l层的第j个结点的误差
:第l层第j个单元的**值
那么对于输出层的每个输出单元(以上图神经网络来说)
如果用向量表示,则可以误差可以表示为
数学警告!!!
接下来的内容需要一定的多元微分学的知识,稍微看看就好,有兴趣的可以查一下高数下册的资料
由此可以得出接下来隐藏层中的误差值
输入层不需要求误差也不存在误差所以不需要计算
其中
同时经过一定的数学运算,每一个参数的偏导数可以通过大致的通过以下这个公式求出来,注意此处忽略了正规化λ
接下来将上面的内容整合起来就是一个完整的反向传播算法(其实就是
)
四、理解反向传播算法
1.链式求导法则(高等数学多元微分学求导)
为了更好理解反向传播公式的推导,需要一点多元微分学的知识。
由高数课本,设一个多元函数为,而其中
,
,则
有了上面的介绍
简化以下就可以得到
2.举例
因为代价函数扮演的是一个计算误差的角色,这里可以近似的将
根据微积分的知识
前面这些是为了更好理解,接下来就不需要数学知识了
如上图给出各个位置的参数,根据以上的推导
五、梯度检测、随机初始化
1.梯度检测
前面已经讲述了如何正向传播、反向传播以及计算偏导数的值,但是反向传播还有很多细节,因此实现起来比较困难,并且有一些不好的特性,很容以产生一些bug,当它去梯度下降或者其他算法结合起来的时候,或许代价函数可能会不断减小,但到最后就得到的神经网络在没有bug的情况下可能会高出一个量级,此时就需要梯度检测。
其实从微积分的基本定理可以检测梯度,但又有一点不同
的取值通常为
左右
而根据高等数学书上导数的定义为
但在这里这个称为单侧差分,而上一个公式称为双侧差分,相比单侧差分,双侧差分更加精准(视频课是这么说的)
2.随机初始化
对于梯度下降法,需要对θ初始化。若同一层的参数初始化的值相同,那么每次梯度下降以后参数依然是相同的,那么就获得不到比较好的神经网络,因此需要随机对每个参数初始化使得
六、训练神经网络
就是将之前的整合在一起,获得最佳的参数