吴恩达机器学习笔记-神经网络参数的反向传播算法(七)

神经网络参数的反向传播算法

在后面的内容中,主要会讲神经网络在分类问题中的应用

代价函数

吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第1张图片
在上面的神经网络中,存在有m个训练集;这里使用L来表示神经网络的层数,在上面的这个神经网络中间,L=4;最后使用S_L来表示在L层的单元数(即神经元个数,在这中间并不包含偏差单元),这里就能够知道S_4 = S_L = 4
在分类问题中,可以分成两类:二元分类、多类别分类
二元分类:最后的值只能为0或者1,输出单元只有一个(就是计算出来的h(x)),同时神经网络计算出来的这个值是一个实数,S_L = 1,对于这样的,通常有一个简单的记法,k = 1(这里的k也可以当成输出层的单元数目)
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第2张图片
多类别分类:在多类别分类问题中,k值一般都是大于等于3的(如果k取的是2,就用不到多类别分类的方法了)
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第3张图片
理解上面的内容之后,就能够来定义代价函数了
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第4张图片
在上面存在两个代价函数,第一个代价函数即是前面的逻辑回归中间使用到的一个代价函数;下面的即是我们需要的神经网络代价方程

反向传播算法

通常想要获取到原函数对应的参数值,我们会对应求取其代价函数的最小值;前面已经讲过梯度下降法、标准方程法等,这里想要获取神经网络代价函数的最小值,用到的方法是反向传播算法
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第5张图片
在上图中,a(1)就是第一层的激活值;z(2) = theta x a(1),a(2) = g(z(1)),这里的g函数即是sigmoid函数,这样就获取到了第二层的激活值,以此类推,直到得到最后的值
同时在进行上面计算时候,加上了一些偏置项,即上图括号中间的内容
使用上面的方式,即实现了前向传播的向量化,使得我们能够计算一个神经网络中间每一个神经元的激活值
前向传播中,a(l)_j表示的是第L层的第J个神经元的激活值,在反向传播中,我们使用如下方式进行表示:
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第6张图片
如上图,使用标记的内容来表示第L层第J个神经元的激活值的误差
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第7张图片
如上图,当这里的L=4的时候,就是以计算出来的a(4)_j减去训练集中间的值,最后的结果就是激活值的误差
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第8张图片
当我们存在有很大的样本数量时,而并不是和上面的样本数量一样,例如:存在m个样本的训练集
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第9张图片

理解反向传播

前面的内容会有一些难度,如果想要理解反向传播,首先来看下正向传播
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第10张图片
在上面这个图中,图示的为一个正向传播的过程,对于中间的第三层网络中间的第一单元,可以通过第二层网络的值加上对应的权值获取到;而反向传播就和这个内容的方向相反
要想更好的理解反响传播,还需要了解下代价函数
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第11张图片
在该图的最上面即为一个代价函数,按照上面的操作,将参数置为0,我们就能够近似的将这个costfunction的值换成预测值和真实值之间的方差
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第12张图片
根据上面的推导,继续进行下面的内容:
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第13张图片
在图中用红线圈出来的地方可以看到,求解第二层的值,可以根据第三层的数据和权重得到;同样的方式,求解第三层的值,则是由第四层的数据和对应的权重得到

梯度检验

前面说到了正向传播和反向传播,但其实在实际应用中,仍旧存在一些bug,这些bug可能会使我们最后结果的误差较大;这个时候,就需要有梯度检验了;在使用梯度检验之后才能够保证正向传播和反向传播的正确性
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第14张图片
在我们求解一条曲线中间某一点的导数(斜率)的时候,可以使用数学的推导进行,如上图,一个点的导数可以看成是与这个点无限靠近的两点连线的斜率(高除以宽)
这里会注意到,这里使用到的是双侧点连进行计算的,有的时候会采用单侧点来计算,一般情况下,双侧点所计算出来的结果会比单侧点计算的结果更加准确
在上面的介绍中,我们仅仅考虑到的是theta为实数的情况,这里需要考虑更为普遍的现象,theta为向量参数的时候
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第15张图片
可以看到,这里采用的方式还是和前面一样的,只不过看起来式子更加复杂罢了
在检验反向传播算法是否正确的时候使用,不要在已经确定算法正确的情况下还使用梯度检验,这样会使代码跑的很慢

随机初始化

当我们在进行算法的时候,我们是需要首先给theta赋予一个初始值的,在前面的逻辑回归中间,我们可能会讲theta值置为0,这样是被允许的,但是在实际的训练网络中将所有的theta值置为0并不会有任何的帮助
为了能够让最后的结果更为有意义,在进行theta值初始化的时候,要采用随机初始化的思想
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第16张图片

组合到一起

前面的内容已经介绍了神经网络,这里将他们组合到一起,当我们碰到一个问题的时候,首先我们需要设计一个神经网络,如下图
吴恩达机器学习笔记-神经网络参数的反向传播算法(七)_第17张图片我们可以设定一个神经网络中间每一层中间有多少单元,总共有多少个隐藏层等

你可能感兴趣的:(吴恩达,机器学习笔记,吴恩达机器学习笔记)