凸优化之优化算法的一般步骤

优化算法的目的:寻找最优解

算法的运行形式:通过迭代的形式, 从一个初始点开始一步一步的接近最优解. 比如 x k + 1 = x k − α ∇ f ( x k ) x^{k+1}=x^{k}-\alpha \nabla f\left(x^{k}\right) xk+1=xkαf(xk), 表示点 x k x^{k} xk 沿着负梯度方向移动 α \alpha α 的距离(严格来说是 α ∥ ∇ f ( x k ) ∥ \alpha\left\|\nabla f\left(x^{k}\right)\right\| αf(xk) 的距离)得到一个新的点 x k + 1 x^{k+1} xk+1, 使得新的点处的函数值比原来点的函数值要小,就达到了下降的目的. 一直这么迭代下去,就能找到最优解. 算法的核心:步长 step-size \text{step-size} step-size 和下降方向 descent direction \text{descent direction} descent direction. 下降方向决定迭代点下一次更新的方向, 步长决定迭代点下一次行走的距离,. 步长和方向做为算法的核心, 决定了算法是否收敘、收敘速度如何等等. 在本节内容中, 我们假设下一次迭代的方向已知,现在只考虑如何找到最优步长. 而对于迭代方向的讨论在后面章节的内容中会有所说明.

步长的一般处理方法

因为不同的步长肯定会有不同的效果,比如步长很大,运气了可能一下子就到了最优解,但也有可能步长太大导致每次迭代总是跨过了最优解,甚至无法收敘. 很显然,步长不能设的特别大,但是也不能特别小,否则迭代速度就会很慢, 浪费时间. 因此, 一般我们会先固定好下降方向 d k d^{k} dk 和当前迭代点 x k x^{k} xk, 把下一个迭代点 x k + 1 = x k + α d k x^{k+1}=x^{k}+\alpha d^{k} xk+1=xk+αdk 视为 α \alpha α 的函数, 去求解使得 f 0 ( x k + 1 ) f_{0}\left(x^{k+1}\right) f0(xk+1) 的函数值最小的那个 α \alpha α 做为最终的步长. 即
α k = arg ⁡ min ⁡ α ⩾ 0 f 0 ( x k + α d k ) \alpha^{k}=\arg \underset{\alpha \geqslant 0 }{\min} f_{0}\left(x^{k}+\alpha d^{k}\right) αk=argα0minf0(xk+αdk)
这就是所谓的精确线搜索 exact line search \text{exact line search} exact line search的定义. (为什么叫线搜索? 是因为迭代点是定义域中的一个点, 而搜索时 x k + α d k x^{k}+\alpha d^{k} xk+αdk 是从 x k x^{k} xk 沿着 d k d^{k} dk 方向发出的一条射线, 所以叫线搜索. )

黄金分割法|优选法|0.618法

找一个尽量大的数, 记为 α max ⁡ \alpha_{\max } αmax, 将 α \alpha α 限制在 ( 0 , α max ⁡ ] \left(0, \alpha_{\max }\right] (0,αmax] 内. 然后对区间做分割,截取
0.382 α max ⁡ 0.382 \alpha_{\max } 0.382αmax 0.618 α max ⁡ 0.618 \alpha_{\max } 0.618αmax 这两个对称点, 计算它们的函数值, 去掉函数值比较大的区域, 继续做分割,这样一直下去, 可以找打一个使得函数值充分小的步长 α \alpha α ,充分小由人为指定. 特点: 自己确定一个 α max ⁡ \alpha_{\max } αmax, 自己确定终止条件.

Armijo Rule/Armijo \text{Armijo Rule/Armijo} Armijo Rule/Armijo 线搜索

给定初值 α \alpha α, 速率 β ∈ ( 0 , 1 ) , γ ∈ ( 0 , 0.5 ] \beta \in(0,1), \gamma \in(0,0.5] β(0,1),γ(0,0.5] .
f 0 ( x k + α d k ) > f 0 ( x k ) + γ α ∇ f 0 T ( x k ) d k f_{0}\left(x^{k}+\alpha d^{k}\right)>f_{0}\left(x^{k}\right)+\gamma \alpha \nabla f_{0}^{T}\left(x^{k}\right) d^{k} f0(xk+αdk)>f0(xk)+γαf0T(xk)dk, 令 α = α β \alpha=\alpha \beta α=αβ, 否则就停止迭代.

如图, α = 0 \alpha=0 α=0 的点就是 f 0 ( x k ) f_{0}\left(x^{k}\right) f0(xk) 的值, g ( x k + α d k ) = f 0 ( x k ) + α ∇ f 0 T ( x k ) d k g(x^{k}+\alpha d^{k}) = f_{0}\left(x^{k}\right)+ \alpha \nabla f_{0}^{T}\left(x^{k}\right) d^{k} g(xk+αdk)=f0(xk)+αf0T(xk)dk 则是那条蓝色的线, 过 ( 0 , f 0 ( x k ) ) \left(0, f_{0}\left(x^{k}\right)\right) (0,f0(xk)) 点的一条切线, 实际上就是 f 0 ( x k + α d k ) f_{0}\left(x^{k}+\alpha d^{k}\right) f0(xk+αdk) x k x^{k} xk 的一阶泰勒展开,这个时候更新 α = α β \alpha=\alpha \beta α=αβ, 使得 α \alpha α 值减小, 再用 γ \gamma γ 调整一下斜率, 变成了红色的那条线. 因此, Armijo \text{Armijo} Armijo 就是在给定 γ , β \gamma,\beta γ,β 之后, 去找红色线以下的所有 α ∈ [ 0 , α f e a s i b l e ] \alpha \in [0,\alpha_{feasible}] α[0,αfeasible] 中的一个做为步长.

参考资料

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wowotou1998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值