zoukankan      html  css  js  c++  java
  • 《神经网络和深度学习》系列文章九:反向传播算法是如何工作的

    出处: Michael Nielsen的《Neural Network and Deep Learning》,点击末尾“阅读原文”即可查看英文原文。

    本节译者:哈工大SCIR硕士生 李忠阳 (https://github.com/eecrazy)

    声明:我们将在每周一,周四,周日定期连载该书的中文翻译,如需转载请联系wechat_editors@ir.hit.edu.cn,未经授权不得转载。


    1. 使用神经网络识别手写数字

    2. 反向传播算法是如何工作的

      • 热身:一个基于矩阵的快速计算神经网络输出的方法

      • 关于损失函数的两个假设

      • Hadamard积

      • 反向传播背后的四个基本等式

      • 四个基本等式的证明(选读)

      • 反向传播算法

      • 什么时候反向传播算法高效

      • 反向传播算法再理解

    3. 改进神经网络的学习方法

    4. 神经网络能够计算任意函数的视觉证明

    5. 为什么深度神经网络的训练是困难的

    6. 深度学习

    在上一章中我们学习了神经网络是如何利用梯度下降算法来学习权重(weights)和偏置(biases)的。然而,在我们的解释中跳过了一个细节:我们没有讨论如何计算损失函数的梯度。这真是一个巨大的跳跃!在本章中我会介绍一个快速计算梯度的算法,就是广为人知的反向传播算法(backpropagation algorithm)。

    反向传播算法最早于上世纪70年代被提出,但是直到1986年,由David Rumelhart, Geoffrey Hinton, 和Ronald Williams联合发表了一篇著名论文(Learning representations by back-propagating errors)之后,人们才完全认识到这个算法的重要性。这篇论文介绍了几种神经网络,在这些网络的学习中,反向传播算法比之前提出的方法都要快。这使得以前用神经网络不可解的一些问题,现在可以通过神经网络来解决。今天,反向传播算法是神经网络学习过程中的关键(workhorse)所在。

    比起其他章节,本章涉及到更多的数学内容。如果你对数学不那么感兴趣,你可以选择跳过本章,把反向传播当做一个黑盒,忽略其中的细节。为什么要花时间来学习那些细节呢?

    因为,如果你想要理解神经网络,你必须了解其中的细节。反向传播算法的核心是一个偏微分表达式:

    表示损失函数C对网络中的权重w(或者偏置b)求偏导。这个式子告诉我们,当我们改变权重和偏置的时候,损失函数的值变化地有多快。尽管这个式子有点复杂,这个式子也是很漂亮的,它的每一个部分都有自然的,直觉上的解释。因此,反向传播不仅仅是一种快速的学习算法,它能够让我们详细深入地了解改变权重和偏置的值是如何改变整个网络的行为的。这是非常值得深入学习的。

    尽管如此,你依然可以略读本章节,或者直接跳到下一章节。就算你把反向传播当做一个黑盒,本书的其它内容也是能够容易理解的。当然,在本书后续部分中我会提到本章的一些结论。但是,尽管在那些地方你不能跟上所有的推导,你依然能够理解主要的结论。

    下一节我们将介绍“热身:一个基于矩阵的快速计算神经网络输出的方法”,敬请关注!


      • “哈工大SCIR”公众号

      • 编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖

      • 本期编辑:徐俊

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/sdlypyzq/p/4971335.html
Copyright © 2011-2022 走看看