caffe优化算法_cafere算法-程序员宅基地

技术标签: CNN  caffe  神经网络  

原文地址:http://demo.netfoucs.com/danieljianfeng/article/details/42931721

在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解。Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新,试图减小损失。

 Caffe已经封装好了三种优化方法,分别是Stochastic Gradient Descent (SGD), AdaptiveGradient (ADAGRAD), and Nesterov’s Accelerated Gradient (NAG)。


 Solver的流程:

1.     设计好需要优化的对象,以及用于学习的训练网络和用于评估的测试网络。

2.     通过forward和backward迭代的进行优化来跟新参数

3.     定期的评价测试网络

4.     在优化过程中显示模型和solver的状态

 每一步迭代的过程

1.     通过forward计算网络的输出和loss

2.     通过backward计算网络的梯度

3.     根据solver方法,利用梯度来对参数进行更新

4.     根据learning rate,history和method来更新solver的状态

 

和Caffe模型一样,Caffe solvers也可以CPU / GPU运行。


1. Methods

Solver方法一般用来解决loss函数的最小化问题。对于一个数据集D,需要优化的目标函数是整个数据集中所有数据loss的平均值。


其中, r(W)是正则项,为了减弱过拟合现象。

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


在实际中,会采用整个数据集的一个mini-batch,其数量为N<<|D|,此时的loss 函数为:
 


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


1.1 SGD

类型:SGD
随机梯度下降(Stochastic gradient descent)通过negative梯度 和上一次的权重更新值V_t的线性组合来更新W,迭代公式如下:


 
其中,learning rate  是negative梯度的权重,momentum是上一次更行的权重。这两个参数需要通过tuning来得到最好的结果,一般是根据经验设定的。如果你不知道如何设定这些参数,可以参考下面的经验法则,如果需要了解更多的参数设置技巧可以参考论文Stochastic Gradient Descent Tricks [1]。


设置learningrate和momentum的经验法则

例子

base_lr: 0.01     # begin training at a learning rate of0.01 = 1e-2 lr_policy: "step" # learning ratepolicy: drop the learning rate in "steps"                  # by a factor of gamma everystepsize iterations gamma: 0.1        # drop the learning rate by a factor of10                  # (i.e., multiply it by afactor of gamma = 0.1) stepsize: 100000  # drop the learning rate every 100K iterations max_iter: 350000  # train for 350K iterations total momentum: 0.9

在深度学习中使用SGD,好的初始化参数的策略是把learning rate设为0.01左右,在训练的过程中,如果loss开始出现稳定水平时,对learning rate乘以一个常数因子(比如,10),这样的过程重复多次。此外,对于momentum,一般设为0.9,momentum可以让使用SGD的深度学习方法更加稳定以及快速,这次初始参数参论文ImageNet Classification with Deep Convolutional Neural Networks [2]。

上面的例子中,初始化learning rate的值为0.01,前100K迭代之后,更新learning rate的值(乘以gamma)得到0.01*0.1=0.001,用于100K-200K的迭代,一次类推,直到达到最大迭代次数350K。

Note that the momentum setting μ effectively multiplies the size of your updates by a factor of 11−μ after many iterations of training, so if you increase μ, it may be a good idea to decrease α accordingly (and vice versa).

For example, with μ=0.9, we have an effective update size multiplier of 11−0.9=10. If we increased the momentum to μ=0.99, we’ve increased our update size multiplier to 100, so we should drop α (base_lr) by a factor of 10.

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


1.2 AdaGrad

类型:ADAGRAD

自适应梯度(adaptive gradient)[3]是基于梯度的优化方法(like SGD),以作者的话说就是,“find needles in haystacks in the form of very predictive but rarely seen features”。给定之前所有迭代的更新信息 ,每一个W的第i个成分的更新如下:


 
在实践中需要注意的是,权重,AdaGrad的实现(包括在Caffe中)只需要使用额外的存储来保存历史的梯度信息,而不是的存储(这个需要独立保存每一个历史梯度信息)。(自己没有理解这边的意思)


1.3 NAG

类型:NAG
Nesterov 的加速梯度法(Nesterov’s accelerated gradient)作为凸优化中最理想的方法,其收敛速度可以达到 而不是 。但由于深度学习中的优化问题往往是非平滑的以及非凸的(non-smoothness and non-convexity),在实践中NAG对于某类深度学习的结构可以成为非常有效的优化方法,比如deep MNIST autoencoders[5]。


权重的更新和SGD的的非常类似:


 
不同的是在计算梯度的时候,在NAG中求解权重加上momentum的梯度,而在SGD中只是简单的计算当前权重的梯度


2. 参考:

[1] L. Bottou. Stochastic Gradient Descent Tricks. Neural Networks: Tricks of the Trade: Springer, 2012.
[2] A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet Classification with Deep Convolutional Neural Networks. Advances in Neural Information Processing Systems, 2012.
[3] J. Duchi, E. Hazan, and Y. Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. The Journal of Machine Learning Research, 2011.
[4] Y. Nesterov. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k√). Soviet Mathematics Doklady, 1983.
[5] I. 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.
[6] http://caffe.berkeleyvision.org/tutorial/solver.html
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuxiabing150/article/details/48009733

智能推荐

两台电脑怎么互传文件?用它就能搞定!_两台主机互相传输文件-程序员宅基地

