精华内容
下载资源
问答
  • 局部收敛
    2021-11-25 09:43:06

    方法:

    首先输入一个初始的近似根x0,

    再输入迭代次数的上限N,N的目的是防止函数f(x)在x0处不收敛而造成程序的死循环。

    最后输入迭代结果的精度e,当|x(k+1) - x(k)| < e时,程序执行结束,输出迭代结果和迭代次数。

    如果迭代未出结果,则大概率局部不收敛。(需要考量N的大小)

    可参考资料:

    验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度_学习记录-CSDN博客

    更多相关内容
  • 4.4 数值分析: 局部收敛

    千次阅读 2021-05-25 20:12:22
    本文内容为东北大学数值分析国家精品慕课课程的课程讲义,将其整理为OneNote笔记同时添加了本人上课时的课堂笔记,且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到CSDN博文中, ...

    本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来,

    为了方便大家和自己查看,特将此上传到CSDN博文中, 源文件已经上传到我的资源中,有需要的可以去看看,

    我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理

    本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!

    博客中思维导图的高清PDF版本,可关注公众号 一起学计算机 点击 资源获取 获得

     

     

     

    感觉作者写的不错的, 别忘了点赞关注加收藏哦(一键三连)!你的支持会带给我极大的动力, 写出更多优秀文章!

     文章到这里就结束了, 感谢你的认真观看, 为了感谢读者们, 我把我一直以来整理的各种计算机相关/考研相关精品思维导图/力扣算法讲解/面试资料/各种实用软件工具分享给大家(并且会持续更新哦!), 希望能够帮助到你们.

    关注公众号 一起学计算机 点击 资源获取 即可获得所有资源, 包含的资源如下图, 其中具体资源的相关讲解和各种软件的使用可以查看下面相应的文章.

    我的更多精彩文章链接, 欢迎查看

    各种电脑/软件/生活/音乐/动漫/电影技巧汇总(你肯定能够找到你需要的使用技巧)

    力扣算法刷题 根据思维导图整理笔记快速记忆算法重点内容

     

    经典动漫全集目录 精彩剧集

    海贼王 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

    火影忍者 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

    死神 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

     

    计算机专业知识 思维导图整理

    最值得收藏的 Python 全部知识点思维导图整理, 附带常用代码/方法/库/数据结构/常见错误/经典思想(持续更新中)

    最值得收藏的 C++ 全部知识点思维导图整理(清华大学郑莉版), 东南大学软件工程初试906科目

    最值得收藏的 计算机网络 全部知识点思维导图整理(王道考研), 附带经典5层结构的中英对照和框架简介

    最值得收藏的 算法分析与设计 全部知识点思维导图整理(北大慕课课程)

    最值得收藏的 数据结构 全部知识点思维导图整理(王道考研), 附带经典题型整理

    最值得收藏的 人工智能导论 全部知识点思维导图整理(王万良慕课课程)

    最值得收藏的 数值分析 全部知识点思维导图整理(东北大学慕课课程)

    最值得收藏的 数字图像处理 全部知识点思维导图整理(武汉大学慕课课程)

    红黑树 一张导图解决红黑树全部插入和删除问题 包含详细操作原理 情况对比

    各种常见排序算法的时间/空间复杂度 是否稳定 算法选取的情况 改进 思维导图整理

     

    人工智能课件  算法分析课件  Python课件  数值分析课件  机器学习课件 图像处理课件

     

    考研相关科目 知识点 思维导图整理

    考研经验--东南大学软件学院软件工程(这些基础课和专业课的各种坑和复习技巧你应该知道)

    东南大学 软件工程 906 数据结构 C++ 历年真题 思维导图整理

    东南大学 软件工程 复试3门科目历年真题 思维导图整理

    最值得收藏的 考研高等数学 全部知识点思维导图整理(张宇, 汤家凤), 附带做题技巧/易错点/知识点整理

    最值得收藏的 考研线性代数 全部知识点思维导图整理(张宇, 汤家凤), 附带惯用思维/做题技巧/易错点整理

    高等数学 中值定理 一张思维导图解决中值定理所有题型

    考研思修 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    考研近代史 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    考研马原 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

     

    考研数学课程笔记  考研英语课程笔记  考研英语单词词根词缀记忆  考研政治课程笔记

     

    Python相关技术 知识点 思维导图整理

    Numpy常见用法全部OneNote笔记     全部笔记思维导图整理

    Pandas常见用法全部OneNote笔记     全部笔记思维导图整理

    Matplotlib常见用法全部OneNote笔记  全部笔记思维导图整理

    PyTorch常见用法全部OneNote笔记    全部笔记思维导图整理

    Scikit-Learn常见用法全部OneNote笔记  全部笔记思维导图整理

     

    Java相关技术/ssm框架全部笔记

    Spring  springmvc  Mybatis  jsp

     

    科技相关 小米手机

    小米 红米 历代手机型号大全 发布时间 发布价格

    常见手机品牌的各种系列划分及其特点

    历代CPUGPU的性能情况和常见后缀的含义 思维导图整理

    展开全文
  • 设f: Rn→Rm是Frechet可微的,m≥n。...本文主要研究解非线性最小二乘问题的Gauss-Newton法的半局部收敛性.假设f(x)在B(x0, r)内连续可导且f(x0)满秩,若f的导数满足Lipschitz连续|F(x)-f(x)|≤γ|x-x|,
  • 通过对局部凸空间中局部收敛与局部连续的讨论,给出了C-局部序列空间的一些新的充分必要条件。同时进一步给出了局部连续线性泛函(或有界线性泛函)和半包囿空间的若干等价条件。
  • 求解NSOCP的增广拉格朗日方法的局部收敛性分析,张思雨,刘陶文,本文研究求解非线性二阶锥规划问题(NSOCP)的增广拉格朗日函数方法, 证明了该方法在约束非退化条件和强二阶充分条件下具有局部收敛
  • 通过引入中心γ0-条件及γ-条件,研究了非精确Newton法的半局部收敛性问题,得到了更优的半局部收敛性分析及更精确的误差估计。
  • 研究了一阶导数满足仿射反变ω-条件下,Newton迭代法在求解非线性算子方程时的半局部收敛性。这种ω-条件包含了仿射反变Lipschitz条件和仿射反变Holder条件作为特殊情形。此外,得到了相应迭代残余(‖F( xk)‖)的误差...
  • 研究了一牛顿型迭代方法, 即Newton-Steffensen 型迭代方法的局部收敛性质. 在假设非线性算子f 的Fréchet 导数在f(x) 的零点x倡的某个邻域满足一阶Holder连续条件下, 确立了该迭代方法在Banach空间里的局部收敛定理,...
  • 基于局部收敛权阵进化的BP神经网络MapReduce训练.pdf
  • 自动驾驶仪动特性的局部收敛变结构导引律.pdf
  • 考虑自动驾驶仪二阶动态特性的局部收敛导引律.pdf
  • 基于梯度采样局部收敛的生物信息大数据挖掘.pdf
  • 非线性方程的数值迭代法及其半局部收敛
  • 许,局部收敛序列关于中值滤波器的性质,离散数学309(2009)2775-2781],我们推测对于k是{2,3}的元素,如果存在n(0)是k的元素Z使得x在{n(0),...,n(0)+ k-1)上相对于F(k)局部有限收敛,那么x相对于F(k...
  • ProxSVRG的局部收敛行为 Matlab代码重现论文结果 ,,,2018 Prox-SGD没有歧管标识 当非退化条件失败时 解决方案及其双重 支持识别三个不同的初始点 稀疏逻辑回归 玩具实例 支持SAGA / Prox-SVRG的识别 SAGA / Prox-...
  • 一个解非线性方程组的高阶迭代法及其局部收敛定理参考.pdf
  • 主要研究了在弱L-平均条件下非精确牛顿型迭代法在求解非线性算子方程时的半局部收敛性.这种弱L-平均条件包含了常用的Lipschitz条件作为特殊情形,故所得收敛结果具有一般性.
  • 验证牛顿公式的局部收敛性; b.比较二分法与牛顿公式的收敛速度; c.验证求解结果的正确性; 三、实验内容 a.在验证牛顿公式的时候,首先让用户输入一个初始的近似根x0,再输入迭代次数的上限N,N的目的是防止...

    文末有代码,大家可以自己跑一下,体会一下牛顿法的运算过程

    二、实验目的:

    a.验证牛顿公式的局部收敛性;
    b.比较二分法与牛顿公式的收敛速度;
    c.验证求解结果的正确性;

    三、实验内容

    a.在验证牛顿公式的时候,首先让用户输入一个初始的近似根x0,再输入迭代次数的上限N,N的目的是防止函数f(x)在x0处使用牛顿法时不收敛而造成程序的死循环。最后提示用户输入迭代结果的精度e,当|xk+1 - xk| < e时,程序执行结束,输出迭代结果和迭代次数。在程序代码里定义一个整形变量k,用于记录迭代的次数。
    b.在上面的基础上,再编写一个用二分法求根的函数,从而实现二分法与牛顿法收敛速度的比较。执行二分法的代码时,用户需要输入二分的区间端点a,b。二分结果的精度可以使用牛顿法的精度e,当|b - a| < e时,函数执行结束,并输出二分结果和二分次数。
    c.选取的验证函数应该有实根,且在程序执行之前我们能够通过其它方法得到被验证函数的所有实根。最后比较程序计算出来的根和预先已知的根是否相同来验证求解结果的正确性。
    d.因为牛顿法是局部收敛的,所以一定能够找到使牛顿法不收敛的点。我采用的是构造函数的方法来寻找不收敛点,不收敛有两种情况,如下图所示:
    在这里插入图片描述
    下面介绍第一种情况的构造。
    在这里插入图片描述
    这种构造方法的核心思想是在点(b,f(b))处的切线的横截距等于a,点(a,f(a))处切线的横截距等于b。因为f(x) = 0必须有实根,所以假设f( c ) = 0,c除了a,b外,可以取任意实数,而a,b是可以任取的。
    第二种情况的构造。
    在这里插入图片描述
    这种不收敛情况下的构造,我们首先需要画出一个某一区间上牛顿法不收敛的函数图像(满足这个要求的图像并不难画,关键是画的越简单越好)。构造函数的核心思想是对函数f(x)进行分段,按照牛顿法的要求,f(x)必须是连续且一阶可导,我们把这两点作为条件,可以得到两个方程。先设出f(x)其中一段函数的表达式,在设表达式的时候,基本上我们学过的初等函数就能满足要求,因为我们并不需要所设的表达式与画出的曲线图完全吻合,只要变化趋势一致即可。
    四、程序关键语句描述

    double f(float x) {
    	double result;
    	result = (5.0 / 6.0) * pow(x, 4) - 4 * pow(x, 3) + (23.0 / 6.0) * pow(x, 2) + 3 * pow(x, 1) - (17.0 / 3.0);	//不收敛点是1和2,根为-1和3,2
    		return result;
    }
    

    上述代码用来求函数f(x)的函数值,我构造出来的这个函数在x = 1和x=2处对于牛顿法不收敛。

    double f_d(float x){	
    	double result;
    		result = (10.0 / 3.0) * pow(x, 3) - 12 * pow(x, 2) + (23.0 / 3) * pow(x, 1) + 3;
    		return result;
    }
    

    上述代码用来求函数f(x)的一阶导数值。
    因二分法和牛顿法的代码都比较简单这里不做赘述,牛顿法的公式为
    在这里插入图片描述
    五、实验结果
    待检验函数f(x)的表达式是f(x) = (5/6)*x4-4x3+(23/6)x2+3x-(10/3),它有两个实根,分别为x1 = -1,x2 = 3.23483652635,函数图像如下图所示。
    在这里插入图片描述
    此函数对于牛顿法不收敛的点为1和2.
    对于初始近似根x=3的牛顿法和二分区间[2,4]的二分法,看他们的收敛速度的情况,如下图所示,对于同样的精度要求,二分法需要计算21次,而牛顿法只需计算5次。
    在这里插入图片描述
    验证对于牛顿法不收敛的点
    在这里插入图片描述
    在这里插入图片描述
    六、实验体会
    通过本次实验,加深了对牛顿法的理解,同时也领悟到牛顿法思想的简洁性和可操作性。牛顿法的收敛性非常强,对于绝大多数函数都收敛,只有极少部分函数在少数点不收敛,因此牛顿法具有很强的实用性。当我用分段构造法构造出来的函数进行验证的时候,发现程序执行过程中出现来了奇异点。经过分析之后,发现是由于计算机的计算精度不够造成的。这也提醒我们,在实际应用中,不能只是依靠理论推导,还应该对实际环境进行充分的调研,理论结合实践,才能得到最优的结果。
    最后上代码

    // 牛顿法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
     
    //#include "pch.h"
    #include "stdio.h"
    #include"math.h"
    //计算法(x)的值
    double f(float x) {
    	double result;
    	//result = (pow(x, 3) - 2 * pow(x,2) - pow(x,1) + 2) * (5.0 / 6.0 * pow(x,1) - 7.0 / 3.0) - (x + 1);	//不收敛点是1和2,根为-1和3.2
    	result = (5.0 / 6.0) * pow(x, 4) - 4 * pow(x, 3) + (23.0 / 6.0) * pow(x, 2) + 3 * pow(x, 1) - (17.0 / 3.0);
    	//if (x > 0)
    	//	result = exp(-x) + 1;
    	//else
    	//	result = -pow(x, 2) - pow(x, 1) + 2;
    	return result;
    }
    //f(x)的一阶导数
    double f_d(float x){	
    	double result;
    	//result = (3 * pow(x,2) - 4 * pow(x,1) - 1) * (5.0 / 6.0 * x -7.0 / 3.0) + (5.0 / 6.0) * (pow(x, 3) - 2 * pow(x, 2) - pow(x, 1) + 2) - 1;
    	result = (10.0 / 3.0) * pow(x, 3) - 12 * pow(x, 2) + (23.0 / 3) * pow(x, 1) + 3;
    	//if (x > 0)
    	//	result = -exp(-x);
    	//else
    	//	result = -2 * pow(x, 1) - 1;
    	return result;
    }
    int main()
    {
    	float x0,x1, e;
    	int N,k = 1;	//k用来记录迭代的次数
    	printf("请输入牛顿法初始节点x0,迭代次数上限N:");
    	scanf("%f%d", &x0, &N);
    	float a, b;
    	printf("请输入二分法的区间端点a,b:");
    	scanf("%f%f",&a,&b);
    	printf("请输入迭代精度e:");
    	scanf("%f", &e);
    	if (f(a) * f(b) >= 0) {	//根在区间端点的情况也不可以。
    		printf("区间端点有误,此开区间无根或有多个根\n");
    		return 0;
    	}
    	//二分法的计算
    	while (1) {
    		//判断是否恰好为根
    		if (f(a) * f((a + b) / 2.0) == 0) {
    			printf("二分结果为%f\n二分次数为%d\n", (a + b) / 2.0, k);
    			break;
    		}
    		if (f(a) * f((a + b) / 2.0) < 0)
    			b = (a + b) / 2.0;
    		else
    			a = (a + b) / 2.0;
    		//如果满足精度要求,则输出二分结果
    		if ((fabs(a - b) < e)) {
    			printf("二分结果为%f\n二分次数为%d\n", a, k);
    			break;
    		}
    		k++;
    	}
    	//牛顿法的计算
    	k = 1;
    	while (1) {
    		if (f_d(x0) == 0) {
    			printf("此点为奇异点,迭代失败\n");
    			printf("现在的迭代次数为%d", k);
    				break;
    		}
    		x1 = x0 - f(x0) / f_d(x0);
    		
    		if (fabs(x1 - x0) < e) {
    			printf("牛顿法迭代结果%f\n迭代次数%d\n", x1,k);
    			break;
    		}
    		if (k == N) {
    			printf("迭代次数已达上限,迭代失败\n");
    			break;
    		}
    		k++;
    		x0 = x1;
    	}
    
    }
    
    展开全文
  • 给出了函数列局部一致收敛的充要条件,并对其局部广义一致收敛局部亚一致收敛的条件进行了刻划.
  • 本文讨论使在某点连续的函数列的极限也在该点连续的收敛条件,引进了三个局部一致收敛性,并初步探讨了它们的性质和用场。
  • 所以实际中,当我们的深度学习模型收敛时,几乎没有必要认为它收敛到了一个局部最优点,这完全等同于杞人忧天。 也就是说,如果最后模型确实在梯度下降法的指引下收敛到了一个导数为0的点,那这个点几乎可以肯定就是...

    链接:https://www.zhihu.com/question/68109802

    编辑:深度学习与计算机视觉

    声明:仅做学术分享,侵删

    作者:夕小瑶
    https://www.zhihu.com/question/68109802/answer/263503269

    反对回答区中一部分称“模型收敛于鞍点”的回答。当然也有的大牛可以一针见血,那我就对这个问题多展开一下吧,让鲜血流的更猛烈一些。(害怕.jpg)

    真的结束于最优点吗?

    我们知道,在局部最优点附近,各个维度的导数都接近0,而我们训练模型最常用的梯度下降法又是基于导数与步长的乘积去更新模型参数的,因此一旦陷入了局部最优点,就像掉进了一口井,你是无法直着跳出去的,你只有连续不间断的依托四周的井壁努力向上爬才有可能爬出去。更何况梯度下降法的每一步对梯度正确的估计都在试图让你坠入井底,因此势必要对梯度“估计错很多次”才可能侥幸逃出去。那么从数学上看,什么才是局部最优点呢?

    这个问题看似很白痴,很多人会说“局部最优点不就是在loss曲面上某个一阶导数为0的点嘛”。这就不准确啦,比如下面这个马鞍形状的中间的那个点:

    图片来自《deep learning》

    显然这个点也是(一阶)导数为0,但是肯定不是最优点。事实上,这个点就是我们常说的鞍点

    显然,只用一阶导数是难以区分最优点和鞍点的。

    我们想一下,最优点和鞍点的区别不就在于其在各个维度是否都是最低点嘛~只要某个一阶导数为0的点在某个维度上是最高点而不是最低点,那它就是鞍点。而区分最高点和最低点当然就是用二阶导数(斜率从负变正的过程当然就是“下凸”,即斜率的导数大于0,即二阶导数大于0。反之则为“上凹”,二阶导数小于0)。也就是说,若某个一阶导数为0的点在至少一个方向上的二阶导数小于0,那它就是鞍点啦

    那么二阶导数大于0和小于0的概率各是多少呢?由于我们并没有先验知识,因此按照最大熵原理,我们认为二阶导数大于和小于0的概率均为0.5!

    那么对于一个有n个参数的机器学习/深度学习模型,“loss曲面”即位于n+1维空间(loss值为纵轴,n个参数为n个横轴)。在这个空间里,如果我们通过梯度下降法一路下滑终于滑到了一个各方向导数均为0的点,那么它为局部最优点的概率即 ,为鞍点的概率为 ,显然,当模型参数稍微一多,即n稍微一大,就会发现这个点为鞍点的概率会远大于局部最优点!

    好吧我再啰嗦的举个栗子,已经反应过来的同学可以跳过这个栗子:

    假设我们的模型有100个参数(实际深度学习模型中一般会远大于100),那么某一阶导数为0的点为局部最优点的概率为约为 ,而为鞍点的概率则为 。就算我们的模型在训练时使用了特别厉害的“超级梯度下降法”,它可以每走一步都恰好踩在一个一阶导数为0的点上,那么从数学期望上来看,我们需要走10^31步才行。而实际的projects中,哪怕数据集规模为千万级,我们分了100万个batches,然后要迭代100次,那也仅仅是走了 步,你真的觉得运气可以辣么好的走到局部最优点上去吗?所以实际中,当我们的深度学习模型收敛时,几乎没有必要认为它收敛到了一个局部最优点,这完全等同于杞人忧天。

    也就是说,如果最后模型确实在梯度下降法的指引下收敛到了一个导数为0的点,那这个点几乎可以肯定就是一个鞍点。

    如果我们的模型真的收敛到鞍点上了,会很可怕吗?

    这就又回到了文章开头的那副马鞍状的图。

    显然,站在马鞍中央的时候,虽然很难翻过两边的山坡,但是往前或者往后随便走一步就能摔下马鞍!而在文章《batch size》中小夕讲过,我们默认使用的mini-batch梯度下降法本身就是有噪声的梯度估计,哪怕我们位于梯度为0的点,也经常在某个mini-batch下的估计把它估计偏了,导致往前或者往后挪了一步摔下马鞍,也就是mini-batch的梯度下降法使得模型很容易逃离特征空间中的鞍点。

    那么问题来了,既然局部最优点很难踩到,鞍点也很容易逃离出去,那么

    为什么我们的模型看起来是收敛了呢?

    初学者可能会说 “诶诶,会不会是学习率太大了,导致在“鞍点”附近震荡?” 首先,鞍点不像最优点那样容易震荡,而且哪怕你不断的减小学习率继续让模型收敛,大部分时候你这时计算output层或者后几层的梯度向量的长度时往往会发现它依然离0很遥远!(这句话是有实验支撑的,不过那篇论文我暂时没记起来,找到时贴出来)说明大部分时候收敛到的并不是鞍点。

    那会不会踩到的鞍点太多,虽然前面的鞍点都轻松逃逸了,但是最后恰好收敛到一个跳不下去的鞍点身上了?

    这倒是有可能,不排除有一些“马鞍面”特别平坦的鞍点区域,当模型陷入这种鞍点上时,由于计算出的梯度非常小,导致要连续迭代非常多次才可能慢慢移开这个鞍点,事实上大部分工程情况下,没等它移开的时候我们就已经默认为模型收敛、训练结束了,实际上人家模型还在努力逃离鞍点中呢。

    不过话说回来,虽然高维空间中的鞍点数量远远大于最优点,而且鞍点数量随着特征空间维度增高而指数级增长,但是鞍点的数量在整个空间中又是微不足道的:按前面的假设,假设在某个维度上随机一跳有10%的概率踩到导数为0的点,那么我们在101维的空间中的一步恰好踩到这个点上的概率为10^-100,也就是说在101维空间里随机乱跳的时候,有10^-100的可能性踩到鞍点身上。因此,即使有难以逃离的鞍点,即使我们的优化算法在努力向附近的鞍点靠拢,那么被我们正好踩到那些难以逃离的特殊鞍点的概率也是非常小的。

    所以更令人信服的是,在高维空间里(深度学习问题上)真正可怕的不是局部最优也不是鞍点问题,而是一些特殊地形。比如大面积的平坦区域:

    图片来自《deep learning》

    在平坦区域,虽然导数不为0但是却不大。虽然是在不断下降但是路程却非常长。对于优化算法来说,它需要走很多很多步才有可能走过这一片平坦区域。甚至在这段地形的二阶导数过于特殊的情况下,一阶优化算法走无穷多步也走不出去(设想一下,如果终点在一米外,但是你第一次走0.5米,后续每一步都是前一步的一半长度,那么你永远也走不到面前的一米终点处)。

    所以相比于栽到最优点和鞍点上,优化算法更有可能载到这种类似平坦区的地形中(如果这个平坦区又是“高原地带”,即loss值很高的地带,那么恭喜你悲剧了)。更糟糕的是,由于高维地形难以可视化,还有很多更复杂的未知地形会导致假收敛,一旦陷入到这些危险地形中,几乎是无解的。

    所以说,在深度学习中,与其担忧陷入局部最优点怎么跳出来,更不如去考虑数据集要怎么做才能让网络更好学习,以及网络该怎么设计才能更好的捕获pattern,网络该怎么训练才能学到我们想让它学习的知识。

    深度神经网络“容易收敛到局部最优”,很可能是一种想象,实际情况是,我们可能从来没有找到过“局部最优”,更别说全局最优了。

    很多人都有一种看法,就是“局部最优是神经网络优化的主要难点”。这来源于一维优化问题的直观想象。在单变量的情形下,优化问题最直观的困难就是有很多局部极值,如

    人们直观的想象,高维的时候这样的局部极值会更多,指数级的增加,于是优化到全局最优就更难了。然而单变量到多变量一个重要差异是,单变量的时候,Hessian矩阵只有一个特征值,于是无论这个特征值的符号正负,一个临界点都是局部极值。但是在多变量的时候,Hessian有多个不同的特征值,这时候各个特征值就可能会有更复杂的分布,如有正有负的不定型和有多个退化特征值(零特征值)的半定型

    在后两种情况下,是很难找到局部极值的,更别说全局最优了。

    前面很多回答说了,现在看来神经网络的训练的困难主要是鞍点的问题。在实际中,我们很可能也从来没有真的遇到过局部极值。Bengio组这篇文章Eigenvalues of the Hessian in Deep Learning里面的实验研究给出以下的结论:

    • Training stops at a point that has a small gradient. The norm of the gradient is not zero, therefore it does not, technically speaking, converge to a critical point.
    • There are still negative eigenvalues even when they are small in magnitude.

    另一方面,一个好消息是,即使有局部极值,具有较差的loss的局部极值的吸引域也是很小的Towards Understanding Generalization of Deep Learning: Perspective of Loss Landscapes。

    For the landscape of loss function for deep networks, the volume of basin of attraction of good minima dominates over that of poor minima, which guarantees optimization methods with random initialization to converge to good minima.

    所以,很可能我们实际上是在“什么也没找到”的情况下就停止了训练,然后拿到测试集上试试,“咦,效果还不错”。

    补充说明,这些都是实验研究结果。理论方面,在各种假设下,深度神经网络的Landscape 的鞍点数目指数增加,而具有较差loss的局部极值非常少。

    SGD收敛性的很多结论都是经验性的。在loss function landscape是退化的情况下loss 停滞在某个数值上训练不动的原因,很大程度上不是因为停在某个点不动了,是停在某个区域不动了。over-parameterized的神经网络有大片的平坦区域,这里一阶二阶乃至更高阶都是退化的,甚至有实验说这样的区域时dominant的(虽然我觉得那个结论有点大)。这时候可以说反复迭代也没啥改进,但是这反过来说算法无需太多迭代就能找到这样一个平坦区域,这里loss 和其中的local minima (可能也是退化的)相差不大,是不是真的找到local minima也没那么重要了。

    作者:知乎用户
    https://www.zhihu.com/question/68109802/answer/263714561

    反对@夕小瑶的答案。我虽然(还)不是做机器学习的,但是优化在计算化学中也算是一个中心议题。假如说神经网络的梯度下降法和一般计算数学中的“梯度下降法”一样,并且只用到loss函数 的一阶偏导数 的话,那从原理上就很难出现@夕小瑶提到的那种在 (或者 )方向最大,并且在 (或者 )方向最小的一阶鞍点。为什么呢?因为优化的时候在 方向就是沿着 的负方向前进的啊,除非初始点正巧落到了坐标轴上,否则如何能沿着另外一个方向爬山呢?

    那么,为什么最终的优化结果,又很可能是一个鞍点呢?实际上,不需要更多维空间,一个二维曲面就能演示出来。如下图(来自于Symmetry of second derivatives)所示, 完全可以在两个坐标轴方向都是“下凸”,但是在 方向是“上凸”。不妨假设在 轴及其邻域内 轴及其邻域内 (也就是说山脊并不是那么尖,而是可以很平坦的),那么根据最朴素的梯度下降法,对于初始点在坐标轴附近的系统,最终就收敛于图中这样有四条上山路径和四条下山路径的四岔鞍点(比三条上山/下山路径的“猴鞍点”还复杂一点)。

    很显然,对于一个一般的函数,由于其一阶偏导数只考虑到了 沿坐标轴方向的变化,它根本就不能反映任何一个点沿任何其它方向的变化。考虑到 ,那么根据一阶偏导数来估计鞍点的数目也根本无法进行。如果我们对loss曲面一无所知,那么仅仅对于一个二元函数,收敛到鞍点的概率恐怕也是无穷大。当然了,我们似乎总是怀着良好的信念,认为实际遇到的函数的性质足够良好,并没有那么那么多猴鞍点、四岔鞍点、五岔鞍点……虽然好像没有什么理论上的证明,但至少根据大家对化学势能面的研究,这种信念在大多数情况下好像是有效的。

    作者:looooooop
    https://www.zhihu.com/question/68109802/answer/264008642

    很多回答已经从梯度的角度深入分析了收敛性,在这里我补充一下这个问题和泛化能力的关系,解释一下为什么没有收敛也不妨碍应用。

    tl;dr:首先在实际的训练中,由于SGD以及dropout等regularization方法的使用,
    最后模型基本不可能收敛于某一个点,它只是处在了一个比较平坦的区域。其次,神经网络的神奇之处在于,在这个平坦的区域内随便选一个点(即网络参数)都会具有很好的泛化能力,且这个平坦区域越大,泛化能力越好,从而可以在测试集上取得比较好的结果。这也是神经网络应用广泛的原因。

    1. 最后不会收敛到某一点。sgd和dropout等都相当于是在模型中注入了具有随机性的噪声,所以基本没有可能存在一个点,可以在这些噪声的干扰下得到零梯度。所以最终稳定的模型应该是处在一个区域内,这些噪声的干扰不会让模型脱离这个区域。

    2. 没有收敛并不是坏事。尽管模型最后并没有收敛到某一个点,我们仍将最后的稳定位置称为一个minima,在这里minima指的并不是点,而是一个区域。在这个区域里面,loss surface是基本平坦的,且低于周围的位置,看起来像是一个盆地。在[1]里面,作者指出神经网络的loss surface上会有很多这种minima,使用sgd得到的minima的函数值通常都比较小。这和我们的经验是相符合的:配合各种训练方法,随机初始化的神经网络训练到最后的training loss都会比较小。特别地,[1]里面提到全局最优的参数往往意味着严重过拟合(可以从数据存在噪声的角度理解这个结论)。在[2]以及它引用的一些文献中,我们可以看到,这些小“盆地”的面积和网络泛化能力强相关。通常,面积大的盆地(flat minima)泛化能力好(可以从loss对权重噪声的稳定性上理解)。

    [1] Choromanska, A., Henaff, M., Mathieu, M., Arous, G. B., & LeCun, Y. (2015, February). The loss surfaces of multilayer networks. In Artificial Intelligence and Statistics (pp. 192-204).

    [2] Hochreiter, S., & Schmidhuber, J. (1997). Flat minima. Neural Computation, 9(1), 1-42.

    作者:李珂
    https://www.zhihu.com/question/68109802/answer/261755787

    因为你的直觉是错的。

    你以为你所优化的神经网络参数空间可能会像下图一样陷入local minima:

    图片来源:Deep Learning Specialization by Andrew Ng

    但实际上在高维空间中绝大多数梯度值为0的点不是上图所示的local minima,而是saddle point(我们在将低维空间中的直觉想当然地推广到高维时出现了问题):

    图片来源:Deep Learning Specialization by Andrew Ng

    假设在一个20,000维的参数空间中,如果某个点梯度值为0,那么在每个方向上既可以是凸(convex)函数也可以是凹(concave)函数(如下图所示)。但要想该点成为local minima的话,所有的20,000个方向都必须是凸的,在神经网络构成的巨大的参数空间中,这个概率是十分小的。

    图片来源:Deep Learning Specialization by Andrew Ng

    作者:苏剑林
    https://www.zhihu.com/question/68109802/answer/1533958114

    我很奇怪这两个东西有什么逻辑关系吗?人干活很多时候连局部最优都做不到,难道就不用干了吗?比如你每天上班的路线,我估计也不是一个局部最优解,更不用说全局最优,难道就不用上班了?你等下想要吃的晚餐,也不一定就是最有营养的,难道就不吃了?

    我们从来就没有多少次要求自己得到最优解的行为,何苦强求模型最优解?反过来讲,既然我们的“远远不足最优解”还能让我们好好活着,那就说明模型也未必需要最优解。


    作者:知乎用户
    https://www.zhihu.com/question/68109802/answer/262019967

    SGD被广泛用于训练神经网络的主要原因是,在实际中好用。

    对于机器学习来说,是不是收敛到局部最优其实无所谓,只要拿到的model能generalize就是好model。更极端点的说,其实很多时候收不收敛都无所谓,这个在深度学习里不少吧。

    至于说一定要研究收敛到什么样的解,都是从理论的角度出发。所谓追求“deep thinking”嘛。不过很多时候deep thinking被狭隘的理解为deep math,完全是本末倒置了。

    很多时候,所谓“理论上的局限性”只是做理论的人的局限性。因为没做明白嘛!


    作者:Ginger
    https://www.zhihu.com/question/68109802/answer/1679865421

    这种优化问题其实大都是为了解释而解释,强行解释。其实在数据在高维空间形态各异,每种优化方法也可能在某些数据流型上适用。而对于它们之间的比较,不同的实验数据甚至模型都会让优化算法的高低排位重新洗牌。这也是为什么到目前为止并没有一个有效的确定的优化算法。

    就像中医一样,靠经验就行。根据经验风险最小化,adam最好,而且没必要指定lr。

    虽然有极少情况下它确实不收敛,在扫完一两个epoch之后,acc等指标雪崩。

    作者:张翰韬
    https://www.zhihu.com/question/68109802/answer/262985356

    梯度下降通常是收敛到saddle points而不是收敛到局部最优,尤其是高维问题里面。目前,还没有很好的方法来解决神经网络里面的优化问题。实际上这一类问题通常不是凸优化问题,它不像凸优化问题性质那么好,但是目前基本都是借鉴凸优化的解决办法,比如梯度下降。另一方面,其实我们很多时候也不是说一定要最优解甚至全局最优解,够用就行了。

    梯度下降简单,易于实现,如果考虑二阶优化的话,比如L-BFGS,那么通常需要你的硬件能够支持full batch update。现在人们针对梯度下降又设计了很多改进方法,来解决优化过程中被困在saddle points,或者local minima 的问题。主要有两类改进:一类是SGD + Momentum,可以理解为下坡的时候增加一点前面步骤留下来的惯性;另一类是AdaGrad,可以理解为在学习率上面动手脚, 使得每一个参数更新都会有自己与众不同的学习率。如果对AdaGrad里面grad_squared (dx^2)那一项加入Momentum那就是RMSProp,再给grad (dx)加上Momentum就是Adam,这些就是现在最常用的梯度下降法的延伸,确实能在一定程度上解决大部分问题。

    作者:知乎用户
    https://www.zhihu.com/question/68109802/answer/260067336

    其实是分情况的,对于人类自己定义的知识集图谱内,存在比SGD更好的办法,AlphaZero就是一个例子,因为围棋的规则还有信息对于机器是完全透明公开的,所以它可以在短短时间内就超越前代经过人工训练的版本,甚至发现许多新的套路和招式(避开了陷入Local minimum的坑)。

    然而在现实世界中,人们对于许多问题的信息并不是百分百清楚了解的,因为这些隐藏的未知信息,影响了我们的判断,也成为了让机器找到全局最优解的障碍,这种情况下,我们只能接受不完美,努力获取更多的信息.

    个人认为,机器学习其实就是在大海捞针,以前我们人力有限,现在因为我们拥有近乎无限的计算力,所以可以,不同的区别在于,我们所处的海(问题领域)不尽相同,对于那些我们已知边界的海洋,我们是可以找到那一根针(最优解)的,而对于有的海洋,如同浩瀚宇宙一般无边无际的时候(受限于时间空间),我们所能做的就是找到一根最像针的物件作为我们的解。

    SGD应用的广泛归根究底其实是我们还需要更努力的去探索这个世界


    作者:KizW
    https://www.zhihu.com/question/68109802/answer/262085594

    先不管他是能不能局部最优,至少当初gd从凸优化过来,人家确实想找个最优解。而且mit那个deep learning那个书前面讲了好多怎么跳出saddle points,怎么跳出局部最优的吗。

    就算你找到了个算法,能达到全局最优,但是你实际问题上不好用,因为问题本身有随机性,模型本身存在误差,另外你那个数据集不能包含整个问题空间的所有情况。就像比如一个人男生找女朋友,结果次次被骗,那么他就学习到了女生都是骗子,所以实际训练出来的网络可能是个喷子。好多算法模型确实是凸的,所以能找到全局最优解,但实际上工程师们不喜欢全局最优解,所以会搞个正则化项在模型里。

    从数学的角度来讲,数值优化确实想找到最优解,但是大家发现挺难找的。但从机器学习的角度来讲,我们一开始就不想要最优解,当然要是我们有无限的数据量,无限的计算能力,那么我们肯定也想要最优解啊。类似的情况是机器人定位,现在传感器和控制器都有误差,最早用determinate的模型效果很差,现在在模型里人为引入误差,反而定位定的很准。反正做计算机别和做数学的混到一起了,管你数学上的性质有多好,解决不了问题都白扯。

    ☆ END ☆

    如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。

    扫描二维码添加小编↓

    展开全文
  • 针对标准粒子群算法(PSO)全局与局部搜索能力相互制约的缺点,提出一种带有独立局部搜索机制、多区域搜索策略和渐近收敛能力的新型PSO算法(ILS-PSO).设计新的简化参数的全局搜索公式、非劣解邻域局部搜索公式和当前最...
  • 针对狼群算法求解复杂函数时容易陷入局部极值、计算耗费大、学习能力差等局限性, 提出一种狼群智能算法. 首先, 通过构建智能猎杀行为提高算法自适应学习能力, 降低算法的计算耗费, 构建双高斯函数更新法以增强算法...
  • 给出一种新的,具有较大收敛域的 Newton迭代法和 Newton下山法收敛性定理,以及误差估计式.它不要求函数 f( x)存在二阶导数,只需要函数 f( x)存在一阶导数,便可根据文中定理对其收敛性进行判别,弥补了以往相关定理的...
  • 局部搜索算法总结

    千次阅读 2021-05-26 06:10:43
    通常考察一个算法的性能通常用局部搜索能力和全局收敛能力这两个指标。局部搜索是指能够无穷接近最优解的能力,而全局收敛能力是指找到全局最优解所在大致位置的能力。局部搜索能力和全局搜索能力,缺一不可。向最优...
  • 提出一种符合实际地震动传播特点的多点地震动合成方法。...采用本文方法进行了基于美国Northridge地震和我国集集地震的多点地震动模拟研究,结果表明方法具有良好的局部收敛性,可用于大尺度结构的多点输入分析。
  • 牛顿迭代法收敛性的一点讨论

    千次阅读 2021-10-17 12:18:14
    牛顿迭代法的收敛性分为局部收敛性与全局收敛性。 **局部收敛性:**若α是f(x)=0的一个单根, f(α)=0,f’(α)≠0,ϕ’(α)=0, ϕ’’(α)=f’’(α)/f’(α), 则在根α附近Newton 法是局部收敛的, 并且是二阶收敛的...
  • 非线性方程的迭代解法及其收敛

    千次阅读 2020-12-24 20:20:34
    Newton法的收敛性与初始值的选取有很大关系(在根附近讨论,局部收敛性)。初始值选择不当,会导致发散,下面介绍一种大范围内收敛的方法。 一种大范围收敛的Newton型方法 为了防止迭代发散,我们符加一个条件:   ...
  • 迭代法的收敛条件及收敛

    万次阅读 多人点赞 2021-09-22 15:25:49
    迭代法的收敛条件有三个定理,其中定理1、定理2讲的都是全局性收敛,定理3讲的是局部收敛。 迭代法的收敛阶: 定义: 定理4: 例题:
  • 一般迭代法(一)| 原理公式 + 迭代法的收敛

    万次阅读 多人点赞 2020-05-20 00:09:02
    定理2:设 φ(x)\varphi(x)φ(x)在 x=φ(x)x=\varphi(x)x=φ(x)根 x∗x^*x∗的邻域内有连续的一阶导数,且 ∣φ′(x∗)∣|\varphi'(x^*)|∣φ′(x∗)∣则迭代过程具有局部收敛性。 注意:用迭代法求方程的根,选用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,131
精华内容 22,852
关键字:

局部收敛

友情链接: contoh_OTP.zip