深度学习系列

第一篇 局部最优点+鞍点+学习率的调节


文章目录

  • 深度学习系列
  • 局部最优点和鞍点一样吗?
  • 自动调整学习率
    • 我们为什么要调整学习率?
  • 总结

局部最优点和鞍点一样吗?

这是不一样的,局部最优点的梯度在各个方向上的变化是不一样的,我们用三维空间的图去理解,我们讲的局部最优点和鞍点都是梯度为0的点,他们统称为critical point。局部最优点有局部最大和局部最小,他们两在三维空间上,在这个点不管往哪个方向,梯度值都会小于这个点(局部最大)或者大于这个点(局部最小)。而鞍点不一样,鞍点在某个方向是最小值,而在某些方向,梯度还可以变化。下面参照李宏毅老师的PPT给出图片。

上图为局部最小点(Local minima)

上图为鞍点(saddle point),形似马鞍,所以叫鞍点

至于怎么判断是鞍点还是局部最优,这里有一篇文章,很好地记录了李宏毅老师的思想。
局部最小值(local minima)和鞍点(saddle point)
大致的思想是在critical point这个点进行泰勒展开,得到critical point附近的Loss大致方程,记为L(θ),展开后第一项为critical point的在Loss方程上的值,记为L(θ),第二项为critical point的在Loss方程上的梯度值,为0,通过第三项的值为正还是负去判断L(θ)和L(θ)的大小。如果都是大于或者都是小于,即可判定为最小或最大,如果有大有小,即可判断为鞍点。

上图为泰勒的展开

下图为根据第三项的大小去判断的过程。

从大部分实验的数据来看,Local Minima出现的概率比较低,比较可能出现的是saddle point。

以上就是critical point的相关内容,下面记录自动调整学习率的过程

自动调整学习率

我们为什么要调整学习率?

这是因为我们模型在训练到某个阶段的时候,可能出现了loss的值不怎么变化的情况,这并非是我们上面讲的local minima或者saddle point,有可能是学习率的问题。在loss值变化不大的时候,我们去输出gradient的值,可以发现gradient 还在一直有着比较大幅度的变化。这是为什么呢? 请看下图

从上图我们可以看到,loss 在方框内是最小的,而当我们学习率设置比价大的时候,我们的gradient 下降调整的幅度是比较大的,这就让我们难以调整到最小loss的位置,从而在其左右跳动。所以我们在坡度比较大的时候,要将学习率调小,坡度比较平缓的时候,将学习率调大。

但是难道我们的learning rate 设置得越小就越能接近吗?
事实上我们设置小一点的learning rate,会让我们的模型确实更加接近,但是我们所做的次数会非常多,而且这个拟合也会到一定的位置就停下来,但是它离真正的曲线,其实还差很多的距离。

所以我们要为每一次的学习定制相应learning rate才能更加拟合
说起来复杂,其实只是做一个小小的改动。
我们原来更新的参数的表达式为. θ = θ - η * g(θ为要更新的参数,η为学习率,g为gradient)
现在改为θ = θ - η / σ * g,在每次的更新中对学习率做一个除法。,而σ的计算就是通过以往的gradient的值来计算的。做了平方再开方保证其只有数值上的大小,没有方向 。具体的计算如下图所示。当更新的梯度较大的时候,σ 的值就会变大,η/σ就会变小,反之变大。

但是在某些情况下,就算是同一个参数,同一个方向,它的坡度不一样,我们需要更为细致的调整!,如下图,上面的横线坡度是比较陡峭的,下面的横线坡度比较平缓。(这种图我认为可以将一个参数固定去看,某一个参数的数值固定,另一个数值变化比较大,说明坡度大)
这时候我们使用RMSProp来更加细致地控制学习率。计算过程如下图,我们在σ的计算过程中设置一个新的参数α,来给每次的gradient加上权重。
这个时候在坡度变化的时候,学习率变化反应会比前一个σ反应更快!
而我们在使用pytorch的时候,优化器有有个方法叫做Adam这个方法其实就是RMSProp+Momentum的做法。


这里又有一个新的问题,我们权重在更新的时候,某个方向的gradient虽然小,但是累计到一定程度后,可能突然爆发,让我们的模型远离真实函数如下图

为此,我们要用Learning Rate Scheduling去解决这个问题,它的做法就是让我们的学习率随着时间去变化。下图是两种方式。

在使用了learning rate scheduling后,我们的模型能更好地收敛。如下图,右图是使用后的拟合情况。
至于为什么warm up为什么先上升后下降
这是因为我们一开始训练的数据不多,曲线也只是试探性的变化,到了中期数据更多,模型更加知道往哪里走,所以学习率可以加大一点,然后再慢慢开始减少。

那我们整理各个知识点后,在一开始的**θ = θ - η/σ * g ** 中也可以使用moment去配合使用。θ = θ - η/σ * m。


总结

