深度学习:梯度下降算法改进(二)

简介: 深度学习:梯度下降算法改进(二)

2.2.4 指数加权平均



指数加权平均(Exponentially Weight Average)是一种常用的序列数据处理方式,通常用在序列场景如金融序列分析、温度变化序列分析。


假设给定一个序列,例如北京一年每天的气温值,图中蓝色的点代表真实数据。


image.png


那么这样的气温值变化可以理解成优化的过程波动较大,异常较多。那么怎么平缓一些呢,这时候就要用到加权平均值了,如指数加权平均值。首先看一些效果。


image.png


这条红线怎么计算出来?通过指数加权的公式即:


image.png


其中Y_{t}Yt为 t 下的实际值,S_{t}St为t下加权平均后的值,\betaβ为权重值。


上图的红线中,\betaβ为0.9, 那么第一天的温度,第二天的温度,第三天的温度计算为


S_{1} = Y1S1=Y1
S_{2} = 0.9 S_{1} + 0.1 Y_{2}S2=0.9S1+0.1Y2
......
S_{99} = 0.9 S_{98} + 0.1 Y_{99}S99=0.9S98+0.1Y99
S_{100} = 0.9 S_{99} + 0.1 Y_{100}S100=0.9S99+0.1Y100
......


假设就100天,那么合并的结果S_{100} = 0.1 Y_{100} + 0.1 * 0.9 Y_{99} + 0.1 * {(0.9)}^2 Y_{98} + {...}S100=0.1Y100+0.1∗0.9Y99+0.1∗(0.9)2Y98+...


下图中,当取权重值 β=0.98 时,可以得到图中更为平滑的绿色曲线。而当取权重值\betaβ=0.5 时,得到图中噪点更多的黄色曲线。\betaβ越大相当于求取平均利用的天数越多,曲线自然就会越平滑而且越滞后。这些系数被称作偏差修正(Bias Correction)**

image.png

image.png


上述点数据,我们是否可以理解成梯度下降的过程,每一迭代优化计算出来的梯度值,


2.2.5 动量梯度下降法



动量梯度下降(Gradient Descent with Momentum)是计算梯度的指数加权平均数,并利用该值来更新参数值。动量梯度下降法的整个过程为:


S_{dW^{[l]}} = \beta S_{dW^{[l]}} + (1 - \beta) dW^{[l]}SdW[l]=βSdW[l]+(1−β)dW[l]


S_{db^{[l]}} = \beta S_{db^{[l]}} + (1 - \beta) db^{[l]}Sdb[l]=βSdb[l]+(1−β)db[l]


W^{[l]} := W^{[l]} - \alpha S_{dW^{[l]}}W[l]:=W[l]−αSdW[l]


b^{[l]} := b^{[l]} - \alpha S_{db^{[l]}}b[l]:=b[l]−αSdb[l]


那么这样梯度下降过程会有什么变化,如下图所示:


20200606035038697.png


使用动量梯度下降时,通过累加过去的梯度值来减少抵达最小值路径上的波动,加速了收敛,因此在横轴方向下降得更快,从而得到图中红色或者紫色的曲线。当前后梯度方向一致时,动量梯度下降能够加速学习;而前后梯度方向不一致时,动量梯度下降能够抑制震荡。


我们可以这样形象的理解,小球在向下运动过程中会有加速度,导致越来越快,由于\betaβ的存在使得不会一直加速运行。


2.2.6 RMSProp 算法



RMSProp(Root Mean Square Prop)算法是在对梯度进行指数加权平均的基础上,引入平方和平方根。


s_{dw} = \beta s_{dw} + (1 - \beta)(dw)^2sdw=βsdw+(1−β)(dw)2


s_{db} = \beta s_{db} + (1 - \beta)(db)^2sdb=βsdb+(1−β)(db)2


w := w - \alpha \frac{dw}{\sqrt{s_{dw} + \epsilon}}w:=w−α√sdw+ϵdw


b := b - \alpha \frac{db}{\sqrt{s_{db} + \epsilon}}b:=b−α√sdb+ϵdb


其中\epsilonϵ是一个非常小的数,防止分母太小导致不稳定,当 dw 或 db 较大时,(dw)^{2}, (db)^{2}(dw)2,(db)2会较大,进而s_dwsdw也会较大,最终使得\frac{db}{\sqrt{s_{db} + \epsilon}}√sdb+ϵdb等结果变得非常小。


最终RMSProp 有助于减少抵达最小值路径上的摆动,并允许使用一个更大的学习率 α,从而加快算法学习速度。


2.2.7 Adam算法



Adam 优化算法(Adaptive Moment Estimation,自适应矩估计)将 Momentum 和 RMSProp 算法结合在一起。


假设用每一个 mini-batch 计算 dW、db,第tt次迭代时:


