第十七,十八节课 优化算法的设计
先考虑无约束优化,minf0(x)minf_0(x)minf0(x) (凸,可微)
此时 KKT 条件为∇f0(x)=0\nabla f_0(x)=0∇f0(x)=0
对于一般优化算法,一般采取迭代,迭代公式一般如下xk+1=xk+αkdkx^{k+1}=x^k+\alpha^kd^kxk+1=xk+αkdk,其中αk\alpha^kαk是学习率,也就是步长是一个标量,dkd^kdk是方向
选择步长
最优步长又称线搜索:αk=argminα≥0f0(xk+1)\alpha^k=arg\mathop{min}\limits_{\alpha\geq0}f_0(x^{k+1})αk=argα≥0minf0(xk+1)
- 求解最优步长是一个一维的问题
- 对于α\alphaα是一个凸函数
- 但实际中 d 一般不是最优的,步长也不一定要选择最优的,差不多的也可以
下面是非精确线搜索
0.618 法/优选法
凸的一维的线搜索问题可以用
先限定步长的范围[0,αmax][0,\alpha_{max}][0,αmax],最长步长是估测的,以后再学方法
每次取0.382αmax0.382\alpha_{max}0.382αmax和0.618αmax0.618\alpha_{max}0.618αmax,然后比较函数值,由于f0(x)f_0(x)f0(x)是关于α\alphaα的凸函数,所以每次可以排除一部份
若要极限收缩速度,可以取 0.5,然后两点收缩这样就可以看作求导数
但使用 0.618,这样划分后每次可以少算一个点
Armijo Rule/Back tracking
α=αmax\alpha=\alpha_{max}α=αmax
whilef0(xk+αdk)>f0(xk)+γα<∇f0(xk)⋅dk>while \quad f_0(x^k+\alpha d^k)>f_0(x^k)+\gamma\alpha<\nabla f_0(x^k)· d^k>whilef0(xk+αdk)>f0(xk)+γα<∇f0(xk)⋅dk>
α=αβ\qquad\alpha=\alpha\betaα=αβ
其中β∈(0,1)\beta\in(0,1)β∈(0,1),γ\gammaγ一般是 0.5
不一定是最优,但可以保证的是函数经过了足够的下降
固定步长
步子一定要小,需要更多迭代次数
递减步长
1k/1k\frac{1}{k}/\frac{1}{\sqrt k}k1/k1递减的学习率
选择方向
梯度下降法
认为向着负梯度的方向可以最快下降,
可以搭配 0.618,armijo,固定等步长方法,不可和递减步长搭配
考虑算法的性能指标
- 能否收敛
- 收敛到哪里
- 收敛速度
假设 0:f0(x)f_0(x)f0(x)凸且可微,最优解和最优值存在且有限
假设 1:∇f0\nabla f_0∇f0是 lipschitz 连续,即∃L>0,∀x,y,∣∣∇f0(x)−∇f0(y)∣∣2≤L∣∣x−y∣∣2\exist L>0,\forall x,y,||\nabla f_0(x)-\nabla f_0(y)||_2\leq L||x-y||_2∃L>0,∀x,y,∣∣∇f0(x)−∇f0(y)∣∣2≤L∣∣x−y∣∣2
lipschitz 连续本身在说,函数梯度值有界
若 f 二阶可微, 海森矩阵是有界的(意为特征值有界)
假设 2:强凸
第十九节课
强凸是要求大于等于+原像两点的模
严格凸是凸定义的大于等于变为大于
强凸会使得函数在顶端非常陡峭,lipschitz 连续梯度会使得函数非常平滑
满足上面三条假设,会使得函数在底端变得特别平滑,这个时候我们更加关心函数值的收敛性,此时的函数会是比较漂亮的类似二次函数
梯度下降法+固定步长+满足三假设
定理 1:若f0f_0f0 有 L-lipschitz 连续梯度,若学习率在(0,2L\frac{2}{L}L2)之间,则有值收敛
f0(xk)−f0(x∗)≤(f0(x0)−f0(x∗))2∣∣x0−x∗∣∣2kα(2−Lα)(f0(x0)−f0(x∗))+2∣∣x0−xk∣∣2f_0(x^k)-f_0(x^*)\leq\frac{(f_0(x^0)-f_0(x^*))2||x^0-x^*||^2}{k\alpha(2-L\alpha)(f_0(x^0)-f_0(x^*))+2||x^0-x^k||^2}f0(xk)−f0(x∗)≤kα(2−Lα)(f0(x0)−f0(x∗))+2∣∣x0−xk∣∣2(f0(x0)−f0(x∗))2∣∣x0−x∗∣∣2
x 的上标代表了进行到第 k 步,*代表最优
解释:
- 如果一开始就是最优解,那么梯度下降法将会不动
- 函数值的收敛速度是O(1k)O(\frac{1}{k})O(k1)
- 对于步长,我们希望maxkα(2−Lα)maxk\alpha(2-L\alpha)maxkα(2−Lα)求这个最优化问题得α=1L\alpha=\frac{1}{L}α=L1
证明:
- 点的单调性
∣∣xk+1−x∗∣∣2=∣∣xk−x∗−α∇f0(xk)∣∣2=∣∣xk−x∗∣∣2−2α<xk−x∗,∇f0(xk)>+α2∣∣∇f0(xk)∣∣2=∣∣xk−x∗∣∣2−2α<xk−x∗,∇f0(xk)−∇f0(x∗)>+α2∣∣∇f0(xk)∣∣2||x^{k+1}-x^*||^2=||x^k-x^*-\alpha\nabla f_0(x^k)||^2=||x^k-x^*||^2-2\alpha<x^k-x^*,\nabla f_0(x^k)>+\alpha^2||\nabla f_0(x^k)||^2=||x^k-x^*||^2-2\alpha<x^k-x^*,\nabla f_0(x^k)-\nabla f_0(x^*)>+\alpha^2||\nabla f_0(x^k)||^2∣∣xk+1−x∗∣∣2=∣∣xk−x∗−α∇f0(xk)∣∣2=∣∣xk−x∗∣∣2−2α<xk−x∗,∇f0(xk)>+α2∣∣∇f0(xk)∣∣2=∣∣xk−x∗∣∣2−2α<xk−x∗,∇f0(xk)−∇f0(x∗)>+α2∣∣∇f0(xk)∣∣2
<xk−x∗,∇f0(xk)−∇f0(x∗)>≥1L∣∣∇f0(xk)∣∣2<x^k-x^*,\nabla f_0(x^k)-\nabla f_0(x^*)>\geq\frac{1}{L}||\nabla f_0(x^k)||^2<xk−x∗,∇f0(xk)−∇f0(x∗)>≥L1∣∣∇f0(xk)∣∣2
∣∣xk+1−x∗∣∣2≤∣∣xk−x∗∣∣2||x^{k+1}-x^*||^2\leq||x^k-x^*||^2∣∣xk+1−x∗∣∣2≤∣∣xk−x∗∣∣2 - 函数值的单调性
f0(xk+1)≤f0(xk)+<∇f0(xk),xk+1−xk>+L2∣∣xk+1−xk∣∣2f_0(x^{k+1})\leq f_0(x^k)+<\nabla f_0(x^k),x^{k+1}-x^k>+\frac{L}{2}||x^{k+1}-x^k||^2f0(xk+1)≤f0(xk)+<∇f0(xk),xk+1−xk>+2L∣∣xk+1−xk∣∣2 - 函数值的充分下降
第二十节课
定理 2:若f0(x)f_0(x)f0(x) 有 L-Lipschitz 连续梯度,μ\muμ强凸,α∈(0,2μ+L]\alpha\in(0,\frac{2}{\mu+L}]α∈(0,μ+L2],则有点收敛
∣∣xk−x∗∣∣2≤(1−2αμLμ+L)k∣∣x0−x∗∣∣2||x^k-x^*||^2\leq(1-\frac{2\alpha\mu L}{\mu+L})^k||x^0-x^*||^2∣∣xk−x∗∣∣2≤(1−μ+L2αμL)k∣∣x0−x∗∣∣2
解释:
- (1−2αμLμ+L)k∈[(L−μ)2(L+μ)2,1)(1-\frac{2\alpha\mu L}{\mu+L})^k\in[\frac{(L-\mu)^2}{(L+\mu)^2},1)(1−μ+L2αμL)k∈[(L+μ)2(L−μ)2,1)
- 这时的最优步长是2μ+L\frac{2}{\mu+L}μ+L2但这个比较冒险
- 看式子是指数收敛,但老师说指数收敛和线性收敛是一回事,他更愿意将纵坐标改为 log 后定义线性收敛和超/次线性收敛
证明:
略
μ\muμ和 L 分别代表了梯度的最小值和最大值,海森矩阵的特征值的就是梯度的范围,对角矩阵的特征值等于对角元素,所以有以下例子
f0(x)=x12+4x22海森矩阵∇2f0(x)=(2008)→L=8,μ=2 f_0(x)=x_1^2+4x_2^2\quad 海森矩阵\nabla^2f_0(x)= \begin{pmatrix} 2&0\\ 0&8 \end{pmatrix} \rightarrow L=8,\mu=2 f0(x)=x12+4x22海森矩阵∇2f0(x)=(2008)→L=8,μ=2
条件数:矩阵的最大特征值比上最小特征值
当目标函数的海森矩阵的条件数很大的时候,如果使用固定步长,即使采用理论最优步长也只能以缓慢的速度收敛,本质是收敛速度受制于上面的条件数
解 1:预处理
解 2:二阶方法
结论:若f0(x)f_0(x)f0(x) 有 L-Lipschitz 连续梯度,μ\muμ强凸,α∈(0,2μ+L]\alpha\in(0,\frac{2}{\mu+L}]α∈(0,μ+L2],若使用精确线搜索
f0(xk)−f0(x∗)≤(1−μL)k(f0(x0)−f0(x∗))f_0(x^k)-f_0(x^*)\leq(1-\frac{\mu}{L})^k(f_0(x^0)-f_0(x^*))f0(xk)−f0(x∗)≤(1−Lμ)k(f0(x0)−f0(x∗))
若使用 Armijo Rule
f0(xk)−f0(x∗)≤(1−min{2μγαmax,2μγβL})kL(f0(x0)−f0(x∗))f_0(x^k)-f_0(x^*)\leq(1-min\{2\mu\gamma\alpha max,\frac{2\mu\gamma\beta}{L}\})^k{L}(f_0(x^0)-f_0(x^*))f0(xk)−f0(x∗)≤(1−min{2μγαmax,L2μγβ})kL(f0(x0)−f0(x∗))
解释:反正无论哪种步长选择都无法避免受到条件数影响
梯度下降算法的解释一
通过估计目标函数,并极小化估计函数
只用一阶泰勒展开是因为用二阶会和自己估计的误差的二次项重复
第二十一节课
梯度下降算法的解释二
下降方向和负梯度夹角小于 90 度,而且步长合适的时候(不能太大,不为负数)就可以下降
我们需要极小化下降方向dk=argmin∣∣d∣∣=1<∇f0(xk),d>d^k=arg\mathop{min}\limits_{||d||=1}<\nabla f_0(x^k),d>dk=arg∣∣d∣∣=1min<∇f0(xk),d>
- 假设范数为 2 范数求得为−∇f0(xk)∣∣∇f0(xk)∣∣2\frac{-\nabla f_0(x^k)}{||\nabla f_0(x^k)||_2}∣∣∇f0(xk)∣∣2−∇f0(xk)
- 假设范数为 1 范数,即min<∇,d>=min∑∇idi,s.t.∑∣di∣=1min<\nabla,d>=min\sum\nabla_id_i,s.t.\sum|d_i|=1min<∇,d>=min∑∇idi,s.t.∑∣di∣=1,将 d 分给梯度分量绝对值最大的即可
- 假设范数为无穷范数,那么只要将每一维的方向取反为模 1 就可以就可以,这样只需要知道梯度的方向就可以 即 sign GD 方法
非梯度下降方法:坐标轮换法
每轮迭代都尝试往一个坐标轴方向走,步长取(−αmax,αmax)(-\alpha_{max},\alpha_{max})(−αmax,αmax),在得出的值中取最小的
这个方法求解非光滑的不可微的问题可能会出问题
K-means
其实就是上面的非梯度下降方法
坐标轮换法适用于精确步长容易计算的情况,否则会出问题
第二十二节课
K-means 其实是一类 EM 算法的代表,其实就是轮换地去求期望极大,EM 有时也被叫 MM(majorivtion,minmizaton)
次梯度
g0(x)∈∂f0(x)g_0(x)\in\partial f_0(x)g0(x)∈∂f0(x),次梯度是一个集合,集合内元素满足
∀y,f0(y)≥f0(x)+<g0(x),y−x>\forall y,f_0(y)\geq f_0(x)+<g_0(x),y-x>∀y,f0(y)≥f0(x)+<g0(x),y−x>
光滑的点的次梯度只有一个,只有不光滑的次梯度才有范围
KKT 条件
如果不可微,则0∈∂f0(x)0\in \partial f_0(x)0∈∂f0(x)
次梯度法
xk+1=xk−αkg0(xk)x^{k+1}=x^k-\alpha^kg_0(x^k)xk+1=xk−αkg0(xk)
不保证下降,比如在离最优点很久的地方可能会震荡甚至还会使函数值上升
改进
只要使用递减步长可以缓解这个问题,关于递减的序列我们有以下三种选择
- αk=α\alpha^k=\alphaαk=α
- 不可加 平方可加αk=1k+1\alpha^k=\frac{1}{k+1}αk=k+11
- 不可加 平方不可加αk=1k+1\alpha^k=\frac{1}{\sqrt{k+1}}αk=k+11
考虑不可微的函数(次梯度法分析)
假设:f0(x)f_0(x)f0(x)Lipschitz 连续,∀x,y,∣f0(x)−f0(y)∣≤G∣∣x−y∣∣\forall x,y, |f_0(x)-f_0(y)|\leq G||x-y||∀x,y,∣f0(x)−f0(y)∣≤G∣∣x−y∣∣
等价假设:∣∣g0(x)∣∣≤G,∀g0(x)∈∂f0(x),∀x||g_0(x)||\leq G,\forall g_0(x)\in\partial f_0(x),\forall x∣∣g0(x)∣∣≤G,∀g0(x)∈∂f0(x),∀x
难点:次梯度法难以保证函数点单调性和函数值单调性,所以我们只需要考虑当前最优解(而非当前解)的单调性和性质
当前最优解函数值收敛性
- αk=α\alpha^k=\alphaαk=α~αG22\frac{\alpha G^2}{2}2αG2
- 不可加 平方可加αk=1k+1\alpha^k=\frac{1}{k+1}αk=k+11~O(1lnk)O(\frac{1}{lnk})O(lnk1)
- 不可加 平方不可加αk=1k+1\alpha^k=\frac{1}{\sqrt{k+1}}αk=k+11~O(lnkk)O(\frac{lnk}{\sqrt{k}})O(klnk)
例子
f0(x)=x22f_0(x)=\frac{x^2}{2}f0(x)=2x2
我们会发现,要求梯度有界不是特别合理,即使这个函数的性质特别好
神经网络训练中的自动微分会出问题
如 Relu(x)-Relu(-x) 在 x=0 处大概率给出 0,因为机器会拆分来求
-Relu(x)在 x=0 处大概率给出 0,但这是不符合次梯度的定义,不过他们又搞了一个广义次梯度,也不会出大篓子
邻近点梯度法
我们可以看到上面的次梯度法效率堪忧,对于一些有特殊结构的非光滑函数,我们还有邻近点梯度法
若f0(x)=s(x)+r(x)f_0(x)=s(x)+r(x)f0(x)=s(x)+r(x),且 s 可微且导数易求导,r 不可微易求邻近点投影
s 代表光滑,r 代表正则化
邻近点投影
minxr(x)+12α∣∣x−x^∣∣2\mathop{min}\limits_x r(x)+\frac{1}{2\alpha}||x-\hat{x}||^2xminr(x)+2α1∣∣x−x^∣∣2的值就是邻近点投影,α和x^\alpha和\hat{x}α和x^会给定
例子:盒约束(Box constrains )
mins(x),s.t.xi∈[li,ui],∀i→mins(x)+∑i=1nI(xi∈[li,ui])mins(x),s.t.x_i\in[l_i,u_i],\forall i\rightarrow mins(x)+\sum\limits_{i=1}^{n}I(x_i\in[l_i,u_i])mins(x),s.t.xi∈[li,ui],∀i→mins(x)+i=1∑nI(xi∈[li,ui])I 是示性函数
第二十三节课
例子minf0(x)=12∣∣Ax=b∣∣2+λ∣∣x∣∣1minf_0(x)=\frac{1}{2}||Ax=b||^2+\lambda||x||_1minf0(x)=21∣∣Ax=b∣∣2+λ∣∣x∣∣1
等价于求argminxλ∣∣x∣∣1+12α∣∣x−x^∣∣2arg\mathop{min}\limits_x \lambda||x||_1+\frac{1}{2\alpha}||x-\hat{x}||^2argxminλ∣∣x∣∣1+2α1∣∣x−x^∣∣2
∀xi,argminxiλ∣∣xi∣∣1+12α∣∣xi−xi^∣∣2\forall x_i,arg\mathop{min}\limits_{x_i} \lambda||x_i||_1+\frac{1}{2\alpha}||x_i-\hat{x_i}||^2∀xi,argximinλ∣∣xi∣∣1+2α1∣∣xi−xi^∣∣2
前半段光滑,次梯度等于梯度综合来看其 KKT 条件中稳定性条件如下
0∈{[−λ+1α(xi−xi^),λ+1α(xi−xi^)],xi=0−λ+1α(xi−xi^),xi<0λ+1α(xi−xi^),xi>00\in\left\{\begin{aligned} &[-\lambda+\frac{1}{\alpha(x_i-\hat{x_i})},\lambda+\frac{1}{\alpha(x_i-\hat{x_i})}],x_i=0\\ &-\lambda+\frac{1}{\alpha(x_i-\hat{x_i})},x_i<0\\ &\lambda+\frac{1}{\alpha(x_i-\hat{x_i})},x_i>0 \end{aligned}\right.0∈⎩⎨⎧[−λ+α(xi−xi^)1,λ+α(xi−xi^)1],xi=0−λ+α(xi−xi^)1,xi<0λ+α(xi−xi^)1,xi>0
邻近点梯度法实现
xk+1/2=xk−α∇S(xk)xk+1=argminxr(x)+12α∣∣x−xk+1/2∣∣2 x^{k+1/2}=x^k-\alpha\nabla S(x^k)\\ x^{k+1}=arg\mathop{min}\limits_x r(x)+\frac{1}{2\alpha}||x-x^{k+1/2}||^2 xk+1/2=xk−α∇S(xk)xk+1=argxminr(x)+2α1∣∣x−xk+1/2∣∣2
简单来说就是步骤 1 梯度下降,步骤 2 求解 r 的邻近点投影
由于式 2 是无约束的优化问题,所以其 KKT 条件中的稳定条件化简得到下面
xk+1=xk−α∇s(xk)−αgr(xk+1)x^{k+1}=x^k-\alpha\nabla s(x^k)-\alpha gr(x^{k+1})xk+1=xk−α∇s(xk)−αgr(xk+1)
其实本质是用到了未来的信息,但直接用这个式子是无法实现的,这个信息是求优化问题而得到的
假设xk→x∞x^k\rightarrow x^\infinxk→x∞收敛,我们考察一下收敛到何处
由于x∞=x∞−α∇s(x∞)−αgr(x∞)⇄∇s(x∞)+gr(x∞)=0x^\infin=x^\infin-\alpha\nabla s(x^\infin)-\alpha gr(x^\infin)\rightleftarrows\nabla s(x^\infin)+gr(x^\infin)=0x∞=x∞−α∇s(x∞)−αgr(x∞)⇄∇s(x∞)+gr(x∞)=0说明到达最优解
一般使用固定步长
邻近点梯度法实践
ISTA 算法,迭代软门限算法
minf0(x)=12∣∣Ax=b∣∣2+λ∣∣x∣∣1minf_0(x)=\frac{1}{2}||Ax=b||^2+\lambda||x||_1minf0(x)=21∣∣Ax=b∣∣2+λ∣∣x∣∣1
xk+1/2=xk−αAT(Axk−b)xk+1=argminxλ∣∣x∣∣1+12α∣∣x−xk+1/2∣∣2 x^{k+1/2}=x^k-\alpha A^T(Ax^k-b)\\ x^{k+1}=arg\mathop{min}\limits_x \lambda||x||_1+\frac{1}{2\alpha}||x-x^{k+1/2}||^2 xk+1/2=xk−αAT(Axk−b)xk+1=argxminλ∣∣x∣∣1+2α1∣∣x−xk+1/2∣∣2
第一步不保证变稀疏,第二步会保证变稀疏(实际是一个软门限)
如果要考虑添加了一些简单的约束条件且优化函数是光滑的,可以考虑将邻近点梯度法中的第二步改成为投影到约束内,这是投影梯度法
第二十四节课
随机优化问题
min1N∑i=1Nfi(x)min\frac{1}{N}\sum\limits_{i=1}^Nf_i(x)minN1i=1∑Nfi(x)
fi 为目标函数,也叫损失函数,N 一般很大,代表样本数
解决随机优化问题的算法:随机梯度下降法 SGD
条件:每次处理不能用全部函数,因为 N 极大,考虑计算机的 IO 瓶颈,而且在应用中数据可能是逐步生成的
SGD 不是下降方法,不保证下降
xk+1=xk−αk∇fik(xk)x^{k+1}=x^k-\alpha^k\nabla f_{i^k}(x^k)xk+1=xk−αk∇fik(xk)
简单来说就是因为不能用全部函数,所以每次算梯度的时候,会挑一些函数用来算梯度
mini-batch SGD
若每次不只是选择一个函数,而是选择多个函数算梯度就是 mini-batch SGD
xk+1=xk−αk1B∑b=1B∇fik,b(xk)x^{k+1}=x^k-\alpha^k\frac{1}{B}\sum\limits_{b=1}^B\nabla f_{i^{k,b}}(x^k)xk+1=xk−αkB1b=1∑B∇fik,b(xk)
步长的讨论
- 固定步长
举例min12(x+1)2+12(x−1)2min\frac{1}{2}(x+1)^2+\frac{1}{2}(x-1)^2min21(x+1)2+21(x−1)2 假设采用轮换选择函数,在xk=−α2−αx^k=\frac{-\alpha}{2-\alpha}xk=2−α−α时会陷入震荡
之所以会这样是因为有随机梯度噪声,随机梯度噪声会被步长等比放大
- 递减步长,要求目标函数强凸光滑且 lipschitz 连续 αk\alpha^kαk~O(1k)O(\frac{1}{k})O(k1)
如何减少随机梯度噪声
mini batch
增大这个 size 会减少随机梯度噪声,加速收敛,但会导致泛化性能下降(因为噪声减少就不容易跳出局部最优了)