前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习过程中的优化算法

深度学习过程中的优化算法

作者头像
CodeInHand
发布2018-03-26 11:56:27
1.1K0
发布2018-03-26 11:56:27
举报
文章被收录于专栏:Pytorch实践Pytorch实践Pytorch实践

神经网络的训练过程实质是得到最优化目标函数的过程,常见的目标函数MSE Loss、Cross Entropy Loss、NLL Loss等,网络训练过程就是最小化Loss的过程。Loss可以理解为模型预测值与真实值之间的差距。一般这些Loss函数是凸函数,可以使用最优化的相关算法最小化Loss,具体包括随机梯度下降、共轭梯度下降、牛顿法、拟牛顿法等。归功于神经网络的backward过程,使得梯度相关的搜索算法得以应用。下面简单介绍神经网络训练过程的几种优化方法。

一.基本算法

一阶优化算法

1.梯度下降

假设你的目标函数是f(x,w),其中w是函数的参量。当前你的优化目标是最小化目标函数,求的函数最小时的模型参数w。求最值问题就类似于寻找极值点,通过梯度查找,梯度下降实质是使得沿着目标函数下降最快的方向更新模型参数w,使得算法收敛。一般而言,会在梯度方向加一个学习率(learning Rate),用于设置在梯度方向前进的步长。

2. SGD

随机梯度下降与梯度下降的区别在于随机选取计算梯度的样本,并且可以支持mini-batch进行模型参数的更新。但是,SGD的学习率是固定的,容易收敛到局部最优。

3. Momentum

Momentum是模拟物理里动量的概念,积累之前的动量来替代真正的梯度,Momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛。

4. Adagrad

Adagrad是自适应学习率的算法,通过引入一个平滑因子,不断减小学习率,由于学习率不断减小,收敛过早,效果不太好。

5. Adadelta & RMSprop

二者都是对Adagrad的改进,同样也是自适应学习率的算法。

6. Adam

Adam算法可以看作RMSprop和动量方法的结合。效果很好,现在做深度学习基本默认使用Adam算法。

二阶优化算法

函数通过泰勒公式展开得以表示为零阶、一阶、二阶…等高阶余量的累加。前边的梯度算法都是一阶近似。还有近似二阶余量的算法,类似牛顿法、拟牛顿法、BFGS、LBFGS等。有兴趣的同学可以查看具体原理和实现过程。

二.算法优化

Andrychowicz[1]在2016年提出了对优化器(Optimizer)进行训练,即他们在训练LSTM网络的同时,也对LSTM优化器进行迭代更新。但是,这无疑增加了模型训练的复杂程度。Zoph[2]于2017年提出一种模型结构,便于强化学习的搜索过程,这种模型结构达到了语言模型的最优效果。相同的搜索方法也可以用在深度学习过程。

目前主流的优化算法几乎都很相似,它们都是用了对于过去梯度值的指数移动平均[3]。Bello et al. (2017)[4]借用强化学习的框架,定义梯度更新的策略为一个候选空间,每次进行梯度更新都是从这一空间进行采样得到更新策略,训练模型在测试集合的效果作为reward返回,便于更新策略的挑选。

Reference

[1] Andrychowicz,M., Denil, M., Gomez, S., Hoffman, M. W., Pfau, D., Schaul, T., & deFreitas, N. (2016). Learning to learn by gradient descent In Advances in NeuralInformation Processing Systems.

[2] Zoph, B., &Le, Q. V. (2017). Neural Architecture Search with Reinforcement Learning. InICLR 2017.

[3] Ruder, S. (2016). An overview ofgradient descent optimization algorithms. arXiv Preprint arXiv:1609.04747

[4] Bello, I., Zoph, B., Vasudevan, V.,& Le, Q. V. (2017). Neural Optimizer Search with Reinforcement Learning. InProceedings of the 34th International Conference on Machine Learning

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CodeInHand 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档