深度学习中的优化算法:梯度下降、反向传播与随机梯度下降(SGD)

举报
i-WIFI 发表于 2025/09/27 16:34:51 2025/09/27
【摘要】 在深度学习领域,优化算法对于模型的训练和性能提升起着至关重要的作用。梯度下降、反向传播以及随机梯度下降(SGD)是其中最为基础和关键的算法。本文将详细介绍这三种算法的基本概念、原理、计算过程以及它们之间的关系,并通过示例和图表来帮助读者更好地理解。 一、引言深度学习模型通常包含大量的参数,需要在训练数据上进行多次迭代以调整这些参数,使得模型的预测结果与真实标签尽可能接近。梯度下降及其相关变种...

在深度学习领域,优化算法对于模型的训练和性能提升起着至关重要的作用。梯度下降、反向传播以及随机梯度下降(SGD)是其中最为基础和关键的算法。本文将详细介绍这三种算法的基本概念、原理、计算过程以及它们之间的关系,并通过示例和图表来帮助读者更好地理解。

一、引言

深度学习模型通常包含大量的参数,需要在训练数据上进行多次迭代以调整这些参数,使得模型的预测结果与真实标签尽可能接近。梯度下降及其相关变种就是用于高效地完成这一参数调整任务的优化算法。

二、梯度下降

(一)基本概念

梯度下降是一种迭代优化算法,用于寻找函数的局部最小值。在深度学习中,目标是最小化损失函数(如均方误差、交叉熵等),梯度下降通过沿着损失函数的负梯度方向逐步更新模型的参数,从而使损失函数的值逐渐减小。

(二)数学原理

假设我们有一个损失函数 J(θ)J(\theta),其中 θ\theta 表示模型的参数。梯度下降的更新规则可以表示为:

θt+1=θtαJ(θt)\theta_{t+1} = \theta_t - \alpha \nabla J(\theta_t)

其中,θt\theta_t 是第 tt 次迭代时的参数值,α\alpha 是学习率(步长),决定了每次更新的幅度,J(θt)\nabla J(\theta_t) 是损失函数在 θt\theta_t 处的梯度,表示函数在该点的变化率最快的方向。

(三)计算过程示例

假设我们有一个简单的线性回归模型 y=wx+by = wx + b,损失函数为均方误差 J(w,b)=1mi=1m(yiy^i)2J(w,b)=\frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y}_i)^2,其中 mm 是样本数量,yiy_i 是真实标签,y^i=wxi+b\hat{y}_i = wx_i + b 是模型的预测值。

计算梯度:
Jw=2mi=1m(yiy^i)(xi)\frac{\partial J}{\partial w} = \frac{2}{m}\sum_{i=1}^{m}(y_i - \hat{y}_i)(-x_i)
Jb=2mi=1m(yiy^i)(1)\frac{\partial J}{\partial b} = \frac{2}{m}\sum_{i=1}^{m}(y_i - \hat{y}_i)(-1)

然后根据梯度下降的更新规则更新参数 wwbb

(四)缺点

梯度下降的一个主要缺点是在处理大规模数据集时,计算整个数据集的梯度可能会非常耗时和占用大量内存。此外,它容易陷入局部最小值。

三、反向传播

(一)基本概念

反向传播是一种用于计算神经网络中梯度的有效算法。在深度学习中,神经网络通常具有多层结构,直接计算损失函数对各层参数的梯度非常复杂。反向传播算法通过链式法则,从输出层开始,逐层向后计算梯度,大大提高了计算效率。

(二)计算过程

