随机梯度下降法相关

在大规模机器学习问题中,很多算法最终都归结为一个这样的优化问题:

minimizeωRpg(ω):=1ni=1nfi(ω).

其中 p 维向量 ω 是待优化的模型参数, fi(ω)=L(ω,xi,yi) 是第 i 个样本 (xi,yi) 对应的损失函数。例如,在线性回归中
fi(ω)=(yiωTxi)2,

在逻辑回归中
fi(ω)=yiωTxi+log(1+exp(ωTxi)),

λ 为正则化系数。在SVM中
fi(ω)=Lhinge(1yiωTxi).

这一类问题可以用一般的梯度型优化算法来求解,如梯度下降法(Gradient Descent, GD).其迭代格式为
ω(k+1)=ω(k)αkg(ω(k))=ω(k)αkni=1nfi(ω(k)),

g 凸, x g 的全局极小,则固定步长的GD具有一阶收敛性,即
g(ω(k))g(ω)=O(ρk),

其中决定收敛速度的 ρ 为0-1之间一常数,具体值依赖于函数 g 的性态。这是一般梯度下降法的框架。此外,我们可以用每步迭代的计算代价去换取更快的收敛速度,例如各种拟牛顿法。拟牛顿法通过秩一修正的方式去近似Hessian矩阵,能够达到介于GD的一阶收敛和牛顿法的二阶收敛之间的超线性收敛速度。

然而,面对海量数据的机器学习问题,收敛速度的快慢并不是我们最关心的。真正的挑战或者说瓶颈在于计算目标函数 g(ω) :计算 g 的梯度需要把所有数据扫描一遍,也就是说迭代每进行一步的运算量就是O(n),更不要提其中由分布式存储带来的IO开销。在这样的限制下,精确求得 g 的梯度是一件及其奢侈的事情,于是我们只好退而求其次,去寻找 g 的近似——最简单的策略,就是用一个样本点损失函数的梯度方向 fi 去近似 g 。至此大名鼎鼎的随机梯度下降法(Stochastic Gradient Descent, SGD, 也作增量梯度下降法:Incremental Gradient Method, IGM)应运而生。SGD的迭代格式为

ω(k+1)=ω(k)αkfik(ω(k)),

其中 ik 为迭代第 k 步时在集合 {1,2,...,N} 中随机选取的下标, αk 是迭代第 k 步的步长,一般设为常数或随着 k 衰减到0的序列如 αk=1/k .对 g αk 提适当的限制条件,我们可以证明SGD有亚线性收敛速度:
E[g(ω(k))]g(ω)=O(1/k).

人们在GD到SGD的框架上想出了很多改进的方案,其本质无非是在计算梯度的代价和收敛速度两者之间进行trade-off.下面我们介绍一下一些由SGD方法衍生出来的算法。

mini-batch

比起标准的SGD方法一次计算一个点的损失函数的梯度作为全局损失函数梯度的近似,mini-batch每次迭代处理随机选取的一批数据点,称为一个batch;以这批数据点损失函数的均值作为全局损失函数梯度的近似。mini-batch是介于SGD和GD之间的一种方案,他以常数倍的额外计算代价,减小了随机梯度方向作为整体梯度方向的无偏估计的方差,达到了更快的收敛速度。不过在收敛阶上mini-batch并没有本质的提高。

Constant, Diminishing & Dynamic step rules

关于SGD的步长选择问题,一般常用的策略有定步长(Constant step rule)和衰减步长(Diminishing step rule)和Dynamic step rules三种。

定步长策略,即把步长自始至终取为一个常数 α ,逼近误差将由两部分组成:一部分是和迭代步 k 有关的迭代误差项 errk ,另一部分则是函数值跳跃带来的方差误差项 errvar 。一般来说有 errkρk 呈现一阶收敛, errvar 不收敛; α 越大, errk 收敛越快但 errvar 也会更大。所以如何选择最优的 α 是一个需要权衡取舍的问题。

衰减步长策略,即把步长取为极限为0的单调序列,如 αk=1/k . 在
k=0α2k<,k=0αk=, 的条件下可以证明衰减步长策略的SGD具有 errkO(1/k) 的亚线性收敛速度。

Dynamic step rules,就是自适应步长策略。迭代每进行一定步数就检查收敛情况,收敛慢就增加步长,收敛出现抖动就减小步长,以期通过这样的调整来取得更好的效果。

Momentum

动量法(Momentum)是在SGD方法中加入动量项,其迭代格式为

ω(k+1)=ω(k)αkfik(ω(k))+βk(ω(k)ω(k1)).

Momentum形象地表达出了这个算法的特点,即在第 k+1 步时除了沿着近似的负梯度方向走了 αk 之外,还由于惯性沿着上一步的方向走了 βk .若取 βk=β 为常数,则迭代格式可写为
ω(k+1)=ω(k)j=1kαjβkjfij(ω(j)).

可以看到,动量法无非是取前面所有方向的加权平均作为当前梯度的近似,时间上越接近的搜索方向权重越高。实践表明动量法能够提升收敛形态,但理论证明方面还没有突破。

Gradient Averaging

梯度平均法(Gradient Averaging)和动量法类似,不过更加简单——不取加权平均,直接用前面所有下降方向的平均作为当前的下降方向。梯度平均法和SGD有相同的收敛速率 O(1/k) ,只是在常数量级上有所改进。迭代格式为

ω(k+1)=ω(k)αkkj=1kfij(ω(j)).

Iterate Averaging

梯度平均法将前面所有迭代步的前进方向取平均,而迭代平均法(Iterate Averaging)和则把前面所有迭代点的位置取平均。迭代格式为

ω¯(k+1)=ω(k)αkfik(ω(k)),

ω(k+1)=1k+1j=1k+1ω¯(j).

若取合适的步长,该方法能达到二阶收敛速度;若取定步长,这个方法也能防止跳跃让收敛更具鲁棒性。不过我试了一下似乎并没有能够调到收敛,或许和初值的选取关系很大?有待进一步研究。

Hybrid methods

类似mini-batch方法,只不过batch的大小 |Bk| 不是固定的,而是随着迭代的进行逐步增加。比如可以选取 |Bk+1|=min{1.1|Bk|+1,n} .

Stochastic Average Gradient (SAG)

第一步计算全梯度,此后每一步随机选取一个样本点的梯度进行更新。迭代格式如下:

ω(k+1)=ω(k)αkni=1nd(k)i,

其中 ik 是随机选取的样本编号。
d(k)i={fi(ω(k)),ifi=ik,d(k1)i,otherwise.

Incremental Aggregated Gradient(IAG)

IAG只是把SAG的随机更新改为顺序更新。文[1]声称SAG比起IAG效果有明显提升,并在某种条件下证明了SAG具有一阶收敛性。

参考文献

[1] Roux N L, Schmidt M, Bach F R. A stochastic gradient method with an exponential convergence rate for finite training sets[C], Advances in Neural Information Processing Systems. 2012: 2663-2671.
[2] Friedlander M P, Schmidt M. Hybrid deterministic-stochastic methods for data fitting[J]. SIAM Journal on Scientific Computing, 2012, 34(3): A1380-A1405.
[3] Blatt D, Hero A O, Gauchman H. A convergent incremental gradient method with a constant step size[J]. SIAM Journal on Optimization, 2007, 18(1): 29-51.

你可能感兴趣的:(数学模型,科普)