🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
我们在上一篇博客《数值优化:算法分类及收敛性分析基础》介绍了数值优化算法的历史发展、分类及其收敛性/复杂度分析基础。本篇博客我们重点关注一阶确定性优化算法及其收敛性分析。
1 梯度下降法
1.1 算法描述
梯度下降法[1]是最古老的一阶方法,由Cauchy在1847年提出。
梯度下降法的基本思想是:最小化目标函数在当前迭代点处的一阶泰勒展开,从而近似地优化目标函数本身。具体地,对函数f:Rn→Rf:Rn→Rf:\mathbb{R}^n \rightarrow \mathbb{R},将其在第ttt轮迭代点wtwtw^t处求解下述问题:
minwf(w)=minw[f(wt)+∇f(wt)T(w−wt)]minwf(w)=minw[f(wt)+∇f(wt)T(w−wt)]\underset{w}{\text{min}}f(w) = \underset{w}{\text{min}} \left[ f(w^t) + \nabla f(wt)T (w-w^t) \right]
上式右端关于自变量www是线性的,并且使得∇f(wt)Tw∇f(wt)Tw\nabla f(wt)Tw最小的方向与梯度∇f(wt)∇f(wt)\nabla f(w^t)的方向相反。于是梯度下降法的更新规则如下:
wt+1=wt−η∇f(wt)wt+1=wt−η∇f(wt)w^{t+1} = w^t - \eta \nabla f(w^t)
其中η>0η>0\eta>0是步长,也常被称作学习率。
梯度下降法描述如下:
1.2 收敛性分析
针对不同性质的目标函数,梯度下降法具有不同的收敛速率。由于梯度下降法只适用于梯度存在的函数(没有梯度需要考虑使用次梯度的方法),这里考虑梯度下降法对于光滑凸函数和光滑强凸函数的收敛速率。
光滑凸函数收敛性 假设目标函数f:Rd→Rf:Rd→Rf: \mathbb{R}^d \rightarrow \mathbb{R}是凸函数,且ββ\beta-光滑,当步长η=1βη=1β\eta = \frac{1}{\beta}时,梯度下降法具有O(1t)O(1t)\mathcal{O}(\frac{1}{t})的次线性收敛速率:
f(wt)−f(w∗)⩽2β∥w0−w∗∥2tf(wt)−f(w∗)⩽2β‖w0−w∗‖2tf(w^t) - f(w^*) \leqslant \frac{2\beta \lVert w^0 - w*\rVert2}{t}
光滑强凸函数收敛性 假设目标函数f:Rd→Rf:Rd→Rf: \mathbb{R}^d \rightarrow \mathbb{R}是αα\alpha-强凸函数,且ββ\beta-光滑,当步长η=1βη=1β\eta = \frac{1}{\beta}时,梯度下降法具有O(e−tQ)O(e−tQ)\mathcal{O}(e^{-\frac{t}{Q}})的线性收敛速率:
f(wt)−f(w∗)⩽β2e−tQ∥w0−w∗∥2f(wt)−f(w∗)⩽β2e−tQ‖w0−w∗‖2f(w^t) - f(w^*) \leqslant \frac{\beta}{2}e^{-\frac{t}{Q}} \lVert w^0 - w*\rVert2
其中Q=βαQ=βαQ = \frac{\beta}{\alpha},一般被称为条件数。
通过以上两个定理可知,强凸性质会大大提高梯度下降法的收敛速率。进一步地,强凸性质越好(即αα\alpha越大),条件数QQQ越小,收敛越快。
而光滑性质在凸和强凸两种情形下都会加快梯度下降法的收敛速率,即ββ\beta越小(强凸情景下,条件数QQQ越小),收敛越快。可以说凸情形中的光滑系数和强凸情形中的条件数在一定程度上刻画了优化问题的难易程度。
2 投影次梯度下降法
2.1 算法描述
梯度下降法有两个局限,一是只适用于无约束优化问题,二是只适用于梯度存在的目标函数。投影次梯度法[2]可以解决梯度下降法的这两个局限性。
投影次梯度下降法相比梯度下降法,具有次梯度选择和约束域投影两个特性:
- 次梯度选择 选取当前迭代点wtwtw^t的次梯度集合∂f(wt)∂f(wt)\partial f(wt)中随机选取一个次梯度gtgtgt,按照梯度下降更新v