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
- Caffe——solver优化方法
- Caffe学习系列(8):solver优化方法
- Caffe傻瓜系列(7):solver优化方法
- Caffe学习系列(8):solver优化方法
- Caffe学习系列(8):solver优化方法
- caffe学习系列:solver优化方法
- Caffe系列(7):solver优化方法
- Caffe傻瓜系列(7):solver优化方法
- Caffe学习系列(8):solver优化方法
- Caffe学习系列(8):solver优化方法
- Caffe学习系列(8):solver优化方法
- Caffe学习系列(8):solver优化方法
- (9)caffe总结之solver优化方法
- CAFFE源码学习之优化方法solver
- Caffe学习系列(8):solver优化方法
- caffe学习笔记8:solver优化方法
- Caffe新手教程傻瓜系列(7):solver优化方法
- caffe:solver.cpp——init()
- 多线程-进程和线程的概述
- 关于js异步上传文件
- 3d 鼠标控制Camera
- Kinect1代+KinectSDK1.8+OpenNI2.2+NITE2.0+Opencv2.4.10环境配置(2)
- 反射
- Caffe——solver优化方法
- 一位资深程序员大牛给予Java初学者的学习路线建议
- oracle分表分区提高检索速度的相关方法
- JavaBean编程学习--使用JavaBean提高JSP的代码重用性
- codevs1060 搞笑世界杯(dp)
- vmware workstation11 虚拟机连接网络配置
- python制作一个简单网络爬虫
- 面试题23从上往下打印二叉树
- (LeetCode) 494. Target Sum