Optimization的时候,怎么把gradient descent做的更好?

1、局部最小值(Local minima)与鞍点(saddle point)

所谓的saddle point其实就是gradient是零,但是不是local minima,也不是local maxima;比如下面的saddle point,他在左右方向上是比较高的,前后的方向上是比较高的,他是一个马鞍的形状,所以叫做saddle point;

像saddle point这种地方,他也是gradient为零,但他不是local minima,像这种gradient为0的点统称为critical point,所以你可以说你的loss没有办法再下降,也许是因为卡在了critical point,但你不能说是卡在了local minima,因为saddle point也是微分为零的点;

所以当gradient为0的时候,我们就要搞清楚是卡在了local minima上还是saddle point上,如果是卡在了local minima上的话,因为四周都比较高,你现在所在的位置已经是loss最低点,往四周走loss都比较高,你会不知道怎么走到其他的地方去;但是saddle point就比较没有这个问题,如果你是卡在saddle point上的话,saddle point旁边还是有路可以让你的loss更低,只要逃离saddle point,就有可能让你的loss更低,所以当你走到critical point的时候,我们到底是在local minima上还是saddle point上,是一个值得去探讨的问题;

判断该点到底是local minima还是saddle point,需要用到数学的微积分和线性代数:

When gradient is small

Critical Point

Training Fails because

​ 现在我们要讲的是Optimization的部分,所以我们要讲的东西基本上跟Overfitting没有什麼太大的关联,我们只讨论Optimization的时候,怎麼把gradient descent做得更好,那為什麼Optimization会失败呢?

​ 你常常在做Optimization的时候,你会发现,随著你的参数不断的update,你的training的loss不会再下降,但是你对这个loss仍然不满意,就像我刚才说的,你可以把deep的network,跟linear的model,或比较shallow network 比较,发现说它没有做得更好,所以你觉得deepnetwork,没有发挥它完整的力量,所以Optimization显然是有问题的

​ 但有时候你会甚至发现,一开始你的model就train不起来,一开始你不管怎麼update你的参数,你的loss通通都掉不下去,那这个时候到底发生了什麼事情呢?

​ 过去常见的一个猜想,是因為我们现在走到了一个地方,这个地方参数对loss的微分為零,当你的参数对loss微分為零的时候,gradient descent就没有办法再update参数了,这个时候training就停下来了,loss当然就不会再下降了。

​ 讲到gradient為零的时候,大家通常脑海中最先浮现的,可能就是local minima,所以常有人说做deep learning,用gradient descent会卡在local minima,然后所以gradient descent不work,所以deep learning不work。

​ 但是如果有一天你要写,跟deep learning相关paper的时候,你千万不要讲卡在local minima这种事情,别人会觉得你非常没有水準,為什麼

​ 因為不是只有local minima的gradient是零,还有其他可能会让gradient是零,比如说 saddle point,所谓的saddle point,其实就是gradient是零,但是不是local minima,也不是local maxima的地方,像在右边这个例子裡面 红色的这个点,它在左右这个方向是比较高的,前后这个方向是比较低的,它就像是一个马鞍的形状,所以叫做saddle point,那中文就翻成鞍点

​ 像saddle point这种地方,它也是gradient為零,但它不是local minima,那像这种gradient為零的点,统称為critical point,所以你可以说你的loss,没有办法再下降,也许是因為卡在了critical point,但你不能说是卡在local minima,因為saddle point也是微分為零的点

​ 但是今天如果你发现你的gradient,真的很靠近零,卡在了某个critical point,我们有没有办法知道,到底是local minima,还是saddle point?其实是有办法的

​ 為什麼我们想要知道到底是卡在local minima,还是卡在saddle point呢

​ 所以鉴别今天我们走到,critical point的时候,到底是local minima,还是saddle point,是一个值得去探讨的问题,那怎麼知道今天一个critical point,到底是属於local minima,还是saddle point呢?

Warning of Math

​ 这边需要用到一点数学,以下这段其实没有很难的数学,就只是微积分跟线性代数,但如果你没有听懂的话,以下这段skip掉是没有关係的

​ 那怎麼知道说一个点,到底是local minima,还是saddle point呢?

​ 你要知道我们loss function的形状,可是我们怎麼知道,loss function的形状呢,network本身很复杂,用复杂network算出来的loss function,显然也很复杂,我们怎麼知道loss function,长什麼样子,虽然我们没有办法完整知道,整个loss function的样子

Tayler Series Approximation

但是如果给定某一组参数,比如说蓝色的这个θ ′ ,在θ ′ 附近的loss function,是有办法被写出来的,它写出来就像是这个样子

