您的位置:首页 > Web前端

caffe学习笔记1 SGD solver

2016-06-15 19:04 253 查看
solver是caffe中一个很重要的概念,简单来说solver通过不断 forward和backward计算梯度,用计算得到的梯度对模型进行优化,更新深度神经网络各层的参数,使得loss最小以使模型更好地拟合数据。

1. solver的作用及分类

在caffe中封装的有以下几种solver:

Stochastic Gradient Descent (type: “SGD”)

AdaDelta (type: “AdaDelta”)

Adaptive Gradient (type: “AdaGrad”)

Adam (type: “Adam”)

Nesterov’s Accelerated Gradient (type: “Nesterov”)

RMSprop (type: “RMSProp”)

在以上solver中比较常用的Stochastic Gradient Descent(SGD),也即随机梯度下降,其他的solver我还暂时没有用到过。

solver主要进行以下工作:

定义并生成一个网络用来训练和测试

反复迭代对网络进行forward和backward计算并更新网络参数

根据给定参数定期对训练中的网络进行测试评估

根据所给参数在训练过程中定期保存网络权重

solver从最开始初始化的网络模型开始在每次迭代计算过程中都将进行:

调用forward function 计算网络输出和loss

调用backward function 计算梯度

根据所选solver类型的不同相应地根据计算得到的梯度更新网络参数

根据所选学习率、solver的类型和历史数据更新solver状态

2. 理论介绍

solver把最优化深度神经网络当做最小化loss的过程。比如有一个含有D个训练数据的数据集,我们最优化(也即最小化)的目标就是这D个数据的平均loss,也即:

L(W)=1|D|∑i|D|fW(X(i))+λr(W)

其中,fW(X(i))是在单个数据X(i)上的loss ,r(W)是以λ为权重的一个正则项。在实际应用中|D|一般是一个非常大的数字,所以我们常常用一个远小于|D|的数字N代替,每次迭代计算在数据集中随机选N个数据近似代替。

L(W)≈1N∑iNfW(X(i))+λr(W)

solver在forward传播中计算fW,在backward传播中计算梯度∇fW。

网络参数按照不同的solver定义的不同规则,结合计算得到的error gradient ∇fW、正则项的梯度∇r(W)更新网络权重。

3. SGD solver

随机梯度下降算法更新网络模型权重W时结合梯度∇L(W)和前一次迭代的更新权重Vt。学习率α(learning rate)是更新权重时的系数,momentum μ是上一次迭代权重在这次迭代中权重更新的系数。整个过程可以用以下两个方程表示:

Vt+1=μVt+α∇L(Wt)

Wt+1=Wt−Vt+1

其中Wt+1表示在t+1次迭代后的网络权重,Vt+1 则是第t+1次迭代中网络权重的更新量。Wt和Vt 相应是第t次迭代更新后的网络权重和网络权重更新量。

为了在训练中使模型更好、更快地收敛,可能需要对定义solver中的参数(α和μ)进行微调。

4. 设置solver参数的一些技巧

把学习率α设置为0.01并且在训练过程中间隔一定的迭代次数减小学习率,是一个比较好而且得到经验证明的策略。一般吧momentum μ设为0.9,通过平滑迭代过程中更新权重的系数,SGD solver在最优化过程中往往更加稳定和迅速。这个策略在ILSVRC2012总被AlexNet采用,caffe也可以通过定义solver各种参数的prototxt文件复现这个策略。示例如下:

base_lr: 0.01     # begin training at a learning rate of 0.01 = 1e-2

lr_policy: "step" # learning rate policy: drop the learning rate in "steps"
# by a factor of gamma every stepsize iterations

gamma: 0.1        # drop the learning rate by a factor of 10
# (i.e., multiply it by a factor of gamma = 0.1)

stepsize: 100000  # drop the learning rate every 100K iterations

max_iter: 350000  # train for 350K iterations total

momentum: 0.9


在上面这个prototxt定义的SGD solver中momentum μ=0.9,在训练的前100000次迭代采用初始学习率base_lr α=0.01,100000次之后的迭代学习率lr α′=αγ=(0.01)(0.1)=0.001=10−3,200000次迭代后的学习率lr α′′=10−4,300000次迭代后直到训练结束(3500000次迭代)学习率lr α′′′=10−5。

缺少部分,待续……

5. 参考资料

1 caffe API 文档

2 Caffe Tutorial——Solver

3 Bottou L. Stochastic gradient descent tricks[M]//Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012: 421-436.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  caffe CNN solver SGD DL