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

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

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

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


代价函数


  • 相关参数:L:神经网络的层数  s_{j}:第j层神经网络的神经元数目,不包括偏置。K:输出神经元的数目。
  • 二分类输出层设置一个神经元即可。K>=3时,我们输出的h_{\Theta }(x)将是一个K维向量,输出神经元数目也为K。
  • 由逻辑回归得到的多层神经网络的代价函数计算方案:


  • 反向传播算法

 

  • 由代价函数的计算公式可知,当我们使用递归向下或其他高级算法计算使得代价函数J(\Theta )最小时的\Theta时,我们需要得到这两项的计算方案。

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

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

之后,我们使用反向传播算法,得到计算每一个神经元的偏差的公式。\delta _{j}^{(l)}:第l层第j个神经元的偏差,实际上也就捕捉到了该神经元激活值a _{j}^{(l)}的误差。

其中,经验证,g'(z^{(i)})可以表示为a^{(i)}*(1-a^{(i)}),此处我们仅计算到\delta^{(2)}。因为a^{(1)}=x^{(i)}直接取得,不存在偏差。

我们可以通过不严格证明得到,=,此时我们暂不考虑\lambda,也即暂时认为\lambda=0 。至此,我们得到了单一训练集下的代价函数偏导数计算公式。

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


矩阵化与向量化


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

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

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

梯度检测


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

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

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

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

随机初始化


  • 梯度下降法和高级优化算法,一般会给出\Theta向量的一个初始值,如果将该向量初始化为n*1的零矩阵,则对于每一次迭代,每个下一个隐藏层的神经元对每个特征学到的权重都是相同的,也即产生了很多冗余,学不到什么有趣的特征。所以,我们需要考虑随机初始化的思想。

  • 随机初始化的思想是,将\Theta的每一个元素初始化为一个与0接近的值,也即初始化\Theta _{ij}^{(l)}[-\varepsilon ,\varepsilon ]的一个随机值。然后进行反向传播、梯度检验、梯度下降或其他高级优化算法对代价函数进行优化,从而打破了对称性。

神经网络的实现流程一览


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值