本篇文章将分享Coursera上Andrew Ng的Machine Learning第五周的课程,主要内容有如下,详细内容可以参考文末附件:

  • 代价函数及后向算法

    • Cost function(代价函数)
    • Backpropagation algorithm(BP算法 or 反向传播算法)
  • 后向算法求解神经网络模型
    • Implementation note: Unrolling parameters(实现时的注意点:展开参数)
    • Gradient checking(梯度下降算法的验证)
    • Random initialization(随机初始化)
    • Putting it together(组合到一起-如何训练一个神经网络)
  • Backpropagation example: Autonomous driving (optional)(BP算法的例子-无人驾驶汽车)

代价函数及后向算法

COST FUNCTION(代价函数)

首先回顾一下神经网络的结构:

其中:

训练集是:[Math Processing Error]

[Math Processing Error] = 神经网络的层数

[Math Processing Error] = 第[Math Processing Error]层的单元个数(不包括偏置单元)

对于一个分类问题来说:

如果是一个二类分类(Binary classification),那么[Math Processing Error]或者[Math Processing Error],在神经网络的输出层上只有一个输出单元;如果是一个多类分类(Multi-class classification), 那么在神经网络的输出层上有K个输出单元。

在逻辑回归中,Cost Function的定义相对简单,如下所示:

[Math Processing Error]

由于神经网络的输出层通常有多个输出,属于[Math Processing Error]维向量,因此用如下的方式定义神经网络的Cost function:

[Math Processing Error]

[Math Processing Error]

[Math Processing Error]

注意,对于训练集的每一个样本,都需要对输出层所有的输出单元计算cost并求和。

BACKPROPAGATION ALGORITHM(BP算法 OR 反向传播算法)

和线性回归或逻辑回归相似,求取神经网络的参数也可以采用梯度下降算法,但是和它们二者略微不同的是,神经网络相对复杂。前面已经给出神经网络的代价函数,目标是最小化代价函数:

[Math Processing Error]

我们需要通过如下两个式子来计算梯度:

  • [Math Processing Error]
  • [Math Processing Error]

在上一课“神经网络的表示”里,我们给出了前馈网络的计算方法(向量化实现),对于一个给定训练样本(x, y)的神经网络,首先通过“前向传播”的方式从输入层开始计算神经网络的每一层表示,直到输出层。

在计算梯度时,我们引入反向传播算法,简称BP算法。反向算法的核心是最小化网络输出值和目标值之间的“误差”,所以这里首先引入一个关于误差的记号:

[Math Processing Error]层 [Math Processing Error]节点的误差(error)

注:有志于弄清楚为什么的同学可以参考Mitchell教授的经典书籍《机器学习》的第四章“人工神经网络”,有详细的说明。

如下给出了一个完整的BP算法的流程伪代码:

我们需要计算每个节点的梯度,这里通过反向传播算法达到了。

补充:

我们最常用的神经网络就是BP网络,也叫多层前馈网络。BP是back propagation的所写,是反向传播的意思。我以前比较糊涂,因为一直不理解为啥一会叫前馈网络,一会叫BP(反向传播)网络,不是矛盾吗?其实是 这样的,前馈是从网络结构上来说的,是前一层神经元单向馈入后一层神经元,而后面的神经元没有反馈到之前的神经元;而BP网络是从网络的训练方法上来说 的,是指该网络的训练算法是反向传播算法,即神经元的链接权重的训练是从最后一层(输出层)开始,然后反向依次更新前一层的链接权重。因此二者并不矛盾, 只是我没有理解其精髓而已。

随便提一下BP网络的强大威力:

  1. 任何的布尔函数都可以由两层单元的网络准确表示,但是所需的隐藏层神经元的数量随网络输入数量呈指数级增长;
  2. 任意连续函数都可由一个两层的网络以任意精度逼近。这里的两层网络是指隐藏层使用sigmoid单元、输出层使用非阈值的线性单元;
  3. 任意函数都可由一个三层的网络以任意精度逼近。其两层隐藏层使用sigmoid单元、输出层使用非阈值的线性单元。

【注】参考自《机器学习》

后向算法求解神经网络模型

相对于线性回归或逻辑回归来说,BP算法不是很简洁和清晰,需要大家能明确区分的就是前向和后向算法。

首先从前向传播说起,下面是一个前馈神经网络的例子:

