行莫
行莫
发布于 2025-12-27 / 49 阅读
0
0

梯度下降法

梯度下降法

梯度下降法是一种迭代求解算法,基本思路是:首先在定义域中随机选取一个点 $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. 沿负梯度方向更新参数
  3. 重复步骤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)$$


方法四:几何直观理解

核心思想: 梯度指向函数值增长最快的方向,负梯度指向下降最快的方向。

几何意义

  1. 梯度 $f'(x_t)$ 的方向: 指向函数值增长最快的方向
  2. 负梯度 $-f'(x_t)$ 的方向: 指向函数值下降最快的方向
  3. 更新策略: 沿负梯度方向移动

更新公式

$$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 时(局部最优、全局最优或鞍点),算法停止

为什么会出现局部最优?

  1. 多峰函数:函数有多个"山峰"和"山谷"
  2. 初始值影响:不同的初始值可能收敛到不同的局部最优
  3. 梯度信息局限:梯度只提供局部信息,无法判断全局最优

示例函数:

考虑一个简单的多峰函数:
$$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)有正负特征值
函数形状所有方向都是凸的某些方向凸,某些方向凹
出现频率低维空间中常见高维空间中更常见
梯度下降行为停止更新可能卡住,更新很慢
逃离方法需要较大的扰动较小的扰动即可逃离

如何应对这些问题

应对局部最优:

  1. 多次运行:使用不同的初始值,选择最佳结果
  2. 模拟退火:允许偶尔接受更差的解
  3. 遗传算法:使用种群搜索,避免陷入局部最优
  4. 更好的初始化:使用预训练或合理的初始化策略

应对鞍点:

  1. 二阶方法:使用 Hessian 矩阵信息(但计算成本高)
  2. 随机扰动:添加噪声帮助逃离鞍点
  3. 动量法:使用历史梯度信息,帮助逃离鞍点
  4. 自适应学习率: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)$(单个样本)
  • 梯度估计有方差
  • 收敛路径有噪声

影响:

  • 收敛不稳定
  • 需要学习率衰减
  • 可能无法精确收敛

问题总结表

问题类别具体问题影响程度常见场景
局部最优陷入局部最优非凸函数
鞍点卡在鞍点高维空间
收敛速度收敛慢平坦区域、病态条件
初始值对初始值敏感非凸函数
平坦区域卡在平坦区域损失函数平台
病态条件收敛极慢不同方向曲率差异大
梯度消失/爆炸深层网络训练困难深度学习
不可微无法处理不可微函数特殊函数
计算成本批量梯度下降计算量大大规模数据
噪声随机梯度下降不稳定小批量训练


评论