吴恩达机器学习—反向传播算法

代价函数

15572624-875f6e72a2b05d11.png
神经网络用于二分类与多分类问题

当处理二分类问题时,输出值有一个,输出结果为1或0;当输出值有多个时,输出结果为一个向量。

15572624-79a46d0b951b8877.png
神经网络中的代价函数

神经网络的损失函数与逻辑回归相似,但是神经网络的输出单元不是一个,而是k个。表示输出是一个k维向量,当为二元分类时,则为一个值。k表示输出值的个数,因此,在损失函数中,将输出值与实际值之差累加求最小。j表示层数,i表示每一层第i个单元。

15572624-279bc83b9c2eb413.png
神经网络中的前项传播

为第一层的输入,为各层的激活值为输出值

反向传播算法

15572624-bf189226aa2f540c.png
反向传播算法
15572624-613d1ffdfdb95a05.png
反向传播算法用于计算所有代价函数的偏导数

给定训练集,将所有的误差都设为0,表示大写的。然后先利用前向传播计算出每层的激活值,然后计算除输入层以外各层的偏差。迭代更新。

15572624-c686e9a6a510c222.png
前向传播算法示例

第一层为输入层,第二层中,表示第j层的第i个值,其大小为上一层输入的加权和,将其表示为sigmoid函数的形式,即得到。在每一层都进行此操作,层与层之间的权重表示为。考虑单一样本,单一输出且不存在正则项的情况:

15572624-e43c8400bce7c77f.png
单一输入与输出情况下的反向传播

在这种情况下,反向传播算法原理如下图:

15572624-ab67b9704a6ec82c.png
分解反向传播算法

首先根据前项传播,各层加权求得激活值以后,计算最后一层的偏差,然后根据每一层的权重,反向推算每一层的偏差,如。以此类推求得除偏置单元以外的单元的误差。

梯度检测

反向传播算法确实可以用来求梯度,但是在使用的时候可能会存在某些bug,这会使得在尽行优化的时候,虽然损失函数是在不断下降的,但最终的结果比在无bug的情况下误差要大。而且你可能并不能意识到这是由bug造成的。此时,就可以用梯度检测。

15572624-cfe4affee8cea141.png
15572624-596a71bcf0ed3132.png
15572624-688f700ecd1dc2ab.png
求近期梯度的方法
15572624-8f9311ffc57d0501.png
梯度检测的要点

尽兴梯度检测的过程为:首先根据反向传播算法计算得到参数矩阵,然后通过数值上的梯度检测计算近似梯度,若两种方法求出的梯度在数值上相等或近似,则证明反向传播得到的梯度是正确的。但是,在训练模型之前一定要关掉梯度检测程序,因为梯度检测程序运算复杂效率低,而反向传播算法更加高效。在训练时要使用反向传播算法。

随机初始化

在进行梯度下降以及其他高级优化算法之前,要先对参数进行初始化。对于高级优化算法,会自动提供一些初始值。对于梯度下降算法,要先设定初始值,然后进行梯度计算,降低损失函数值。

15572624-3b3cd06020af00bd.png
初始化参数为0

一般在初始化时,将参数初始值设置为0,如logistic回归,但是在神经网络中不可以。如上图所示,若将初始参数设置为0,则每一次迭代时,同一输入单元到下一层的输出的权重是相等的。即上图中,同样颜色的线的权重是相等的,这样每次得到的额激活值相等。即每次学出的特征都是相同的,存在冗余。因此,再设置初始值时,要进行随机初始化。

15572624-39af7d42c6b5544b.png
参数的随机初始化

rand(10,11)生成一个数值均在(0,1)之间的10*11的矩阵,则通过上式,Theta1就变成一个之间的矩阵。权重初始化为一个接近0的,范围在之间的值。然后进行反向传播,最后利用梯度下降或其他高级优化算法来最小化损失函数。

总体概述

(1)当训练一个神经网络时,第一步就是要选择一种网络架构,网络架构即神经元之间的连接模式,如以下常见模式:

15572624-6a8c384ef51531ed.png
神经网络架构的选择

首先定义输入单元的数量,即特征维度;                                                                                  输出单元的数量,即分类的数目。注意,当为多分类问题时,输出结果要写成向量形式。           隐含层的数量:一般的假设是只有一个隐含层。若使用超过一个银行曾,则没一个隐含层有相同数量的隐含单元。一般一个隐含层的假设较好,对于隐含单元,单元越多越好,尽管单元数目过多会使得计算较为复杂。通常隐含单元的数量要和输入特征的数量匹配,隐含单元的数量通常要等于输入特征的数量,或者是输入特征的数量的几倍。

(2)神经网络的训练

15572624-d12adb38260646aa.png
神经网络的训练,得到偏导数

神经网络的训练通常包含六个步骤:(1)神经网路架构和初始化权重;(2)0进行前向传播,对于每一个输入值x得到其输出,得到一个输出向量;(3)计算损失函数;(4)利用反向传播算法计算损失函数的偏导数,即梯度。在for循环中,对于每一个样本,作为输入层输入到模型中,进行正项传播和反向传播得到激活值和误差,每一个样本循环一次,得到累加的误差项,然后根据公式求得梯度。(5)进行梯度检测,将通过反向传播算法得到的梯度与通过数值方法得到的梯度进行对比,检测求得的参数是否正确,然后,一定要停掉数值方法求梯度的代码。(6)利用梯度下降法或其他更高级的优化方法来最小化损失函数,从而求得参数。损失函数是一个非凸函数,理论上梯度下降法及其他高级优化算法只能得到局部最优解,并不能得到全局最优解,但是这并不影响方法的使用,尽管这些方法无法得到全局最优解,但是在实际计算中,还是能得到一个较小的局部最优解。

15572624-30779bede1c31d82.png

猜你喜欢

转载自blog.csdn.net/weixin_34221332/article/details/87475875