首页 > 其他分享 >共轭梯度法

共轭梯度法

时间:2023-12-16 17:12:05浏览次数:23  
标签:迭代 梯度 beta 搜索 方向 共轭

共轭梯度法

  • 适应于求解非线性优化问题
  • 线性共轭梯度法和非线性共轭梯度法

1 共轭方向

梯度下降法和共轭方向法优过程的区别:

v2-b5e388a93e4197409403ff582eb33111_720w

可以发现:

  • 共轭方向法分别按两个轴的方向搜索(逐维搜索)
  • 每次搜索只更新迭代点的一个维度
  • 保证每次迭代的那个维度达最优
  • 共轭方向法的两个搜索方向正交(特殊情况

从正交推广到共轭

v2-ce6d0fa9e0db6475ae0cec6420672f61_720w

​ 对比之前空间的 “椭圆” 可以直观的发现这里的 “椭圆” 倾斜了,如果按原来正方向的形式(特殊情况)选取搜索方向显然违背了共轭方向法的本意。

​ 如果将原标准空间的 “椭圆” 的倾斜变换,视为其在空间的线性变换,同时让原来的搜索方向(正交)参与到这种空间的线性变换中,得到的结果可以如下图表示。

v2-25a5b1224eafea8a2ff1fc4f480c67fd_720w

​ 可以从上图发现原空间正交的两个搜索方向经过空间的线性变换后不再正交,但是和 “椭圆” (的轴)贴合的还是很好。如果将这种空间的线性变换描述为 \(Q\),那么可以说原度量空间 \(I\) 在线性变换后变成了 \(Q\),同时搜索方向 “沿轴搜索” 的性质依然存在。由于这种变换非仿射变换,所以原空间的 0 在 \(Q\) 度量的意义下还是 0 。
​ 这时假设连个搜索方向为 \(d_1\) 和 \(d_2\),在原空间中 \(d_1\) 和 \(d_2\) 正交,即 \(d_1^T d_2 = 0\) 。经线性变换 \(Q\) 后 \(d_1^T d_2 = 0\) 变成 \(d_1^T Q d_2 = 0\) (这实际上就是共轭的表达式)

共轭的定义

设 \(Q\) 是正定矩阵,若对于两个不同的非零向量 \(d_i\) 和 \(d_j\) 满足:

\[d_i^T Q d_j = 0 \]

则称 \(d_i\) 和 \(d_j\) 是共轭方向

共轭向量组

  • 一组方向 \(d_0, d_1, \dots, d_{n-1}\) 中的任意两个向量 \(d_i\) 和 \(d_j\) 满足 \(d_i^T Q d_j = 0\)

  • 共轭向量组中的向量一定线性无关

  • 若 \(Q\) 是正定矩阵,则存在唯一的对称矩阵 \(A\) 使 \(Q = AA\),矩阵 \(A\) 也被称为矩阵 \(Q\) 的平方根

二次型的共轭方向

需要的共轭向量组就是目标二次型的 Hessian 矩阵的平方根逆矩阵的列向量组。

2 共轭方向法框架

① 给定迭代初值 \(x_0\) 和阈值 \(\epsilon > 0\),令 \(k = 0\)

② 计算 \(g_0 = \nabla f(x_0)\) 和初始下降方向,满足 \(d_0^Tg_0 < 0\)

Do while( 不满足 \(||g_k|| < \epsilon\) )

​ a. 线搜索确定步长:\(\alpha_k = \arg\min_\alpha f(x_k + \alpha d_k)\)

​ b. 更新迭代点:\(x_{k+1} = x_k + \alpha_k d_k\)

​ c. 采用某种共轭方法计算得到 \(d_{k+1}\),使得 \(d_{k+1}^T G d_j = 0, j = 0,1,\dots,k\)

​ d. 令 \(k = k + 1\)

end while

3 子空间扩展定理

  • 第 \(k\) 次迭代时的方向与前面 \(k-1\) 次迭代得到的所有搜索方向正交
  • 第 \(k\) 次得到的搜索方向正交于前面 \(k-1\) 次搜索方向张成的线性空间
  • 每次迭代得到 \(d_k\) ,原子空间的维度便得到扩展,即 \(k-1\) 维的线性空间变成了 \(k\) 维
  • \(G\) 是正定矩阵,\(d_i\) 和 \(d_j\) 关于 \(G\) 共轭,对于二次型 \(f(x) = \dfrac{1}{2} x^TGx - b^Tx\) :
    • \(g_k = G x_k + b\)
    • \(g_{k+1}^T d_j = 0, \;\; j = 0,1,\dots,k\)
    • \(g_{k+1} - g_k = G(x_{k+1} - x_k) = \alpha_k G d_k\)

4 共轭梯度法

  • 共轭梯度法是共轭方向法的一个方法
  • 搜索方向的构造要求
    • 所有的搜索方向相互共轭
    • 搜索方向 \(d_k\) 仅仅是 \(-g_k\) 和 \(d_{k-1}\) 的线性组合

建立 \(d_k\) 和 \(d_{k-1}\) 的关系(共轭方向迭代公式):

\[d_k = -g_k + \beta_{k-1} d_{k-1} \]

  • \(g_k\) 是目标函数的梯度 \(\nabla f(x_{k})\)
  • 注意上式无法得到第一个共轭方向,一般用 GD 获取,即梯度的反方向

确定 \(\beta_{k-1}\) 的算式

\(\beta_{k-1}\) 的确定可以使用共轭的性质,在上式两边同乘 \(d_{k-1}^T Q\),根据 \(d_{k-1}^T Q d_k = 0\) :

\[\beta_{k-1}^{HS} = \frac{g_k^T G d_{k-1}}{d_{k-1}^T G d_{k-1}} \quad \text{(Hestenes-Stiefel 公式)} \]

\(\beta_{k-1}^{HS}\) 算式优化:由于 Hestenes-Stiefel 公式中有矩阵,因此可以进行优化让矩阵消失,目的是:

  • 可以使共轭梯度法能适用于非二次型函数(形式上)
  • 矩阵运算变成向量运算可以降低计算机计算的空间复杂度和时间复杂度

根据 \(g_{k+1} - g_k = G(x_{k+1} - x_k) = \alpha_k G d_k\) ,得:

\[\beta_{k-1}^{CW} = \frac{g_k^T(g_k-g_{k-1})}{d_{k-1}^T (g_k - g_{k-1})} \quad \text{(Crowder-Wolfe 公式)} \]

\(\beta_{k-1}^{CW}\) 算式优化:让式中只出现梯度信息(常用的有 FRPRP

根据 \(g_{k+1}^T d_j = 0, \;\; j = 0,1,\dots,k\) ,有 \(g_{k+1} g_k = 0\) ,得:

\[\beta_{k-1}^{FR} = \frac{g_k^T g_k}{g_{k-1}^T g_{k-1}} \quad \text{(Fletcher-Reeves 公式)} \]

共轭方向迭代公式(FR):

\[d_k = -g_k + \beta_{k-1} ^{FR} d_{k-1} \]

计算步长 \(\alpha_k\):

根据之前推导 \(\beta_{k-1}\) 的结论可以得出:

\[\alpha_k = \frac{g_k^T g_k}{d_k^T G d_k} \]

5 共轭梯度法算法(CG-FR)

  • 适用于线性和非线性函数

① 给定迭代初始点 \(x_0\),迭代终止阈值 \(\epsilon\)

② 令初始梯度 \(g_0 = Gx_0 - b\),初始搜索方向 \(d_0 = -g_0\),迭代次数 \(k = 0\)

Do while( \(||g_k|| > \epsilon\) ) {

​ a. 计算步长:\(\alpha_k = \dfrac{g_k^T g_k}{d_k^T G d_k}\)

​ b. 更新迭代点:\(x_{k+1} = x_k + \alpha_k d_k\)

​ c. 计算新的梯度:\(g_{k+1} = g_k + \alpha_k G d_k\)

​ d. 计算组合系数:\(\beta_{k+1}^{FR} = \dfrac{g_{k+1}^T g_{k+1}}{g_k^T g_k}\)

​ e. 计算新的搜索方向:\(d_{k+1} = -g_{k+1} + \beta_{k+1}^{FR} d_k\)

​ f. 令 \(k = k + 1\) }

end while

5 线性共轭梯度法

  • 一种求解具有正定系数矩阵的线性系统的迭代方法
  • 是高斯消去法的一种替代方法,适合解决大型问题
  • 性能取决于系数矩阵特征值的分布
    • 线性系统进行预处理可以使这种分布更加有利
    • 线性系统进行预处理可以提高方法的收敛性

6 非线性共轭梯度法

  • 有多种变体
  • 算法的主要特点
    • 不需要矩阵存储
    • 比最速下降法更快

参考 :https://zhuanlan.zhihu.com/p/338838078

标签:迭代,梯度,beta,搜索,方向,共轭
From: https://www.cnblogs.com/J-Chow/p/17905048.html

相关文章

  • 梯度下降法
    1梯度下降法\(\qquad\)梯度下降法又称最速下降法,是最优化方法中最基本的一种方法。所有的无约束最优化问题都是在求解如下的无约束优化问题:$$\min_{x\inR^n}f(x)$$将初始点\(x_0\)逐步迭代到最优解所在的点\(x^*\),那么考虑搜索点迭代过程:$$x_{t+1}=x_t+\gamma_td_t$$......
  • [最优化方法笔记] 梯度下降法
    1.梯度下降法无约束最优化问题一般可以概括为:\[\min_{x\in\mathbb{R}^n}f(x)\]通过不断迭代到达最优点\(x^*\),迭代过程为:\[x^{k+1}=x^k+\alpha_kd^k\]其中\(d^k\)为当前的搜索方向,\(\alpha_k\)为当前沿着搜索方向的步长。我们需要寻找可以不断使得\(f(x^{......
  • 机器学习-线性回归-小批量-梯度下降法-04
    1.随机梯度下降法梯度计算的时候随机抽取一条importnumpyasnpX=2*np.random.rand(100,1)y=4+3*X+np.random.randn(100,1)X_b=np.c_[np.ones((100,1)),X]n_epochs=10000learn_rate=0.001m=100theta=np.random.randn(2,1)forepoch......
  • 机器学习-线性回归-梯度下降法-03
    1.梯度下降法梯度:是一个theta与一条样本x组成的映射公式可以看出梯度的计算量主要来自于左边部分所有样本参与--批量梯度下降法随机抽取一条样本参与--随机梯度下降法一小部分样本参与--小批量梯度下降法2.epoch与batchepoch:一次迭代wt-->wt+1......
  • 12-梯度计算方法
    1.图像梯度-Sobel算子流程: 2.计算绝对值dx为1水平方向: 3.计算绝对值dy为1竖直方向: 4.求出x和y以后,再进行求和: 5.不建议直接设置dx为1,dy为1会造成图像不饱和: 6.推荐使用,dx和dy分别计算进行梯度计算处理: 7.不推荐使用,直接将dx(水平方向)和dy(竖直方向)同时设置为1......
  • 【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误
    【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误报错详情错误产生背景原理解决方案RuntimeError:oneofthevariablesneededforgradientcomputationhasbeenmodifiedbyaninplaceoperation报错详情  模型在backward时,发现如下报错......
  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • Matlab中gradient函数 梯度计算原理
    ​Gradient(F)函数求的是数值上的梯度,假设F为矩阵.Gradient算法>>x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]x=6934054125677807891......
  • 解锁机器学习-梯度下降:从技术到实战的全面指南
    本文全面深入地探讨了梯度下降及其变体——批量梯度下降、随机梯度下降和小批量梯度下降的原理和应用。通过数学表达式和基于PyTorch的代码示例,本文旨在为读者提供一种直观且实用的视角,以理解这些优化算法的工作原理和应用场景。关注TechLead,分享AI全维度知识。作者拥有10+年互......
  • 解锁机器学习-梯度下降:从技术到实战的全面指南
    本文全面深入地探讨了梯度下降及其变体——批量梯度下降、随机梯度下降和小批量梯度下降的原理和应用。通过数学表达式和基于PyTorch的代码示例,本文旨在为读者提供一种直观且实用的视角,以理解这些优化算法的工作原理和应用场景。关注TechLead,分享AI全维度知识。作者拥有10+年......