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

news/2024/9/20 20:29:01

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会失败呢?

image-20210314152447908

​ 你常常在做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这种事情,别人会觉得你非常没有水準,為什麼

image-20210314153200619

​ 因為不是只有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?其实是有办法的

image-20210314153005913

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

  • 因為如果是卡在local minima,那可能就没有路可以走了,因為四周都比较高,你现在所在的位置已经是最低的点,loss最低的点了,往四周走 loss都会比较高,你会不知道怎麼走到其他的地方去
  • 但saddle point就比较没有这个问题,如果你今天是**卡在saddle point的话,saddle point旁边还是有路可以走的,**还是有路可以让你的loss更低的,你只要逃离saddle point,你就有可能让你的loss更低

​ 所以鉴别今天我们走到,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,是有办法被写出来的,它写出来就像是这个样子

image-20210314154450970

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

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

  • 第二项是(\Theta -\Theta ^{'})^{T}g

 

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

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

    image-20210314155802228

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

台大李宏毅机器学习2021

ML 2021 Spring (ntu.edu.tw)https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.htmlDiscussion:ML2021Spring-hw1 | Kaggle Different types of functions。How to find a function? Regression:The function outputs as a scalar. Classification:Given opt…

python networkx绘制图

python networkx绘制图 1. 效果图2. 安装3. 源码参考这篇博客将介绍如何使用python,networkx绘制图。 1. 效果图 可调整点的大小,点是否有label,点的颜色 无label VS 点=50 VS 点=100 VS 点=200效果图如下: 2. 安装 pip install networkx3. 源码 # networkx绘制点图

不丢失精度的获取照片的Gps经纬度

不丢失精度的获取照片的Gps经纬度 1. 实际照片存储经纬度2. **用pyhton exifread读取**3. 用java metadata-extractor读取4. windows用 exiftool命令行读取参考查了超多的资料,发现照片的GPS信息是以rational64u 有理数的格式存储的。如经度、纬度度,在Exif中是以3个浮点数,…

Java对点、线、面生成栅格瓦片jpg,并渲染呈现

Java对点、线、面生成栅格瓦片jpg,并渲染呈现1. 效果图2. 原理2.1 面瓦片的生成2.2 线瓦片的生成2.3 多点瓦片的生成3. 源码参考这篇博客将介绍从前端HTML页面到后端预生成栅格瓦片jpg,并提供查询接口供前端html调用呈现效果图; 1. 效果图 …

Jupyter的使用方法

一、Jupyter新建python3文件的方法 1、打开桌面快捷方式,或者开始所有程序,找到anaconda文件夹,点击jupyter 2、点击new,选择python3 3、在1处输入代码,在2处点击运行 4、点击1处,在2处输入文件名字&#…

[vb+mo] visual baisc 6.0 基于mapobjects 2.4 开发的数字化校园电子地图

程序的源代码下载地址: https://docs.google.com/ 请安装VB6.0企业版(不是企业版运行会报错,因为缺少相应的控件)和ESRI MO2.4 程序的质量一般,因为时间仓促,主要是毕业设计时间仓促.希望大家多多改进.有什么问题可以发邮件欢迎交流. 程序的主窗口代码: 通用变量定义Private l…

Windows版本Anaconda安装教程

1、点击安装包,右键-以管理员身份运行安装文件,如图所示: 2、直接点击next即可 3、接着进入到许可协议的界面,这里点击I agree选项,也就是我同意的意思。 4、接着进入到用户选择的界面,选择all users选项&a…

Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式1. 效果图2. 源码参考这篇博客将介绍Python如何对图像进行base64编解码及读取为numpy、opencv、matplot需要的格式。 1. 效果图 原始图如下: base64转换为numpy数组效果图如下&#xff…