梯度下降、牛顿法、拟牛顿法

article/2025/8/26 14:39:40

介绍

在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。

判别式模型中,我们往往需要学习参数,从而使得我们的模型f(x)可以逼近实际的y。如果学习参数,则通常会用到梯度下降、牛顿、拟牛顿学习算法。


参考自网络资源

1.梯度下降

1.1 为何使用梯度作为下降方向?

梯度实际上是函数值变化最快的方向。

比如说,你站在一个山上,梯度所指示的方向是高度变化最快的方向。你沿着这个方向走,能最快的改变(增加或是减小)你所在位置的高度,但是如果你乱走,可能走半天所在位置高度也没有变化多少。也就是说,如果你一直沿着梯度走,你就能最快的到达山的某个顶峰或低谷(偶尔会到鞍点,不过这几乎不可能)。

所以实际上,梯度下降法是用来数值搜索局部极小值或极大值的,它是实际应用中一种非常高效,高速且可靠的方法。

1.2 以逻辑斯蒂回归(LR)为例

  1. 模型参数估计
  2. 梯度下降学习参数
  3. 最终模型

1.3 具体学习过程(python代码示例)

梯度下降是最小化风险函数、损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路。

根据batch_size的不同,可以有大概一下几种形式。

(1)梯度下降伪代码

  • 每个回归参数初始化为1
  • 重复R次
    • 计算整个数据集的梯度
    • 使用alpha × gradient更新回归系数的向量
    • 返回回归系数

示例代码:

def gradAscent(dataMatIn, classLabels):dataMatrix = mat(dataMatIn)             #convert to NumPy matrixlabelMat = mat(classLabels).transpose() #convert to NumPy matrixm,n = shape(dataMatrix)alpha = 0.001maxCycles = 500weights = ones((n,1))for k in range(maxCycles):              #heavy on matrix operationsh = sigmoid(dataMatrix*weights)     #matrix multerror = (labelMat - h)              #vector subtractionweights = weights + alpha * dataMatrix.transpose()* error #matrix multreturn weights

(2)随机梯度下降伪代码:

  • 每个回归参数初始化为1
  • 重复R次
    • 计算每个样本的梯度
    • 使用alpha × gradient更新回归系数的向量
    • 返回回归系数

示例代码:

细心的读者可以看到,其中alpha是变化的,这样可以在一定程度上避免局部最优解。

def stocGradAscent1(dataMatrix, classLabels, numIter=150):m,n = shape(dataMatrix)weights = ones(n)   #initialize to all onesfor j in range(numIter):dataIndex = range(m)for i in range(m):alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constanth = sigmoid(sum(dataMatrix[randIndex]*weights))error = classLabels[randIndex] - hweights = weights + alpha * error * dataMatrix[randIndex]del(dataIndex[randIndex])return weights

(3)自定义batch_size,算法流程与上面基本差不错,累计误差更新参数。梯度下降,就是batch_size = 全部样本量,随机梯度下降就是batch_size = 1。

2.牛顿法

2.1 基本介绍

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f’=0的问题,这样求可以把优化问题看成方程求解问题(f’=0)。

为了求解f’=0的根,把f(x)的泰勒展开,展开到2阶形式:

这个式子是成立的,当且仅当 Δx 无线趋近于0。此时上式等价与:

求解:

得出迭代公式:

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。


二维情形,图片来源自网络

2.2 算法流程

2.3 特性

  1. 牛顿法收敛速度为二阶,对于正定二次函数一步迭代即达最优解。
  2. 牛顿法是局部收敛的,当初始点选择不当时,往往导致不收敛
  3. 牛顿法不是下降算法,当二阶海塞矩阵非正定时,不能保证产生方向是下降方向。
  4. 二阶海塞矩阵必须可逆,否则算法进行困难。
  5. 对函数要求苛刻(二阶连续可微,海塞矩阵可逆),而且运算量大。

2.4 牛顿法的改进

3.拟牛顿法

3.1 特征

  1. 只需用到函数的一阶梯度;(Newton法用到二阶Hesse阵)
  2. 下降算法,故全局收敛;
  3. 不需求矩阵逆;(计算量小)
  4. 一般可达到超线性收敛;(速度快)
  5. 有二次终结性。

3.2 DFP法

x, s, y, H 表示第k 步的量,等表示第k+1步的量。

3.3 BFGS法

若把前面的推导,平行地用在y=Bs公式上,可得到

用此公式求方向时,需用到矩阵求逆或解方程

由于每次只有秩2的变换,这里的计算量仍可以降下来。为了得到H-公式,可对上面求逆(推导得):

BFGS法有拟牛顿法的全部优点,并且在一定条件下可以证明在BFGS法中使用不精确一维搜索有全局收敛性。

参考文献
(1)《统计学习方法》
(2)《机器学习实战》
(3)《运筹学与最优化方法》


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

相关文章

拟牛顿法

  转自:ACdreamer 今天,我来讲一种在机器学习中常用到的优化算法,叫做BFGS算法。BFGS算法被认为是数值效果最好的拟牛顿 法,并且具有全局收敛性和超线性收敛速度。那么接下来将会详细讲解…

牛顿法与拟牛顿法求解比较

拟牛顿法求解非线性方程 开始牛顿迭代法拟牛顿法数值计算比较 开始 最近博主在研究非线性方程组的解法,有很多种方法,这里主要对牛顿迭代与拟牛顿迭代进行阐述与对比,由于水平有限,若有错误还请见谅并指出。 牛顿迭代法 相信许…

牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

原文:http://ihoge.cn/2018/newton1.html 前言: 线性最小二乘问题,我们可以通过理论推导可以得到其解析解,但是对于非线性最小二乘问题,则需要依赖迭代优化的方法,牛顿算法是解决非线性最优的常见算法之一…

