吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

是对应网易云课程吴恩达机器学习第十章的笔记。

在这一章,我们想要学习一个给定训练集,确定神经网络参数的算法。

首先我们先从确定参数的代价函数说起。


代价函数


  • 相关参数:L:神经网络的层数  吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现:第j层神经网络的神经元数目,不包括偏置。吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现:输出神经元的数目。
  • 二分类输出层设置一个神经元即可。K>=3时,我们输出的吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现将是一个K维向量,输出神经元数目也为K。
  • 由逻辑回归得到的多层神经网络的代价函数计算方案:

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现


  • 反向传播算法

 

  • 由代价函数的计算公式可知,当我们使用递归向下或其他高级算法计算使得代价函数吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现最小时的吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现时,我们需要得到吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现这两项的计算方案。

先以单一训练集为例,介绍反向传播算法。

首先,使用正向传播算法可以得到每层每个神经元的**值。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

之后,我们使用反向传播算法,得到计算每一个神经元的偏差的公式。吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现:第l层第j个神经元的偏差,实际上也就捕捉到了该神经元**值吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现的误差。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

其中,经验证,吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现可以表示为吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现,此处我们仅计算到吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现。因为吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现直接取得,不存在偏差。

我们可以通过不严格证明得到,吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现=吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现,此时我们暂不考虑吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现,也即暂时认为吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现 。至此,我们得到了单一训练集下的代价函数偏导数计算公式。

  • 多个训练集下,代价函数的偏导数计算公式:

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现


矩阵化与向量化


  • 实现矩阵化和向量化的方式:

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

上图展示了将矩阵向量化和从向量转化为矩阵的方式。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

  • 矩阵化:使得在进行正向传播和反向传播时,更加方便。
  • 运用一些高级算法时,通常要求将参数展开成长向量的形式。

梯度检测


  • 反向传播算法和梯度下降法结合时常导致一些bug,这些Bug不易发现。
  • 梯度检测算法可以保证前向和后向传播无误。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

  • 当两者在一定范围内约等于时,就可以认为算法可以正确运行,求出的导数矩阵无误。

实现数值上的梯度检验的步骤:

  1. 通过反向传播计算DVec矩阵。
  2. 实现数值上的梯度检验,计算出gradApprox。
  3. 确保两者具有相似的值,确保他们只有几位小数的差距。
  4. 使用网络进行学习或训练网络的时候应该关掉梯度检验。因为梯度检验的代码运算量很大,而反向传递计算导数矩阵的算法很高效。

随机初始化


  • 梯度下降法和高级优化算法,一般会给出吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现向量的一个初始值,如果将该向量初始化为n*1的零矩阵,则对于每一次迭代,每个下一个隐藏层的神经元对每个特征学到的权重都是相同的,也即产生了很多冗余,学不到什么有趣的特征。所以,我们需要考虑随机初始化的思想。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

  • 随机初始化的思想是,将吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现的每一个元素初始化为一个与0接近的值,也即初始化吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现的一个随机值。然后进行反向传播、梯度检验、梯度下降或其他高级优化算法对代价函数进行优化,从而打破了对称性。

神经网络的实现流程一览


当我们实现一个神经网络时,我们要做以下事情。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

  1. 选择神经网络架构,也即神经元之间的连接方式,一般有两种默认选项:(1)只有一个隐藏层,这种较为常用 (2)有多个隐藏层,每个隐藏层有多个神经单元,一般隐藏单元数越多越好,隐藏单元一般等于特征数或是其几倍时比较好,当然,数目多也会带来较高的运算量。
  2. 随机初始化权重。
  3. 实现前向传播算法,对于每一个吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现计算吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现
  4. 实现计算代价函数的代码。
  5. 实现反向传播算法计算代价函数J相对于吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现的偏导数。具体来说是使用for循环对每一个训练样本进行前向传播和反向传播的迭代,得到2...L每层的激励值吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现和delta项吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现,从而计算出导数矩阵,现在高级的向量算法也可以不使用for,但它仍然是非常基础的。
  6. 梯度检验。
  7. 梯度下降或其他高级优化算法,因为代价函数通常是非凸函数,所以时常收敛到一个局部最小值而非全局,但实际证明该值通常是很小的。反向传播计算出的是下降的方向,而梯度下降算法负责下降。

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现

吴恩达机器学习笔记——参数的反向传播算法与神经网络的整体实现