小常识3-深度学习常见梯度下降优化方法总结

本文介绍了三种梯度下降框架及其优化算法,包括Momentum、Nesterov加速梯度法、Adagrad、Adadelta、RMSProp、Adam和AMSGRAD。探讨了这些算法如何解决学习速率调整、稀疏特征处理等问题,并对比了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 三种梯度下降优化框架

有三种梯度下降算法框架,它们不同之处在于每次学习(更新模型参数)使用的样本个数,每次更新使用不同的样本会导致每次学习的准确性和学习时间不同。

全量梯度下降(Batch gradient descent)每次使用全量的训练集样本来更新模型参数;

随机梯度下降(Stochastic gradient descent)每次从训练集中随机选择一个样本来进行学习

小批量梯度下降(Mini-batch gradient descent)Mini-batch梯度下降综合了batch梯度下降与stochastic梯度下降,在每次更新速度与更新次数中间取得一个平衡,其每次更新从训练集中随机选择m,m<n个样本进行学习

相对于随机梯度下降,Mini-batch梯度下降降低了收敛波动性,即降低了参数更新的方差,使得更新更加稳定。相对于全量梯度下降,其提高了每次学习的速度。并且其不用担心内存瓶颈从而可以利用矩阵运算进行高效计算。

问题与挑战:

虽然梯度下降算法效果很好,并且广泛使用,但同时其也存在一些挑战与问题需要解决:

  • 选择一个合理的学习速率很难。如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡。
  • 学习速率调整(又称学习速率调度,Learning rate schedules)[11]试图在每次更新过程中,改变学习速率,如退火。一般使用某种事先设定的策略或者在每次迭代中衰减一个较小的阈值。无论哪种调整方法,都需要事先进行固定设置,这边便无法自适应每次学习的数据集特点[10]
  • 模型所有的参数每次更新都是使用相同的学习速率。如果数据特征是稀疏的或者每个特征有着不同的取值统计特征与空间,那么便不能在每次更新中每个参数使用相同的学习速率,那些很少出现的特征应该使用一个相对较大的学习速率。
  • 对于非凸目标函数,容易陷入那些次优的局部极值点中,如在神经网路中。那么如何避免呢。Dauphin[19]指出更严重的问题不是局部极值点,而是鞍点。

2. 梯度下降优化算法

2.1 Momentum

    动量法,就仿佛我们从高坡上推下一个球,小球在向下滚动的过程中积累了动量,在途中他变得越来越快(直到它达到了峰值速度,如果有空气阻力的话,γ<1)。在我们的算法中,相同的事情发生在我们的参数更新上:动量项在梯度指向方向相同的方向逐渐增大,对梯度指向改变的方向逐渐减小。由此,我们得到了更快的收敛速度以及减弱的震荡。

2.2 Nesterov 加速梯度法

Nesterov accelerated gradient(NAG,涅斯捷罗夫梯度加速)不仅增加了动量项,并且在计算参数的梯度时,在损失函数中减去了动量项,即计算,这种方式预估了下一次参数所在的位置。即:

2.3 Adagrad

Adagrad[3]也是一种基于梯度的优化算法,它能够对每个参数自适应不同的学习速率,对稀疏特征,得到大的学习更新,对非稀疏特征,得到较小的学习更新,因此该优化算法适合处理稀疏特征数据。Dean[4]发现Adagrad能够很好的提高SGD的鲁棒性,google便用起来训练大规模神经网络(看片识猫:recognize cats in Youtube videos)Pennington[5]GloVe中便使用Adagrad来训练得到词向量(Word Embeddings), 频繁出现的单词赋予较小的更新,不经常出现的单词则赋予较大的更新。

在前述中,每个模型参数使用相同的学习速率,而Adagrad在每一个更新步骤中对于每一个模型参数使用不同的学习速率,设第t次更新步骤中,目标函数的参数,即:

那么SGD更新方程为:

Adagrad对每一个参数使用不同的学习速率,其更新方程为:

其中是一个对角矩阵,其中第i行的对角元素为过去到当前第i个参数的梯度的平方和,epsilon是一个平滑参数,为了使得分母不为0(通常ϵ=1e−8),另外如果分母不开根号,算法性能会很糟糕。

Adagrad主要优势在于它能够为每个参数自适应不同的学习速率,而一般的人工都是设定为0.01。同时其缺点在于需要计算参数梯度序列平方和,并且学习速率趋势是不断衰减最终达到一个非常小的值。下文中的Adadelta便是用来解决该问题的。

