梯度下降法、最速下降法

article/2025/9/14 4:33:15

梯度下降法

最优化问题是求解函数极值的问题,包括极大值和极小值。相信所有的读者对这个问题都不陌生,在初中时我们就学会了求解二次函数的极值(抛物线的顶点),高中时学习了幂函数,指数函数,对数函数,三角函数,反三角函数等各种类型的函数,求函数极值的题更是频频出现。这些方法都采用了各种各样的技巧,没有一个统一的方案。

真正的飞跃发生在大学时,微积分为我们求函数的极值提供了一个统一的思路:找函数的导数等于0的点,因为在极值点处,导数必定为0。这样,只要函数的可导的,我们就可以用这个万能的方法解决问题,幸运的是,在实际应用中我们遇到的函数基本上都是可导的。

在机器学习之类的实际应用中,我们一般将最优化问题统一表述为求解函数的极小值问题,即:在这里插入图片描述
其中x称为优化变量,f称为目标函数。极大值问题可以转换成极小值问题来求解,只需要将目标函数加上负号即可:
在这里插入图片描述
有些时候会对优化变量x有约束,包括等式约束和不等式约束,它们定义了优化变量的可行域,即满足约束条件的点构成的集合。在这里我们先不考虑带约束条件的问题。

一个优化问题的全局极小值 X ∗ X^* X是指对于可行域里所有的x,有:
在这里插入图片描述
即全局极小值点处的函数值不大于任意一点处的函数值。局部极小值 X ∗ X^* X定义为存在一个 δ \delta δ邻域,对于在邻域内:
在这里插入图片描述
并且在可行域内的所有x,有:
在这里插入图片描述
即局部极小值点处的函数值比一个局部返回内所有点的函数值都小。在这里,我们的目标是找到全局极小值。不幸的是,有些函数可能有多个局部极小值点,因此即使找到了导数等于0的所有点,还需要比较这些点处的函数值。

导数与梯度

由于实际应用中一般都是多元函数,因此我们跳过一元函数,直接介绍多元函数的情况。梯度是导数对多元函数的推广,它是多元函数对各个自变量偏导数形成的向量。多元函数的梯度定义为:
在这里插入图片描述

「正定矩阵」和「半正定矩阵」

1 基本的定义

正定和半正定这两个词的英文分别是positive definite和positive semi-definite,其中,definite是一个形容词,表示“明确的、确定的”等意思。
初学线性代数的读者可能会被这两个词“唬住”,但正定矩阵和半正定矩阵的定义实际上是很简单的 (不考虑复数构成的矩阵):

【定义1】给定一个大小为 n × n n\times n n×n的实对称矩阵 A A A ,若对于任意长度为 n n n的非零向量 x x x,有 x T A x > 0 x^TAx>0 xTAx>0恒成立,则矩阵 A A A是一个正定矩阵。

在这里插入图片描述

【定义2】给定一个大小为 [公式] 的实对称矩阵 n × n n\times n n×n,若对于任意长度为 A A A 的向量 x x x,有 [公式] 恒成立,则矩阵 x T A x ≥ 0 x^TAx \geq 0 xTAx0是一个半正定矩阵。

根据正定矩阵和半正定矩阵的定义,我们也会发现:半正定矩阵包括了正定矩阵,与非负实数 (non-negative real number)和正实数 (positive real number)之间的关系很像。

从二次函数到正定/半正定矩阵在这里插入图片描述

正定矩阵和半正定矩阵的直观解释

在这里插入图片描述

为什么协方差矩阵要是半正定的?

在这里插入图片描述

最速下降法

1 解决的问题

最速梯度下降法解决的问题是无约束优化问题,而所谓的无约束优化问题就是对目标函数的求解,没有任何的约束限制的优化问题,比如求下方最小值: m i n f ( x ) minf(x) minf(x)
其中的函数 f : R n → R f: R^n\to R f:RnR.
求解这类的问题可以分为两大类:一个是最优条件法和迭代法。
最优条件法是是指当函数存在解析形式,能够通过最优性条件求解出显式最优解。对于无约束最优化问题,如果f(x)在最优点x附近可微,那么x是局部极小点的必要条件为: [公式] 我们常常就是通过这个必要条件去求取可能的极小值点,再验证这些点是否真的是极小值点。当上式方程可以求解的时候,无约束最优化问题基本就解决了。
实际中,这个方程往往难以求解。这就引出了第二大类方法:迭代法。

