Deep Learning 优化方法总结
来源:互联网 发布:美工刀片材料 编辑:程序博客网 时间:2024/04/29 15:54
Stochastic Gradient Descent (SGD)
SGD的参数
在使用随机梯度下降(SGD)的学习方法时,一般来说有以下几个可供调节的参数:
- Learning Rate 学习率
- Weight Decay 权值衰减
- Momentum 动量
- Learning Rate Decay 学习率衰减
再此之中只有第一的参数(Learning Rate)是必须的,其余部分都是为了提高自适应性的参数,也就是说后3个参数不需要时可以设为0。
Learning Rate
学习率决定了权值更新的速度,设置得太大会使结果越过最优值,太小会使下降速度过慢。仅靠人为干预调整参数需要不断修改学习率,因此后面3种参数都是基于自适应的思路提出的解决方案。
$$w_i←w_i-\eta\frac{\partial{E}}{\partial{w_i}}$$
Weight decay
在实际运用中,为了避免模型的over-fitting,需要对cost function加入规范项,在SGD中我们加入$−ηλw_i$这一项来对cost function进行规范化。
$$w_i←w_i-\eta\frac{\partial{E}}{\partial{w_i}}-\eta\lambda w_i$$
这个公式的基本思路是减小不重要的参数对结果的影响,而有用的权重则不会受到Weight decay的影响,这种思路与Dropout的思路原理上十分相似。
Link 1
Link 2
Learning Rate Decay
一种提高SGD寻优能力的方法,具体做法是每次迭代减小学习率的大小。
- initial learning rate $\eta=\eta_0$
- learning rate decay $\eta_d$
- At each iteration $s$:
$$\eta(s)=\frac{\eta_0}{1+s\cdot{\eta_d}}$$
在许多论文中,另一种比较常见的方法是迭代30-50次左右直接对学习率进行操作($\eta←0.5\cdot\eta$)
Momentum
灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区SGD可以一更快的速度学习。
$$w_i←m\cdot w_i-\eta\frac{\partial{E}}{\partial{w_i}}$$注意:这里的表示方法并没有统一的规定,这里只是其中一种
Link 1
Link 2
Link 3
Link 4
SGD优缺点
- 实现简单,当训练样本足够多时优化速度非常快
- 需要人为调整很多参数,比如学习率,收敛准则等
Averaged Stochastic Gradient Descent (ASGD)
在SGD的基础上计算了权值的平均值。
$$\bar{w}t=\frac{1}{t-t_0}\sum^t{i=t_0+1} w_t$$
ASGD的参数
在SGD的基础上增加参数$t_0$
- 学习率 $\eta$
- 参数 $t_0$
ASGD优缺点
- 运算花费和second order stochastic gradient descent (2SGD)一样小。
- 比SGD的训练速度更为缓慢。
- $t_0$的设置十分困难
Link 1
3. Conjugate Gradient(共轭梯度法)
介于最速下降法与牛顿法之间的一个方法,它仅仅需要利用一阶导数的信息,克服了GD方法收敛慢的特点。
Link 1
Limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) (一种拟牛顿算法)
L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源。
Link 1
Link 2
Link 3
应用分析
不同的优化算法有不同的优缺点,适合不同的场合:
- LBFGS算法在参数的维度比较低(一般指小于10000维)时的效果要比SGD(随机梯度下降)和CG(共轭梯度下降)效果好,特别是带有convolution的模型。
- 针对高维的参数问题,CG的效果要比另2种好。也就是说一般情况下,SGD的效果要差一些,这种情况在使用GPU加速时情况一样,即在GPU上使用LBFGS和CG时,优化速度明显加快,而SGD算法优化速度提高很小。
- 在单核处理器上,LBFGS的优势主要是利用参数之间的2阶近视特性来加速优化,而CG则得得益于参数之间的共轭信息,需要计算器Hessian矩阵。
- Deep Learning 优化方法总结
- Deep Learning 优化方法总结
- Deep Learning 优化方法总结
- Deep Learning 优化方法总结
- Deep learning中的优化方法
- Deep learning:三十七(Deep learning中的优化方法)
- Deep Learning 之 最优化方法
- Deep Learning 最优化方法之SGD
- Deep Learning 最优化方法之AdaGrad
- Deep Learning 最优化方法之RMSProp
- Deep Learning 最优化方法之Adam
- Deep Learning 最优化方法之AdaGrad
- Deep Learning 优化小结
- deep learning实践经验总结
- 《Deep Learning》中文翻译总结
- deep learning 博客总结
- Deep Learning 最优化方法之Momentum(动量)
- Deep Learning 最优化方法之Nesterov(牛顿动量)
- Qunie——自我生成程序
- matlab 中的结果取整函数的区分
- C++中关于类与对象的学习
- Windows下测试算法在FDDB数据库的性能
- CRLF Injection漏洞的利用与实例分析
- Deep Learning 优化方法总结
- C++基类与派生类的转换
- Android 中的SparseArray
- 千万并发的秘密-内核是问题的根本
- Amazon Dynamo架构分析(一)
- android 令人烦心的魅族Smart Bar
- Linux信号通讯编程
- android增量升级
- Java中==和equals的区别