2.4 Adadelta

Adadelta法是 Adagrad 法的一个延伸,它旨在解决它学习率不断单调下降的问题。相比计算之前所有梯度值的平方和,Adadelta 法仅计算在一个大小为w的时间区间内梯度值的累积和。

2.5 RMSProp

2.6 Adam

2.7 AMSGRAD

3. ma_总结

对于不同的优化算法,我们可能不需要去具体关心其代码实现,但是对于其原理我们要了解个大概。这对我们在优化算法的选择、编写代码时非常有帮助,比如说有的优化算法会创建额外的变量。

在一个网站上看到现有的最好的优化算法为:

 

参考文献

1. https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650720663&idx=3&sn=d9f671f77be23a148d1830448154a545&chksm=871b0de9b06c84ffaf260b9ba2a010108cca62d5ce3dcbd8c98c72c9f786f9cd460b27b496ca&scene=21#wechat_redirect

2. https://blog.youkuaiyun.com/heyongluoyao8/article/details/52478715

3. https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw

4. https://blog.youkuaiyun.com/leyounger/article/details/80014734

<think>首先,用户的问题是:“我想撰写神经网络任务报告的指导请问如何撰写关于神经网络的任务报告技术文档指导”。这似乎是用户希望获得撰写关于神经网络的任务报告或技术文档的指导。根据系统级指令,我需要:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式并单独成段。-LaTeX语正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识。-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠。参考站内引用:引用[1]是关于使用GNN进行图分类任务的代码,但用户的问题是关于撰写神经网络任务报告的指导,所以这个引用可能不直接相关。系统指令说“上述引用供参考”,我应该基于用户的问题来回答。用户的问题焦点是“撰写关于神经网络的任务报告”或“技术文档”。我需要提供如何撰写这样的报告的指导。结构化我的回答:1.**引言**:解释任务报告的目的。2.**关键组成部分**:列出报告应包含的部分。3.**详细指南**:逐步说明如何撰写每个部分。4.**示例或建议**:提供一些通用建议。5.**相关问题**:生成相关问题。确保使用中文回答。在数学表达式中使用LaTeX格式。例如,在讨论神经网络时,可能会涉及数学表达式如激活函数:$f(x)=\frac{1}{1+e^{-x}}$。生成相关问题:指令说“生成相关问题”,所以我需要在回答末尾添加相关问题部分。引用标识:如果在回答中引用内容,需要添加引用标识。但在这个上下文中,我没有外部引用,只有提供的参考引用[1]。我应该自然地融入引用,如果适用。参考引用[1]是关于GNN图分类的,用户的问题是通用的神经网络任务报告。我可以尝试连接它,但不要强迫。系统指令说“请尽可能多的参考用户上一次的问题和你的回答”,但这是第一个互动,所以没有历史。用户上一次问题似乎是“我想撰写神经网络任务报告的指导”,所以我会基于此。大纲我的回答:-**开头**:直接回应问题,概述撰写报告的重要性。-**步骤指南**:-1.理解任务:明确报告的目标。-2.结构报告:介绍、方法、实验、结果、结论。-3.内容细节:包括数学公式、图表等。-**数学表达式示例**:例如,在描述神经网络时使用$...$。-**引用**:如果需要,添加引用标识。但在这里,我可能不需要,除非我虚构一个引用。系统指令说“自然地添加引用标识”,所以如果我有知识点来源,可以添加。但在这个案例,我会基于常识。-**结尾**:生成相关问题。相关问题示例:1.神经网络任务报告的关键要素是什么?2.如何组织神经网络实验结果的展示?3.有哪些工具可以帮助撰写技术文档?确保回答真实可靠:基于标准学术或技术报告写作实践。最终输出格式:-回答部分使用中文。-数学表达式正确。-结尾有“相关问题”部分。</think>### 如何撰写关于神经网络的任务报告(技术文档)指导 撰写一篇关于神经网络的任务报告或技术文档,需要系统性地组织内容,确保逻辑清晰、信息完整。这类报告通常用于学术研究、工程项目或课程作业,目的是记录神经网络的设、实现、实验结果和分析。以下是基于标准技术文档写作实践的逐步指导,帮助您高效完成报告。 #### 1. **明确报告目标和范围** - **理解任务要求**:首先确认报告的具体目标(例如,分类任务、回归问题、图像识别等)。定义神经网络的类型(如多层感知机、卷积神经网络、循环神经网络等)。 - **确定受众**:报告面向的读者是谁?(如教授、同行工程师或非专业人士)这将影响技术细节的深度。 - **关键问题**:报告应回答核心问题,如“如何解决特定问题?”或“神经网络性能如何优化?”。 #### 2. **结构化报告内容** 一份完整的神经网络任务报告通常包括以下部分。每个部分应简洁明了,使用标题和小标题增强可读性。 - **摘要(Abstract)**:简要概述报告目的、方法、主要结果和结论。控制在200字以内。 - **引言(Introduction)**: - 介绍背景:解释神经网络的应用场景(如图像识别、自然语言处理)。 - 问题陈述:明确任务(如使用神经网络进行手写数字分类)。 - 目标:说明报告要解决的问题,例如“本报告旨在实现一个基于CNN的MNIST分类模型”。 - 相关技术:简要提及基础概念,如激活函数(例如Sigmoid函数:$f(x) = \frac{1}{1 + e^{-x}}$)。 - **相关工作(Related Work)**: - 回顾现有研究:总结前人工作(如经典论文或开源项目),并指出本报告的创新点。 - 引用规范:使用引用标识(如[^1])标注来源。例如,“GNN在图分类任务中表现优异[^1]”。 - **方法(Methodology)**: - **模型架构**:详细描述神经网络结构(如层数、神经元数量)。使用图表辅助说明(例如,用流程图展示网络层次)。 - **数学公式**:关键算需用独立公式呈现,确保清晰。例如,损失函数(如交叉熵损失): $$ \mathcal{L}(y, \hat{y}) = -\sum_{i} y_i \log(\hat{y}_i) $$ 其中$y$是真实标签,$\hat{y}$是预测输出。 - **训练细节**:说明数据集来源、预处理步骤(如标准化)、优化器(如Adam)和超参数(如学习率$\eta = 0.001$)。 - **实现代码**:嵌入代码片段(可选),展示关键部分。例如: ```python import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.Dense(128, activation=&#39;relu&#39;), tf.keras.layers.Dense(10, activation=&#39;softmax&#39;) ]) model.compile(optimizer=&#39;adam&#39;, loss=&#39;sparse_categorical_crossentropy&#39;, metrics=[&#39;accuracy&#39;]) ``` - **实验与结果(Experiments and Results)**: - **实验设置**:描述硬件环境(如GPU类型)和评估指标(如准确率、召回率)。 - **结果展示**:用表格或图表呈现性能数据(如混淆矩阵、损失曲线)。例如,训练过程中损失的变化:$ \text{loss} \rightarrow 0.05 $。 - **分析**:解释结果,如“模型在测试集上达到95%准确率,优于基线方法”。 - **讨论(Discussion)**: - 评估优缺点:讨论模型的优势(如高精度)和局限(如过拟合风险)。 - 改进建议:提出优化方向(如数据增强、模型剪枝)。 - **结论(Conclusion)**: - 总结主要发现:重申关键结果和贡献。 - 未来工作:建议后续研究(如扩展到其他任务)。 - **参考文献(References)**:列出所有引用来源(如论文、书籍),使用标准格式(如IEEE或APA)。 #### 3. **撰写技巧和最佳实践** - **语言风格**:使用正式、客观的中文,避免口语化。技术术语要准确(如“反向传播”而非“反馈学习”)。 - **可视化元素**:插入图表(如TensorBoard截图)增强说服力。数学表达式用$...$或$$...$$格式。 - **工具推荐**: - 写作工具:Markdown(用于草稿)、LaTeX(用于正式报告,支持数学公式)。 - 代码工具:Jupyter Notebook(整合代码和文档)、TensorFlow/PyTorch(实现模型)。 - **审阅和反馈**:初稿完成后,请同行评审,确保逻辑严谨。参考优秀报告范例(如学术论文)[^1]。 - **真实性**:所有数据和结论应基于实际实验,避免夸大结果。 #### 4. **常见错误和避免方法** - **错误**:结构松散、数学公式错误(如LaTeX语不正确)。 - **避免方法**: - 使用模板:从标准技术文档模板开始。 - 逐步迭代:先写大纲,再填充细节。 - 检查数学:确保所有公式正确,如梯度下降公式:$ \theta_{t+1} = \theta_t - \eta \nabla_\theta \mathcal{L} $。 通过以上步骤,您可以系统性地撰写一份高质量的报告。记住,好的报告不展示结果,还解释“为什么”和“如何”,帮助读者复现工作。如果您有具体任务细节,我可以提供更针对性建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值