2 最速梯度下降法

在这里插入图片描述

3 最速梯度下降法直观理解

第一步

迭代法的初始点选择。在这里插入图片描述

第二步

在这里插入图片描述
在这里插入图片描述

第三步在这里插入图片描述

这步在是在选取迭代方向,也就是从当前点迭代的方向。这里选取当前点的梯度负方向,为什么选择这个方向,是因为梯度的负方向是局部下降最快的方向,这里不详细证明,可以参考我以前的一个回答:为什么梯度反方向是函数值局部下降最快的方向?https://zhuanlan.zhihu.com/p/24913912

第四步

在这里插入图片描述
第四步也是非常重要的,因为在第三步我们虽然确定了迭代方向,并且知道这个方向是局部函数值下降最快的方向,但是还没有确定走的步长,如果选取的步长不合适,也是非常不可取的,下面会给出一个例子图,那么第四步的作用就是在确定迭代方向的前提上,确定在该方向上使得函数值最小的迭代步长。
下面给出迭代步长过大过小都不好的例子图:
在这里插入图片描述
从上图可以看出,选择一个合适的步长是非常最重要的,这直接决定我们的收敛速度。

四 最速梯度下降法实例

在这里插入图片描述

五 最速下降法的缺点

需要指出的是,某点的负梯度方向,通常只是在该点附近才具有这种最速下降的性质。
在一般情况下,当用最速下降法寻找极小点时,其搜索路径呈直角锯齿状(如下图),在开头 几步,目标函数下降较快;但在接近极小点时,收敛速度长久不理想了。特别适当目标函数的等值 线为比较扁平的椭圆时,收敛就更慢了。
在这里插入图片描述

因此,在实用中常用最速下降法和其他方法联合应用,在前期使用最速下降法,而在接近极小值点时,可改用收敛较快的其他方法。

六 最速下降法与梯度下降法的区别

准确来说,它们并不是完全等价。
对于梯度下降法,我们需要预先设定步长α。
在这里插入图片描述
https://zhuanlan.zhihu.com/p/32709034


http://chatgpt.dhexx.cn/article/y2CXmuN7.shtml

相关文章

matlab最速下降法ppt,最速下降法PPT及MATLAB程序.pptx

最速下降法PPT及MATLAB程序.pptx 最速下降法,最速下降法,也称为梯度下降法,是由法国著名数学家Cauchy在1847年提出的。 最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是…

最速下降法python_算法最优化之最速下降法

适应范围:无约束非线性规划问题 例子: 初始化 , 第一次迭代: 从 出发,沿方向 进行一维搜索,求步长 ,即 在直线的极小点 第二次迭代: 从 出发,沿方向 进行一维搜索,求步长 即 解…

最速梯度下降法及matlab实践,最速下降法以及代码实现

由于最近复习最优化考试,为了防止考完即忘,这里做个笔记用于备忘,本文讲解一下无约束优化问题中的最速下降法。 一、解决的问题 最速梯度下降法解决的问题是无约束优化问题,而所谓的无约束优化问题就是对目标函数的求解,没有任何的约束限制的优化问题,比如求下方最小值:…

运筹学(1)-最速下降法

运筹学(1) 多维无约束优化算法——梯度法之最速下降法 最近学习运筹学开始学习一些优化的算法,之后的一系列博客我会分享一些我学到的运筹学方法。这次我总结了我学习的最速下降法。 1. 原理 最速下降法是一个优化算法,用于求…

SSM 三大框架

文章目录 一、SpringMVC- 1.SpringMVC(Spring Model View Controller) 框架介绍- - 1.概述- - 2.MVC模型- - 3.工作原理 - 2.创建Module- 3.入门案例:展示汽车数据需求创建Maven module创建RunApp.javaCar.javaCarController.java测试 - 4.处理请求参数- - 1.概述- …

