local minima 的问题如何解决

news2024/12/26 9:21:31

在这里插入图片描述

🚀 在初始神经网络那一节(链接如下:初识机器学习)是遇到了两个问题,第一个是在求解函数未知参数数时会遇到local minima的问题,在哪里我们并没有过多解释,就是说一般遇不到并且很好解决;第二个问题是当时使用的是线性模型,大大限制住了准确率,所以在第二节(线性模型到神经网络)就将模型变得有弹性进化为了神经网路以及深度网络;而这一节将进一步了解local minima的问题

1)优化求解失败

在定义好模型后,就进入训练阶段,即得出相应的损失函数(Loss函数),然后对损失函数使用梯度下降的方法求解最优的参数,但是使用梯度下降求解参数的时候可能就会卡在local minima(局部最优),从而导致梯度下降求解不出来最优的未知参数(全局最优)。

其实所谓的要通过梯度下降走到全局最优点的话,也就是要该点的偏导都为零,即要为极值点。而local minima的问题就在于,梯度下降走到一点,要是该点的偏导都为零,则会停下来,可是偏导为零的点并不一定最优,也并不一定为极值点;所以这些导数为零的点都会导致梯度下降求解停下来,而这些点并不一定是local minima,也有可能为下图中的saddle point(鞍点),而只有真正遇见local minima的时候,才是真的无路可走了,而导数为零导致梯度下降求解停下来不是正真的local minima 而是saddle point 的话,那也许是有路可走的,对于鞍点来说,四周仍然有两侧可以走,使其损失更低。

在这里插入图片描述

所以总结来说,导数为零的是crititical point ( 可疑点 ),若为local minima则无路可走,若为saddle point则有路可走。

该怎么区分是local minima还是saddle point

