码迷,mamicode.com
首页 > 编程语言 > 详细

《神经网络和深度学习》系列文章十五:反向传播算法

时间:2015-11-26 14:50:27      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

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

本节译者:哈工大SCIR本科生 王宇轩

声明:如需转载请联系wechat_editors@ir.hit.edu.cn,未经授权不得转载。


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

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

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

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

    • Hadamard积

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

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

    • 反向传播算法

    • 反向传播算法代码

    • 为什么说反向传播算法很高效

    • 反向传播:整体描述

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

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

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

  6. 深度学习

反向传播等式为我们提供了一个计算代价函数梯度的方法。下面让我们明确地写出该算法:

  1. 输入 技术分享:计算输入层相应的激活函数值技术分享

  2. 正向传播:对每个技术分享,计算技术分享技术分享

  3. 输出误差 技术分享计算向量技术分享

  4. 将误差反向传播:对每个技术分享计算技术分享

  5. 输出:代价函数的梯度为技术分享技术分享

通过以上算法就能看出它为什么叫反向传播算法。我们从最后一层开始,反向计算错误向量技术分享。在神经网络中反向计算误差可能看起来比较奇怪。但如果回忆反向传播的证明过程,会发现反向传播的过程起因于代价函数是关于神经网络输出值的函数。为了了解代价函数是如何随着前面的权重和偏移改变的,我们必须不断重复应用链式法则,通过反向的计算得到有用的表达式。

练习

  • 修改一个神经元后的反向传播
    假设我们修改了正向传播网络中的一个神经元,使得该神经元的输出为技术分享,其中技术分享是一个非sigmoid函数的函数。在这种情况下我们应该怎样修改反向传播算法?

  • 线性神经元的反向传播

    假设我们在整个神经网络中用技术分享代替常用的非线性方程技术分享。重新写出这种情况下的反向传播算法。

    正如我在上文中已经说过的,反向传播算法对每个训练样本技术分享计算代价函数的梯度。在实际情况中,经常将反向传播算法与诸如随机梯度下降的学习算法共同使用,在随机梯度下降算法中,我们需要计算一批训练样本的梯度。给定一小批(mini-batch)技术分享个训练样本,下面的算法给出了基于这些训练样本的梯度下降学习步骤:

  1. 输入一组训练样本

  2. 对每个训练样本 技术分享设定相应的输入激活值技术分享并执行以下步骤:

    1. 正向传播:对于每个技术分享,计算技术分享技术分享

    2. 输出误差技术分享:计算向量技术分享

    3. 将误差反向传播:对每个技术分享,计算技术分享

  3. 梯度下降:对每个技术分享,分别根据法则技术分享技术分享更新权重和偏移。

当然,为了在实际应用时实现随机梯度下降,你还需要一个用于生成小批(mini-batches)训练样本的外部循环和一个用于逐步计算每一轮迭代的外部循环。为了简洁,这些都被省略了。

下一节我们将介绍“反向传播算法代码”,敬请关注!

 


 

    • “哈工大SCIR”公众号

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

    • 本期编辑:李忠阳

《神经网络和深度学习》系列文章十五:反向传播算法

标签:

原文地址:http://www.cnblogs.com/sdlypyzq/p/4997491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!