Neural Networks: Learning

内容较多,故分成上下两篇文章。

一、内容概要

  • Cost Function and Backpropagation

    • Cost Function
    • Backpropagation Algorithm
    • Backpropagation Intuition
  • Backpropagation in Practice

    • Implementation Note:Unroll Parameters
    • Gradient Checking
    • Random Initialization
    • Putting it Together
  • Application of Neural Networks

    • Autonomous Driving

二、重点&难点

1. Backpropagation in Practice

1) Implementation Note:Unroll Parameters

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

2) Gradient Checking

神经网络算法是一个很复杂的算法,所以我们很难凭直觉观察出结果是否正确,因此有必要在实现的时候做一些检查,本节给出一个检验梯度的数值化方法。

首先我们可以将损失函数的梯度近似为

\(\frac{∂J(θ)}{∂θ}≈\frac{J(θ+ε)-J(θ-ε)}{2ε}\)

推广到一般形式是:

\(\frac{∂J(θ)}{∂θ_j}≈\frac{J(θ_1,θ_2,θ_j+ε……,θ_n)-J(θ_1,θ_2,θ_j-ε……,θ_n)}{2ε}\)

一般来说ε≈\(10^{-4}\)时就比较接近了

最后我们的主要目标是检查这个梯度的近似向量与反向传播算法得到的梯度向量是否近似相等。

实现时的注意点:

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

特别重要的是:

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

3) Random Initialization

关于如何学习一个神经网络的细节到目前为止基本说完了,不过还有一点需要注意,就是如何初始化参数向量or矩阵。通常情况下,我们会将参数全部初始化为0,这对于很多问题是足够的,但是对于神经网络算法,会存在一些问题,以下将会详细的介绍。

对于梯度下降和其他优化算法,对于参数向量的初始化是必不可少的。能不能将初始化的参数全部设置为0?

在神经网络中,如果将参数全部初始化为0 会导致一个问题,例如对于上面的神经网络的例子,如果将参数全部初始化为0,在每轮参数更新的时候,与输入单元相关的两个隐藏单元的结果将是相同的,既:

\(a_1^{(2)} = a_2^{(2)}\)

这个问题又称之为对称的权重问题,因此我们需要打破这种对称,这里提供一种随机初始化参数向量的方法: 初始化\(θ_{ij}^{(l)}\)为一个落在 [-ε,ε]区间内的随机数, 可以很小,但是与上面梯度检验( Gradient Checking)中的ε没有任何关系。

4)Putting it together(组合到一起-如何训练一个神经网络)

这个老师说会在后面更加具体的介绍。

关于神经网络的训练,我们已经谈到了很多,现在是时候将它们组合到一起了。那么,如何训练一个神经网络?

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

    • 输入单元的个数:特征 的维数;
    • 输出单元的格式:类的个数
    • 隐藏层的设计:比较合适的是1个隐藏层,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
  • 在确定好神经网络的结构后,我们按如下的步骤训练神经网络:

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

Application of Neural Networks

主要介绍了老师的一个大佬朋友利用神经网络设计的自动驾驶汽车的视频,感兴趣的可以看看。自动驾驶汽车


MARSGGBO♥原创







2017-8-6

Andrew Ng机器学习课程笔记--week5(下)的更多相关文章

  1. Andrew Ng机器学习课程笔记--week5(上)

    Neural Networks: Learning 内容较多,故分成上下两篇文章. 一.内容概要 Cost Function and Backpropagation Cost Function Bac ...

  2. Andrew Ng机器学习课程笔记--week9(下)(推荐系统&协同过滤)

    本周内容较多,故分为上下两篇文章. 本文为下篇. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian ...

  3. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  4. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...

  5. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  6. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  7. Andrew Ng机器学习课程笔记(四)之神经网络

    Andrew Ng机器学习课程笔记(四)之神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言 ...

  8. Andrew Ng机器学习课程笔记(三)之正则化

    Andrew Ng机器学习课程笔记(三)之正则化 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365475.html 前言 ...

  9. Andrew Ng机器学习课程笔记(二)之逻辑回归

    Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...

随机推荐

  1. C#常用8种排序算法实现以及原理简介

    public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ...

  2. Android 自定义帧动画

    Android 自定义帧动画 Android L : Android Studio 帧动画 和gif图片类似,顺序播放准本好的图片文件:图片资源在xml文件中配置好 将图片按照预定的顺序一张张切换,即 ...

  3. CSS3文本

    1.文字省略 text-overflow:ellipsis; overflow:hidden; white-space:nowrap; //text-overflow(clip.ellipsis)只是 ...

  4. Sqoop将mysql数据导入hbase的血与泪

    Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天)  版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...

  5. (转)log4j(七)——log4j.xml简单配置样例说明

    背景:在公司中警察需要做技术支持,查看日志,而查看日志首先要自己清楚日志是如何生成的,所以有必要知道日志的前世今生! 转载出处:http://www.cnblogs.com/godtrue/p/644 ...

  6. 如何将 Microsoft Bot Framework 机器人部署以及网页应用

    <Bot Framework>是微软开发的一款可让任何人制作自己的聊天机器人.该工具可以理解自然语言并对图片进行分析等,初期开放了 22 个可集成到应用的 API. 首先说到Bot大家的第 ...

  7. 【CSS】less 学习小结

    1. less 使用 less 可直接使用浏览器解析 or  使用node 的grunt/gulp 解析成传统css . 推荐开发环境直接使用less 文件调试, 生产环境部署解析好的css 2. l ...

  8. PHP中使用单双引号的区别

    1,双引号可以解析变量,单引号不可以解析: 2,双引号解析转义字符,单引号不解析转义,但是可以解析 \'  和  \\ ; 3,单双引号不能自己套自己,要嵌套使用,避免混乱: 4,单引号效率更高,能使 ...

  9. 【原创】-- C# 点滴积累 -- String

    一.string.Format() 将[数字字符串]转为两位小数显示的字符串: dt = dtResult.Select(it => new CommodityPriceLimitEntity ...

  10. python中list总结

    转自python中list总结 一.list可以看做是一个数据结构,也是一个class, 用help(list)可以看见其方法,元素的增删改查都有各种现成的方法, 二.list操作包含以下函数:1.c ...