对于给定一组 θ ′ \theta^{'} θ,其实我们是可以通过泰特展开知道 θ ′ \theta^{'} θ附近的一个近似的损失函数,即如下图所示的 L ( θ ′ ) L(\theta^{'}) L(θ) 函数。

在这里插入图片描述

其中的 ( θ − θ ′ ) T g (\theta-\theta^{'})^Tg (θθ)Tg的g也是一个向量,因为损失函数中的 θ \theta θ本身就是一个向量,一组待求解的未知参数,所以求一阶导数,需要对 θ \theta θ 向量中的每一个分别求导,同样的当泰勒展开到二阶的时候,其中的 H H H 就表示对 θ \theta θ求二阶导数。

在这里插入图片描述

其中 H H H 也叫Hessian,是一个矩阵。 其中是对每一个未知参数的二阶导数,所以未知参数为2个的时候,其 H H H矩阵就为2×2的矩阵。

在这里插入图片描述
由于是crititical point ,其该点的一次微分都为零,所以 ( θ − θ ′ ) T g (\theta-\theta^{'})^Tg (θθ)Tg这项是零,所以对于在 θ ′ \theta^{'} θ这点来说,在该点的近似的损失函数函数就变成了 L ( θ ) = L ( θ ′ ) + 1 / 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\theta)=L(\theta^{'})+1/2(\theta-\theta^{'})^TH(\theta-\theta^{'}) L(θ)=L(θ)+1/2(θθ)TH(θθ)
在这里插入图片描述

这样就可以通过 1 / 2 ( θ − θ ′ ) T H ( θ − θ ′ ) 1/2(\theta-\theta^{'})^TH(\theta-\theta^{'}) 1/2(θθ)TH(θθ)式子来判断crititical point 的类型,到底是local minima 、local max 还是saddle point

在这里插入图片描述
为了表示方便将 θ − θ ′ \theta-\theta^{'} θθ 使用 v v v 来代替,

  • 要是对于点 θ ′ \theta^{'} θ 附近的任意一点 θ \theta θ 带入其 v T H v v^THv vTHv都大于零的话,说明 L ( θ ) > L ( θ ′ ) L(\theta)>L(\theta^{'}) L(θ)>L(θ),也就是说,在 θ ′ \theta^{'} θ附近的点都大于 L ( θ ′ ) L(\theta^{'}) L(θ)的值,所以为local minima
    在这里插入图片描述

  • local max
    在这里插入图片描述

  • saddle point
    在这里插入图片描述

显然不可能将所有的 v v v都带进去计算看其是否是大于零的,但是在线性代数中学过,对于式子 v T H v v^THv vTHv都大于零的话,说明 H H H 矩阵它是正定的,即所有的特征值都是正的(eigen values are positive);同样的要判定式子 v T H v v^THv vTHv小于零的话,即要说明 H H H 矩阵它是负定的,即所有的特征值都是负的(eigen values are negtive);所以以后要判定一个点到底是什么点,就只需要计算Hessian矩阵的特征值,特征值都为正,则为local minima;特征值都为负,则为local max;特征值有正有负的话,则为saddle point

举一个例子,来看看梯度下降遇到微分为零的点而导致的终止训练,判断该点是否为鞍点,若为鞍点怎么一步步逃离鞍点去往global minima

例子中,其模型的函数如下图所示,是含两个未知参数 w 1 w 2 w_1w_2 w1w2的模型。同时其训练数据也只有(1,1)。

在这里插入图片描述

先采用暴搜的方式,穷举所有的 w 1 w 2 w_1w_2 w1w2绘制了如下的误差平面图(error surface)。在error surface中,其颜色越艳丽表示误差就越大,显然存在很多的crititical point,在原点处的点显然是saddle point ,在向二四象限走的时候误差会增大,在向一三象限走的时候误差会减小。显然就是一个saddle point

在这里插入图片描述

假设现在不进行暴搜,只是通过计算来看是否是saddle point,即只需要先得到损失函数,如下图所示:

在这里插入图片描述

然后先计算损失函数的一阶导数值,然后来判断(0,0)是什么点,通过下图可以看出,分别计算了 w 1 w 2 w_1w_2 w1w2的偏导数,将(0,0)带入得到其一阶导数都为零,所以(0,0)是一个可疑点。

在这里插入图片描述

现在需要进一步判断可疑点(0,0)到底为什么点,即需要计算二阶导数,即计算Hessian矩阵所有特征值即可判断。

在这里插入图片描述

如上图所示,分别得到了二阶导数的值,也就是得到了Hessian矩阵,其如下 [ 0 − 2 − 2 0 ] (Hessian) \begin{bmatrix} 0 & -2 \\ -2 & 0 \end{bmatrix} \tag{Hessian} [0220](Hessian)
然后再计算Hessian矩阵所有的特征值,其有两个特征值,一个特征值为2,一个为-2,所以该点为鞍点。

2)怎么逃离鞍点

在某一点处停下来之后,若判断其为鞍点,说明还是有路可以走的,那该怎么逃离鞍点呢?

同样的Hessian矩阵也可以告诉我们参数的跟新方向,假设 u u u H H H 矩阵的特征向量, λ \lambda λ H H H 矩阵的特征值,所以对于 u T H u u^THu uTHu 来说,其进一步被化简为了 λ ∣ ∣ u ∣ ∣ 2 \lambda||u||^2 λ∣∣u2,那么此时假设 λ \lambda λ是小于零的话,立马就可以推得 u T H u u^THu uTHu 小于零。
在这里插入图片描述

从而进一步推得 L ( θ ) < L ( θ ′ ) L(\theta)<L(\theta^{'}) L(θ)<L(θ)

在这里插入图片描述

所以可以得到,只要 u u u H H H 矩阵的特征向量且 u = θ − θ ′ u=\theta-\theta^{'} u=θθ 时,就是让损失更小,所以只需要让 θ \theta θ 朝着 θ = u + θ ′ \theta=u+\theta^{'} θ=u+θ的方向走,就可以让损失变小;所以也就是让其朝着Hessian矩阵为负的特征值对应的特征向量的方向走,因为更新的 θ \theta θ u + θ ′ u+\theta^{'} u+θ,即在 θ ′ \theta^{'} θ的基础上再走 u u u,即Hessian矩阵的特征向量。

例子, 在求得上述例子的Hessian矩阵 [ 0 − 2 − 2 0 ] (Hessian) \begin{bmatrix} 0 & -2 \\ -2 & 0 \end{bmatrix} \tag{Hessian} [0220](Hessian)
其有两个特征值,一个特征值为 λ = 2 \lambda=2 λ=2 ,一个为 λ = − 2 \lambda=-2 λ=2,该点为鞍点,选择其中 λ = − 2 \lambda=-2 λ=2的特征值,其中一个特征向量为 [ 1 1 ] (特征向量) \begin{bmatrix} 1 \\ 1 \end{bmatrix} \tag{特征向量} [11](特征向量),即如下图所示向(1,1)的方向去寻找最优解,很显然这是正确的。
在这里插入图片描述

3)local minima怎么解决

在上面很好的解决了,如果遇到的是鞍点的话可以通过 H H H 矩阵很好的逃离,那local minima 呢?又该怎么解决?

其实所谓的local minima真的很少,在二维来看,这就是一个local minima ,可是一旦扩展到三维世界后,也许就是一个saddle point,所以说,也许在低纬度的世界里,可能无路可走,可是一旦到了高维世界以后,也许到处都是路,不在有local minima

在这里插入图片描述

而在我们今天训练的数据当中,输入动辄成百上千甚至更大,在这么高的维度上,也许到处是路,几乎不会出现local minima的问题。

如下图所示,图中每一个点都代表训练完成停下来(即到了crititical point)的一个神经网络,纵轴为训练完成后的损失,横轴为minimum ratio,其为H矩阵正的特征值的数量比上总的特征值数量。
在这里插入图片描述

可以看见大多数网络训练停下来后,最极端的情况minimum ratio为0.6,也还是有负的特征值的,每个停下来的点都还是saddle point,都还是有路可走的!

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

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

相关文章

合并两个有序数组(c语言)

1.//给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 //注意&#xff1a;最终&#xff0c;合并后数…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

32、Qt读写csv文件

一、写入 QString fileName QFileDialog::getSaveFileName(this, "写入", "/untitled.csv", tr("Files (*.csv)"));if(fileName.isEmpty()){QMessageBox::warning(this, "提示", "文件名不能为空", QMessageBox::Ok);retur…

探索分布式IO模块的介质冗余:赋能工业自动化的稳健之心

在日新月异的工业自动化领域&#xff0c;每一个细微环节的稳定性都直接关系到生产线的效率与安全。随着智能制造的深入发展&#xff0c;分布式IO&#xff08;Input/Output&#xff09;模块作为连接现场设备与控制系统的关键桥梁&#xff0c;其重要性日益凸显。我们自主研发的带…

网络原理-传输层UDP

上集回顾&#xff1a; 上一篇博客中讲述了应用层如何自定义协议&#xff1a;确定传输信息&#xff0c;确定数据格式 应用层也有一些现成的协议&#xff1a;HTTP协议 这一篇博客中来讲述传输层协议 传输层 socket api都是传输层协议提供的&#xff08;操作系统内核实现的了…

MBTI人格测试项目(uni-app微信小程序 + SpringBoot)

目录 项目概述 测试 & 计分方式说明 页面展示 开发日志文档 素材&#xff1a;题库和人格分析 Gitee源码地址 项目概述 1.通过回答70道不同类型的题目&#xff0c;推算出MBTI人格类型&#xff0c;并给出此人格类型的解析。 2.使用uni-app编写微信小程序。 3.前端使…

车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面&#xff1a; ①对数似然值的改进 通过对噪声的那个方差和T进行调参&#xff0c;来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析&#xff0c;发现在T非常大的情况下对样本质量几乎没有影响&#xff0c;也就是说…

Keil安装简易教程

1、安装MDK538a.exe 2、一直点下一步&#xff0c;默认安装即可。安装完成依次点击进行注册 3、利用Keygen进行License注册 4、Pack Installer 下载包&#xff0c;可在线下&#xff0c;可自行下 5、下载完可正常打开自己的工程项目 6、解压文件到Keil安装路径下C:\Keil_MDK\ARM…

如何利用多线程提高计算密集型任务的性能

文章目录 摘要引言基本概念和原理判断是否适合使用多线程多线程编程中的关键问题设计和实现高效的多线程示例代码QA环节总结未来展望参考资料 摘要 多线程编程可以充分利用多核处理器的计算能力&#xff0c;从而显著提高计算密集型任务的性能。本篇文章将介绍多线程编程的基本…

基于STM32的智能照明系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 光照传感器数据采集照明控制实现自动亮度调节与手动控制应用场景结论 1. 引言 智能照明系统通过传感器实时监测环境光照度&#xff0c;并根据光线强度自动调整灯光亮度&#xff0c;达到…

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools

【C++】透过STL源代码深度剖析vector的底层

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f525; 所属专栏&#xff1a;C深入学习笔记 &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 参考博客&#xff1a;【C】透过STL源…

Python画笔案例-071 绘制闪闪的红星

1、绘制通闪闪的红星 通过 python 的turtle 库绘制 闪闪的红星,如下图: 2、实现代码 绘制闪闪的红星,以下为实现代码: """闪闪的红星.py """ import time import turtledef xsleep(n):"""防

Elasticsearch 使用误区之六——富文本内容写入前不清洗

0、引言 在很多应用场景中&#xff0c;我们会将富文本内容&#xff08;如 HTML 格式的网页内容&#xff09;存储到 Elasticsearch 中&#xff0c;以实现全文检索。 然而&#xff0c;在实际使用过程中&#xff0c;我们可能会遇到一些问题&#xff0c;比如在检索时&#xff0c;HT…

通信工程学习:什么是FTP文件传输协议

FTP&#xff1a;文件传输协议 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上交换文件的协议&#xff0c;它定义了文件传输时使用的命令和响应。作为最古老的互联网协议之一&#xff0c;FTP至今仍被广泛使用&#xff0c;并在网…

Elasticsearch:使用 LLM 实现传统搜索自动化

作者&#xff1a;来自 Elastic Han Xiang Choong 这篇简短的文章是关于将结构化数据上传到 Elastic 索引&#xff0c;然后将纯英语查询转换为查询 DSL 语句&#xff0c;以使用特定过滤器和范围搜索特定条件。完整代码位于此 Github repo 中。 首先&#xff0c;运行以下命令安装…

8639 折半插入排序

### 思路 折半插入排序是一种改进的插入排序算法&#xff0c;通过二分查找来确定插入位置&#xff0c;从而减少比较次数。每次插入时&#xff0c;先用二分查找找到插入位置&#xff0c;然后将元素插入到正确的位置。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待…

8. Bug 与 Error

计算机程序中的缺陷通常被称为 bug。把它们想象成偶然爬进我们工作中的小东西&#xff0c;会让程序员感觉良好。当然&#xff0c;实际上是我们自己把它们放进去的。 如果程序是思想的结晶&#xff0c;我们可以将错误大致分为思想混乱造成的错误和将思想转化为代码时引入错误造成…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了&#xff0c;其口碑榜首、节奏紧凑、贴合原著、电影质感&#xff0c;都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原&#xff0c;长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

基础算法--双指针【概念+图解+题解+解释】

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 数据结构与算法_Stark、的博客-CSDN博客 其它专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客​​​​​​ 座右铭&a…