caffe study(4) - 优化算法基本原理

机器学习就两个问题,一个是model的定义,一个就是如何优化,model是战略,优化则是执行。

在Caffe现在的版本中,主要使用了三种优化算法SGD、AdaGrad、以及NAG,这三种算法快速、高效,缺点就是极容易收敛到局部极值点或者不容易收敛。

a. 就个人理解来说,对于大数据的处理,算法的高效率要稍微优于精度。对于大规模的非线性优化来说,通过不断的调参可以有效的降低局部收敛或者不收敛的状况,从某种意义上说机器学习的本质就是调的一手好参:),是经验活也是体力活。
b. 至于哪种算法好,可能要针对问题做选择。在几个月前,余凯老师在出门问问组织的一次学术活动中提到,目前工业界最为常用的算法就是mini-batch SGD,性价比最高,其他的一些算法更多的是学术上的目的。

1. 关于stochastic approximation

一般性的优化目标函数都由两部分组成,一个是loss term,一个是regularisation term,如下所示,前者就是根据model的形式定义的energy function,后者则对于参数的解空间进行了限制。

caffe <wbr>study(4) <wbr>- <wbr>优化算法基本原理


其中D为数据集,最后的目标函数就是在数据集上的平均。当数据集小的时候,计算量不算很大,但是当数据量非常大的时候,这种策略就会使得计算效率下降,由此引出了stochastic approximation的策略,也就是使用随机子集对于原函数近似的思路。
caffe <wbr>study(4) <wbr>- <wbr>优化算法基本原理

其中N<<D,这种策略成功的一个关键点就是大量的数据,主要原因有:

a.使用子集拟合出的函数只代表子集的特征,因此单一的子集不可避免会带来误差。
b.随着数据的增加,随机子集的数量越来越多,从概率上讲,其中接近真实函数的分布的的子集会占多数,因此总体上而言,拟合的函数会越来越接近全部数据拟合的函数。

2. Stochastic gradient decent(SGD)算法

优化算法就是看迭代公式,关键的就是步长和方向。

caffe中SGD权重迭代公式如下,W_{t}为t时刻的参数,V_{t}为t时刻的增量,a为learning rate,u为前一次更新的权重

caffe <wbr>study(4) <wbr>- <wbr>优化算法基本原理

通过调节a和u可以有效的改变迭代速度以及迭代的方向。可以看出W_{i}的更新是和上次增量以及梯度线性相关的的。

在Caffe的文档中给出了一个基本的调参规则

a. 初始的learning rate建议设置为0.01。
b. 在迭代过程中当loss到达了一个明显的“plateau”的时候,则以10倍的速度drop learning rate,相当于稍微减少步长,
c. u是一个调解参数,一般设置为0.9,这个参数起到一个平滑的作用,可以让SGD算法更加稳定和快速
d. u和a是一个反相关的,增加u,则降低a,反之亦然。

3. AdaGrad算法

迭代规则为

caffe <wbr>study(4) <wbr>- <wbr>优化算法基本原理

其中i是指的W中的每一个维度。这个迭代规则的意思是采用前面的所有时间的梯度生成一个归一化的因子,对当前的梯度进行一次尺度变换。这个尺度的含义就是如果前面函数梯度大,那么当前增量的加速度就小一点,反之则大一点;整个趋势还是随着迭代的次数增加,增量放缓。

4. Nesterov‘s accelerated Gradient (NAG)

这个算法严格的说来是凸优化中的算法,具有O(1/t^2)的收敛率,收敛速度比较快。因为DNN是一个non-convex的model,所以NAG方法并不能达到这个收敛速度。caffe文档中指出,这个方法对于某些deeplearning 的 architecture是非常有效的。

caffe <wbr>study(4) <wbr>- <wbr>优化算法基本原理

这个公式和SGD方法很类似,不同之处在于其梯度项,不再是简单的当前位置的梯度,而是当前位置加上增量之后的新位置处的梯度。

5. 一点思考

5年前随着Sparse representation的热潮的兴起,做很多老的凸优化的算法在新的计算机视觉任务中显示出了巨大的能力,比如APG、NAG、ADMM等,人们发现了有趣的现象,效率高优化算法往往都是老算法,越老效率越高,主要原因是早些时候,计算能力非常有限,早期的数学家只好真正从算法中挤水分;随着时代的发展,计算能力强了,算法效率差不多就行了;现在到了大数据时代,效率终于又成为了瓶颈,所以老算法又焕发了第二春。另外一些二阶段方法 Newton,LBFGS等因为数据存储量以及计算量大,在大规模的数据中可能不如最简单的SGD类方法好用,当然选用什么算法,要视计算资源以及计算任务而定。

你可能感兴趣的:(caffe study(4) - 优化算法基本原理)