文章浏览阅读4.2k次。最近公司给小编新配置了一台办公电脑,小编开心的同时,一想到要从旧电脑将所有数据拷贝到新电脑,还得在新电脑上重新安装各种办公软件,就不禁烦恼起来。但俗话说“山重水复疑无路,柳暗花明又一村”,在同事的建议下,小编使用了这款易我电脑迁移软件,不仅可以将旧电脑的文件完整迁移到新电脑,还能将旧电脑上安装的应用程序甚至账户设置也一并迁移,不得不感叹世界真奇妙啊!下面就给大家分享一下小编是如何做到在两台电脑之间互传文件的。首先第一步,下载并安装易我电脑迁移软件,运行程序。点击下载>>官网详情: htt_两台主机互相传输文件

Oracle 11G OCP 1Z0-053 512-程序员宅基地

文章浏览阅读77次。(512)Which two statements correctly describe the relationship among the Scheduler components: job, program, and sc..._ocp 053 512

Hi35xx基础篇1----启动VPSS_hi35xx基础篇 启动vpss-程序员宅基地

文章浏览阅读1.9k次。Hi35xx启动VPSS分为几个步骤:1. /*** 设置 Vpss Grp 属性 ***//*Define attributes of vpss GROUP*/typedef struct hiVPSS_GRP_ATTR_S{ /*statistic attributes*/ HI_U32 u32MaxW; /*MAX width of the group*/..._hi35xx基础篇 启动vpss

AtCoder Beginner Contest 224题解 A-G_萌妹g点-程序员宅基地

文章浏览阅读3.9k次,点赞10次,收藏2次。AtCoder Beginner Contest 224签到题、简单题A - Tires判断一个字符串是不是以er或ist结尾。直接做即可#include <bits/stdc++.h>using namespace std;int main() { string s; cin >> s; int n = s.size(); if (n >= 2 && s[n-1]=='r' && s[n-2]=_萌妹g点

win10系统bug:默认中文输入法在系统更新后突然变成了微软拼音_联想小新输入法为什么变成微软拼音模式-程序员宅基地

文章浏览阅读9.3k次。问题描述我本来默认输入法为搜狗输入法,而且当时已经将微软拼音从启用的输入法中删除了,可是一次win10大版本更新后突然变成了微软拼音为默认的中文输入法,这怎么能忍。点击win10桌面右下角的通知中心->所有设置->时间和语言->语言,在首选语言中点击“中文(中华人民共和国)”,选择“选项”,可以看到键盘中只有一个搜狗拼音,并没有微软拼音;而在时间和语言->语言->选择始终默认使用的输入法->语言栏选项->高级键设置中却可以看到与微软拼音相关的热键,这就是我题_联想小新输入法为什么变成微软拼音模式

茶叶网-程序员宅基地

文章浏览阅读554次。喝茶养生是中国人流传了几千年的传统。中国茶叶形态万千,按照加工工艺的不同,可分为绿茶、红茶、青茶、黑茶、白茶和黄茶六类。  绿茶降火防癌 绿茶属于不发酵茶,清汤绿叶,十分诱人。儿茶素等多酚类化合物被公认为是绿茶中对健康有益的关键成分,具有多种保健功能,包括预防癌症、改善心血管健康、减肥、抵御电离辐射等。  青茶润燥减肥 乌龙茶又名青茶,既有绿茶的清香,又有红茶醇厚的滋味。除了在绿茶

随便推点

Lotus Cars_lotuscars domain-程序员宅基地

文章浏览阅读324次。From Wikipedia, the free encyclopediaJump to: navigation, searchLotus Logo with monogram of its founder, Anthony Colin Bruce ChapmanLotus Cars is a British manufacturer of sports and racing cars bas_lotuscars domain

企业IT架构规划标准框架,IT架构规划过程 _it规划框架-程序员宅基地

文章浏览阅读3.8k次。描述: 图1:企业IT架构规划标准框架图片: 描述: 图2:企业IT架构规划过程图片: 美国IT架构规划专家Zachman在上个世纪的90年代初,就建立了企业IT架构标准框架(Zachman Framework),如图1。Zachman的模型分两个维度:横向维度(5W1H),是企业IT架构的构成要素,IT架构的构成分为:业务架构、数据架构、应用架构与IT基础设施架构。因为数据是IT系统管理_it规划框架

html锚点特效,jQuery实现页面内锚点平滑跳转特效的方法总结-程序员宅基地

文章浏览阅读395次。平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。jQuery实现页面内锚点平滑跳转#hovertree {height: 800px;background: red;text-align:cen..._锚点跳转好看的样式

ISO Latin-1字符集-程序员宅基地

文章浏览阅读52次。ISO Latin-1字符集字符十进制字符编号实体名字说明---&amp;#00;---未使用Unused---&amp;#01;---未使用Unused---&amp;#02;---未使用Unused---&amp;#03;---未使用Unuse..._iso latin-1字符集: 在java中有没有专门的类

R语言︱大数据集下运行内存管理_memory.limit()-程序员宅基地

文章浏览阅读2.5w次,点赞5次,收藏53次。在实操时出现以下的问题:Error: cannot allocate vector of size 2.9GB大神指导(http://bbs.pinggu.org/thread-3682816-1-1.html)cannot allocate vector就是典型的数据太大读不了方法有三一、升级硬件二、改进算法三、修改操作系统分配给R的内存上限, memory._memory.limit()

深入理解51单片机串口通信-程序员宅基地

文章浏览阅读2w次,点赞39次,收藏138次。串口通信的基本认识通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高。以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线。串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要..._51单片机串口