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

转载自https://www.cnblogs.com/maxiaodoubao/p/9979690.html

代价函数

参考视频: 9 - 1 - Cost Function (7 min).mkv

假设神经网络的训练样本有𝑚个,每个包含一组输入 𝑥 和一组输出信号 𝑦,𝐿 表示神经网络层数,𝑆𝐼表示每层神经元的个数( 𝑆𝑙 表示输出层神经元个数),𝑆𝐿代表最后一层中处理单元的个数。
  神经网络分类分两种:
  (1)二类分类:𝑆𝐿 = 0, 𝑦 = 0 𝑜𝑟 1表示哪一类;
  (2)𝐾类分类:𝑆𝐿 = 𝑘, 𝑦𝑖 = 1表示分到第 i 类;(𝑘 > 2)
在这里插入图片描述

之前定义逻辑回归的Cost Function如下(前半部分表示hypothesis与真实值之间的距离,后半部分是对参数进行regularization的bias项):
在这里插入图片描述

神经网络的 cost function 同理:
在这里插入图片描述

原理都是希望得到预测结果与真实情况的误差。不同的是结果有k个。hypothesis与真实值之间的距离为 每个样本—每个个类输出的加和。

对参数进行regularization的bias项是排除了每一层𝜃0后,每一层的 𝜃 矩阵平方和。即所有参数的平方和。]

反向传播算法

参考视频: 9 - 2 - Backpropagation Algorithm (12 min).mkv

为了最小化 J(Θ),需要求偏导。
在这里插入图片描述

采用一种反向传播算法:首先计算最后一层(最右)的误差,然后再反向(向左)求出各层的误差,直到倒数第二层(第一层是输入变量,不存在误差)。
在这里插入图片描述

(1)最后一层误差是激活单元的预测 aj(4) 与实际值 𝑦j之间的误差( j = 1:𝑘),设其为 𝛿j(4)

        𝛿(4) = 𝑎(4) - 𝑦

(2)计算第三层的误差:

        𝛿(3) = (𝛩(3))𝑇𝛿(4) ∗ 𝑔′(𝑧(3))

  其中(𝜃(3))𝑇𝛿(4) 则是权重导致的误差的和, 𝑔′(𝑧(3))是 sigmoid函数的导数,sigmoid函数导数有一个特点:

        𝑔′(𝑧(3)) = 𝑎(3)∗(1−𝑎(3))。

(3)计算第二层的误差:

        𝛿(2)=(𝛩(2))𝑇𝛿(3)∗𝑔′(𝑧(2))

(4)有了误差,开始计算代价函数的偏导。假设 𝜆=0(即不做任何正则化处理),有:

在这里插入图片描述
  𝑙 :目前所计算的是第几层。
  𝑗 :目前层中的激活单元下标(下一层的第 j 个输入变量的下标)
  𝑖 :下一层中误差单元的下标(受到权重矩阵中第 𝑖 行影响的下一层中误差的下标)

上面得到了error变量δ的计算,下面来看backpropagation算法的伪代码 :

在这里插入图片描述

然后计算代价函数的偏导数,公式如下:
在这里插入图片描述

梯度检验

为了验证复杂模型内部是否呀运行正常,我们是用一种叫做 Numerical gradient checking的方法来验证梯度是否在下降。
对于下面这个J(θ)图,取θ点左右各一点(θ+ε),(θ-ε),则点θ的导数(梯度)近似等于(J(Θ+ε)-J(θ-ε))/(2ε)
在这里插入图片描述

因此,针对每个θ,其导数都可以近似为:
在这里插入图片描述
将这个近似值,与back-propagation算法中每一步得到的J(θ)的导数D(derivative)进行比较。如果这两个结果相近,则code正确,否则错误。上面描述的算法如下:
在这里插入图片描述
步骤:

  • 在 back propagation 中计算出J(θ)对θ的导数D,并向量化成Dvec(unroll D(1),D(2),D(3))
  • 用 numerical gradient check 方法计算梯度近似值 gradApprox
  • 确保这两个值很接近
    -(这一点非常重要)只在测试的时候进行校验。真正使用 back propagation 进行神经网络学习的时候,要停止校验,否则会非常慢

随机初始化

之前对于逻辑回归,我们将参数θ全部初始化为0。 然而对于神经网络,此方法不可行: 如果第一层参数θ都相同(不管是不是0),意味着第二层的所有激活单元的值会完全相同。

神经网络通常初始参数为正负 ε 之间的随机值,代码如下:
在这里插入图片描述

综合

训练神经网络:

  1. 参数的随机初始化

  2. 利用正向传播方法计算所有的 ℎ𝜃(𝑥)

  3. 编写计算代价函数 𝐽 的代码

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值