在大规模机器学习问题中,很多算法最终都归结为一个这样的优化问题:
然而,面对海量数据的机器学习问题,收敛速度的快慢并不是我们最关心的。真正的挑战或者说瓶颈在于计算目标函数 g(ω) :计算 g 的梯度需要把所有数据扫描一遍,也就是说迭代每进行一步的运算量就是O(n),更不要提其中由分布式存储带来的IO开销。在这样的限制下,精确求得 g 的梯度是一件及其奢侈的事情,于是我们只好退而求其次,去寻找 ∇g 的近似——最简单的策略,就是用一个样本点损失函数的梯度方向 ∇fi 去近似 ∇g 。至此大名鼎鼎的随机梯度下降法(Stochastic Gradient Descent, SGD, 也作增量梯度下降法:Incremental Gradient Method, IGM)应运而生。SGD的迭代格式为
人们在GD到SGD的框架上想出了很多改进的方案,其本质无非是在计算梯度的代价和收敛速度两者之间进行trade-off.下面我们介绍一下一些由SGD方法衍生出来的算法。
比起标准的SGD方法一次计算一个点的损失函数的梯度作为全局损失函数梯度的近似,mini-batch每次迭代处理随机选取的一批数据点,称为一个batch;以这批数据点损失函数的均值作为全局损失函数梯度的近似。mini-batch是介于SGD和GD之间的一种方案,他以常数倍的额外计算代价,减小了随机梯度方向作为整体梯度方向的无偏估计的方差,达到了更快的收敛速度。不过在收敛阶上mini-batch并没有本质的提高。
关于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具有 errk∼O(1/k) 的亚线性收敛速度。
Dynamic step rules,就是自适应步长策略。迭代每进行一定步数就检查收敛情况,收敛慢就增加步长,收敛出现抖动就减小步长,以期通过这样的调整来取得更好的效果。
动量法(Momentum)是在SGD方法中加入动量项,其迭代格式为
梯度平均法(Gradient Averaging)和动量法类似,不过更加简单——不取加权平均,直接用前面所有下降方向的平均作为当前的下降方向。梯度平均法和SGD有相同的收敛速率 O(1/k) ,只是在常数量级上有所改进。迭代格式为
梯度平均法将前面所有迭代步的前进方向取平均,而迭代平均法(Iterate Averaging)和则把前面所有迭代点的位置取平均。迭代格式为
类似mini-batch方法,只不过batch的大小 |Bk| 不是固定的,而是随着迭代的进行逐步增加。比如可以选取 |Bk+1|=min{1.1|Bk|+1,n} .
第一步计算全梯度,此后每一步随机选取一个样本点的梯度进行更新。迭代格式如下:
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.