caffe学习笔记1 SGD solver
2016-06-15 19:04
253 查看
solver是caffe中一个很重要的概念,简单来说solver通过不断 forward和backward计算梯度,用计算得到的梯度对模型进行优化,更新深度神经网络各层的参数,使得loss最小以使模型更好地拟合数据。
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状态
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)更新网络权重。
Vt+1=μVt+α∇L(Wt)
Wt+1=Wt−Vt+1
其中Wt+1表示在t+1次迭代后的网络权重,Vt+1 则是第t+1次迭代中网络权重的更新量。Wt和Vt 相应是第t次迭代更新后的网络权重和网络权重更新量。
为了在训练中使模型更好、更快地收敛,可能需要对定义solver中的参数(α和μ)进行微调。
在上面这个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。
缺少部分,待续……
2 Caffe Tutorial——Solver
3 Bottou L. Stochastic gradient descent tricks[M]//Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012: 421-436.
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.
相关文章推荐
- DL.DT.DD实现左右的布局简单例子第1/2页
- dl,dt,dd制作的CSS垂直菜单
- div+css布局必了解的列表元素ul ol li dl dt dd详解
- CUDA搭建
- 深入理解CNN的细节
- Some Notes of Caffe Installation
- Some Notes of Python Interfaces Pycaffe (Caffe)
- TensorFlow人工智能引擎入门教程之十二 Caffe转换tensorflow并 跨平台调用
- TensorFlow人工智能引擎入门教程所有目录
- VC++动态链接库(DLL)编程深入浅出(四) 出处:PConline
- 安装caffe过程记录
- py-faster-rcnn训练笔记(ubuntu14.04+cuda7.5+cuDNNv3+Python2.7)
- convolutional neural network
- UFLDL Exercise: Convolutional Neural Network
- 批处理梯度下降BGD与随机梯度下降SGD
- 使用深度卷积网络和支撑向量机实现的商标检测与分类的例子
- 对Pedestrian Detection aided by Deep Learning Semantic Tasks的小结
- 准确率, 召回率,mAP
- ubuntu 14.04上配置无GPU的Caffe(A卡机适用)