专栏首页marsggboAndrew Ng机器学习课程笔记--week5(下)

Andrew Ng机器学习课程笔记--week5(下)

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络

    一、深层神经网络 深层神经网络的符号与浅层的不同,记录如下: ? 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经...

    marsggbo
  • AutoML总结

    AutoML是指尽量不通过人来设定超参数,而是使用某种学习机制,来调节这些超参数。这些学习机制包括传统的贝叶斯优化,多臂老虎机(multi-armed band...

    marsggbo
  • DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--week3 超参数调试、Batch正则化和程序框架

    一、调试处理 week2中提到有如下的超参数: α hidden units mini-batch size β layers learning rate de...

    marsggbo
  • 新型神经网络系统:由忆阻器制成,效率更高!

    导读 美国密歇根大学开发出由忆阻器制成的神经网络系统,也称为储备池计算系统。它教会机器像人类一样思考,并显著提升效率。 背景 神经网络,是一种应用类似于大脑神经...

    企鹅号小编
  • ISCA2016:体系结构顶级会议CNN走红,神经网络论文夺桂冠

    【新智元导读】计算机体系结构顶级会议 ISCA2016日前召开,神经网络和深度学习成为热点。新智元整理了 ISCA 2016 神经网络相关论文(包括本届会议最高...

    新智元
  • 自适应学习率算法

    神经网络研究员早就意识到肯定是最难设置的超参数之一,因为它对模型的性能有显著的影响。损失通常高度敏感域参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程...

    于小勇
  • 观点 | 从信息论的角度理解与可视化神经网络

    选自TowardsDataScience 作者:Mukul Malik 机器之心编译 参与:Pedro、思源 信息论在机器学习中非常重要,但我们通常熟知的是信息...

    机器之心
  • 极速导入elasticsearch测试数据

    在练习elasticsearch的搜索操作时,需要准备数据用于练习,于是要花费时间来造数据,本文提供了一条命令用于快速创建索引并导入数据,数据的每一个文档是莎士...

    程序员欣宸
  • 一款Visual Studio更换主题颜色的插件—theme Editor

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    chaibubble
  • SQL中exec和call的使用

    能是开发好心的将call改成了exec,为了方便我在数据库中直接查询, 怕我不知道。于是我就懵逼了,查了半天才知道是存储过程等等,也没弄明白。就一直在那写代码c...

    软测小生

扫码关注云+社区

领取腾讯云代金券