梯度下降法
梯度下降法是一种迭代求解算法,基本思路是:首先在定义域中随机选取一个点 $x_0$ 将其带入函数 $f(x)$ 并判断此时
$f(x_0)$ 是否为最小值,如果不是,则找下一个点 $x_1$,且保证 $f(x_1)$ < $f(x_0)$。然后接着判断 $f(x_1)$ 是否为最小值,
如果不是的话则重复上述步骤,继续迭代寻找 $x_2$ 、 $x_3$ 、 $x_4$ 、 ... 直到找到使得$f(x)$取到最小值的 $x_n$。
关键步骤:
- 计算当前点的梯度(导数)
- 沿负梯度方向更新参数
- 重复步骤1和2,直到收敛
我们使用最简单的二次函数 $f(x) = x^2$ 作为损失函数,来详细讲解梯度下降法的工作原理。
为什么选择 $f(x) = x^2$?
- 函数简单,便于理解和计算
- 是凸函数,有唯一全局最小值
- 梯度计算简单:$f'(x) = 2x$
- 最小值点明确:$x = 0$ 时,$f(x) = 0$ 为最小值

我们的目标是求解函数$f(x) = x^2$ 当 x 是多少时达到极小值,也就意味着此时损失最小。
梯度
梯度也就是该函数的导数。
对 $f(x) = x^2$ 求导:
$$f'(x) = \frac{d}{dx}(x^2) = 2x$$
梯度方向
梯度指向函数值增长最快的方向,反之负梯度则指向函数值下降最快的方向。
梯度的方向意义:
梯度(导数)$f'(x)$ 表示函数在该点的变化率:
- 当 $f'(x) > 0$ 时,函数值随 $x$ 增大而增大(向右上升)
- 当 $f'(x) < 0$ 时,函数值随 $x$ 增大而减小(向右下降)
- 当 $f'(x) = 0$ 时,函数在该点达到极值(可能是最大值或最小值)
示例: $f'(x) > 0$
函数: $f(x) = x^2 - 2x + 1 = (x-1)^2$
导数: $f'(x) = 2x - 2$
在 $x = 3$ 处:
- $f(3) = (3-1)^2 = 4$
- $f'(3) = 2 \times 3 - 2 = 4 > 0$
意义: 在 $x = 3$ 处,导数 $f'(3) = 4 > 0$,说明函数值随 $x$ 增大而增大(向右上升)。

示例: $f'(x) < 0$
函数: $f(x) = -x^2 + 4x = -(x-2)^2 + 4$
导数: $f'(x) = -2x + 4$
在 $x = 0.5$ 处:
- $f(0.5) = -(0.5-2)^2 + 4 = 3.75$
- $f'(0.5) = -2 \times 0.5 + 4 = 3 > 0$(等等,这个也是正的)
让我们换一个点:在 $x = 3$ 处:
- $f(3) = -(3-2)^2 + 4 = 3$
- $f'(3) = -2 \times 3 + 4 = -2 < 0$
意义: 在 $x = 3$ 处,导数 $f'(3) = -2 < 0$,说明函数值随 $x$ 增大而减小(向右下降)。

