最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他

最速下降法代码 最速下降法是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题。最速下降法源代码,可用于数值分析及最优化计算, 立即下载

转载须注明出处:http://www.codelast.com/

 

在最优化的领域中,这“法”那“法”无穷多,而且还“长得像”——名字相似的多,有时让人觉得很迷惑。

在自变量为一维的情况下,也就是自变量可以视为一个标量,此时,一个实数就可以代表它了,这个时候,如果要改变自变量的值,则其要么减小,要么增加,也就是“非左即右“,所以,说到“自变量在某个方向上移动”这个概念的时候,它并不是十分明显;而在自变量为n(n≥2)维的情况下,这个概念就有用了起来:假设自变量X为3维的,即每一个X是(x1, x2, x3)这样的一个点,其中x1,x2和x3分别是一个实数,即标量。那么,如果要改变X,即将一个点移动到另一个点,你怎么移动?可以选择的方法太多了,例如,我们可以令x1,x2不变,仅使x3改变,也可以令x1,x3不变,仅使x2改变,等等。这些做法也就使得我们有了”方向“的概念,因为在3维空间中,一个点移动到另一个点,并不是像一维情况下那样“非左即右”的,而是有“方向”的。在这样的情况下,找到一个合适的”方向“,使得从一个点移动到另一个点的时候,函数值的改变最符合我们预定的要求(例如,函数值要减小到什么程度),就变得十分有必要了。

文章来源:http://www.codelast.com/

前奏已经结束,下面进入正题。

【1】最速下降法(或:梯度法)

加注:我又写了一篇关于最速下降法的文章,更详细,请看这里。

很形象,也许你的脑子里一闪而过的,就是:取可以让目标函数值最快速“下降”的方法?差不多是这么回事。严谨地说:以负梯度方向作为极小化方法的下降方向,这种方法就是最速下降法。

为什么是负梯度方向使目标函数值下降最快?以前我也只是死记硬背,背出来的东西虽然有用,终究还是令人糊涂的。所以有必要写出它”为什么“的理由:

我们正在讨论的是”n维空间中的一个点移动到另一个点之后,目标函数值的改变情况“,因此,先直接写出代表最终的目标函数值的数学表达式:

dest function value taylor series

start point:代表第k个点的自变量(一个向量)。

direction:单位方向(一个向量),即 |d|=1。

step:步长(一个实数)。

gradient:目标函数在Xk这一点的梯度(一个向量)。

higher-order infinitesimal:α的高阶无穷小。

文章来源:http://www.codelast.com/

显然,这个数学表达式是用泰勒公式展开得到的,样子有点难看,所以对比一下自变量为一维的情况下的泰勒展开式

one dimension taylor series

就知道多维的情况下的泰勒展开式是怎么回事了。

在[1]式中,高阶无穷小可以忽略,因此,要使[1]式取到最小值,应使gradient multiplied by direction取到最小——这是两个向量的点积(数量积),何种情况下其值最小呢?来看两向量vector a and b的夹角θ的余弦是如何定义的:

cosθ

假设向量direction与负梯度negative gradient的夹角为θ,我们便可求出点积gradient multiplied by direction的值为:

value of gradient multiplied by direction

可见,θ为0时,上式取得最小值。也就是说,direction取negative gradient时,目标函数值下降得最快,这就是称负梯度方向为“最速下降”方向的由来了。

文章来源:http://www.codelast.com/

最速下降法的收敛性:对一般的目标函数是整体收敛的(所谓整体收敛,是指不会非要在某些点附近的范围内,才会有好的收敛性)。

最速下降法的收敛速度:至少是线性收敛的。

 

【2】牛顿法

上面的最速下降法只用到了梯度信息,即目标函数的一阶导数信息,而牛顿法则用到了二阶导数信息。

在start point点处,对目标函数进行泰勒展开,并只取二阶导数及其之前的几项(更高阶的导数项忽略),得:

taylor seires at Xk

gradient:目标函数在Xk这一点的梯度(一个向量)。

Hesse matrix:目标函数在Xk这一点的Hesse矩阵(二阶导数矩阵),这里假设其是连续的。

由于极小值点必然是驻点,而驻点是一阶导数为0的点,所以,对 r(X) 这个函数来说,要取到极小值,我们应该分析其一阶导数。对X求一阶导数,并令其等于0:

当Gk的逆矩阵存在,也即Gk为非奇异矩阵的时候,将上式两边都左乘Gk的逆矩阵Gk-1,得:

calculate next point

到了这一步,已经很明显了。这个式子表达了下一点的计算方法:Xk在方向d上按步长1(1×d = d)移动到点X。所以我们知道方向d怎么求了:

solve equation to get d

