深度学习:优化加速
来源:互联网 发布:混沌战域美人数据 编辑:程序博客网 时间:2024/05/18 03:34
本文按以下目录编排
一、Mini-batch梯度下降
二、优化算法
2.1 平均加权(Exponentially Weight Average)
2.2 动量(Momentum)梯度下降法
2.3 RMSprop算法
2.4 Adam优化算法
2.5 学习率衰减
三、局部最优
参考文献
一、Mini-batch梯度下降
优化算法可以帮助加快训练模型,其中一个难点在于深度学习没有在大数据领域发挥最大的效果。在巨大的数据集的基础上来训练模型速度很慢,使用快速的优化算法比好的优化算法能大大提高效率。Mini-batch梯度下降是一个有效的应用。
如果数据样本有m个,当m很大时,处理速度很慢。只有处理完m个样本时才能进行梯度下降法。如果我们在处理完整个数据之前,先让梯度下降法处理一部分数据,能大大提升速度。我们可以分割为一些子集(Mini-batch),比如先取1000个样本为第一个子样本,对于5000,000的数据就有5000个子样本,对预测值做同样的处理。
对第t个子集执行前向传播,计算第t个子集的成本函数
以上进行5000次为对数据进行了一代的训练。
batch梯度下降时,J成本函数随迭代次数下降,而mini-batch的成本函数整体趋势是下降的,但是有噪声产生。
batch gradient descent等价于mini-batch=m:成本函数J相对噪声小,幅度大。缺点是当训练样本很大时,单次迭代耗时长。
stochastic gradient descent(随机梯度下降法)等价于mini-batch=1:每一个样本都是独立的mini-batch。成本函数J有时候会靠近下降方向,有时候远离下降方向。平均来看最终会靠近最小值,但是永远不会收敛。缺点是失去向量化带来的加速。
因此通过选择不大不小的mini-batch尺寸,学习率可以达到最大,有以下两点优点:一,可以利用向量化加速。二,不需要等待所有样本处理完就可以计算梯度下降。比随机梯度下降更持续地向最小值靠近,但是也不会总朝最小值靠近,可以采取减小学习率的方法。
选择的技巧
如果训练集小(m<2000),可以用batch gradient descent
一般mini-batch的大小可以选为2的次方,如64,128,256,512。为了找到最有效减小成本函数的那个,可以多试试,选择合适的size使得让梯度下降法最高效。
二、优化算法
2.1 平均加权(Exponentially Weight Average)
指数平均加权,在统计学中被称为指数加权移动平均值,具有以下表达式:
S_t=
以英国伦敦每日的温度变化为例,下图是真实的数据点:
根据指数平均加权,当
指数平均加权计算初始值时,会出现初始值计算不准的情况,会低于真实值,如图中紫线所示。这时候需要用到偏差修正
2.2 动量(Momentum)梯度下降法
基本思想是计算梯度的指数加权平均数,并用该梯度更新权重。当优化成本函数时,红点代表最低点,梯度下降法慢慢摆动到最低点,上下波动降低了速度。因此,我们希望在横轴上加快学习,纵轴上减小波动。使用Momentum 梯度下降法可以达到这种效果。使用后的变化如下图肿红线所示。但是如果要最小化碗状函数,微分项相当于加速度。
On iteration t:
Compute dW,db on the current mini-batch
在第t次迭代时,计算如上式所示,有两个超参数
2.3 RMSprop算法
RMSprop全称是root mean square prop算法,是另一种加速梯度下降的方法。为了便于理解,我们假设纵轴代表参数b,横轴为W。与Momentum类似,我们想减慢纵轴的变化,同时加快横轴的学习,至少不是减缓横轴方向的学习。
On iteration t:
Compute dW,db on the current mini-batch
因此我们希望
因此应用RMSprop之后,梯度下降过程如图中绿线所示,纵轴摆动变小。另一个好处是可以用一个更大的学习率 学习,而不必担心纵轴方向的较大摆动。实际上,横轴纬度和纵轴纬度都可能是高维的参数,这里b和w只是为了方便地说明。
2.4 Adam优化算法
RMSprop和Adam优化算法是少有的经受的考验的两种算法。已被证明适用于不同的深度学习结构,并且能够很好地解决许多问题。Adam算法基本是Momentum和RMSprop的结合,相当于Momentum更新了
On iteration t:
Compute dW,db on the current mini-batch
一般使用Adam的时候需要计算修正偏差
以上就是具体的Adam算法,被证明能有效适用于不同的神经网络,适用于广泛的结构。算法中的超参数
2.5 学习率衰减
学习率衰减是另外一种加快学习算法的方法。当我们使用mini-batch时,学习率
使用mini-batch时,一代要遍历一次数据。因此我们可以将学习率设为以下形式。
decay_rate是衰减率,epoch_num是代数,
此外还有离散下降的学习率
也会手动调整学习率
三、局部最优
随着深度学习研究的深入,我们对局部最优的理解发生了变化。以往我们想到局部最优的时候,脑海里会浮现出下图的形式,优化的参数假设为,W1,W2,高度是损失函数,可以看到,存在很多局部最优点。
这些低维的图曾经影响了我们的理解,但是这些理解并不正确,事实上,当创建一个神经网络时,通常梯度为零的点并不是图中的局部最优点,而是成本函数的零梯度点,通常是鞍点。可以想象就是坐在马鞍上的点,也就是说,导数为零的点,就是图中绿点。
对于具有高维空间的函数来说,如果梯度为零,那么在每个方向上,它可能是凸函数,也可能是凹函数,需要都达到梯度为零,这种几率是很小的。因此在高维空间中,更有可能遇到鞍点,而不是局部最优。
如果局部最优不是问题,问题就是会长时间遇到平稳段,也就是导数为零的点,需要花上很长时间才能走出平稳段,首先不太可能是困在极差的局部最优,条件是训练较大的神经网络,存在大量参数,成本函数是高维空间函数。在平稳短时是一个问题,学习速率很慢,这也是上述几个优化算法能加速算法的地方,能够较快地走出平稳段。事实上,面对如此高纬度的空间,很难有人有那么好的直觉知道这些空间长什么样,但是随着我们对它们理解正在不断加深。
参考资料
改善深层神经网络:超参数调试、正则化以及优化 - 网易云课堂
课件-Github
注:本文涉及的图片及资料均整理翻译自Andrew Ng的Improving Deep Neural Networks课程,版权归其所有。翻译整理水平有限,如有不妥的地方欢迎指出。
- 深度学习:优化加速
- 深度学习框架设计序列--加速优化
- Facebook加速深度学习研发
- 深度学习的训练加速
- 深度学习模型压缩加速
- FPGA 深度学习CNN加速
- 使用GPU和Theano加速深度学习
- 使用GPU和Theano加速深度学习
- 深度学习框架Theano利用GPU加速
- MobileNets—深度学习模型的加速
- 【深度学习】win10+Theano+GPU加速配置
- 深度学习中的软件加速算法
- 【深度学习】向量化加速(1)
- MIT Taco 项目:自动生成张量计算的优化代码,深度学习加速效果提高 100 倍
- 深度学习优化方法
- 深度学习优化问题
- 深度学习 优化算法
- 【深度学习】优化方法
- Eclipse中导入只有src和target文件夹的maven项目
- JS实现倒计时动画效果
- ElasticSearch学习34_ElasticSearch-5.0安装head插件
- axios、node交互跨域请求
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
- 深度学习:优化加速
- sql基本语法
- 前言-如何学习区块链
- RecycleView添加头部和尾部
- python3 部署
- 三维场景的渲染优化
- concurrent-5-AQS-ReentrantReadWriteLock
- Oracle之索引组织表
- numPy基础知识