详细内容请阅读《Deep Learning with Python中文翻译为:《Python深度学习 [美] 弗朗索瓦·肖莱 著 张亮 译

1、随机梯度下降

给定一个可微函数,理论上可以用解析法找到它的最小值:函数的最小值是导数为0 的点,因此你只需找到所有导数为0 的点,然后计算函数在其中哪个点具有最小值。将这一方法应用于神经网络,就是用解析法求出最小损失函数对应的所有权重值。可以通过对方程gradient(f)(W) = 0 求解W 来实现这一方法。这是包含N 个变量的多项式方程,其中N 是网络中系数的个数。N=2 或N=3 时可以对这样的方程求解,但对于实际的神经网络是无法求解的,因为参数的个数不会少于几千个,而且经常有上千万个。

下面按照如下的5步进行处理:

(1) 抽取训练样本x 和对应目标y 组成的数据批量。

(2) 在x 上运行网络,得到预测值y_pred。

(3) 计算网络在这批数据上的损失,用于衡量y_pred 和y 之间的距离。

(4) 计算损失相对于网络参数的梯度[一次反向传播(backward pass)]。

(5) 将参数沿着梯度的反方向移动一点,比如W -= step * gradient,从而使这批数据上的损失减小一点。

总结:基于当前在随机数据批量上的损失,一点一点地对参数进行调节。由于处理的是一个可微函数,你可以计算出它的梯度,从而有效地实现第四步。沿着梯度的反方向更新权重,损失每次都会变小一点。

刚刚描述的方法叫作小批量随机梯度下降(mini-batch stochastic gradient descent,又称为小批量SGD)。术语随机(stochastic)是指每批数据都是随机抽取的(stochastic 是random在科学上的同义词)。下图给出了一维的情况,网络只有一个参数,并且只有一个训练样本。

沿着一维损失函数曲线的随机梯度下降(一个需要学习的参数)

如你所见,直观上来看,为step 因子选取合适的值是很重要的。如果取值太小,则沿着曲线的下降需要很多次迭代,而且可能会陷入局部极小点。如果取值太大,则更新权重值之后可能会出现在曲线上完全随机的位置。注意,小批量SGD 算法的一个变体是每次迭代时只抽取一个样本和目标,而不是抽取一批数据。这叫作真SGD(有别于小批量SGD)。还有另一种极端,每一次迭代都在所有数据上运行,这叫作批量SGD。这样做的话,每次更新都更加准确,但计算代价也高得多。这两个极端之间的有效折中则是选择合理的批量大小。

上图描述的是一维参数空间中的梯度下降,但在实践中需要在高维空间中使用梯度下降。神经网络的每一个权重参数都是空间中的一个自由维度,网络中可能包含数万个甚至上百万个参数维度。为了让你对损失曲面有更直观的认识,你还可以将梯度下降沿着二维损失曲面可视化,如下图所示。但你不可能将神经网络的实际训练过程可视化,因为你无法用人类可以理解的方式来可视化1 000 000 维空间。因此最好记住,在这些低维表示中形成的直觉在实践中不一定总是准确的。这在历史上一直是深度学习研究的问题来源。

沿着二维损失曲面的梯度下降(两个需要学习的参数)

此外,SGD 还有多种变体,其区别在于计算下一次权重更新时还要考虑上一次权重更新,而不是仅仅考虑当前梯度值,比如带动量的SGD、Adagrad、RMSProp 等变体。这些变体被称为优化方法(optimization method)或优化器(optimizer)。其中动量的概念尤其值得关注,它在许多变体中都有应用。动量解决了SGD 的两个问题:收敛速度和局部极小点。下图给出了损失作为网络参数的函数的曲线。

局部极小点和全局最小点

如你所见,在某个参数值附近,有一个局部极小点(local minimum):在这个点附近,向左移动和向右移动都会导致损失值增大。如果使用小学习率的SGD 进行优化,那么优化过程可能会陷入局部极小点,导致无法找到全局最小点。

使用动量方法可以避免这样的问题,这一方法的灵感来源于物理学。有一种有用的思维图像,就是将优化过程想象成一个小球从损失函数曲线上滚下来。如果小球的动量足够大,那么它不会卡在峡谷里,最终会到达全局最小点。动量方法的实现过程是每一步都移动小球,不仅要考虑当前的斜率值(当前的加速度),还要考虑当前的速度(来自于之前的加速度)。这在实践中的是指,更新参数w 不仅要考虑当前的梯度值,还要考虑上一次的参数更新,其简单实现如下所示。其中,velocity(速度的意思)。

2、链式求导:反向传播算法

在前面的算法中,我们假设函数是可微的,因此可以明确计算其导数。在实践中,神经网络函数包含许多连接在一起的张量运算,每个运算都有简单的、已知的导数。例如,下面这个网络f包含3 个张量运算a、b 和c,还有3个权重矩阵W1、W2 和W3。

f(W1, W2, W3) = a(W1, b(W2, c(W3)))