对于这个神经网络来说,它有4层,除了输出层只有1个单元外,其他每层都有2个单元(除去偏置单元)。对于一个训练样本[Math Processing Error]来说,可以通过前向传播的方式计算各个相关单元,就是由输入计算分类结果的过程。

而反向传播到底在做什么?首先简化神经网络的代价函数,假设仅关注一个样本[Math Processing Error],并且仅针对一个输出单元的神经网络,同时忽略正则化([Math Processing Error]),这样代价函数可以简化为如下的形式:

[Math Processing Error]

那么对于样本[Math Processing Error], 如果记

[Math Processing Error]层 [Math Processing Error]节点[Math Processing Error]的误差(error)。而[Math Processing Error]。

BP算法主要是从输出层反向计算各个节点的误差的,故称之为反向传播算法,对于上例,计算的过程如下图所示:

注:这里有些细节没有详细描述,具体的可参考视频课程或者Mitchell教授的经典书籍《机器学习》的第四章“人工神经网络”。

IMPLEMENTATION NOTE: UNROLLING PARAMETERS(实现时的注意点:展开参数)

本节主要讲的是利用octave实现神经网络算法的一个小技巧:将多个参数矩阵展开为一个向量。具体可以参考课程视频和文末PPT,此处略。

GRADIENT CHECKING(梯度下降算法的验证)

神经网络算法是一个很复杂的算法,所以有必要在实现的时候做一些检查,本节给出一个检验梯度的数值化方法。

关于梯度,有一种比较简便的数值估计方法,例如,对于一元参数来说:

可以用如下公式近似估计梯度:

[Math Processing Error]

其中[Math Processing Error]取较小的值。

同理,对于多元参数或参数向量来说,上述方法同样适用。我们的主要目标是检查这个梯度的近似向量与反向传播算法得到的梯度向量是否近似相等。

实现时的注意点:

  • 首先实现反向传播算法来计算梯度向量DVec;
  • 其次实现梯度的近似gradApprox;
  • 确保以上两步计算的值是近似相等的;
  • 在实际的神经网络学习时使用反向传播算法,并且关掉梯度检查。

特别重要的是:

  • 一定要确保在训练分类器时关闭梯度检查的代码。如果你在梯度下降的每轮迭代中都运行数值化的梯度计算,你的程序将会非常慢。

RANDOM INITIALIZATION(随机初始化)

还有一点需要注意,就是如何初始化参数向量、矩阵。通常情况下,我们会将参数全部初始化为0,这对于很多问题是足够的,但是对于神经网络算法,可能会存在一些问题。

对于梯度下降和其他优化算法,对于参数[Math Processing Error]向量的初始化是必不可少的。在神经网络中,如果将参数全部初始化为0,可能会导致在每轮参数更新的时候,与输入单元相关的两个隐藏单元的结果将是相同的,即:

[Math Processing Error]

这个问题又称之为对称的权重问题,因此我们需要打破这种对称,这里提供一种随机初始化参数向量的方法:

初始化[Math Processing Error]为一个落在[Math Processing Error]区间内的随机数,[Math Processing Error]可以很小,但是与梯度检验中的[Math Processing Error]没有任何关系。

PUTTING IT TOGETHER(组合到一起-如何训练一个神经网络)

首先需要确定一个神经网络的结构-神经元的连接模式,包括:

  • 输入单元的个数:特征 x(i) 的维数;
  • 输出单元的格式:类的个数
  • 隐藏层的设计:比较合适的是1个隐藏层,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

在确定好神经网络的结构后,我们按如下的步骤训练神经网络:

  1. 随机初始化权重参数;
  2. 对于每一个[Math Processing Error]通过前向传播得到[Math Processing Error];
  3. 计算代价函数[Math Processing Error];
  4. 反向传播算法用于计算偏导数[Math Processing Error]
  5. 使用梯度检查来比较反向传播算法计算的[Math Processing Error]和数值估计的[Math Processing Error]的梯度,如果没有问题,在实际训练时关闭这部分代码;
  6. 在反向传播的基础上使用梯度下降或其他优化算法来最小化[Math Processing Error];

Backpropagation example: Autonomous driving (optional)(BP算法的例子-无人驾驶汽车)

关于通过神经网络来实现一个无人驾驶汽车的例子,请大家参考课程视频,此处略。

