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

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

6、Adadelta


   Adadelta考虑了一些更新量“单位”的问题。为了让“单位”匹配,Adadelta选择在分子上再增加一个项目,于是方法的概念公式变成:

f616ca74012ba38f8e23f12dbc91c13e.png

其中RMS表示Root Mean Square,也就是“均方根”的意思。分母中的RMS[g]t展开与RMSProp相同:

395b59216f11a8c81f39b7e2deaa16b7.png

分子采取类似的方法,展开后可以得:

ddc3bf306d0531de1f52a82a7990036f.png

426a10f9506ce9c70c2ea330fddb3f9e.jpg


7、Adam


   Adam算法的全称是Adaptive Moment Estimation,这种方法结合了上面提到的两类算法:基于动量的算法和基于自适应的算法。基于动量的算法有动量法和NAG法,这两种方法都基于历史梯度信息进行参数更新。基于自适应学习率的算法有Adagrad、RMSProp、Adadelta,它们通过计算梯度的累计信息量来调整不同参数的更新量。Adam算法记录了梯度的一阶矩(梯度的期望)和二阶矩(梯度平方的期望):

077119e8de05d58487811240482690f4.png

为了确保两个梯度累积量能够良好的估计梯度的一阶矩和二阶矩,两个累积量还需要乘以一个偏置纠正的系数:

bd2b02d89f0849be328ef77c3dbeb086.png

然后再使用两个累积量进行参数更新:

e5579d7b924c0e322079c0dffeb1421b.png

完整伪代码:

60b9e0722cc09b030a1c498fb6107926.jpg


8、AdaMax


   AdaMax算法主要是针对Adam算法进行了修改,而修改的位置在二阶矩v这里。AdaMax将二阶矩修改为无穷矩,这样在数值上更加稳定:

5ab7666dbfa61fdc31fc2fbe514a9f78.png

将vt替换为ut后,最终的更新变为:

ff2096f5c5aaf53b7c35ff8b6fa9c818.png

此时的无穷矩估计不再是有偏的,因此也不需要再做纠正。最终的伪代码如下:

04bc39616e69fd2216683962900bd596.jpg


9、Nadam


   与AdaMax具有类似的思想,Nadam算法修改的是一阶矩的估计值,将Nesterov算法和Adam算法的结合,形成了Nadam(Nesterov-Accelerated Adaptive Moment Estimate)算法。

NAG算法的计算公式为:

e82c7bbe126adb1cdac684ef2b54155f.png

Adam更新的公式可以展开为:

可以看出,公式形式和NAG很接近,为了体现Nesterov的效果,只需将公式中的mt-1修改为mt即可。


10、优化算法的使用


   优化算法分为两类:其中一类是以动量为核心的算法;另一类以自适应为核心的算法


   以动量为核心的算法更容易在山谷的优化曲面中找到最优解,如果优化曲面在某个地方振荡严重,而在另外一些方面趋势明显,那么基于动量的算法能够把握这种趋势,让又趋势的方向累积能量,同时让振荡的方向相互抵消;基于动量的方法如果遇到趋势不明显的情况,那么优化参数的路径必然会存在一些绕弯的情况;


   以自适应为核心的算法容易在各种场景下找到平衡,对于梯度较大的一些场景,它会适当地减少更新量;而对于梯度较小的一些场景,它会适当增加更新量,所以实际上是对优化做了一定的折中。当然,对于一些复杂且难以优化的问题来说,这样的限制实际上阻碍了优化的快速进行。


   当然,理论上结合两者的算法效果应该更好,因此Adam以及它的一些改进算法的效果通常不错,但是其计算量也会增加,这一点在使用时要权衡考虑。


11、训练笔记


(1)对于稀疏数据,尽量使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值;


(2)SGD通常训练时间更长,但是在好的初始化和学习率训练方案下,结果更加可靠;


(3)如果在意更快收敛,并且需要训练较复杂的网络时,尽量使用自适应的优化方法;


(4)Adadelta、RMSProp、Adam是比较相近的算法,在相似的情况下表现差不多;


(5)在想使用动量的RMSProp或者Adam的地方,大多可以使用Nadam取得更好的效果。


优化实践对比

执行结果:

相关文章
|
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
下一篇
无影云桌面