v_{dW} = \beta_1 v_{dW} + (1 - \beta_1) dWvdW=β1vdW+(1−β1)dW


v_{db} = \beta_1 v_{db} + (1 - \beta_1) dbvdb=β1vdb+(1−β1)db


v^{corrected}_{dW^{[l]}} = \frac{v_{dW^{[l]}}}{1 - (\beta_1)^t}vdW[l]corrected=1−(β1)tvdW[l]


s_{dW} = \beta_2 s_{dW} + (1 - \beta_2) {(dW)}^2sdW=β2sdW+(1−β2)(dW)2


s_{db} = \beta_2 s_{db} + (1 - \beta_2) {(db)}^2sdb=β2sdb+(1−β2)(db)2


s^{corrected}_{dW^{[l]}} = \frac{s_{dW^{[l]}}}{1 - (\beta_1)^t}sdW[l]corrected=1−(β1)tsdW[l]


其中ll为某一层,tt为移动平均第次的值


Adam 算法的参数更新:


image.png


2.2.8 TensorFlow Adam算法API



tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999,epsilon=1e-08,name='Adam')

Adam 优化算法有很多的超参数:


  • 学习率\alphaα:需要尝试一系列的值,来寻找比较合适的
  • β1:常用的缺省值为 0.9
  • β2:Adam 算法的作者建议为 0.999
  • ϵ:Adam 算法的作者建议为epsilon的默认值1e-8


注:β1、β2、ϵ 通常不需要调试


2.2.9 学习率衰减



如果设置一个固定的学习率 α


  • 在最小值点附近,由于不同的 batch 中存在一定的噪声,因此不会精确收敛,而是始终在最小值周围一个较大的范围内波动。


  • 如果随着时间慢慢减少学习率 α 的大小,在初期 α 较大时,下降的步长较大,能以较快的速度进行梯度下降;而后期逐步减小 α 的值,即减小步长,有助于算法的收敛,更容易接近最优解。


最常用的学习率衰减方法:\alpha = \frac{1}{1 + decay\_rate * epoch\_num} * \alpha_0α=1+decay_rate∗epoch_num1∗α0


其中,decay_rate为衰减率(超参数),epoch_num为将所有的训练样本完整过一遍的次数。


还有一种指数衰减


\alpha = 0.95^{epoch\_num} * \alpha_0α=0.95epoch_num∗α0


对于大型的数据模型,需要使用这些方式去自动进行学习率衰减。而一些小型网络可以直接手动进行调整


那么最后我们来看一张动态度,表示不同优化的算法的效果图


image.png


2.2.10 其它非算法优化的方式-标准化输入



对网络输入的特征进行标准化,能够缓解梯度消失或者梯度爆炸


  • 标准化公式:


x = \frac{x - \mu}{\sigma}x=σx−μ


这个公式其实与特征工程中的处理是一样的,\muμ为平均值,\sigmaσ为标准差。标准化的目的是所有特征的平均值为0,标准差为1。这属于机器学习基本的内容不过多进行叙述。


image.png


那么这种有什么好处?主要是对于损失函数带来的好处.


  • 标准化前的损失函数


image.png


  • 标准化后的损失函数


image.png


这样的话,对于梯度下降无论从哪个位置开始迭代,都能以相对较少的迭代次数找到全局最优解。可以加速网络的学习。


理解这个原理,其实还是最初的这样的公式:z={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + bz=w1x1+w2x2+...+wnxn+b


如果激活函数的输入X近似设置成均值为 0,标准方差为 1,神经元输出 z 的方差就正则化到1了。虽然没有解决梯度消失和爆炸的问题,但其在一定程度上确实减缓了梯度消失和爆炸的速度。


2.2.11 总结



  • 掌握参数初始化策略的优点


  • 掌握Mini-batch的特点以及优势


  • 掌握梯度下降算法优化的目的以及效果


  • 掌握指数移动平均值的好处
  • 掌握动量梯度下降法的优点以及RMSProp、Adam的特点
  • 掌握学习率衰减方式


  • 掌握标准化输入带来的网络学习速度的提升


目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
145 63
|
8天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
37 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
8天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
29 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
8天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
47 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
97 8
|
1月前
|
机器学习/深度学习 JSON 搜索推荐
深度学习的协同过滤的推荐算法-毕设神器
深度学习的协同过滤的推荐算法-毕设神器
41 4
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
93 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
机器学习/深度学习 算法
深度学习中的优化算法及其应用
本文探讨了深度学习中常用的优化算法,包括梯度下降、随机梯度下降、动量方法和Adam方法。通过对比这些算法的优缺点及适用场景,帮助读者更好地理解和应用这些优化方法。
31 2

热门文章

最新文章

下一篇
无影云桌面