前言
最优化算法在机器学习中扮演着重要的角色,很多的机器学习算法最终都会归结为如下的最优化问题
minfJ(x):=λΩ(f)+Remp(f)
以上就是结构风险最小化,其中
Remp(f)
是期望风险。
Remp(f):=1m∑i=1ml(f(xi),yi)
其中
xi
是训练样本,
yi
是相关的label,
l
是损失函数。 以上优化问题需要通过相应的最优化算法去求,下面会介绍如下的最优化算法,梯度下降算法,随机梯度下降,镜像下降算法,牛顿方法,拟牛顿方法,并分析算法的收敛性。
基础知识
凸集
如果x∈C,y∈C,λ∈C,且(1−λ)x+λx∈C ,那么
C
是凸集。
凸函数
函数f 如果在凸集
X
上对任意的x、x′∈X 和任意的
0<λ<1
存在
f(λx+(1−λ)x′)≤λf(x)+(1−λ)f(x′))
强凸函数
如果一个凸函数满足有且只有一个常数
σ>0
,使得函数
f(x)−σ2∥∥x∥∥2
是凸函数,则
f(x)
是一个强凸函数,且
σ
叫强凸常数。
Lipschitz Continuous Gradient
假设
f(x)
凸且可导,如果存在一个常数,使得任意的
x
满足∥∥∇f(x)−∇f(x′)∥∥≤L∥∥x−x′∥∥ 则
f(x)
是Lipschitz Continuous Gradient
Bregman Divergence(Bregman散度)
如果
f(x)
凸且可导,则Bregman散度定义如下
Δf(x,x′)=f(x)−f(x′)−⟨x−x′,∇f(x′)⟩
梯度下降算法
梯度下降算法是机器学习里面最常使用的优化算法,主要是应用在高维平滑凸函数,假如目标函数
J:ℝn→ℝ
,梯度下降的基本思想就是在
t
次迭代给定一个
wt+1=wt−ηt∇J(wt)
其中
ηt
是一个更新步长,有得到梯度方向时通常可以使用下面两种线性搜索的方法去得到步长。
确定线性搜索
因为 J(wt−ηt∇J(wt)) 是一个关于 ηt 的一维凸函数,所以我们可以用一维搜索的方式如下:
ηt=argminηJ(wt−η∇J(wt))
非确定线性搜索
确定线性搜索的方式比较低效,我们可以通过计算每一个步长下是不是能够使得目标函数减小,一种比较常用的充分减少的条件是wolfe conditions
J(wt+1)≤J(wt)+c1ηt⟨∇J(wt),wt+1−wt⟩
⟨∇J(wt),wt+1−wt⟩≥c2⟨∇J(wt),wt+1−wt⟩
且
0<c1<c2<1
固定步长
假设
J
是一个梯度Lipschitz Continuous连续,且Lipschitz Continuous常数为L,假设梯度下降的固定长度为
J(wt+1)≤J(wt)+⟨∇J(wt),wt+1−wt⟩+1L∥∥wt+1−wt∥∥
=J(wt)−ηt∥∥∇J(wt)∥∥2+Lη2t2∥∥∇J(wt)∥∥2
当
ηt=1L
时,
∥∥∇J(wt)∥∥≤ϵ
至多迭代
O(1ϵ2)
证明:当 ηt=1L 时,代入上式可得
12L∥∥∇J(wt)∥∥2≤J(wt)−J(wt+1)
累加上式
12L∑t=0T∥∥∇J(wt)∥∥2≤J(w0)−J(wT)≤J(w0)−J(w∗)
当
t→∞
时,
∥∥∇J(wt)∥∥→0
,上式可以变型成下面式子
∥∥∇J(wT)∥∥≤2L(J(w0)−J(w∗))T+1‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√
即
2L(J(w0)−J(w∗))T+1‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√=ϵ
当 J 是强凸函数,强凸系数是
log((J(w0)−J(w∗))/ϵ)log(1/c)
次迭代。
证明:由于 J 是强凸函数,所以
∥∥∇J(wt)∥∥2≥2σ(J(wt+1)−J(w∗))
又因为
12L∥∥∇J(wt)∥∥2≤J(wt)−J(wt+1)
综合上两式得
c(J(wt)−J(w∗))≥J(wt+1−J(w∗))
递归求解得
cT(J(w0)−J(w∗))≥J(wT)−J(w∗)
解得如下
ϵ=cT(J(w0)−J(w∗))
这里当目标函数为强凸时,梯度下降算法收敛速度是
O(log(1/ϵ))
,但是还依赖于
log(1/c)
,而
log(1/c)≈σL
,当
σ≈L
梯度下降的收敛速度最快,
σ≪L
梯度下降收敛速度最慢。