【深度学习】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

相关文章
|
7天前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
15 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从基础到实践
【9月更文挑战第33天】本文将深入探讨深度学习的基本原理,包括神经网络的构建、训练和优化等关键步骤。我们将通过实际代码示例,展示如何利用深度学习解决实际问题,如图像识别和自然语言处理等。无论你是初学者还是有经验的开发者,都能从中获得新的启示和思考。
7 1
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络背后的原理与实践
【9月更文挑战第29天】本文将带你深入理解深度学习的核心概念,从基础理论到实际应用,逐步揭示其神秘面纱。我们将探讨神经网络的工作原理,并通过实际代码示例,展示如何构建和训练一个简单的深度学习模型。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。
15 2
|
9天前
|
机器学习/深度学习 监控 TensorFlow
深度学习中的图像识别技术:从理论到实践
【9月更文挑战第26天】在本文中,我们将深入探讨深度学习在图像识别领域的应用。首先,我们将介绍深度学习的基本原理和关键技术,然后通过一个实际的案例——手写数字识别,展示如何利用Python和TensorFlow实现深度学习模型。最后,我们将讨论深度学习在图像识别领域的挑战和未来发展方向。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
本文旨在探讨深度学习中常用的优化算法,包括梯度下降、动量方法、AdaGrad、RMSProp和Adam等。通过分析每种算法的原理、优缺点及适用场景,揭示它们在训练深度神经网络过程中的关键作用。同时,结合具体实例展示这些优化算法在实际应用中的效果,为读者提供选择合适优化算法的参考依据。
|
7天前
|
机器学习/深度学习 PyTorch TensorFlow
Python实现深度学习学习率指数衰减的方法与参数介绍
学习率指数衰减提供了一种高效的动态调整学习率的手段,帮助模型在不同训练阶段以不同的学习速度优化,有利于提升模型性能和训练效率。通过合理设置衰减策略中的参数,可以有效地控制学习率的衰减过程,实现更加精确的模型训练调优。
10 0
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:从理论到实践
【9月更文挑战第25天】本文将深入探讨深度学习的核心概念,从基础理论到实际应用,揭示其背后的原理和实现方法。我们将通过代码示例,展示如何利用深度学习解决实际问题,并讨论其在各领域的应用前景。无论你是初学者还是有经验的开发者,都能从中获益。
|
7天前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理中的应用与挑战
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,包括机器翻译、情感分析和文本生成等方面。同时,讨论了数据质量、模型复杂性和伦理问题等挑战,并提出了未来的研究方向和解决方案。通过综合分析,本文旨在为NLP领域的研究人员和从业者提供有价值的参考。
|
2天前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码示例
【9月更文挑战第32天】本文将深入探讨深度学习在图像识别领域的应用,包括其原理、技术、优势以及挑战。我们将通过一个简单的代码示例,展示如何使用深度学习技术进行图像识别。无论你是初学者还是有经验的开发者,都可以从中获得启发和帮助。让我们一起探索这个充满无限可能的领域吧!
16 8
下一篇
无影云桌面