以上讲解我们局部最优点和鞍点到底是什么,并说明了为什么调节学习率和一些调节方法,希望配合上其他文章,能让初学者更容易理解。如果觉得有用,请大家点赞支持!!!!

局部最优点+鞍点+学习率的调节相关推荐

  1. 你的模型真的陷入局部最优点了吗?

    小夕曾经收到过一个提问:"小夕,我的模型总是在前几次迭代后很快收敛了,陷入到了一个局部最优点,怎么也跳不出来,怎么办?" 本文不是单纯对这个问题的回答,不是罗列工程tricks,而 ...

  2. 【转】你的模型真的陷入局部最优点了吗?

    小夕曾经收到过一个提问:"小夕,我的模型总是在前几次迭代后很快收敛了,陷入到了一个局部最优点,怎么也跳不出来,怎么办?" 本文不是单纯对这个问题的回答,不是罗列工程tricks,而 ...

  3. 梯度下降法局部最优解和鞍点的问题

    陷入局部最优并不是神经网络的问题,在一个高维空间中做梯度下降,很难收敛到局部最优,因为局部最小值要求函数在所有维度上都是局部最小值.若一个维度收敛到局部最小值的概率是0.5,则n维度收敛到局部最小值的 ...

  4. 通过不断重置学习率来逃离局部极值点

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ 黄通文   张俊林( 2016年12月) 注:这篇文章的思路以及本文是我们在2016年底左右做自动发现探索网络结构过程中做的, ...

  5. 局部最优、梯度消失、鞍点、海森矩阵(Hessian Matric)、批梯度下降算法(btach批梯度下降法BGD、小批量梯度下降法Mini-Batch GD、随机梯度下降法SGD)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) BATCH_SIZE大小设置对训练耗时的影响:1.如果当设置B ...

  6. 炼丹手册——学习率设置

    深度神经网络的参数学习主要是通过梯度下降方法来寻找一组可以最小化结构风险的参数.而学习率在深度学习的训练过程中是一个很重要的超参数,指导我们该如何通过损失函数的梯度调整网络权重的超参数.学习率越低损失 ...

  7. 2.10 局部最优的问题-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.9 学习率衰减 回到目录 2.11 总结 局部最优的问题 (The Problem of Local Optima) 在深度学习研究早期,人们总是担心优化算法会困在极差的 ...

  8. 梯度下降法的理解以及马鞍点

    一.梯度下降优化算法的进化 1.梯度下降法 梯度下降法是训练神经网络常用的优化算法 梯度下降法基于以下的观察:如果实值函数f(x)在a点处可微且有定义,那么函数f(x)在点a沿着梯度相反的方向−∇f( ...

  9. (tensorflow笔记)神经网络中的一些关键概念(学习率、激活函数、损失函数、欠拟合和过拟合、正则化和优化器)

    目录 1.神经网络复杂度 空间复杂度 时间复杂度 2.学习率策略 指数衰减学习率 分段常数衰减 3.激活函数 sigmoid tanh ReLU Leaky ReLU 建议 4.损失函数 均方误差损失 ...

最新文章

  1. 火狐浏览器插件_期待!全新安卓正式版Firefox火狐浏览器,将支持97个插件
  2. python历史5分钟数据_python每5分钟从kafka中提取数据的例子
  3. python对数组分类_有效地从字典Python中对数组进行分类
  4. Cellular Network
  5. python 俄罗斯方块_俄罗斯方块
  6. 黑莓刷机及情景设置来电和短信等没有声音的解决办法
  7. 二十四节气-大寒海报、文案分享。冬寒终有尽,春暖海先觉。
  8. lampp mysql未启动,lampp1.7中mysql无法启动问题
  9. C# AutoMapper 了解一下
  10. 使用wrd2vec构建推荐系统
  11. 高阶ts内置泛型帮助类型
  12. idea项目启动不了,报错war exploded: Artifact is being deployed, please wait...
  13. 在线制作html邮件,HTML邮件设计注意点
  14. vue scoped关键字
  15. 各类字符集的发展历史
  16. 学习linux,用虚拟机还是双系统?
  17. 【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家...
  18. linux的学习之旅(初学者)--持续更新中
  19. 树与树算法二叉树的层次遍历/广度遍历/深度遍历详解与代码实现
  20. 遥控器的键位功能的实现

热门文章

  1. css3 做一个漂亮的分割线
  2. JQuery下拉框与复选框
  3. 西安交大软件学院推免远程面试夏令营分享
  4. HashMap的树化门槛为什么是8
  5. android 7和苹果手机,这九大安卓机可取代iPhone 7
  6. 一个网课开发者复工后的一个月
  7. 【环境搭建】Docker镜像相关操作(切换镜像源、查询、获取、查看、创建、上传、保存、删除等)
  8. uniapp 热更新和整包更新
  9. 做跨境电商需要哪些准备?
  10. 从底层源码认知Arraylist