首页 > 其他分享 >梯度下降法

梯度下降法

时间:2023-12-15 19:45:52浏览次数:23  
标签:frac 迭代 梯度 nabla 下降 varphi partial gamma

1 梯度下降法

\(\qquad\) 梯度下降法又称最速下降法,是最优化方法中最基本的一种方法。所有无约束最优化问题都是在求解如下的无约束优化问题:$$\min_{x \in R^n} f(x)$$

将初始点\(x_0\)逐步迭代到最优解所在的点\(x^*\),那么考虑搜索点迭代过程:$$x_{t+1} = x_t + \gamma_td_t$$

其中\(d_t\)是我们根据目标函数在\(x_t\)的情况确定的搜索方向,而\(\gamma_t\)则成为迭代点\(x_t\)沿搜索方向的步长。其实就是:已知函数\(f\)和迭代点\(x_t\),能够使用一种算法算出搜索方向\(d_t\),使得\(x_t\)在这个搜索方向下得到的点能够使\(f\)变小,即$$f(x_{t+1}) < f(x_t)$$

梯度下降希望得到一个方向,这个方向是在该点下降最快的,因此在函数一阶可微情况下,直接求\(\nabla f(x_t)\),取\(d_t = - \nabla f(x_t)\)

注意: 下降最快不一定是降幅最大

证明:设目标函数\(f\)连续可微,将\(f\)在\(x_t\)处Taylor展开:$$f(x) = f(x_t) + \nabla f(x_t)^T(x-x_t) + o(|x-x_t|)$$
令\(x=x_{t+1}\),有$$f(x_{t+1})=f(x_t)+ \gamma_t \nabla f(x_t)^T d_t + o(|x_{t+1}-x_t|)$$
为了能使\(f(x_{t+1}) < f(x_t)\),可以明显看到\(\gamma_t \nabla f(x_t)^T d_t = \frac{\partial f}{\partial \gamma} < 0\);我们希望\(f(x_{t+1})\)下降得尽可能快,即需要满足 $$d_t^* = arg \min_{d_t} \frac{\partial f}{\partial \gamma} = arg \max_{d_t} - \frac{\partial f}{\partial \gamma}$$
由Cauchy不等式,$$- \frac{\partial f}{\partial \gamma} = - \nabla f(x_t)^T d_t \leq | \nabla f(x_t)| \cdot |d_t|, \text{iff }d_t与 - \nabla f(x_t)同向$$

已知迭代的终止条件参数 \(\epsilon\),初始迭代点为\(x_0\),重复以下操作:
1、计算\(d_t = \nabla f(x_t)\),若\(\|d_t\| < \epsilon\),迭代终止
2、通过线搜索确定步长\(\gamma_t\)
3、通过迭代更新得到下一个迭代点

2 精确线搜索

只适用于\(argmin_{\gamma}f(x_t+\gamma d_t)\)的迭代过程。

设\(f(x) = \frac{1}{2} x^TQx + b^Tx + c\),其中\(x\)是\(n\)维列向量,\(Q\)是实对称正定矩阵,\(b\)是\(x\)同维度的列向量,\(c\)是实数。

令\(g_t = \nabla f(x_t)\), 我们可以计算最优步长\(\gamma^*\):

\[\begin{aligned} \gamma^* & = arg \min_{\gamma} f(x_t + \gamma d_t) \\ & = arg \min_{\gamma} f(x_t - \gamma g_t) \\ & = arg \min_{\gamma} (\frac{1}{2} g_t^TQg_t \gamma^2 - g_t^Tg_t\gamma + f(x_t)) \end{aligned} \]

可以得到最优步长\(\gamma^*\)为:

\[\gamma^* = \frac{g_t^Tg_t}{g_t^TQg_t} \]

那么对正定二次型,其更新迭代公式为:$$x_{t+1} = x_t - \frac{g_t^T g_t}{g_t^TQg_t}(Qx_t+b)$$

已知迭代的终止条件参数 \(\epsilon\),初始迭代点为\(x_0\),记\(g_t = \nabla f(x_t)\),重复以下操作:
1、计算\(d_t = \nabla f(x_t)\),若\(\|d_t\| < \epsilon\),迭代终止
2、通过线搜索确定步长\(\gamma_t \frac{g_t^Tg_t}{g_t^TQg_t}\)
3、通过迭代更新得到下一个迭代点

3 非精确线搜索

Goldstein准则

如图所示,从\((0, f(x_k))\)处引出两条射线,选取的\(\gamma_k\)于原单值函数上的映射值位于\(\gamma_k\)在这两条直线上的映射值之间,于是构成它们的约束区间\([b, c]\),那么这一步我们要寻找的步长\(\gamma_k\)就位于\([b, c]\)之间。

设\(\varphi(\gamma)=f(x_k + \gamma d_k)\),则两条线的约束可写成

\[\varphi(\gamma_k) \leq \varphi(0) + \rho \gamma_k \varphi'(0) \tag{1} \]

\[\varphi(\gamma_k) \geq \varphi(0) + (1- \rho) \gamma_k \varphi'(0) \tag{2} \]

其中 \(0 < \varphi < \frac{1}{2}\)

Goldstein准则非精确先搜索算法

我们根据上式(1)(2),得到算法
1、选取初始搜索区间[0, sup(\gamma)]中选取初始点\(\gamma_0\),搜索区间\([a_0, b_0]\),计算\(\varphi(0), \varphi'(0)\),给出 \(\rho \in (0, \frac{1}{2}), t > 1, k = 0\)
2、若\(\gamma_k\)满足(1),转到第三步;否则 \(a_{k+1} = a_k, b_{k+1} = \gamma_k\),转到第四步
3、若\(\gamma_k\)满足(2),则输出\(\gamma_k\),迭代结束;
否则令\(a_{k+1}=\gamma_k,b_{k+1}=b_k\);若\(b_{k+1} < sup(\gamma)\),转第四步;
否则令\(\gamma_{k+1} = t \gamma_k, k += 1\),转第二步;
4、令 \(\gamma_{k+1} = \frac{a_{k+1}+b_{k+1}}{2}, k += 1\),转第二步

标签:frac,迭代,梯度,nabla,下降,varphi,partial,gamma
From: https://www.cnblogs.com/wanyy-home/p/17904082.html

相关文章

  • [最优化方法笔记] 梯度下降法
    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......
  • 出生率持续下降,而低代码,成了!
    低代码这个概念在IT界应该是火了很久,在十年前就有低代码的概念。在最初的时候,我们都是用高级语言或者脚本来开发页面或者应用,比如Java、C++,前端会使用Vue、React等等。但是我们发现经常写的功能或者页面都是重复的,那能否通过更简单高效的方式来避免每次都是重头开发呢?当时业内人士......
  • 出生率持续下降,而低代码,成了!
    低代码这个概念在IT界应该是火了很久,在十年前就有低代码的概念。 在最初的时候,我们都是用高级语言或者脚本来开发页面或者应用,比如Java、C++,前端会使用Vue、React等等。但是我们发现经常写的功能或者页面都是重复的,那能否通过更简单高效的方式来避免每次都是重头开发呢?当时业......
  • 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......