​ 所以这个L ( θ ) 完整的样子写不出来,但是它在θ ′ 附近,你可以用这个式子来表示它,这个式子是,Tayler Series Appoximation泰勒级数展开,这个假设你在微积分的时候,已经学过了,所以我就不会细讲这一串是怎麼来的,但我们就只讲一下它的概念,这一串裡面包含什麼东西呢?

  • 第一项是L ( θ ′ ) ,就告诉我们说,当θ跟θ ′ 很近的时候,L ( θ ) 应该跟L ( θ ′ ) 还蛮靠近的

  • 第二项是

  • g是一个向量,这个g就是我们的gradient,我们用绿色的这个g来代表gradient,这个gradient会来弥补,θ ′ 跟θ 之间的差距,我们虽然刚才说θ ′ 跟θ ,它们应该很接近,但是中间还是有一些差距的,那这个差距,第一项我们用这个gradient,来表示他们之间的差距,有时候gradient会写成∇ L ( θ ′ ) ,这个地方的g 是一个向量,它的第i个component,就是θ的第i个component对L的微分,光是看g还是没有办法,完整的描述L(θ),你还要看第三项

  • 第三项跟Hessian有关,这边有一个$H $

https://www.bilibili.com/video/BV1Wv411h7kN?p=11

笔记:

https://blog.csdn.net/pigpigpig64/article/details/119061752

https://zhuanlan.zhihu.com/p/437609102

泰勒展开式:https://www.zhihu.com/question/25627482/answer/313088784

(一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)相关推荐

  1. [深度学习大讲堂]文化、进化与局部最小值

    本文为微信公众号[深度学习大讲堂]特约稿,转载请注明出处 Reference:Culture vs Local Minima [Bengio.2012] 关于作者 首次看到Bengio教授这篇论文是在 ...

  2. Batch Size对神经网络训练的影响

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Daryl Chang 来源丨CV技术指南 编辑丨极市平台 导 ...

  3. 关于过拟合、局部最小值、以及Poor Generalization的思考

    Poor Generalization 这可能是实际中遇到的最多问题. 比如FC网络为什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是过拟合啊?是不是欠拟合啊? 在操场跑步的时候,又从SVM ...

  4. 一文让你掌握神经网络训练技巧

    神经网络训练是一个非常复杂的过程,在这过程中,许多变量之间相互影响,因此我们研究者在这过程中,很难搞清楚这些变量是如何影响神经网络的.而本文给出的众多tips就是让大家,在神经网络训练过程中,更加简单 ...

  5. 神经网络训练中的Tricks之高效BP(反向传播算法)

    神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我 ...

  6. 神经网络训练算法的调用,人工神经网络训练案例

    1.BP人工神经网络方法 (一)方法原理 人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势 ...

  7. 神经网络训练的一般步骤,神经网络训练过程详解

    1.想要学习人工神经网络,需要什么样的基础知识? 人工神经网络理论百度网盘下载: 链接:https://pan.baidu.com/s/1Jcg4s2ETCrag2Vo-OA57Og 提取码:rxlc ...

  8. 神经网络训练常见坑-新手如何优化调整训练神经网络

    文章目录 0. 使用指南 Ⅰ. 数据集问题 Ⅱ. 数据归一化/增强 Ⅲ. 实现问题 Ⅳ. 训练问题 神经网络已经持续训练了 12 个小时.它看起来很好:梯度在变化,损失也在下降.但是预测结果出来了:全 ...

  9. 人工神经网络的训练步骤,神经网络训练过程图解

    如何通过人工神经网络实现图像识别 . 人工神经网络(ArtificialNeuralNetworks)(简称ANN)系统从20世纪40年代末诞生至今仅短短半个多世纪,但由于他具有信息的分布存储.并行处 ...

最新文章

  1. SMTPDiag 诊断工具
  2. 如何使用ZBrush+Painter来创建一个新生物之母?
  3. 《分布式系统:概念与设计》一2.3.2 体系结构模式
  4. font config 问题实践 001 - 如何获取font config的配置文件
  5. Android:访问网络资源,在手机本地显示网络资源源代码
  6. js localStorage,sessionStorage
  7. 【大数据】分布式机器学习平台
  8. Android 宝典:代码规范与命名规范
  9. 2019年最佳JavaScript日历和事件日历脚本
  10. Todd.log - a place to keep my thoughts on programming
  11. 常见的内存错误java_Java虚拟机常见内存溢出错误汇总,Java中常见的坑看了可以少走点弯路...
  12. 常见3D打印技术原理及比较
  13. 利用java代码一键生成数据库文档
  14. IT屌丝:SKYCC组合营销软件事件营销案例
  15. 模块电路选型(6)----存储模块
  16. 5g有线工业级路由器 有线无线自由切换
  17. 学生为什么要学python_碎碎念|为什么要学Python
  18. 今天高考╮(╯_╰)╭
  19. MatLab中rand randi randn 三个函数的解析
  20. Windows更新清理工具 (winsxs 清理工具)

热门文章

  1. TCP/UDP对比总结
  2. Python:数据集成
  3. 石头机器人拖地水量调节_石头扫地机器人T7上手体验:电控水箱和超大容量,扫拖一体全能型...
  4. Android 动态广播与静态广播
  5. JAVA中的接口和抽象类的区别
  6. DataPipeline联合Confluent Kafka Meetup上海站
  7. 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)
  8. Apache htaccess 重写假设文件存在!
  9. 转:查看系统是64位还是32位
  10. POJ1067_取石子游戏_威佐夫博弈