如果你觉得上式有点奇怪:为什么都得到了d的表达式,还要再弄出一个Gkd=-gk?那么我说:因为在实际应用中,d并不是通过Gk-1与gk相乘来计算出的(因为我们并不知道逆矩阵Gk-1是什么),而是通过解方程组Gkd=-gk求出的。这个解方程组的过程,其实也就可能是一个求逆矩阵的过程。关于解此方程组的方法,可以参考这一篇文章。关键时刻,概念清晰很重要。

有人说,那么方程组可能无解呢?没错,方程组可能是奇异的,在这种情况下,就需要用到其他的修正技术,来获取搜索方向了,本文不谈。

文章来源:http://www.codelast.com/

上面关于牛顿法的各种推导可能让你觉得杂乱无章,但实际上它们就是牛顿法的基本步骤:每一步迭代过程中,通过解线性方程组得到搜索方向,然后将自变量移动到下一个点,然后再计算是否符合收敛条件,不符合的话就一直按这个策略(解方程组→得到搜索方向→移动点→检验收敛条件)继续下去。

牛顿法的收敛性:对一般问题都不是整体收敛的(只有当初始点充分接近极小点时,才有很好的收敛性)。

牛顿法的收敛速度:二阶收敛。因此,它比最速下降法要快。

 

【3】共轭方向法

加注:我又写了一篇关于共轭方向法的文章,更详细,请看这里。
上面的方法,前、后两次迭代的方向并没有特别的相关要求,而共轭方向法则有了——它要求新的搜索方向与前面所有的搜索方向是共轭的。由于搜索方向是向量,所以也就是说,这些向量是满足共轭条件的:

conjugate condition

其中,m≠n,dm和dn分别为两个向量(搜索方向),G为对称正定矩阵。

对于“共轭”,我有一个自己“捏造”出来的说法,来帮助你记忆它的含义:看到“共轭”,就想到“共遏”,即“互相遏制”,这不,两个向量中间夹着一个矩阵互相发力,结果谁也占不到便宜——积为0。

共轭方向法也是只利用了目标函数的梯度信息,即一阶导数信息,不用计算Hesse矩阵,使得其计算量比牛顿法小很多。

但是,怎么在每一步迭代的过程中,都得到若干个两两共轭的搜索方向?Powell共轭方向集方法是一个选择,它可以构造出若干个两两共轭的方向。不过,它本身也有一些缺陷:在构造共轭方向的过程中,各方向会逐渐变得线性相关,这就达不到“共轭”的要求了。所以,有很多种对Powell算法进行修正的策略被人们应用到了实际场景中,现在说到Powell方法,应该或多或少都包含了那些修正策略吧(我的感觉)。

特别值得一提的是,在共轭方向法中,新搜索方向的确定,是要满足“下降”条件的,即方向与梯度之积<0:

descent property

是不是意味着目标函数值下降量越大,这个方向就越可取呢?不是。在人们已经发现的修正Powell算法的有效方法中,有一种方法是舍弃目标函数值下降最大的方向——这看似不合理的做法恰恰蕴含了合理的结果:放弃目标函数值下降最大的方向能更好地避免各方向线性相关。关于这一点,这里就不详述了。

一句话总结共轭方向法的过程:选定搜索方向d,使之满足共轭条件以及下降条件,在此搜索方向上通过精确线搜索确定移动的步长,然后将当前点移动到下一点,再重新选定搜索方向,周而复始,直到满足终止条件。

文章来源:http://www.codelast.com/

共轭方向法的收敛性:对二次函数,最多在n步(n为自变量的维数)内就可找到其极小值点。对一般的非二次函数,经适当修正后,也可以达到相同的效果。

共轭方向法的收敛速度:比最速下降法快,比牛顿法慢。

 

【4】共轭梯度法

注意:下面那些长长的推导过程,其实是有部分错误的,当年我认为我弄懂了,其实到了某个推导步骤以后,我就理解错了,只不过我以为我对了,我即将在另一篇文章里写上我认为正确的推导,对不住大家了...
“共轭梯度法”是一种特殊的“共轭方向法”。既然叫共轭梯度法,它与梯度必然是有关系的。共轭方向法与梯度也有关系——共轭方向法利用了目标函数的梯度信息(梯度与方向的积满足“下降”条件)。共轭梯度法与此关系有所区别:用当前点的负梯度方向,与前面的搜索方向进行共轭化,以得到新的搜索方向。

具体来说,这个新的搜索方向是怎么计算出来的呢?推导起来比较麻烦,下面就慢慢道来。

首先,需要说明共轭梯度法的一个理论基础(记为T1):在迭代过程中,我们会从初始点开始,在搜索方向上通过精确线搜索的方法,找到使目标函数值符合要求(例如,min f(X))的步长,然后将点移动到下一点。这样不断进行下去,就会得到很多个点。在N维空间Rn中,在每一个搜索方向上,都有无数个点,它们构成了一个轨迹(或者说一个集合),我们称之为线性流形——拿二维空间(二维平面)作比喻,就好像是一个点在二维平面上的移动形成的轨迹:

two-dimension track

只不过在高维空间中,我们想像不出这个轨迹的样子,不过这没关系,能引申上去就好了。

当目标函数是二次函数时,在这个线性流形中,每一个我们迭代到的点都是极小值点。在某些书中,你可能还会看到一种说法,称此线性流形为N维超平面,也是一个意思,不过概念太多了会让人很晕,尤其是在没有掌握足够的背景的情况下,往往不能判断一个概念与另一个概念是不是同一个意思,这样就导致理解受到影响,因此,在刚开始学习的时候,我觉得努力弄懂一个概念就好了。

这个理论基础在推导“如何获取共轭梯度法的搜索方向”的过程中会用到。

文章来源:http://www.codelast.com/

由于上面的理论基础是在目标函数为二次函数的情况下得到的,因此,在推导共轭梯度法的搜索方向的公式之前,我们先假定目标函数是二次函数:

 

quadratic function(x - multidimensional)

其中G为n阶对称正定矩阵。X为自变量(一个n维向量)。

如果觉得这个X为n维向量的函数形式有点怪的话,那么还是对比一下X为1维(可以视为一个标量)的函数形式,就很清楚了:

quadratic function(x - one dimension)

在下面的推导过程中,如果你遇到看上去很“别扭”的式子,只要按照这样的规则来对比就行了。

由于共轭梯度法就是与梯度相关的方法,因此我们必须要求[2]式的函数的梯度(即一阶导数):

gradient of dest function

现在,假设初始点为X0,我们从X0出发,先推导出前几个搜索方向

避坑指南:Allegro 17.2更新封装时遇到的5个典型问题及解决方案(含Symbol报错处理) 本文深度解析Allegro 17.2封装更新过程中的核心机制与常见陷阱。针对“Update Symbols”功能失效、焊盘不匹配、DRC报错、图形层叠错误等5大典型问题,提供从原理分析到实战解决方案的完整指南,帮助用户实现从“更新失败”到“丝滑替换”的平稳过渡。 阅读详情

相关推荐

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3289

常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法