附本次演示文档:ML-Coursera-Week5

Machine Learning - Andrew Ng on Coursera (Week 5)相关推荐

  1. Machine Learning - Andrew Ng on Coursera (Week 6)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第六周的课程,主要内容有如下,详细内容可以参考文末附件: 评价机器学习算法 Diagnosing bias vs. ...

  2. Machine Learning - Andrew Ng on Coursera (Week 4)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第四周的课程,主要内容有如下,详细内容可以参考文末附件: 动机 神经网络 应用 动机 为什么要引入神经网络?在分类问 ...

  3. Machine Learning - Andrew Ng on Coursera (Week 3)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第三周的课程,主要内容有如下,详细内容可以参考文末附件: 分类问题及模型表示 逻辑回归模型 多类别的分类问题 解决过 ...

  4. Machine Learning - Andrew Ng on Coursera (Week 2)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第二周的课程,主要内容有如下,详细内容可以参考文末附件: 设置作业环境 多变量线性回归 参数的解析算法 Octave ...

  5. Machine Learning - Andrew Ng on Coursera (Week 1)

    转载自:http://1.kaopuer.applinzi.com/?p=110 今天分享了Coursera上Andrew Ng的Machine Learning第一周的课程,主要内容有如下,详细内容 ...

  6. Andrew Ng 的 Machine Learning 课程学习 (week4) Multi-class Classification and Neural Networks

    这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解 ...

  7. Machine Learning笔记(三) 多变量线性回归

    2019独角兽企业重金招聘Python工程师标准>>> Machine Learning笔记(三) 多变量线性回归 注:本文内容资源来自 Andrew Ng 在 Coursera上的 ...

  8. 文字记录,对话吴恩达(Andrew Ng):超级大咖深度解析人工智能的发展现状与未来

    转自:微信订阅号  机器学习研究会,人工智能交流群文字记录 雷鸣: 首先介绍嘉宾 嘉宾: -吴恩达(Andrew Ng):百度首席科学家,"百度大脑"."谷歌大脑&quo ...

  9. 吴恩达ex3_Andrew Ng在Coursera上课程ex3的一点小心得

    Andrew Ng在Coursera上课程ex3的一点小心得 (2012-09-16 11:20:38) ex3中第三问要求用logistic regression来进行预测,第四问用神经网络算法进行 ...

最新文章

  1. runloop源代码
  2. 国航移动门户让我出行无忧
  3. 【错误记录】Kotlin 编译报错 ( Smart cast to ‘Xxx‘ is impossible, because ‘xxx‘ is a mutable property ... )
  4. 失败的windows系统服务调用readfile():管道已结束?_操作系统之进程详解(一)
  5. 虚拟局域网Vlan划分
  6. web前端技术分享:web前端的求职前景好不好?
  7. Pytorch有关张量的各种操作
  8. LeetCode 698. 划分为k个相等的子集(回溯)
  9. JEECG列表嵌套查询列表子查询+号功能
  10. easy excel根据行列excel_Excel函数如何根据地级市匹配所在省份计算快递费用
  11. map.clear还是重新new_JS 的 new 到底是干什么的?
  12. IOS学习笔记07---C语言函数-scanf函数
  13. matplotlib--python的数据可视化入门
  14. 什么叫做蓝牙技术(转贴)
  15. 眼图在通信系统中有什么意义_OA协同办公系统存在的意义是什么?协同OA的显着优势又在哪儿?...
  16. java拦截器放行_java拦截器放行某些请求
  17. 信息安全应急预案整理
  18. python中的headers是什么意思_Python设置Headers
  19. mac上安装Enterprise Architect
  20. 【小样本基础】N-way K-shot 模式和训练策略

热门文章

  1. 四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!【转】
  2. Tensorflow 2.1.0 中 keras.utils.plot_model()出错的解决方法
  3. 使用JSON.parse(),JSON.stringify()实现对对象的深拷贝
  4. 技术有时间衰减因子.
  5. http://blog.csdn.net/wemedia/details.html?id=40237
  6. 优步CEO是混蛋吗?
  7. 蚂蚁金服CTO程立:从Fintech到Techfin,未来十年有九大重要挑
  8. Android华容道之一步一步实现-2-图片分割
  9. Java 8 - CompletableFuture组合式异步编程
  10. Quartz-TriggerListener解读