【深度学习】1、优化方法原理与实践对比——非常详细与全面(一)

简介: 【深度学习】1、优化方法原理与实践对比——非常详细与全面(一)

简介


   在传统的机器学习算法的实践中,优化总是重头戏,也是最考验功底的部分。深度学习得益于传统的有效方式,往往普通的随机下降优化算法就能取得不错的训练效果,优化的重要性相比于传统机器学习要弱一些,大部分从业者主要聚焦于应用或模型创新,而优化部分更多的工作只是调参。


   实际上,深度学习优化方面的研究非常多,很多方法也非常有效,尤其在数据量比较大的时候,所以有必要掌握一些常见的优化算法。


1、SGD(Stochastic Gradient Descent, SGD)


   随机梯度下降(Stochastic Gradient Descent, SGD)每次训练样本随机抽取一个样本计算loss和梯度并对参数进行更新,由于每次不需要遍历所有的数据,所以每次迭代速度快;但是这种优化算法比较弱,往往容易走偏,反而会增加很多次的迭代。随机梯度下降法有时可以用于在线学习(Online Learning)系统,可使系统快速学习到新的变化。


   与随机梯度下降算法对应的还有批量梯度下降(Batch Gradient Descent,BGD),每次使用整个训练集合计算梯度,这样计算的梯度比较稳定,相比随机梯度下降法不那么容易振荡,但是因为每次都需要更新整个数据集,所以批量梯度下降法非常慢,而且无法放在内存中计算,更无法应用于在线学习系统。


   介于随机梯度下降法和批量随机梯度下降法之间的是小批量随机梯度下降法(Mini-Batch Gradient Descent),即每次随机抽取m个样本,以它们的梯度均值作为梯度的近似估计值。


   为了使得随机梯度下降获取更好的性能,学习率需要取值合理,并根据训练过程动态调整。如果学习率过大,模型就会收敛过快,最终离最优值较远;如果学习率较小,迭代次数就会很多,导致模型长时间不能收敛。


2、Momentum


   动量(Momentum)是来自物理学中的定义,是力的时间积累效应的度量。动量的方法在随机梯度下降的基础上,加上了上一步的梯度:

其中γ是动量参数且γ∈[0,1]。动量的优化方法也可以写成如下的形式:

4d8eb6b2ee20bc4b54fbe0b764fa69dd.png

   由于上面两种的表达方式是一致的,所以选择第一种的表达方式。


   相比于随机梯度下降,动量会使相同方向的梯度不断累加,而不同方向的梯度则相互抵消,因而可以一定程度上客服“Z”字形的振荡,更快到达最优点。

b61fdd8592c4fff78a0692e271e4a85a.png


3、NAG(Nesterov Accelerated Gradient,NAG)


   Nesterov 加速梯度于动量类似,也是考虑最近的梯度的情况,但是NAG相对超前一点,它先使用动量mt计算参数θ下一个位置的近似值θ+ηmt,然后在近似位置上计算梯度:

83247574aefefa849d7227b712d6445f.png

   NAG与动量法的区别就是,NAG算法会计算本轮迭代时动量到达的位置的梯度,可以说成“未来”的梯度。如果未来的梯度存在一定的规律,那么这些梯度就会有更好的利用价值。


   在实际的应用中,为了前向、后向计算统一,引入以下爱的变量:

be42b6154dfdddac9157cd07ab4ecfad.png

将上面的两个公式代入,可以得到:

bc87427f4addc4416a86d45faec3b920.png

将上面的第一个公式代入第二个公式,就可以得到:

a6429087717ed02a1bc422bccbe0fd08.png

整理可以得到:

4c78f0c7760db4e80e735c0f9403ba21.png

这样梯度计算就可以解决计算不一致的问题。


4、Adagrad


   Adagrad是一种自适应的梯度下降法,它能够针对参数更新的频率调整它们的更新幅度——对于更新频繁且更新量大的参数,适当减小他们的步长;对于更新不频繁的参数,适当增大它们的步长。这种方法的思想很适合一些数据分布不均匀的任务。


   具体的方法就是在之前的梯度下降法的基础上增加一个梯度的累积项作为分母,之前的梯度下降法的更新公式为:

而Adagrad变成:

   其中⊙表示向量之间元素级的乘法,Gt就是Adagrad增加的内容。它是所有轮迭代的梯度平方和:

   从公式可以看出,加入这一下项以后,参数的更新确实得到了一定的控制。对于经常更新的参数,Gt项的数值会比较大,因而它的参数更新量会得到控制;对于不经常更新的参数,由于Gt项的数值比较小,它的参数更新量会变大。

b721c4f197f160906091a3c46187d2c6.png

   从算法里面可以看出,Adagrad依然存在一些缺陷,如果模型的参数数值保持稳定,那么参数的梯度值总体不会有太大的波动,而分母上的梯度积累项一直在积累,因此分母会不断变大,因此从梯度的趋势上分析,梯度总值会不断减小。虽然在实际训练中一般也会将学习率调小,但两者变小的程度不同,因此Adagrad可能会出现更新量太小而不易优化的情况。


5、RMSProp


   RMSProp利用滑动平均的方法来解决Adagrad算法中的问题。它的思路是让梯度积累值G不要一直变大,而是按照一定的比例衰减,这样其含义就不再是梯度的积累项了,而是梯度的平均值:

78c9da4b164fa2727c4d8c061832f13a.png

因为此时的G更像是梯度的平均值甚至期望值,因此在很多文献中会将G写成E[g2]。

d2bb0ad0a634b0a8d40289e300147f87.png

相关文章
|
1月前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
149 6
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的原理与应用:开启智能时代的大门
深度学习的原理与应用:开启智能时代的大门
126 16
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘人工智能:深度学习的奥秘与实践
在本文中,我们将深入浅出地探索深度学习的神秘面纱。从基础概念到实际应用,你将获得一份简明扼要的指南,助你理解并运用这一前沿技术。我们避开复杂的数学公式和冗长的论述,以直观的方式呈现深度学习的核心原理和应用实例。无论你是技术新手还是有经验的开发者,这篇文章都将为你打开一扇通往人工智能新世界的大门。
|
1月前
|
机器学习/深度学习 算法 TensorFlow
深度学习中的自编码器:从理论到实践
在这篇文章中,我们将深入探讨深度学习的一个重要分支——自编码器。自编码器是一种无监督学习算法,它可以学习数据的有效表示。我们将首先介绍自编码器的基本概念和工作原理,然后通过一个简单的Python代码示例来展示如何实现一个基本的自编码器。最后,我们将讨论自编码器的一些变体,如稀疏自编码器和降噪自编码器,以及它们在实际应用中的优势。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘AI:深度学习的奥秘与实践
本文将深入浅出地探讨人工智能中的一个重要分支——深度学习。我们将从基础概念出发,逐步揭示深度学习的原理和工作机制。通过生动的比喻和实际代码示例,本文旨在帮助初学者理解并应用深度学习技术,开启AI之旅。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从理论到实践的探索之旅
在人工智能的璀璨星空中,深度学习如同一颗耀眼的新星,以其强大的数据处理能力引领着技术革新的浪潮。本文将带您走进深度学习的核心概念,揭示其背后的数学原理,并通过实际案例展示如何应用深度学习模型解决现实世界的问题。无论您是初学者还是有一定基础的开发者,这篇文章都将为您提供宝贵的知识和启发。
60 5
|
1月前
|
机器学习/深度学习 存储 人工智能
探索深度学习的奥秘:从理论到实践的技术感悟
本文深入探讨了深度学习技术的核心原理、发展历程以及在实际应用中的体验与挑战。不同于常规摘要,本文旨在通过作者个人的技术实践经历,为读者揭示深度学习领域的复杂性与魅力,同时提供一些实用的技术见解和解决策略。
36 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的注意力机制:原理、应用与未来展望
探索深度学习中的注意力机制:原理、应用与未来展望
|
1月前
|
机器学习/深度学习 网络架构 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过研究卷积神经网络(CNN)的结构和原理,本文展示了深度学习如何提高图像识别的准确性和效率。同时,本文也讨论了数据不平衡、过拟合、计算资源限制等问题,并提出了相应的解决策略。
97 19
|
1月前
|
机器学习/深度学习 传感器 人工智能
探索深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文深入探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过介绍卷积神经网络(CNN)的基本原理和架构设计,阐述了深度学习如何有效地从图像数据中提取特征,并在多个领域实现突破性进展。同时,文章也指出了训练深度模型时常见的过拟合问题、数据不平衡以及计算资源需求高等挑战,并提出了相应的解决策略。
90 7