凸优化学习(2)——梯度类方法求解(gradient descent)

🍅 写在前面

👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。

🔎个人主页:主页链接(欢迎各位大佬光临指导)

⭐️近期专栏:机器学习与深度学习

LeetCode算法实例

张量分解

凸优化系列知识,详见下方链接:

凸优化学习(1)------什么是凸优化、凸集、凸函数
凸优化学习(2)------梯度类方法求解(gradient descent)

本系列文章主要参考:卡耐基梅隆 凸优化系列课程

目录

  • 综述
  • [gradient descent](#gradient descent)
    • [backtracking line search](#backtracking line search)
    • [exact line search](#exact line search)
  • [subgradient descent](#subgradient descent)
  • [proximal gradient descent](#proximal gradient descent)

综述

1、梯度类方法是无约束方法中最常用的方法之一, 其依据是梯度的负方向就是函数值下降最快的方向。但是,常用的梯度下降(gradient descent)方法中,必须要求目标函数连续且可导,对于连续不可导的问题,梯度下降方法无能为力。
2、这里还将介绍另外两种针对目标函数连续不可导可用的优化方法,分别是subgradient descentproximal gradient descent

gradient descent

一般梯度下降的基本迭代公式为:

x k = x k − 1 − t k ∇ f ( x ( k − 1 ) ) {x^k} = {x^{k - 1}} - {t_k}\nabla f({x^{(k - 1)}}) xk=xk−1−tk∇f(x(k−1))

式子中的k表示的是第k次迭代, t k {t_k} tk表示的是学习率(步长), ∇ f ( x ) \nabla f({x}) ∇f(x)表示的是点在x处的梯度。

这里针对学习率是否改变以及如何改变又有不同的方法。最简单的当然是固定学习率为一个恒定值,但是学习率如果过大或者过小,可能会导致结果难以收敛或者收敛速度很慢。因此,产生了可变学习率的方法。可变学习率的思想是:每次迭代中根据一定规则更新现有的学习率。下面介绍两种可变学习率的方法。

backtracking line search 方法需要先固定两个参数 α β \alpha \beta αβ,并要求 0 < α < 1 / 2 0<\alpha<1/2 0<α<1/2, 0 < β < 1 0<\beta<1 0<β<1。每次迭代时,计算下列式子判断是否需要更新学习率:

f ( x − t ∇ f ( x ) ) > f ( x ) − α t ∥ ∇ f ( x ) ∥ 2 2 f(x - t\nabla f(x)) > f(x) - \alpha t{\left\| {\nabla f(x)} \right\|_2}^2 f(x−t∇f(x))>f(x)−αt∥∇f(x)∥22

如果式子成立,则改变学习率为 t = β t t = \beta t t=βt。这种方法的思想是当步长过大的时候 (即跨过了最优点),减小步长,否则保持步长不变

exact line search方法则是先计算出梯度 ∇ f ( x ( k − 1 ) ) \nabla f({x^{(k - 1)}}) ∇f(x(k−1)),然后带入下列函数中,此时函数中只有 t k {t_k} tk学习率未知,因此有对 t k {t_k} tk求导并另导数等于零,求得的 t k {t_k} tk则为当前的最优学习率,因为这个学习率能够令当前迭代下降的距离最大。该方法也被称为最速梯度下降法。

f ( x ( k − 1 ) − t k ∇ f ( x ( k − 1 ) ) ) f({x^{(k - 1)}} - {t_k}\nabla f({x^{(k - 1)}})) f(x(k−1)−tk∇f(x(k−1)))

subgradient descent

subgradient descent用于解决某些函数存在连续不可导,梯度不存在的问题。

次梯度

一个凸函数f在x的次梯度g定义为:

f ( y ) ≥ f ( x ) + g T ( y − x ) f(y) \ge f(x) + {g^T}(y - x) f(y)≥f(x)+gT(y−x)

次梯度的一些特性:

1、总是存在于定义域dom(f)的内部;

2、如果f在x上是完全可微的,那么其存在唯一的次梯度 g = ∇ f ( x ) g = ∇ f ( x ) g=∇f(x);

3、该次梯度的定义也可以推广到非凸函数中,但非凸函数的次梯度g gg可能不存在。

举例:
f ( x ) = ∣ x ∣ f(x) = \left| x \right| f(x)=∣x∣,在x=0处不可导,图像如下。

其次梯度为:

proximal gradient descent

proximal 通过对原问题的拆分并利用 proximal mapping,能够解决 subgradient descent 无法解决的问题。一般来说,该方法将目标函数转化为一下形式:
f ( x ) = g ( x ) + h ( x ) f(x) = g(x) + h(x) f(x)=g(x)+h(x)

其中,g(x)是凸且可微的,h(x)是凸函数。则proximal gradient descent方法的迭代过程如下:
x ( k ) = x ( k − 1 ) − t k G t k ( x ( k − 1 ) ) G t ( x ) = x − p r o x t h ( x − t ∇ g ( x ) ) t p r o x t h ( x ) {x^{(k)}} = {x^{(k - 1)}} - {t_k}{G_{tk}}({x^{(k - 1)}}){G_t}(x) = \frac{{x - pro{x_{th}}(x - t\nabla g(x))}}{t}pro{x_{th}}(x) x(k)=x(k−1)−tkGtk(x(k−1))Gt(x)=tx−proxth(x−t∇g(x))proxth(x)

其中:
p r o x t h ( x ) = arg ⁡ min ⁡ z ∈ R n 1 2 t ∥ x − z ∥ 2 2 + h ( z ) pro{x_{th}}(x) = \arg {\min _{z \in {R^n}}}\frac{1}{{2t}}{\left\| {x - z} \right\|_2}^2 + h(z) proxth(x)=argz∈Rnmin2t1∥x−z∥22+h(z)

以上是本节梯度方法求解凸优化问题,下一节总结对偶方法解决梯度问题。

相关推荐
水如烟6 小时前
孤能子视角:“组织行为学–组织文化“
人工智能
大山同学6 小时前
图片补全-Context Encoder
人工智能·机器学习·计算机视觉
薛定谔的猫19826 小时前
十七、用 GPT2 中文对联模型实现经典上联自动对下联:
人工智能·深度学习·gpt2·大模型 训练 调优
壮Sir不壮6 小时前
2026年奇点:Clawdbot引爆个人AI代理
人工智能·ai·大模型·claude·clawdbot·moltbot·openclaw
PaperRed ai写作降重助手6 小时前
高性价比 AI 论文写作软件推荐:2026 年预算友好型
人工智能·aigc·论文·写作·ai写作·智能降重
玉梅小洋6 小时前
Claude Code 从入门到精通(七):Sub Agent 与 Skill 终极PK
人工智能·ai·大模型·ai编程·claude·ai工具
-嘟囔着拯救世界-7 小时前
【保姆级教程】Win11 下从零部署 Claude Code:本地环境配置 + VSCode 可视化界面全流程指南
人工智能·vscode·ai·编辑器·html5·ai编程·claude code
正见TrueView7 小时前
程一笑的价值选择:AI金玉其外,“收割”老人败絮其中
人工智能
Imm7777 小时前
中国知名的车膜品牌推荐几家
人工智能·python
风静如云7 小时前
Claude Code:进入dash模式
人工智能