牛顿法、梯度下降法与拟牛顿法

牛顿法、梯度下降法与拟牛顿法 0 引言1 关于泰勒展开式1.1 原理1.2 例子 2 牛顿法2.1 x 为一维2.2 x 为多维 3 梯度下降法4 拟牛顿法4.1 拟牛顿条件4.2 DFP 算法4.3 BFGS 算法4.4 L-BFGS 算法 0 引言 机器学习中在求解非线性优化问题时,常用的是梯度下降法和拟牛顿…

牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)

简述 在看伊恩古德费洛的深度学习,4.3节基于梯度的优化方法时提到 仅使用梯度信息的优化算法称为 一阶优化算法 ,如梯度下降。 使用Hessian矩阵的优化算法称为 二阶最优化算法 ,如牛顿法。 牛顿法和拟牛顿法时求解无约束最优化问题的常用方法…

最优化六:牛顿法(牛顿法、拟牛顿法、阻尼牛顿法)

牛顿法将目标函数近似为二阶函数,沿着牛顿方向进行优化(包含了Hession矩阵与负梯度信息)。 阻尼牛顿法在更新参数之前进行了一维搜索确定步长,确保沿着下降的方向优化。 拟牛顿法用常数矩阵近似替代Hession矩阵或Hession矩阵的逆…

quasi-Newton method 拟牛顿法

拟牛顿法是对牛顿法的改进,在看这一块内容以前,我们先来了解一下什么是 牛顿法。 拟牛顿法是求解非线性优化问题最有效的方法之一。 拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hess…

牛顿法与拟牛顿法

牛顿法 求函数的根 牛顿法的最初提出是用来求解方程的根的。我们假设点 x∗ 为函数 f(x) 的根,那么有 f(x∗)0 。现在我们把函数 f(x) 在点 xk 处一阶泰勒展开有: f(x)f(xk)f′(xk)(x−xk) 那么假设点 xk1 为该方程的根,则有 f(xk1)f(xk)f′…

最优化方法总结——梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法

目录 1 最优化方法的结构 2 常用最优化方法对比分析 3 相关计算公式 1 最优化方法的结构 最优化问题的一般形式为: 其中为决策变量,是目标函数,为约束集或可行域。特别地,如果,则最优化问题成为无约束最优化问题。 …

牛顿法与拟牛顿法学习笔记(二)拟牛顿条件

机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题。在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BFGS。为了解这个算法的数学机理&#xff0c…

牛顿法与拟牛顿法学习笔记(一)牛顿法

机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题。在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BFGS。为了解这个算法的数学机理&#xff0c…

最优化学习 拟牛顿法(Quasi-Newton Method)

拟牛顿法(Quasi-Newton Method) 拟牛顿法(Quasi-Newton Method)得到矩阵 B k 1 B_{k1} Bk1​获取 B k 1 B_{k1} Bk1​和 H k 1 H_{k1} Hk1​DFP方法(Davidon-Fletche Powell)BFGS方法(Broyden-Fletcher-Goldfarb-Shannon)Broyd…

牛顿法与拟牛顿法(含代码实现)

1. 牛顿法 牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。 牛顿法的基本思想是使用函数 f ( x ) {\dis…

拟牛顿法(DFP、BFGS、L-BFGS)

拟牛顿法 一、牛顿法 1.1 基本介绍 牛顿法属于利用一阶和二阶导数的无约束目标最优化方法。基本思想是,在每一次迭代中,以牛顿方向为搜索方向进行更新。牛顿法对目标的可导性更严格,要求二阶可导,有Hesse矩阵求逆的计算复杂的缺…

Quasi-Newton拟牛顿法(共轭方向法)

Quasi-Newton拟牛顿法(共轭方向法) 1. Introduction2. 牛顿法2.1 不能保证收敛2.2 Hessian计算复杂3. 共轭方向法3.1 共轭方向3.2 共轭方向上可以收敛到极小3.3 共轭梯度法得到的是Q上的共轭方向3.4 算法效果4. 拟牛顿法4.1 拟牛顿法构造的是Q的共轭方向4.2 确定Hk - 秩1修正…

BFGS算法

今天,我来讲一种在机器学习中常用到的优化算法,叫做BFGS算法。BFGS算法被认为是数值效果最好的拟牛顿 法,并且具有全局收敛性和超线性收敛速度。那么接下来将会详细讲解。 Contents 1. 什么是拟牛顿法 2. 拟牛顿法原理 3. DFP算法原理 4. BF…

拟牛顿法及其matlab实现

目录 一.前言 二.拟牛顿法的基本思想 三.秩1矫正Hk公式 四.算法步骤 五.代码实现 1.秩1矫正算法 2.目标函数 3.目标函数梯度 4.主函数 六.仿真结果与分析 一.前言 上上上篇文章介绍了牛顿法和修正牛顿法。想看的话可以往后翻。牛顿法有二阶的收敛速度,但He…

InnoDB数据库死锁

目录 场景描述问题分析解决方法延伸:数据库死锁数据库死锁例子 正文 回到顶部 场景描述 在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction...)。 回到顶部 问题分析 这个异常并不会…

mysql数据库死锁原因分析

一、死锁模拟复现 1、当前自己电脑的mysql版本8.0.22 2、数据库的隔离级别--可重复读(默认隔离级别) 3、自动提交关闭 4、表结构,age为非唯一索引,对下面整个案例非常重要 5、 1、事务A执行更新操作,更新成功 2、事务…

处理数据库死锁问题

在实际的项目环境中碰到了如下的问题 Microsoft.Data.SqlClient.SqlException (0x80131904): 事务(进程 ID 98)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。 怀疑是因为数据库查询和修改中产生的死锁问题,造成的上述原因…