对于 $f(x) = x^2$:
- 当 $x > 0$ 时,$f'(x) > 0$,函数值随 $x$ 增大而增大
- 当 $x < 0$ 时,$f'(x) < 0$,函数值随 $x$ 增大而减小
- 当 $x = 0$ 时,$f'(x) = 0$,这是最小值点
梯度下降更新公式
梯度下降的更新公式为:
$$x_{new} = x_{old} - \alpha \cdot f'(x_{old})$$
其中:
- $x_{old}$:当前参数值
- $x_{new}$:更新后的参数值
- $\alpha$:学习率(learning rate),控制步长
- $f'(x_{old})$:当前点的梯度(导数)
公式推导
损失函数是 $f(x)$ ,基于梯度下降法,我们希望下一个点的损失要小于当前点的损失,即:$f(x_{t+1}) < f(x_t)$。
第一步:使用泰勒展开近似函数值
在点 $x_t$ 处,对函数 $f(x)$ 进行一阶泰勒展开:
$$f(x_{t+1}) = f(x_t + \Delta x) \approx f(x_t) + f'(x_t) \cdot \Delta x$$
其中:
- $x_{t+1} = x_t + \Delta x$
- $\Delta x = x_{t+1} - x_t$ 是参数的变化量
- $f'(x_t)$ 是函数在 $x_t$ 处的梯度(导数)
注意: 这里我们只保留一阶项,忽略了高阶项(当 $\Delta x$ 很小时,这是合理的近似)。
第二步:确保函数值减小
我们的目标是使损失函数减小,即:
$$f(x_{t+1}) < f(x_t)$$
将泰勒展开式代入:
$$f(x_t) + f'(x_t) \cdot \Delta x < f(x_t)$$
两边同时减去 $f(x_t)$:
$$f'(x_t) \cdot \Delta x < 0$$
关键结论: 要使函数值减小,必须满足 $f'(x_t) \cdot \Delta x < 0$
第三步:分析梯度方向与移动方向的关系
根据 $f'(x_t) \cdot \Delta x < 0$,我们需要分析不同情况:
情况1:当 $f'(x_t) > 0$ 时(函数向右上升):
要使 $f'(x_t) \cdot \Delta x < 0$,必须有:
- $\Delta x < 0$
- 即:$x_{t+1} - x_t < 0$
- 即:$x_{t+1} < x_t$(向左移动)
几何意义:
- 当梯度为正时,函数向右上升
- 要减小函数值,必须向左移动(减小 $x$)
情况2:当 $f'(x_t) < 0$ 时(函数向右下降):
要使 $f'(x_t) \cdot \Delta x < 0$,必须有:
- $\Delta x > 0$
- 即:$x_{t+1} - x_t > 0$
- 即:$x_{t+1} > x_t$(向右移动)
几何意义:
- 当梯度为负时,函数向右下降
- 要减小函数值,必须向右移动(增大 $x$)
统一形式:
在一维情况下,我们让移动方向与梯度方向相反,直接让 $\Delta x$ 为负。
无需考虑梯度方向的正负,只要让 $\Delta x$ 为负即可,为了消除梯度的负数,可以取梯度的平方。
$$
f'(x_t)^2 \cdot -\alpha < 0
$$
两种情况可以统一表示为:
$$\Delta x = -\alpha \cdot f'(x_t)$$
其中 $\alpha > 0$ 是学习率(步长)。
验证:
- 当 $f'(x_t) > 0$ 时:$\Delta x = -\alpha \cdot f'(x_t) < 0$,满足 $x_{t+1} < x_t$
- 当 $f'(x_t) < 0$ 时:$\Delta x = -\alpha \cdot f'(x_t) > 0$,满足 $x_{t+1} > x_t$
第四步:得到梯度更新公式
注意这里的推导过程是在一维情况下,目的是帮助理解,所以并不完整有瑕疵。后续会推广到多维的通用情况,但是基本思路是一致的。
由 $\Delta x = x_{t+1} - x_t = -\alpha \cdot f'(x_t)$,得到:
$$x_{t+1} = x_t - \alpha \cdot f'(x_t)$$
完整推导总结
步骤1:目标
$$f(x_{t+1}) < f(x_t)$$
步骤2:泰勒展开
$$f(x_{t+1}) \approx f(x_t) + f'(x_t) \cdot (x_{t+1} - x_t)$$
步骤3:代入目标
$$f(x_t) + f'(x_t) \cdot (x_{t+1} - x_t) < f(x_t)$$
步骤4:化简
$$f'(x_t) \cdot (x_{t+1} - x_t) < 0$$
步骤5:设参数变化量
$$\Delta x = x_{t+1} - x_t$$
步骤6:得到不等式
$$f'(x_t) \cdot \Delta x < 0$$
步骤7:解出参数变化量
$$\Delta x = -\alpha \cdot f'(x_t) \quad (\alpha > 0)$$
步骤8:最终公式
$$x_{t+1} = x_t - \alpha \cdot f'(x_t)$$
梯度下降法公式推导的其他方法
除了上面详细推导的方法外,还有其他几种推导梯度下降更新公式的方法,它们从不同角度理解梯度下降法。
方法一:泰勒展开推导(最常用)
核心思想: 在当前位置附近,用线性近似表示函数值的变化。
步骤1:泰勒展开
在点 $x_t$ 附近,函数 $f(x)$ 可以展开为:
$$f(x_t + \Delta x) = f(x_t) + f'(x_t) \cdot \Delta x + \frac{1}{2}f''(x_t) \cdot (\Delta x)^2 + \cdots$$
当 $\Delta x$ 很小时,忽略高阶项,得到一阶线性近似:
$$f(x_t + \Delta x) \approx f(x_t) + f'(x_t) \cdot \Delta x$$
步骤2:目标函数
我们希望找到 $\Delta x$,使得:
$$f(x_t + \Delta x) < f(x_t)$$
$$f(x_t + \Delta x) - f(x_t) < 0$$
带入一阶泰勒展开,得到:
$$f(x_t) + f'(x_t) \cdot \Delta x - f(x_t) < 0$$
即:
$$f'(x_t) \cdot \Delta x < 0$$
这意味着 $\Delta x$ 必须与 $f'(x_t)$ 的符号相反。
步骤3:选择最优步长
我们希望函数值下降尽可能快。在固定步长 $|\Delta x| = \alpha$ 的约束下,要使 $f'(x_t) \cdot \Delta x$ 最小。
最优选择: $\Delta x = -\alpha \cdot \text{sign}(f'(x_t))$
对于一维情况,这就是:
$$\Delta x = -\alpha \cdot f'(x_t)$$
步骤4:更新公式
$$x_{t+1} = x_t + \Delta x = x_t - \alpha \cdot f'(x_t)$$
验证: 对于 $f(x) = x^2$,$f'(x) = 2x$,所以:
$$x_{t+1} = x_t - \alpha \cdot 2x_t = x_t(1 - 2\alpha)$$
方法二:方向导数推导
核心思想: 梯度方向是函数值增长最快的方向,负梯度方向是下降最快的方向。
步骤1:方向导数的定义
在点 $x_t$ 处,沿单位方向 $u$($|u| = 1$)的方向导数为:
$$D_u f(x_t) = \lim_{h \to 0} \frac{f(x_t + hu) - f(x_t)}{h} = f'(x_t) \cdot u$$
步骤2:寻找最优方向
我们希望找到方向 $u$,使得方向导数最小(函数值下降最快):
$$\min_{|u|=1} D_u f(x_t) = \min_{|u|=1} f'(x_t) \cdot u$$
步骤3:求解最优方向
使用拉格朗日乘数法:
$$L(u, \lambda) = f'(x_t) \cdot u + \lambda(|u|^2 - 1)$$
对 $u$ 求偏导并令其为零:
$$\frac{\partial L}{\partial u} = f'(x_t) + 2\lambda u = 0$$
$$u = -\frac{f'(x_t)}{2\lambda}$$
由约束 $|u| = 1$,得到:
$$|u| = \left|\frac{f'(x_t)}{2\lambda}\right| = 1$$
$$\lambda = \pm \frac{|f'(x_t)|}{2}$$
要使方向导数最小,选择负号:
$$u = -\frac{f'(x_t)}{|f'(x_t)|}$$
步骤4:更新公式
沿最优方向移动步长 $\alpha$:
$$x_{t+1} = x_t + \alpha \cdot u = x_t - \alpha \cdot \frac{f'(x_t)}{|f'(x_t)|}$$
对于一维情况,单位方向向量 $u$ 就是 $\pm 1$,所以:
$$x_{t+1} = x_t - \alpha \cdot \frac{f'(x_t)}{|f'(x_t)|} = x_t - \alpha \cdot \text{sign}(f'(x_t))$$
实际上,对于一维情况,我们可以直接写成:
$$x_{t+1} = x_t - \alpha \cdot f'(x_t)$$
方法三:最速下降法推导
核心思想: 在固定步长约束下,找到使函数值下降最快的方向。
步骤1:优化问题
$$\min_{\Delta x} f(x_t + \Delta x)$$
约束条件:$|\Delta x|^2 = \alpha^2$(固定步长)
步骤2:拉格朗日函数
$$L(\Delta x, \lambda) = f(x_t + \Delta x) + \lambda(|\Delta x|^2 - \alpha^2)$$
使用一阶泰勒展开:
$$L(\Delta x, \lambda) \approx f(x_t) + f'(x_t) \cdot \Delta x + \lambda(|\Delta x|^2 - \alpha^2)$$
步骤3:求极值
对 $\Delta x$ 求偏导:
$$\frac{\partial L}{\partial \Delta x} = f'(x_t) + 2\lambda \Delta x = 0$$
$$\Delta x = -\frac{f'(x_t)}{2\lambda}$$
由约束条件:
$$|\Delta x|^2 = \frac{|f'(x_t)|^2}{4\lambda^2} = \alpha^2$$
$$\lambda = \pm \frac{|f'(x_t)|}{2\alpha}$$
要使函数值最小,选择正号:
$$\Delta x = -\alpha \cdot \frac{f'(x_t)}{|f'(x_t)|}$$
对于一维情况:
$$x_{t+1} = x_t - \alpha \cdot f'(x_t)$$
方法四:几何直观理解
核心思想: 梯度指向函数值增长最快的方向,负梯度指向下降最快的方向。
几何意义
- 梯度 $f'(x_t)$ 的方向: 指向函数值增长最快的方向
- 负梯度 $-f'(x_t)$ 的方向: 指向函数值下降最快的方向
- 更新策略: 沿负梯度方向移动
更新公式
$$x_{t+1} = x_t - \alpha \cdot f'(x_t)$$
其中:
- $x_t$:当前参数值
- $\alpha$:学习率(步长)
- $f'(x_t)$:当前点的梯度
- $-\alpha \cdot f'(x_t)$:沿负梯度方向的移动量
直观理解
- 如果 $f'(x_t) > 0$:函数向右上升,需要向左移动(减小 $x$)
- 如果 $f'(x_t) < 0$:函数向右下降,需要向右移动(增大 $x$)
统一公式 $x_{t+1} = x_t - \alpha \cdot f'(x_t)$ 可以同时处理两种情况。
四种方法的总结
| 方法 | 核心思想 | 关键步骤 |
|---|---|---|
| 泰勒展开 | 用线性近似表示函数变化 | $f(x+\Delta x) \approx f(x) + f'(x)\Delta x$ |
| 方向导数 | 梯度方向是增长最快的方向 | $\min_{ |
| 最速下降 | 固定步长下找最优方向 | $\min_{|\Delta x|=\alpha} f(x+\Delta x)$ |
| 几何直观 | 负梯度方向是下降最快的方向 | 直接沿负梯度方向移动 |
学习率选择不当导致的问题
观察梯度更新公式 $x_{t+1} = x_t - \alpha \cdot f'(x_t)$ 可以看出,学习率的选择至关重要。如果学习率选择不当,会导致以下问题:
学习率过小
问题表现:
- 收敛速度极慢:每次更新步长很小,需要大量迭代才能接近最优值
- 训练时间过长:计算资源浪费,效率低下
- 可能无法收敛:如果学习率过小,梯度可能被数值精度问题影响
数学分析:
对于 $f(x) = x^2$,更新公式为 $x_{t+1} = x_t(1 - 2\alpha)$
- 当 $\alpha$ 很小时(如 $\alpha = 0.01$),$1 - 2\alpha \approx 0.98$,参数变化极小
- 例如:$\alpha = 0.01$ 时,$x_{t+1} = 0.98x_t$,需要约 50 次迭代才能使 $x$ 减半
学习率过大
问题表现:
- 发散:参数值越来越大,损失函数值不降反升,无法收敛
- 震荡:在最优值附近来回跳跃,无法稳定收敛
- 跳过最优解:步长太大,可能跳过全局最优解
- 数值不稳定:可能导致梯度爆炸或 NaN 值
数学分析:
- 当 $\alpha \geq 1$ 时,对于 $f(x) = x^2$,$|1 - 2\alpha| \geq 1$,参数会发散
- 当 $0.5 < \alpha < 1$ 时,$1 - 2\alpha < 0$,参数会在正值和负值之间震荡
具体例子:
- $\alpha = 1.0$:$x_{t+1} = -x_t$,参数在正负值之间来回跳
- $\alpha = 1.5$:$x_{t+1} = -2x_t$,参数绝对值越来越大,发散
实际应用中的影响
在复杂损失函数中:
- 学习率过大:可能跳过窄谷,无法找到精细的最优解
- 学习率过小:可能卡在平坦区域,梯度很小但还没到最优解
- 不同参数维度:如果不同维度的梯度尺度差异大,固定学习率难以同时优化所有参数
在深度学习中:
- 梯度消失:学习率过小,深层网络梯度传播困难
- 梯度爆炸:学习率过大,梯度值爆炸式增长
- 训练不稳定:损失函数值剧烈波动,难以收敛

损失函数值随迭代次数的变化:

梯度下降法的问题
梯度下降法是一种迭代求解算法,它不像解析法能够直接找到最优解,而是通过迭代来寻找全局最优解。
通俗的说就是看不到全局只能看到眼前,走一步看一步。这就导致了一些情况下它无法找到全局最优解,
或是近似最优解。比如局部最优和鞍点问题。
局部最优
问题描述:
对于非凸(下凸)函数,梯度下降法可能收敛到局部最小值而不是全局最小值。
数学原理:
- 梯度下降是贪心算法,每一步都选择下降最快的方向
- 算法只关注当前点的梯度方向,无法"看到"全局结构
- 当梯度为 0 时(局部最优、全局最优或鞍点),算法停止
为什么会出现局部最优?
- 多峰函数:函数有多个"山峰"和"山谷"
- 初始值影响:不同的初始值可能收敛到不同的局部最优
- 梯度信息局限:梯度只提供局部信息,无法判断全局最优
示例函数:
考虑一个简单的多峰函数:
$$f(x) = x^4 - 4x^2 + x$$
这个函数有多个局部最小值,梯度下降可能陷入其中任何一个。
影响:
- 在深度学习中,损失函数通常是非凸的
- 可能找到次优解,影响模型性能
- 需要多次运行或使用更好的初始化策略

鞍点
问题描述:
鞍点是指梯度为 0,但既不是局部最小值也不是局部最大值的点。在高维空间中,鞍点比局部最优更常见。
数学定义:
对于函数 $f(x)$,点 $x_0$ 是鞍点,如果:
- $\nabla f(x_0) = 0$(梯度为 0)
- Hessian 矩阵 $H(x_0)$ 有正负特征值(既不是正定也不是负定)
为什么会出现鞍点?
- 在高维空间中,鞍点比局部最优更常见
- 函数在某些方向上是凸的,在某些方向上是凹的
- 梯度下降无法区分鞍点和局部最优
示例函数:
考虑函数:
$$f(x, y) = x^2 - y^2$$
在点 $(0, 0)$ 处:
- 梯度为 0:$\nabla f(0, 0) = (0, 0)$
- 但这不是最小值:沿 $x$ 方向是凸的,沿 $y$ 方向是凹的
- 这是一个典型的鞍点
影响:
- 在高维优化问题中,鞍点比局部最优更常见
- 梯度下降可能卡在鞍点附近,收敛很慢
- 需要二阶信息或随机扰动来逃离鞍点

局部最优 & 鞍点对比
| 特征 | 局部最优 | 鞍点 |
|---|---|---|
| 梯度 | $\nabla f = 0$ | $\nabla f = 0$ |
| Hessian矩阵 | 正定(所有特征值 > 0) | 有正负特征值 |
| 函数形状 | 所有方向都是凸的 | 某些方向凸,某些方向凹 |
| 出现频率 | 低维空间中常见 | 高维空间中更常见 |
| 梯度下降行为 | 停止更新 | 可能卡住,更新很慢 |
| 逃离方法 | 需要较大的扰动 | 较小的扰动即可逃离 |
如何应对这些问题
应对局部最优:
- 多次运行:使用不同的初始值,选择最佳结果
- 模拟退火:允许偶尔接受更差的解
- 遗传算法:使用种群搜索,避免陷入局部最优
- 更好的初始化:使用预训练或合理的初始化策略
应对鞍点:
- 二阶方法:使用 Hessian 矩阵信息(但计算成本高)
- 随机扰动:添加噪声帮助逃离鞍点
- 动量法:使用历史梯度信息,帮助逃离鞍点
- 自适应学习率:Adam 等算法可以更好地处理鞍点
其他问题
收敛速度慢的问题
问题描述:
- 平坦区域:在函数值变化很小的区域,梯度很小,更新步长很小,收敛极慢
- 病态条件:不同方向的曲率差异很大时,需要很多次迭代才能收敛
- 狭窄山谷:在狭窄的山谷中,容易在谷壁间震荡,收敛慢
原因分析:
- 固定学习率无法适应不同区域的梯度特性
- 没有利用历史梯度信息
- 在平坦区域,梯度接近0,但可能还没到最优解
影响:
- 训练时间过长
- 计算资源浪费
- 可能无法在合理时间内收敛
对初始值敏感
问题描述:
- 不同的初始值可能导致不同的收敛结果
- 对于非凸函数,初始值的选择至关重要
- 需要合理的初始化策略
原因分析:
- 梯度下降是局部优化算法
- 只能找到初始值附近的局部最优
- 无法"看到"全局结构
影响:
- 结果不稳定
- 需要多次运行选择最佳结果
- 需要精心设计初始化策略
平坦区域问题
问题描述:
- 在损失函数的平坦区域,梯度很小
- 参数更新缓慢,收敛极慢
- 可能卡在平坦区域,无法继续优化
数学原因:
- 平坦区域梯度接近0:$|\nabla f(x)| \approx 0$
- 更新步长很小:$\Delta x = -\alpha \cdot \nabla f(x) \approx 0$
- 需要大量迭代才能离开平坦区域
影响:
- 训练时间过长
- 可能无法收敛到最优解
- 需要更大的学习率或自适应方法
病态条件问题
问题描述:
- 当损失函数在不同方向上的曲率差异很大时,梯度下降收敛很慢
- 需要沿着不同方向使用不同的步长
- 固定学习率无法处理这种情况
数学原因:
- Hessian矩阵的条件数很大:$\kappa(H) = \frac{\lambda_{max}}{\lambda_{min}} \gg 1$
- 不同方向的曲率差异大
- 梯度下降在"长窄"的山谷中震荡
影响:
- 收敛速度极慢
- 需要很多次迭代
- 需要预处理或自适应方法
梯度消失和梯度爆炸
问题描述:
- 梯度消失:在深层网络中,梯度可能变得非常小,导致参数更新缓慢
- 梯度爆炸:梯度可能变得非常大,导致参数更新过大,训练不稳定
原因分析:
- 梯度消失:在深层网络中,梯度通过反向传播时,如果权重小于1,梯度会指数衰减
- 梯度爆炸:如果权重大于1,梯度会指数增长
- 链式法则导致梯度在传播过程中被放大或缩小
影响:
- 深层网络训练困难
- 参数无法有效更新
- 训练不稳定或无法收敛
无法处理不可微函数
问题描述:
- 梯度下降要求函数可微
- 对于包含不可微点的函数(如 ReLU 在 0 点),需要特殊处理
- 对于离散优化问题不适用
原因分析:
- 梯度下降的核心是计算梯度
- 不可微点处梯度不存在
- 需要次梯度或其他方法
影响:
- 适用范围受限
- 需要特殊处理
- 某些优化问题无法使用
批量梯度下降的计算成本
问题描述:
- 需要计算所有样本的梯度,计算量大
- 内存占用高(需要存储所有样本)
- 无法在线学习(需要所有数据)
原因分析:
- 批量梯度下降:$\nabla f = \frac{1}{n}\sum_{i=1}^{n} \nabla f_i(x)$
- 需要遍历所有样本
- 每次迭代都需要完整的数据集
影响:
- 计算成本高
- 内存占用大
- 不适合大规模数据
随机梯度下降的噪声问题
问题描述:
- 梯度估计有噪声,收敛路径不稳定
- 可能无法精确收敛到最优值
- 需要调整学习率衰减策略
原因分析:
- 随机梯度下降:$\nabla f \approx \nabla f_i(x)$(单个样本)
- 梯度估计有方差
- 收敛路径有噪声
影响:
- 收敛不稳定
- 需要学习率衰减
- 可能无法精确收敛
问题总结表
| 问题类别 | 具体问题 | 影响程度 | 常见场景 |
|---|---|---|---|
| 局部最优 | 陷入局部最优 | 高 | 非凸函数 |
| 鞍点 | 卡在鞍点 | 高 | 高维空间 |
| 收敛速度 | 收敛慢 | 中 | 平坦区域、病态条件 |
| 初始值 | 对初始值敏感 | 中 | 非凸函数 |
| 平坦区域 | 卡在平坦区域 | 中 | 损失函数平台 |
| 病态条件 | 收敛极慢 | 中 | 不同方向曲率差异大 |
| 梯度消失/爆炸 | 深层网络训练困难 | 高 | 深度学习 |
| 不可微 | 无法处理不可微函数 | 低 | 特殊函数 |
| 计算成本 | 批量梯度下降计算量大 | 中 | 大规模数据 |
| 噪声 | 随机梯度下降不稳定 | 中 | 小批量训练 |
