美文网首页
第九章 神经网络的学习

第九章 神经网络的学习

作者: Colleen_oh | 来源:发表于2019-03-29 11:56 被阅读0次

9.1 代价函数

首先引入一些便于稍后讨论的新标记方法:

假设神经网络的训练样本有m个,每个包含一组输入x和一组输出信号yL表示神经网络层数,S_t标书输出层神经元个数,S_L代表最后一层中处理单元的个数。

将神经网络的分类定义为两种情况:二类分类和多类分类。

二类分类:S_L=0,y=0 or 1

K类分类:S_L=k,y_i=1表示分到第i类(k>2

我们回顾逻辑回归问题中我们的代价函数为:

J(\theta )=\frac{1}{m} \sum_{i=1}^m[-y^{(i)}log(h_\theta (x^{(i)}))-(1-y^{(i)})log(1-h^\theta (x^{(i)}))]+\frac{\lambda }{2m}  \sum_{j=1}^n{\theta _j}^2

在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量y。但是在神经网络中,我们可以有很多输出变量,我们的h_\theta (x)是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为:h_\theta (x)\in R^k,(h_\theta (x))_i=i^{th}output

J(\theta )=-\frac{1}{m} \sum_{i=1}^m\sum_{k=1}^k [-y_k^{(i)}log(h_\theta (x^{(i)}))_k-(1-y^{(i)})log(1-h^\theta (x^{(i)})_k)]+\frac{\lambda }{2m} \sum_{l=1}^{L-1}\sum_{i=1}^{s_l}   \sum_{j=1}^{s_j+1}{({\theta _{ji}}^{(l)})}^2

这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。

正则化的那一项只是排除了每一层\theta _0后,每一层的\theta 矩阵的和。最里层的循环j循环所有的行(由s_l+1层的激活单元数决定),循环i则循环所有的列,由该层(s_i层)的激活单元数所决定。即:h_\theta (x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization的bias项处理所有参数的平方和。

9.2 反向传播算法

之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的h_\theta (x)

现在,为了计算代价函数的偏导数,我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层

下面以一个例子来说明反向传播算法。

假设我们的训练集只有一个实例(x^{(1)},y^{(1)}),我们的神经网络是一个四层的神经网络,其中K=4,S_L=4,L=4(K代表有4个类,S_L代表最后一层中处理单元个数是4个,L代表整个神经网络有4层)。

我们先看前向传播算法:

我们从最后一层的误差开始计算,误差是激活单元的预测(a_k^{(4)})与实际值(y^k)之间的误差(k=1:k)

我们用\delta 来表示误差,则:\delta ^{(4)}=a^{(4)}-y

我们利用这个误差值来计算前一层的误差:\delta ^{(3)}={(\theta ^{(3)})}^T\delta ^{(4)}*g^,(z^{(3)})其中g^,(z^{(3)})S形函数的导数,g^,(z^{(3)})=a^{(3)}*(1-a^{(3)})。而{(\theta ^{(3)})}^T\delta ^{(4)}则是权重导致的误差的和。下一步是计算计算第二层的误差:\delta ^{(2)}={(\theta ^{(2)})}^T\delta ^{(3)}*g^,(z^{(2)})

因为第一层是输入变量,不存在误差。我们有了所有的误差的表达式后,便可以计算代价函数的偏导数了,假设\lambda =0,即我们不做任何正则化处理时有:

重要的是清楚地知道上面式子中上下标的含义:

l代表目前所计算的是第几层。

j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。

i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。

如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用\Delta _{ij}^{(l)}来表示这个误差矩阵。第l层的第i个激活单元受到第j个参数影响而导致的误差。

我们的算法表示为:

即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差

在求出\Delta _{ij}^{(l)}之后,我们便可以计算代价函数的偏导数了,计算方法如下:

D _{ij}^{(l)}:=\frac{1}{m} \Delta _{ij}^{(l)}+\lambda \Delta _{ij}^{(l)},i,j\neq 0

D _{ij}^{(l)}:=\frac{1}{m} \Delta _{ij}^{(l)},i,j= 0

9.3 梯度检验

当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。

为了避免这样的问题,我们采取一种叫做梯度的数值检验Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。

对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的\theta ,我们计算出在\theta -\varepsilon 处和\theta +\varepsilon 的代价值(\varepsilon 是一个非常小的值,通常选取0.001),然后求两个代价的平均,用以估计在\theta 处的代价值。

\theta 是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对\theta _1进行检验的示例:

最后我们还需要对通过反向传播方法计算出的偏导数进行检验。

根据上面的算法,计算出的偏导数存储在矩阵D _{ij}^{(l)}中。检验时,我们要将该矩阵展开成为向量,同时我们也将\theta 矩阵展开为向量,我们针对每一个\theta 都计算一个近似的梯度值,将这些值存储于一个近似梯度矩阵中,最终将得出的这个矩阵同D _{ij}^{(l)}进行比较。

9.4 随机初始化

任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。如果我们令所有的初始参数都为0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非0的数,结果也是一样的。

我们通常初始参数为正负\varepsilon 之间的随机值。

9.5 综合

小结一下使用神经网络时的步骤:

网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。

第一层的单元数即我们训练集的特征数量

最后一层的单元数是我们训练集的结果的类的数量

如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好,不过我们还是要考虑误差还有机器性能能不能跑得动问题。

我们真正要决定的是隐藏层的层数和每个中间层的单元数。

训练神经网络:

1、参数的随机初始化

2、利用正向传播方法计算所有的h_\theta (x)

3、编写计算代价函数J的代码

4、利用反向传播方法计算所有偏导数

5、利用数值检验方法检验这些偏导数

6、使用优化算法来最小化代价函数

参考:https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

相关文章

  • 2019-06-05

    《阿毗达摩概要精解》导读 网易云课堂-吴恩达机器学习课程 55-64课时 第八章:正则化;第九章:神经网络学习 人...

  • 深度学习概念和基础

    深度学习是以神经网络为基础的,神经网络是机器学习的一种算法。 关于机器学习中的神经网络: 机器学习之神经网络1前向...

  • BP神经网络的梳理

    一 BP 神经网络简介 (1)BP神经网络在深度学习的地位 BP神经网络被称为“深度学习之旅的开端”,是神经网络的...

  • 神经网络简述

    一、什么是神经网络 机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉...

  • 神经网络简述

    一、什么是神经网络 机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉...

  • 深度学习笔记之循环神经网络RNN学习笔记

    关键词:循环神经网络;RNN;深度学习;深度神经网络 循环神经网络 RNN 李宏毅: 机器学习,深度学习的课件参考...

  • 第九章 神经网络的学习

    9.1 代价函数 首先引入一些便于稍后讨论的新标记方法: 假设神经网络的训练样本有个,每个包含一组输入和一组输出信...

  • 第九章 神经网络学习

    该系列文章为,观看“吴恩达机器学习”系列视频的学习笔记。虽然每个视频都很简单,但不得不说每一句都非常的简洁扼要,浅...

  • 《自己动手写神经网络》PDF+源代码+葛一鸣

    神经网络是一种模拟人脑的神经网络,以期能够实现类人工智能的机器学习技术。学习神经网络知识,推荐学习《自己动手写神经...

  • 改善深层神经网络(一)——NG

    训练、测试、验证集 今天主要讨论神经网络机器学习中的问题,然后是随机神经网络,还会学习确保神经网络正确运行的技巧。...

网友评论

      本文标题:第九章 神经网络的学习

      本文链接:https://www.haomeiwen.com/subject/nwgfbqtx.html