根据微积分的知识,这种函数链可以利用下面这个恒等式进行求导,它称为链式法则(chain rule):(f(g(x)))' = f'(g(x)) * g'(x)。将链式法则应用于神经网络梯度值的计算,得到的算法叫作反向传播(backpropagation,有时也叫反式微分,reverse-mode differentiation)。反向传播从最终损失值开始,从最顶层反向作用至最底层,利用链式法则计算每个参数对损失值的贡献大小。

现在以及未来数年,人们将使用能够进行符号微分(symbolic differentiation)的现代框架来实现神经网络,比如TensorFlow。也就是说,给定一个运算链,并且已知每个运算的导数,这些框架就可以利用链式法则来计算这个运算链的梯度函数,将网络参数值映射为梯度值。对于这样的函数,反向传播就简化为调用这个梯度函数。由于符号微分的出现,你无须手动实现反向传播算法。

神经网络的数学基础系列(1-8)结束。谢谢。

曲线 神经网络_神经网络的数学基础-8(完结)相关推荐

  1. cnn神经网络_神经网络之CNN和RNN

    点击上方"认知计算与云安全",然后点击"关注"关键时刻,第一时间送达! 卷积神经网络(CNN)和递归神经网络(RNN)如今在ML中普遍使用.但是,它们通常用于完 ...

  2. 介绍神经网络_神经网络介绍

    介绍神经网络 It is time to set our goals and introduce the framework for creating a machine learning algor ...

  3. 神经网络与卷积神经网络_神经网络与人的思想

    神经网络与卷积神经网络 If you are familiar with the terms Artificial Intelligence, Machine Learning , Deep Lear ...

  4. acc定义代码 神经网络_神经网络的这几个坑,你都躲过了吗

    因为AI这两年的火爆,大家拿着锤子到处找钉子,锤子当然也砸到了我头上,有很多做业务的同事尝试通过AI的方法解决需要一些很复杂的业务逻辑算法,同时需要很多参数组合才能搞定的问题.但因为都是非科班出身也没 ...

  5. 径向基函数神经网络_神经网络

    本文主要参考周志华老师的<机器学习>和Tom M. Mitchell老师的<机器学习>. 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术. 一.神经网络的 ...

  6. gan神经网络_神经联觉:当艺术遇见GAN

    gan神经网络 Neural Synesthesia is an AI art project that aims to create new and unique audiovisual exper ...

  7. 深度学习与计算机视觉系列(8)_神经网络训练与注意点

    深度学习与计算机视觉系列(8)_神经网络训练与注意点 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/details ...

  8. 神经网络激活函数对数函数_神经网络中的激活函数

    神经网络激活函数对数函数 Activation function, as the name suggests, decides whether a neuron should be activated ...

  9. 神经网络 卷积神经网络_如何愚弄神经网络?

    神经网络 卷积神经网络 Imagine you're in the year 2050 and you're on your way to work in a self-driving car (pr ...

最新文章

  1. 王茂霖:数据挖掘提分三板斧!(附PPT下载)
  2. hbase原理与实践_HBase 性能调优第一弹:内存篇
  3. ActionContext_、ValueStack、Stack_Context关系
  4. Yii2系列教程三:Database And Gii
  5. 主席树 - 可持久化线段树
  6. c#控件弹幕效果_C# Form 实现桌面弹幕
  7. 【Maven实战】依赖的聚合和版本管理
  8. matlab fspecial
  9. XML Schema帮你建模
  10. 2019年前端面试都聊啥?一起来看看
  11. 《MongoDB实战系列》系列文章导读
  12. Win10用注册表开启任务栏透明
  13. HP台式计算机不能启动,惠普电脑不能启动怎么处理
  14. java方法执行jvm做了什么_JVM 方法到底如何执行
  15. 【图解版】B2C电商平台解决方案
  16. 手把手教你如何微信公众号开发
  17. 计算机游戏动漫制作自我鉴定,动画制作专业毕业生的自我鉴定范文(精选5篇)...
  18. PC网站微信扫码支付,Native支付,“当前商户号暂不支持关联该类型的appid“,“签名错误,请检查后再试““springBoot 微信支付“
  19. 项目整体管理(6个过程:制定项目章程,制定项目管理计划,指导与管理项目工作,实施整体变更控制,结束项目或阶段)
  20. if和for的几个经典题目

热门文章

  1. 【Java】Java 集合相关的博客积累
  2. 【Antlr】Antlr 将 CSV文件 转成Map数据结构
  3. MySQL :JDBC连接MySQL报错Unknown system variable 'query_cache_size'
  4. Flink的Socket案例
  5. 【hadoop】java.io.IOException: No FileSystem for scheme: hdfs
  6. 08-Oracle基本概念
  7. spark学习-SparkSQL-java版JavaRDD与JavaPairRDD的互相转换
  8. List实现类的特点和性能分析
  9. spring中定时器的使用
  10. SpringMVC框架----SpringMVC入门程序中的组件介绍