Caffe中文件参数设置(七):solver优化方法

标签: caffe solver 参数设置 layer data
76人阅读 评论(0) 收藏 举报
分类:

上文提到,到目前为止,caffe总共提供了六种优化方法:

  • 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的平均值。

其中,fW(x(i))计算的是数据x(i)上的loss, 先将每个单独的样本x的loss求出来,然后求和,最后求均值。 r(W)是正则项(weight_decay),为了减弱过拟合现象。

如果采用这种Loss 函数,迭代一次需要计算整个数据集,在数据集非常大的这情况下,这种方法的效率很低,这个也是我们熟知的梯度下降采用的方法。


在实际中,通过将整个数据集分成几批(batches), 每一批就是一个mini-batch,其数量(batch_size)为N<<|D|,此时的loss 函数为:
 


有了loss函数后,就可以迭代的求解loss和梯度来优化这个问题。在神经网络中,用forward pass来求解loss,用backward pass来求解梯度。

在caffe中,默认采用的Stochastic Gradient Descent(SGD)进行优化求解。后面几种方法也是基于梯度的优化方法(like SGD),因此本文只介绍一下SGD。其它的方法,有兴趣的同学,可以去看文献原文。

 

1、Stochastic gradient descent(SGD)

随机梯度下降(Stochastic gradient descent)是在梯度下降法(gradient descent)的基础上发展起来的,梯度下降法也叫最速下降法,具体原理在网易公开课《机器学习》中,吴恩达教授已经讲解得非常详细。SGD在通过负梯度和上一次的权重更新值Vt的线性组合来更新W,迭代公式如下:

 


 
其中,  是负梯度的学习率(base_lr),是上一次梯度值的权重(momentum),用来加权之前梯度方向对现在梯度下降方向的影响。这两个参数需要通过tuning来得到最好的结果,一般是根据经验设定的。如果你不知道如何设定这些参数,可以参考相关的论文。