以一个简单的三层神经网络(输入层、隐藏层、输出层)为例,假设激活函数为 ff,权重矩阵分别为 W1W_1(输入层到隐藏层)、W2W_2(隐藏层到输出层)。

  1. 前向传播:计算各层的输出。

    • 隐藏层输入:z1=W1xz_1 = W_1x
    • 隐藏层输出:a1=f(z1)a_1 = f(z_1)
    • 输出层输入:z2=W2a1z_2 = W_2a_1
    • 输出层输出:a2=f(z2)a_2 = f(z_2)
  2. 计算损失函数对各层输出的梯度

    • 输出层误差:δ2=(a2y)f(z2)\delta_2 = (a_2 - y) \odot f'(z_2)\odot 表示逐元素相乘,yy 是真实标签,ff' 是激活函数的导数)
    • 隐藏层误差:δ1=(W2Tδ2)f(z1)\delta_1 = (W_2^T\delta_2) \odot f'(z_1)
  3. 反向传播计算梯度

    • 计算 W2W_2 的梯度:JW2=δ2a1T\frac{\partial J}{\partial W_2} = \delta_2 a_1^T
    • 计算 W1W_1 的梯度:JW1=δ1xT\frac{\partial J}{\partial W_1} = \delta_1 x^T

(三)作用和意义

反向传播算法使得深度学习模型的训练变得更加高效和可行,它能够快速准确地计算出各层参数的梯度,从而为梯度下降算法提供必要的信息,使得模型能够不断优化和调整参数。

四、随机梯度下降(SGD)

(一)基本概念

随机梯度下降(SGD)是梯度下降的一种变体,它在每次迭代中不是使用整个数据集来计算梯度,而是随机选取一个或一小批样本(mini-batch)来计算梯度并更新参数。这种方法大大减少了计算量和内存占用,尤其适用于大规模数据集。

(二)计算过程

假设我们有一个大小为 mm 的数据集 D={x1,y1,x2,y2,,xm,ym}D = \{x_1, y_1, x_2, y_2, \cdots, x_m, y_m\},在第 tt 次迭代中,随机选取一个小批量样本 Bt={(xi1,yi1),(xi2,yi2),,(xib,yib)}B_t = \{(x_{i_1}, y_{i_1}), (x_{i_2}, y_{i_2}), \cdots, (x_{i_b}, y_{i_b})\},其中 bb 是小批量的大小。

则参数更新规则为:

θt+1=θtα1b(xi,yi)BtJ(θt;xi,yi)\theta_{t+1} = \theta_t - \alpha \frac{1}{b}\sum_{(x_i, y_i) \in B_t} \nabla J(\theta_t; x_i, y_i)

(三)优点

  • 计算效率高:相比于传统的梯度下降,SGD每次只使用一小部分数据进行计算,大大减少了计算时间和内存消耗。
  • 跳出局部最小值:由于每次更新使用的样本不同,梯度的方向也会有所变化,这使得模型有机会跳出局部最小值,找到更优的解。

(四)缺点

  • 收敛速度不稳定:由于每次使用的样本不同,梯度的估计可能会有一定的波动,导致收敛速度不稳定,可能需要更多的迭代次数才能收敛。
  • 需要调整超参数:如小批量的大小、学习率等超参数需要根据具体问题进行调整,否则可能会影响模型的性能。

五、三者之间的关系

  • 梯度下降是一种基本的优化算法,它提供了参数更新的基本框架,通过沿着梯度的反方向更新参数来最小化损失函数。
  • 反向传播算法是专门为神经网络设计的用于高效计算梯度的算法,它为梯度下降算法在神经网络中的应用提供了支持,使得梯度下降能够在大规模的神经网络中进行有效的参数更新。
  • 随机梯度下降(SGD)是梯度下降的一种改进版本,它在梯度下降的基础上引入了随机采样的思想,通过使用小批量样本计算梯度来提高计算效率和模型的泛化能力。

六、总结

梯度下降、反向传播和随机梯度下降(SGD)是深度学习中非常重要的优化算法。梯度下降提供了优化的基本思想,反向传播解决了神经网络中梯度计算的难题,而随机梯度下降则在处理大规模数据集时展现出了高效的优势。在实际应用中,我们通常会结合使用这些算法,并根据具体问题的特点和需求进行调整和优化,以获得更好的模型性能。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。