Firt Order Optimizers: Reviews and Updates
这篇内容会专注于一阶优化器的直觉与算法介绍,并从凸优化引入相关的基础概念
- Firt Order Optimizers: Reviews and Updates
- 论文中经常出现的基础概念:
- Gradient-Descent and Basic Variants
- Triple Momentum Gradient Descent
- Boosting First-Order Methods by Shifting Objective: New Schemes with Faster Worst Case Rates
论文中经常出现的基础概念:
Lipschitz Continuity & L-Smooth 指:
(∇f(x)−∇f(y))T≤L||x−y|| 直觉来说是二阶导有上限L
μ-strongly convex 指: (∇f(x)−∇f(y))T(x−y)≥m||x−y||2 直觉来说是二阶导有正下限m. 在凸优化问题中,连续函数二阶导为非负数,这里强凸函数的定义则是要求二阶导为正数. 文章中会出现 "L-smooth and μ-strongly convex"的说法,直觉地来说指函数的二阶导在正数区间[μ,L].
co-coercivity 矫顽性可以由convexity 与 L-smooth一同推导, 其数学表述为
12L||∇f(x)−∇f(y)||2≤f(x)−f(y)−⟨∇(y),x−y⟩
Gradient-Descent and Basic Variants
关于梯度下降相关算法,有一个比较好的博客
梯度下降算法
xk+1=xk−α∇f(xk)
从surrogate function的角度来解析,在每一步xk上,可以理解构造一个与原函数在x=xk相切且二阶导为1/α的二次函数y=12α(x−xk)2+∇f(xk)(x−xk)+f(xk), 每一步x会更新到这个二次代理函数的最小值上. 这要求整个函数可导,如果不可导,则需要使用 subgradient descent.
subgradient 函数 g定义为任意梯度函数(subgradient oracle),使得 f(y)≥f(x)+⟨g(x),y−x⟩
Proximal Gradient Method
如果凸函数其中有一个部分不可导,但是处理比较简单,那么可以使用proximal optimization algorithms, 将函数分解为f(x)=g(x)+h(x), 其中h(x)不一定可导.
可以理解为分两步:
- 将g(x)用当前位置的xk的函数值构造一个与原函数相切(曲率不必一致的)的函数g(xk)+∇g(xk)T(u−xk)+μ2||u−xk||22,
- 把h(x)直接与新二次代理函数的求和求global minimum. x+=argminu(h(u)+g(xk)+∇g(xk)T(u−xk)+μ2||u−xk||22)=argminu(h(u)+∇g(xk)Tu+μ2||u−xk||22)
重点:
- 如果h(x)为L2-norm L1-norm, 这些常见的regularizer, 那么最后的求优化是一个典型的二次函数 + 二次函数或者 二次函数 + l1,都是有closed-form solution的。
- 如果记x∗k为二次代理函数的极值点 xk−∇g(xk)μ, 将∇g(xk)代入上文的最优化公式, 那么最后的求解函数常常会写成 proximal mapping (prox-operator), proxμh(x∗k)=argminu(h(u)+μ2||u−x∗k||22).说明最终的结果既需要考虑g的局部最优点,也需要考虑h(x).
特殊情况中,h可以是一个 indicator function,指定函数的定义域, 如果x在定义域C内则h(x)=0,否则h(x)=∞. 这样的情况下 proxh函数变成了在有限定义域内寻找最优解的问题,得到的结果是最优解在边界上的投影。因而wiki说 prox函数是projection操作的推广。
Projected Gradient Descent
如果使用梯度下降的时候要求x在定义域C中,那么一个projected梯度下降的做法是,首先进行无约束梯度下降,然后将结果投影到边界上. 记为xk+1=πC(xk−αk∇f(xk)), 其中πC为欧几里得投影,可以写成
xk+1=argminx∈C||xk−αk∇f(xk)−x||22 展开后变为
xk+1=argminx∈C{⟨x,∇f(xk)⟩+1αk||x−xk||222}
General Projected Gradient Descent 则会允许不同的距离量变为: xk+1=argmin
常用的距离量 Bregman Divergence 由可以产出 KL divergence.
mirror gradient descent常常用来分析
Nesterov Accelerated Gradient Descent
Nesterov Acceleration有很多个不同的版本。
Nesterov 在 1983年的paper:
其中 可被泛化为一般超参数. 可以理解为为沿着之前的更新方向look-ahead的目的位置, 然后在look-ahead的位置进行梯度更新. 这篇Medium博客提供了基于"look-ahead"的阐述.
pytorch的版本采用的是更着重于momentum的算法描述,对标的是momentum gradient descent.
Triple Momentum Gradient Descent
这篇paper提出了一个基于四个参数的 triple momentum (TM)框架.
这个框架下的优化器算法:
| Method | Parameters | | :---------------- | :-------------------------------: | | Gradient descent | | | Momentum Gradient | | | Nesterov AG | | | General TM Algo. | |
直觉上来说,如果, 则 , 代入后就能得到前面提到的几个算法公司.
作者给出了参数, 如果一直需要优化的函数是 的则令, 设定一下参数,
个人分析
这个paper是有小问题的,对前面TM框架进行分析,可以通过用表达可以消去.同时中有一个参数是多余的.这个公式最终可以化为
这里引出了下一篇paper提到的参数冗余问题。
Boosting First-Order Methods by Shifting Objective: New Schemes with Faster Worst Case Rates
对于原来的目标函数,可以转而求解一个新的shifted objective.
可以简单理解为原函数与最值点附近的下界二次函数的残差.容易证明
- h(x)是一个凸函数
- h(x)的极值点与相同,进而可以说的最优值点与的相同。
- h(x)-smooth
- 矫顽性:
Generalized Triple Momentum
其中的表达式等价于 其中为二次surrogate function 的最优解. 可得, 在一定程度上可以表达梯度下降算法.
而当时,可以简单地将这两条式子化为 Nesterov的标准形式。
进一步地观察的表达式的第二项,将代入,得到 , 由于强凸性, 第二项与符号相反,这是用于补偿strongly-convex函数的二阶导的,当我们用曲率为的更为扁平的二次代理函数求解时,我们会高估合适的梯度下降步长的大小,因而带着动量往前的 在预测look-ahead 时会减去之前高估的一部分步长.
参考参数
文章更严谨且通用地用李雅普诺夫函数 where 进行了证明, 说明其收敛速度上限比较小。
作者之后将这个算法附加在多个一阶算法上(SVRG, SAGA)。由于个人认知有限,暂还没有能力分析这些算法及其应用.