SSH三大框架整合

文章目录 一. SSH 简单的回顾1. Hibernate框架2. Struts2框架3. Spring框架 二. ssh整合思想三. 整合struts2和spring框架(把struts2的action交给spring管理)1. 导入相关jar包2. 创建action3. 创建struts2核心配置文件,配置action(1). 位置在…

三大框架的基础知识

三大框架的基础知识 1,hibernate的工作原理及为什么要用? (1)通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件; (2)由 hibernate.cfg.xml读取并解析映射信息&#xff1b…

三大前端框架

互联网发展速度是非常快的,程序员用的前端框架也在不断的迭代和变化,以前大家常用的是JQuery、Bootstrap框架, 现在形成React、Vue、Angular三大主流框架,这三个框架各有各的优势,而且较为成熟 01、React React框架是起…

前端三大主流框架的区别(三)

前面两篇已经做了细致的分析,这一篇就总结总结三大主流框架吧 1.angular 1.1. 简介: angular是最早出现的框架, angularjs是通过directive(指令)去封装组件,react和vue是通过component。 1.2. 优点: 1、…

三大框架-Spring

一 .概述 spring框架是以一个分层架构,有七个定义良好的模块组成,Spring模块构建在核心容器之上,核心容器定义了创建,配置和管理bean方式: 1.Spring Core:核心容器 ,提供Spring的基本功能. 2.SPring Contest:Spring上下文,是一个配置文件 3.Spring AOP : Spring 中面向切面…

JAVA的三大框架是什么?

Java自1995年发布以来,凭借着其跨平台、面向对象、泛型编程的特性发展至今可以说无Java不大厂。目前国内所有的大厂或多或少都在使用Java进行后端服务开发。 一、Java开发的三大框架 在14年以前,行业内用得最多的Java三大框架是Struts、Spring和Hiberna…

SSM三大框架Spring

一、三大框架基本结构 1.为什么需要框架 说明: 如果生产环境下的项目,都是从头(从底层写起)开发,难度太大了,并且开发的效率极其低下. 所以为了让项目快速的上线部署. 将某些特定的功能.进行了高级的封装. 那么我们如果需要使用封装后的API.,则必须按照人家的要求编码 2.框架…

外键的设置

关键词:外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql 设置外键的目的:保证数据的一致性! 一、外键的使用条件: ① 两个表必须是InnoDB表,MyISAM表暂时不支持外键 #查看表类型SHOW TABLE STATUS#查询结果的Engine字…

外键(FOREIGN KEY)

引子:把所有数据都存放于一张表的弊端 1、表的组织结构复杂不清晰 2、浪费空间 3、扩展性极差 为了解决上述的问题,就需要用多张表来存放数据。 表与表的记录之间存在着三种关系:一对多、多对多、一对一的关系。 处理表之间关系问题就会…

什么是外键? 为什么需要外键?怎么使用外键?

首先我们先思考一个问题: 如何将京东"fuliuqingfeng"的用户信息及其多个邮寄商品地址保存到数据库中? 我们第一步会这样操作实现: create table user_info(id char(36) primary key,user_name varchar(30) not null,password varchar(30) …

MySQL外键(详解)

MySQL外键(详解) 什么是外键:    外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值&…

C/C++unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件…

Linux下unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件系…

Universal link的坑

当你觉得Universal link所有配置都没问题&#xff0c;但是通过浏览器打开Universal Link没有命中的时候看下这里 看了很多篇文章对比了Universal Link配置和流程之后没问题&#xff0c;浏览器打开还是不生效&#xff0c;最终在最关键的配置apple-app-site-association文件破案了…

unlink 和 remove 的区别

Linux下开发的时候,会经常使用unlink来删除文件的,而用C的时候,经常用remove删除文件. 这两者的去区别通过man手册发现&#xff1a;  当remove() 中的pahtname指定为目录时,相当于调用rmdir 删除目录,当remove() 中的pathname指定问文件时,相当于调用unlink 删除文件链接 所以…