在深度学习中使用SGD,比较好的初始化参数的策略是把学习率设为0.01左右(base_lr: 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.01   
    lr_policy: "step"  
    gamma: 0.1     
    stepsize: 1000    
    max_iter: 3500   
    momentum: 0.9  

lr_policy设置为step,则学习率的变化规则为 base_lr * gamma ^ (floor(iter / stepsize))

即前1000次迭代,学习率为0.01; 第1001-2000次迭代,学习率为0.001; 第2001-3000次迭代,学习率为0.00001,第3001-3500次迭代,学习率为10-5  

上面的设置只能作为一种指导,它们不能保证在任何情况下都能得到最佳的结果,有时候这种方法甚至不work。如果学习的时候出现diverge(比如,你一开始就发现非常大或者NaN或者inf的loss值或者输出),此时你需要降低base_lr的值(比如,0.001),然后重新训练,这样的过程重复几次直到你找到可以work的base_lr。

2、AdaDelta

AdaDelta是一种”鲁棒的学习率方法“,是基于梯度的优化方法(like SGD)。

具体的介绍文献:

M. Zeiler ADADELTA: AN ADAPTIVE LEARNING RATE METHODarXiv preprint, 2012.

示例:

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

从最后两行可看出,设置solver type为Adadelta时,需要设置delta的值。

3、AdaGrad

自适应梯度(adaptive gradient)是基于梯度的优化方法(like SGD)

具体的介绍文献:

Duchi, E. Hazan, and Y. Singer. Adaptive Subgradient Methods for Online Learning and Stochastic OptimizationThe Journal of Machine Learning Research, 2011.

示例:

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

4、Adam

是一种基于梯度的优化方法(like SGD)。

 具体的介绍文献:

D. Kingma, J. Ba. Adam: A Method for Stochastic OptimizationInternational Conference for Learning Representations, 2015.

5、NAG

Nesterov 的加速梯度法(Nesterov’s accelerated gradient)作为凸优化中最理想的方法,其收敛速度非常快。

 具体的介绍文献:

 I. Sutskever, J. Martens, G. Dahl, and G. Hinton. On the Importance of Initialization and Momentum in Deep LearningProceedings of the 30th International Conference on Machine Learning, 2013.

示例:

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

6、RMSprop

RMSprop是Tieleman在一次 Coursera课程演讲中提出来的,也是一种基于梯度的优化方法(like SGD)

具体的介绍文献:

T. Tieleman, and G. Hinton. RMSProp: Divide the gradient by a running average of its recent magnitudeCOURSERA: Neural Networks for Machine Learning.Technical report, 2012.

 示例:

    net: "examples/mnist/lenet_train_test.prototxt"  
    test_iter: 100  
    test_interval: 500  
    base_lr: 1.0  
    lr_policy: "fixed"  
    momentum: 0.95  
    weight_decay: 0.0005  
    display: 100  
    max_iter: 10000  
    snapshot: 5000  
    snapshot_prefix: "examples/mnist/lenet_adadelta"  
    solver_mode: GPU  
    type: "RMSProp"  
    rms_decay: 0.98  

最后两行,需要设置rms_decay值。

以上部分转自:http://blog.csdn.net/langb2014/article/details/50457829
查看评论

Caffe学习系列(8):solver优化方法

上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"),AdaDelta (type: "AdaDelta"...
  • qq_26898461
  • qq_26898461
  • 2016年01月01日 17:23
  • 2592

CAFFE源码学习之优化方法solver

一、前言 solver就是来计算损失函数最小化的优化方法,在caffe中,提供了六种不同的优化方法:(1)SGD; (2)AdaGrad; (3)AdaDelta; (4)Adam; (5)RMSP...
  • sinat_22336563
  • sinat_22336563
  • 2017年04月20日 21:58
  • 603

Caffe——solver优化方法

Caffe——solver优化方法 caffe提供了6种优化方法 - Stochastic Gradient Descent (type: “SGD”), - AdaDelta (t...
  • gufeng_1992
  • gufeng_1992
  • 2017年05月30日 21:19
  • 256

Caffe傻瓜系列(7):solver优化方法

上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"),AdaDelta (type: "AdaDelta"),...
  • langb2014
  • langb2014
  • 2016年01月04日 19:03
  • 4563

caffe solver参数意义与设置

batchsize:每迭代一次,网络训练图片的数量,例如:如果你的batchsize=256,则你的网络每迭代一次,训练256张图片;则,如果你的总图片张数为1280000张,则要想将你所有的图片通过...
  • qq_32206625
  • qq_32206625
  • 2016年09月22日 11:27
  • 2584

Caffe傻瓜系列(6):solver及其配置

solver算是caffe的核心的核心,它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为 # caffe train --solver=*_slove...
  • langb2014
  • langb2014
  • 2016年01月04日 18:47
  • 8839

caffe学习(8)Solver 配置详解

Solver是求解学习模型的核心配置文件,网络确定后,solver就决定了学习的效果。本文结合caffe.proto和网上资料,对solver配置进行学习。 Solver Caffe学习系列...
  • Yan_Joy
  • Yan_Joy
  • 2016年11月08日 09:45
  • 2933

caffe solver.prototxt部分关键参数设置

假设整体训练样本60000个,验证样本40000个 1. 训练样本有关的参数: batch_size:600 所以,需要迭代60000/600=100次才能完成一次遍历训练,即一个epoc...
  • yiyisunshine
  • yiyisunshine
  • 2017年05月02日 15:18
  • 907

【Caffe】solver文件配置解读

Caffe之solver文件配置讲解一下solver.prototxt文件里面个参数的意义。DL的任务中,几乎找不到解析解,所以将其转化为数学中的优化问题。sovler的主要作用就是交替调用前向传导和...
  • hduxiejun
  • hduxiejun
  • 2017年01月04日 16:16
  • 660

caffe优化方法

caffe中的solver负责处理模型优化过程,通过网络前向传播产生的loss和后向传播产生的梯度进行模型优化(更新模型中的权重)来降低loss. caffe中的solver有: Stochasti...
  • foolsnowman
  • foolsnowman
  • 2016年05月08日 15:05
  • 1022
    个人资料
    持之以恒
    等级:
    访问量: 3225
    积分: 336
    排名: 23万+
    文章存档
    最新评论