目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method &amp; Quasi-Newton Methods) 3. 共轭梯度法(Conjugate Gradient) 4. 启发式优化方法  5. 解决约束优化问题——拉格朗日乘数法 0.几个数学概念 1) 梯度(一阶导数) 考虑一座在 (x1, x2...

sunflower_sara的机器学习园地 1万+

深入傅里叶级数与傅里叶变换:从基础到应用

傅里叶分析为我们提供了一种理解信号频率结构的强大工具。从傅里叶级数到傅里叶变换,再到快速傅里叶变换(FFT),其理论与应用紧密结合,对现代科学技术的发展意义非凡。如果你对信号处理、数据分析或工程计算感兴趣,傅里叶分析是必须掌握的基础工具。希望本文能帮助你对傅里叶分析有更深入的理解!如果有问题或想法,欢迎在评论区讨论!

qq_56683019的博客 3526

2月20日 阻尼牛顿法,拟牛顿法(Quasi-Newton Methods)及各种具体实现方法,共轭梯度法(Conjugate Gradient)

阻尼牛顿法 牛顿法与拟牛顿法学习笔记(一)牛顿法 https://blog.youkuaiyun.com/itplus/article/details/21896453 https://zhuanlan.zhihu.com/p/37524275 回忆牛顿法: 拟牛顿法(Quasi-Newton Methods) 参考: https://www.cnblogs.com/shixiangwan/p/753...

AbiUni(YY熊) 1314

Zephyr OS实战指南:从入门到精通物联网开发

本文提供了一份详尽的Zephyr OS实战指南,涵盖从开发环境搭建到物联网应用开发的全过程。文章详细介绍了如何利用Zephyr OS进行线程管理、设备驱动开发、低功耗设计以及蓝牙通信,并通过具体代码示例帮助开发者快速掌握这一专为物联网设备设计的开源实时操作系统,实现从入门到精通的跨越。

weixin_29201933的博客 547

家里摄像头录像存 NAS,空间爆满了怎么办?一招实现设定容量自动清理实现循环存储!

📷 家用摄像头录像久了会撑爆 NAS 吗?别担心,这篇文章教如何实现自动清理录像,释放 NAS 空间,避免爆盘🧹

XiaoqiangClub的博客 1882

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法

关于牛顿-共轭梯度法,笔者认为对其最直接和最根本的认识,这篇帖子写得特别好,可以参考東雲正樹的一文。

qq_43443531的博客 8889

巧妙解决网页弹窗重复出现问题

本文探讨了网页弹窗关闭后刷新重现的问题及解决方案。通过分析原生JavaScript实现的弹窗代码存在的缺陷,提出了使用jQuery改进的方法。关键点包括:利用event.preventDefault()阻止默认行为避免刷新,采用jQuery的hide("slow")方法实现优雅的关闭动画,确保关闭状态持久化。改进后的方案既解决了弹窗重复出现的问题,又提升了用户体验,为网页弹窗交互提供了更优的实现方式。文中提供了完整的HTML、CSS和JavaScript代码示例,便于开发者直接应用。

2501_90323865的博客 182

最速下降法—python实现

最速下降法python实现

m0_64087341的博客 5163

甲基化生物信息学分析及批次效应校正全流程

本文系统阐述了DNA甲基化数据分析中的批次效应问题及解决方案。甲基化数据(β值和M值)对实验批次差异高度敏感,可能导致假阳性结果。文章详细介绍了批次效应检测方法(PCA可视化、BEclear定量评分)和校正流程,包括数据预处理、参数化(ComBat-met)与非参数化(BEclear)校正方法,并提供了完整的R代码实现。重点解决了β值有界分布与统计模型假设冲突的问题,为甲基化研究的可靠性提供技术保障。

huanghm88的专栏 111

【Unity 反向运动学插件】Final IK 一套完整的IK解决方案

Final IK是Unity中一套完整的反向运动学解决方案,提供多种IK算法(CCD、FABRIK等)和功能模块,包括全身IK、VR驱动、武器瞄准、视线跟随等。其核心是通过数学方法计算关节旋转,使末端骨骼精确到达目标位置。系统支持多约束求解、旋转限制、动画烘焙及交互系统,采用模块化设计,兼顾性能与扩展性,适用于动作游戏、VR等需要高质量角色控制的场景,是Unity生态中最成熟的IK工具链之一。

2403_88403568的博客 1007

最速下降法steepest descent详细解释

----------------------先闲聊几句------------------------------------ [1]首次提出了梯度下降法和最速下降法,既然柯西写出来了,所以这两个算法肯定不个一个东西,它们的区别是学习率是否恒定。 [4]提出了GoldStein法则 Wolfe准则以及Goldstein [5][8]给出了具体的代码实现, [6][7]中给出了手算steepest ...

微电子学与固体电子学-俞驰 1万+

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1281

再谈 最速下降法/梯度法/Steepest Descent

转载请注明出处:http://www.codelast.com/ 最速下降法(又称梯度法,或Steepest Descent),是无约束最优化领域中最简单的算法,单独就这种算法来看,属于早就“过时”了的一种算法。但是,它的理念是其他某些算法的组成部分,或者说是在其他某些算法中,也有最速下降法的“影子”。因此,我们还是有必要学习一下的。 我很久以前已经写过一篇关于最速下降法的文章了,但是这里

1576

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最速下降法以及代码实现

由于最近复习最优化考试,为了防止考完即忘,这里做个笔记用于备忘,本文讲解一下无约束优化问题中的最速下降法。 一、解决的问题 最速梯度下降法解决的问题是无约束优化问题,而所谓的无约束优化问题就是对目标函数的求解,没有任何的约束限制的优化问题,比如求下方最小值: 其中的函数. 求解这类的问题可以分为两大类:一个是最优条件法和迭代法。 最优条件法是是指当函数存在解析形式,能够通过最优性条件...

weixin_30763397的博客 5445

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【机器学习详解】解无约束优化问题:梯度下降、牛顿法、拟牛顿法

无约束优化问题是机器学习中最普遍、最简单的优化问题。 x∗=minx f(x),x∈Rnx^*=min_{x}\ f(x),x\in R^n1.梯度下降梯度下降是最简单的迭代优化算法,每一次迭代需求解一次梯度方向。函数的负梯度方向代表使函数值减小最快的方向。它的思想是沿着函数负梯度方向移动逐步逼近函数极小值点。选择适当的初始值x(0)x^{(0)},不断迭代,沿负梯度方法更新xx值,直到收敛。具体

勿在浮砂筑高台 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

最速下降法求特征值matlab程序

最基本的特征值问题分为三类: 1、标准的线性特征值问题: Ax=λx,A∈Cn∗nAx = \lambda x,A \in {\mathbb C^{n*n}} 2、普遍的线性特征值问题: Ax=λBx,A、B∈Cn∗nAx = \lambda B x,A、B \in {\mathbb C^{n*n}} 3、普遍的艾米特正定线性特征值问题: Ax=λBx,A、B∈Cn∗nAx = \lam

LSEC小陆的博客 3989

约束最优化方法 (二) Zoutendijk容许方向法

本文首发于公众微信号-AI研究订阅号,来源东北大学模式识别研究生课程《最优化》个人学习笔记。

小小何先生的学习之旅 3792
上一篇: 在vs2010中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)
下一篇: 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno
shadow67
博客等级 码龄15年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值