Caffe——solver优化方法

来源:互联网 发布:广告联盟js代码 编辑:程序博客网 时间:2024/05/17 01:11

Caffe——solver优化方法
caffe提供了6种优化方法
- Stochastic Gradient Descent (type: “SGD”),
- AdaDelta (type: “AdaDelta”),
- Adaptive Gradient (type: “AdaGrad”),
- Adam (type: “Adam”),
- Nesterov’s Accelerated Gradient (type: “Nesterov”) and
- RMSprop (type: “RMSProp”)

solver就是用来使loss最小化的方法。对于一个数据集D,需要优化的目标就是整个数据集中所有数据loss的平均值。
这里写图片描述
当数据集过大时,一次训练整个数据集效率很低,很占内存。因此,通过将整个数据集分成几个批(batches),每一批就是一个minibatch,其数量为N<<|D|,此时,loss函数为:
这里写图片描述
接下来我们可以用迭代的方法来优化这个问题。
在caffe中,默认采用SGD进行优化求解,后面几种方法是基于SGD发展起来的,本文介绍SGD。
1 SGD
随机梯度下降是在梯度下降法的基础上发展起来的,下降法也叫最速下降法。迭代公式如下:
这里写图片描述
其中a是负梯度学习lv(base_lr),u是上一次梯度值权重(momentum),用来加权之前梯度方向对现有梯度下降方向的影响。这两个参数需要tuning来得到最好结果,一般根据经验设定。
在DL中使用SGD,比较好的初始化策略是把学习率设置为0.01左右,在训练过程中,如果loss开始出现稳定水平,对学习率乘以一个常数因子gamma,这样过程重复多次。
对于momentum,一般取值在0.5~0.99。通常设置为0.9,momentum可以使用SGD的深度学习方法更加爱稳定及快速。
关于更多的momentum,请参看Hinton的《A Practical Guide to Training Restricted Boltzmann Machines》。
实例:

base_lr:0.01lr_policy:"step"gamma:0.1stepsize:1000max_iter:3500momentum:0.9

lr_policy设置为step,则学习率变化规则为base_lr*gamma^(floor(iter/stepsize))
即前1000次迭代,学习率为0.01;第1001~2000次迭代,学习率为0.001,第2001~3000次迭代,学习率为0.00001,第3001~3500次迭代,学习率为1e-5。

2 AdaDelta
AdaDelta是一种撸棒学习率方法,是基于梯度的优化方法。
具体介绍文献:M. Zeiler ADADELTA: AN ADAPTIVE LEARNING RATE METHOD. arXiv preprint, 2012.
示例:

net:"examples/mnist/lennet_train_test.prototxt"test_iter:100test_interval:500base_lr:1.0lr_policy:"fixed"momentum:0.95weight_decay:0.0005display:100max_iter:10000snapshot:5000snapshot_prefix:"examples/mnist/lenet_adadelta"solver_mode:GPUtype:"AdaDelta"delta:1e-6

因此Adadelta需要设置delta的值。
3 AdaGrad
自适应梯度,是基于梯度的优化方法
参考文献:Duchi, E. Hazan, and Y. Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. The Journal of Machine Learning Research, 2011.
示例:

net:"examples/mnist/mnist_autoencoder.prototxt"test_state:{stage:'test-on-train'}test_iter:500test_state:{stage:'test-on-test'}test_iter:100test_interval:500test_compute_loss:truebase_lr:0.01lr_policy:"fixed"display:100max_iter:650000weight_decay:0.0005snapshot:10000snapshot_prefix:"examples/mnist/mnist_autoencoder_adagrad_train"#solver mode:CPU or GPUsolver_mode:GPUtype:"AdaGrad"

4 Adam
是一种基于梯度的优化方法
参考文献:D. Kingma, J. Ba. Adam: A Method for Stochastic Optimization. International Conference for Learning Representations, 2015.

5 NAG
Nesterov 的加速梯度方法,作为凸优化中最理想的方法,其收敛速度非常快。
具体文献:
Sutskever, J. Martens, G. Dahl, and G. Hinton. On the Importance of Initialization and Momentum in Deep Learning. Proceedings of the 30th International Conference on Machine Learning, 2013.
示例

net:"examples/mnist/mnist_autoencoder.prototxt"test_state: { stage: 'test-on-train' }test_iter: 500test_state: { stage: 'test-on-test' }test_iter: 100test_interval: 500test_compute_loss: truebase_lr: 0.01lr_policy: "step"gamma: 0.1stepsize: 10000display: 100max_iter: 65000weight_decay: 0.0005snapshot: 10000snapshot_prefix: "examples/mnist/mnist_autoencoder_nesterov_train"momentum: 0.95# solver mode: CPU or GPUsolver_mode:GPUtype:"Nesterov"

6 RMSprop
RMSprop是Tieleman在一次 Coursera课程演讲中提出来的,也是一种基于梯度的优化方法(like SGD)
具体的介绍文献:
T. Tieleman, and G. Hinton. RMSProp: Divide the gradient by a running average of its recent magnitude. COURSERA: Neural Networks for Machine Learning.Technical report, 2012.

net:"examples/mnist/lenet_train_test.prototxt"test_iter:100test_interval:500base_lr:1.0lr_policy:"fixed"momentum:0.95weight_decay:0.0005display:100max_iter:10000snapshot:5000snapshot_prefix:"examples/mnist/lenet_adadelta"solver_mode:GPUtype:"RMSprop"rms_decay:0.98
原创粉丝点击