Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

下面是按照你给出的提纲,完整撰写的 1.3 优化基础 中几个小节内容草稿,风格偏教材化,适合研究生自学。从读者“会微积分和线性代数,但还没系统学过优化”的背景出发,尽量用通俗语言讲清楚核心概念,并在合适位置加了图片占位说明。公式部分保持到能看懂后面神经网络和 RL 论文为目标。


1.3 优化基础

在具身智能、深度学习和强化学习中,本质上都在做一件事:

找到一组参数,使某个“代价”或“损失”尽可能小。

这一节我们系统介绍优化的基本概念与方法,从最常见的梯度下降到约束优化、再到神经网络训练中的实际问题,为后续深度网络、RL、控制中的各种“求最优”打基础。


1.3.1 无约束优化与梯度下降

1.3.1.1 导数与梯度概念

(1)一元函数的导数:变化率的精确定义

在高中数学里,导数通常被解释为切线斜率。更一般地,可以理解为:

在一点附近,函数值对自变量的小变化有多敏感。

设一元函数 \(f(x)\),在点 \(\displaystyle x\) 的导数定义为

\[ f’(x) = \lim_{h\to 0} \frac{f(x+h)-f(x)}{h}. \]

  • 若 \(f’(x) > 0\):向右(\(x\) 增大)走一点,函数值会上升。
  • 若 \(f’(x) < 0\):向右走一点,函数值会下降。
  • 若 \(f’(x) = 0\):在该点附近一阶上看不到“上升/下降”的趋势,这里可能是极大值、极小值或鞍点(后面会详细讲)。

(2)多元函数的偏导与梯度

深度学习中的参数往往是高维向量 \(\theta \in \mathbb{R}^d\),损失函数 \(L(\theta)\) 是多元函数。 对每个分量 \(\theta_i\) 的偏导数

\[ \frac{\partial L}{\partial \theta_i} \]

衡量“只改变 \(\theta_i\),保持其它分量不变”时,损失的变化率。

将所有偏导按分量收集起来,得到 梯度(gradient)

\[ \nabla_\theta L(\theta) = \begin{bmatrix} \frac{\partial L}{\partial \theta_1}\ \vdots\ \frac{\partial L}{\partial \theta_d} \end{bmatrix}. \]

几何上,梯度有两个重要性质(在欧几里得度量下):

  1. 方向:在当前点处,梯度指向函数“** 上升最快**”的方向。
  2. 负梯度方向:\(-\nabla L\) 是函数“** 下降最快**”的方向。

【图 1.3-1 占位:二维函数的等高线图,标出某点处的梯度向量,显示梯度垂直等高线并指向上升最快方向;负梯度指向下降方向。】

这两个性质是梯度下降法的核心依据。


1.3.1.2 梯度下降法

(1)问题形式:无约束优化

最简单也是最常见的优化问题形式是:

\[ \min_{\theta \in \mathbb{R}^d} L(\theta), \]

没有额外等式/不等式约束(比如不要求 \(\theta\) 非负等),称为 无约束优化 。在机器学习中,\(\theta\) 通常代表模型参数,\(L(\theta)\) 是在训练集上的损失或代价函数。(Analytics Vidhya)

(2)梯度下降思想

基于“负梯度是下降最快方向”这一事实,梯度下降(Gradient Descent)采用简单迭代:

\[ \theta^{(k+1)} = \theta^{(k)} - \eta \nabla_\theta L(\theta^{(k)}), \]

其中:

  • \(\displaystyle k\):迭代步数;
  • \(\eta > 0\):步长或 学习率(learning rate)
  • \(\nabla_\theta L(\theta^{(k)})\):在当前参数的梯度。

直观理解:

  • 每一步都“看一眼”当前坡度(梯度),
  • 然后沿着下坡最快的方向走一小步(\(-\eta \nabla L\)),
  • 希望最终走到“山谷底”(损失最小处)。(DigitalOcean)

【图 1.3-2 占位:一维曲线 \(L(\theta)\) 图像,展示沿负导数方向移动的离散步点,逐步靠近最小值。】

(3)梯度下降的基本性质

在一些理想条件下(比如 \(L(\theta)\) 是光滑且凸的),可以证明梯度下降会收敛到全局最小值,且步长足够小即可保证函数值单调下降。但在非凸问题(深度网络训练)中,梯度下降往往只能保证:

  • 找到某个“还不错”的局部极小值或鞍点附近的低损失区域, 而不是严格意义上的全局最优。

不过在深度学习的实际经验中,局部极小值问题远没有想象中那么可怕,重点反而在于收敛速度和训练稳定性,这些会在后面几小节展开。


1.3.1.3 学习率对优化的影响

学习率 \(\eta\) 决定每一步走多远,直接影响:

  • 收敛速度
  • 是否发散
  • 是否在最优附近震荡

(1)学习率过大:发散或震荡

如果 \(\eta\) 取得非常大,一步走得太远,可能出现:

  • 每次更新都“跨过山谷”,在两侧来回跳,导致损失在最小值附近震荡;
  • 甚至越走越远,损失越来越大,出现 发散

【图 1.3-3 占位:一维损失曲线,分别画出合适步长、偏大步长(震荡)、极大步长(发散)的迭代轨迹对比。】

在凸二次函数 \(L(\theta) = \frac{1}{2}a\theta^2\) 情况下,可以严格算出: 若 \(\eta > 2/a\),迭代就一定发散;\(\eta\in(0,2/a)\) 则可收敛。

(2)学习率过小:收敛极慢

若 \(\eta\) 非常小,梯度下降每次只迈出“蚂蚁步”,好处是几乎不会发散,坏处是:

  • 要走非常多步才能接近最优;
  • 在实际深度网络训练中,会导致显存和时间成本都非常高。

(3)合适学习率:速度与稳定性的折中

在深度学习实践中,一般:

  • 开始时使用相对较大的学习率加速下降;
  • 后期逐渐减小学习率,在最优附近“慢慢收敛”,减少震荡。

如何具体调度学习率,是 1.3.5 的重点内容之一。很多现代优化算法(如 Adam)本质上就是在智能地“调步长”——对不同参数维度、自不同时刻使用不同的有效学习率。(DigitalOcean)


1.3.2 一阶与二阶优化方法直觉(SGD、Momentum、Adam 等)

在 1.3.1 中,梯度下降用到了目标函数的一阶导数(梯度)。更一般地,可以根据使用信息的多少,大致将优化方法分为:

  • 一阶方法(first-order methods):只依赖梯度;
  • 二阶方法(second-order methods):还利用 Hessian(即二阶导信息)。

从直觉上看:

  • 一阶方法:信息便宜、迭代快,但走路相对“笨拙”;
  • 二阶方法:更聪明地利用“曲率”,但每一步计算非常贵,在大规模神经网络中通常不现实。

1.3.2.1 一阶方法

一阶方法的共同特征:

更新规则形如 \(\theta^{(k+1)} = \theta^{(k)} + \text{某种函数}({\nabla L(\theta^{(t)})}_{t\le k})\)。

(1)批量梯度下降(Batch GD)

最原始的梯度下降在每一步都用 整批训练数据 计算损失和梯度,这在数据量巨大时计算代价非常高。深度学习实践中更常用的是 mini-batch 形式(见下面 SGD),这里略过。

(2)随机梯度下降(Stochastic Gradient Descent, SGD)

理论上需要在整批数据上计算梯度,但在实践中我们常用 一个样本或一个小批量样本 的梯度来近似整体梯度,这就是 ** 随机梯度下降(SGD)**:

\[ \theta^{(k+1)} = \theta^{(k)} - \eta \nabla_\theta \ell(x_{i_k}, y_{i_k}; \theta^{(k)}), \]

其中:

  • \(\displaystyle (x_{i_k}, y_{i_k})\) 是在第 \(\displaystyle k\) 步随机抽取的样本或 mini-batch;
  • \(\ell\) 是单样本损失。

这种“噪声较大的梯度”有两个好处:

  1. 更新更频繁,单步计算轻量,适合大数据场景;
  2. 由于带噪声,优化过程更容易“抖出”某些鞍点或坏的局部极小值,有助于探索更好的解。(wikidocs.net)

(3)带动量的 SGD(Momentum)

纯 SGD 更新路径常常是一条“抖动的折线”:在狭长谷底中来回摆动,收敛慢。动量(Momentum) 的思想是:

不仅考虑当前梯度,还记住“过去一段时间的更新方向”, 就像物理中的惯性一样,让参数沿着过去累积的方向继续前进。(DigitalOcean)

典型形式(速度形式):

\[ \begin{aligned} v^{(k+1)} &= \mu v^{(k)} - \eta \nabla_\theta L(\theta^{(k)}), \theta^{(k+1)} &= \theta^{(k)} + v^{(k+1)} , \end{aligned} \]

其中:

  • \(v^{(k)}\):“速度”或动量向量;
  • \(\mu\in[0,1)\):动量衰减系数(如 0.9)。

直觉:

  • 在损失谷底的长轴方向上,梯度方向长期一致,动量会不断积累,使得沿谷底方向前进更快;
  • 在与谷底垂直方向(损失变化陡峭的方向),梯度符号经常变化,动量会部分抵消震荡。

(4)自适应方法:RMSProp、Adam

传统 SGD 对所有参数使用同一个学习率 \(\eta\)。但不同维度可能有不同尺度和重要性,自适应方法通过统计历史梯度大小,为不同参数自动调整“步长”。

Adam 为例(非常常见的优化器):(DigitalOcean)

  • 维护一阶矩(梯度的滑动平均) \((m_t)\);
  • 维护二阶矩(梯度平方的滑动平均) \((v_t)\);
  • 用这两个统计量对梯度进行“归一化”和“放缩”。

简化后更新类似:

\[ \theta_{t+1} = \theta_t - \eta \cdot \frac{\hat m_t}{\sqrt{\hat v_t} + \epsilon}. \]

直观上:

  • \((m_t)\) 类似动量,平滑梯度方向;
  • \(\sqrt{v_t}\) 则反映梯度幅度,对梯度长期较大的维度减小步长,对梯度较小的维度增大步长,实现自适应学习率。

1.3.2.2 二阶方法

一阶方法只用梯度,而二阶方法还使用 Hessian 矩阵

\[ H(\theta) = \nabla^2_\theta L(\theta), \]

它是一个 \(d\times d\) 矩阵,每个元素是二阶偏导:

\[ H_{ij} = \frac{\partial^2 L}{\partial \theta_i \partial \theta_j}. \]

(1)曲率信息与“更聪明的步长”

一元函数里,我们知道泰勒展开:

\[ L(\theta) \approx L(\theta_0) + L’(\theta_0)(\theta-\theta_0) + \frac{1}{2}L’’(\theta_0)(\theta-\theta_0)^2. \]

若在附近用这个二次近似代替原函数,最小值的解析解是:

\[ \theta^\star \approx \theta_0 - \frac{L’(\theta_0)}{L’’(\theta_0)}. \]

把这个推广到多元情形,就得到 牛顿法(Newton’s method) 的迭代:

\[ \theta^{(k+1)} = \theta^{(k)} - H(\theta^{(k)})^{-1} \nabla L(\theta^{(k)}). \]

相比梯度下降 \(-\eta\nabla L\),牛顿法将梯度再乘以 \((H^{-1})\),等价于在不同方向上动态调整步长,使得:

  • 在“弯曲得很厉害”(曲率大)的方向上,步子变小(防止跳太远);
  • 在“曲率较平缓”的方向上,步子变大,加速收敛。

(2)二阶方法的难点

对于深度网络:

  • 参数维度 \(\displaystyle d\) 往往在百万甚至亿级,Hessian 是 \(d\times d\) 矩阵, 存储和求逆都是天文级成本;
  • 计算 Hessian 本身也极其昂贵,且数值上不稳定。

因此直接使用“严格的二阶方法”在深度网络中几乎不可行。

(3)拟牛顿方法(简略了解)

实际中有一些折中方案,如 BFGS、L-BFGS 等 拟牛顿法,通过在迭代中近似构造 \((H^{-1})\),而不显式求出完整 Hessian。这些方法在中等规模问题(如传统机器学习、小型网络)中依然常用,但在大规模深度学习里不再主流。


1.3.2.3 实用考虑

在深度学习和具身智能的实际训练里,通常采用:

  • 一阶优化器为主(SGD / SGD+Momentum / Adam / RMSProp 等);(DigitalOcean)
  • 在少数规模较小、需要高精度的模块中尝试二阶或拟牛顿方法。

主要原因:

  1. 模型参数维度太高,无法承担 Hessian 级别的计算和内存;
  2. 大量实践表明,好的初始化 + 合理的一阶优化 + 学习率调度,已足够得到很好的结果。

在机器人和 VLA 模型中,优化器的选择往往是工程问题:

  • 需要更稳定、自动调节学习率:Adam / AdamW 常见;
  • 更在意最终泛化性能、训练后期表现:不少视觉任务仍偏爱带动量的 SGD。

1.3.3 损失景观与局部极值、鞍点现象

1.3.3.1 损失函数景观

损失景观(loss landscape) 是指: 在高维参数空间中,损失函数 \(L(\theta)\) 的取值构成的“山地地形”。

  • 每个点 \(\theta\) 是一组参数;
  • 其对应高度 \(L(\theta)\) 是训练损失;
  • 优化过程就是在这片高维山地上“下山”。

【图 1.3-4 占位:二维参数空间的损失等高线/三维曲面示意,标出多个谷地、鞍点和平坦区域。】

在深度网络中,损失景观具有以下特点:(lcnwww.epfl.ch)

  • 高维(成千上万甚至更多参数);
  • 强烈非凸(有大量局部极值和鞍点);
  • 经常存在大面积的“平坦区”(梯度很小)和“陡峭沟壑”。

理解损失景观有助于从几何视角解释:

  • 为什么梯度下降会卡住或变慢;
  • 为什么初始化会影响最终结果;
  • 为什么带噪声的 SGD 在实践中表现不错。

1.3.3.2 局部极小值与鞍点

(1)临界点(critical point)

若在某点 \(\theta^\star\) 处梯度为零:

\[ \nabla L(\theta^\star) = 0, \]

则称该点为 临界点 。临界点可能是:

  • 局部极小值(local minimum)
  • 局部极大值(local maximum)
  • 鞍点(saddle point)

(2)局部极小值

若存在足够小的邻域,使得:

\[ \forall \theta \text{ 在邻域内},\quad L(\theta) \ge L(\theta^\star), \]

则 \(\theta^\star\) 是局部极小值。简单理解: 在附近任何方向稍微走一步,损失都会变大。

在凸优化中,每个局部极小值同时是全局极小值,世界清爽又温柔。可惜深度网络损失往往不是凸的。

(3)鞍点(Saddle Point)

鞍点是这样一种临界点:梯度为零,但在某些方向上表现得像极小值,在另一些方向上则像极大值——类似马鞍的形状:横向是谷,纵向是峰。(data-intelligence.hashnode.dev)

  • 数学上:Hessian 的特征值有正有负;
  • 几何上:既存在“向下的方向”,也存在“向上的方向”。

在高维非凸优化中,研究与数值实验表明:

  • 鞍点远比“坏的局部极小值”更多
  • 很多“训练卡住”的现象,实则是停在鞍点附近或平坦区域,而非真正的局部最小谷底。(lcnwww.epfl.ch)

(4)鞍点对优化的影响

在鞍点附近,梯度接近零,普通梯度下降会:

  • 更新步长很小,移动缓慢;
  • 可能长时间在附近徘徊,看起来像“训练不动了”。

带噪声的 SGD 由于每步梯度有随机性,在一定程度上可以“抖出”鞍点,这也是实践中几乎总是使用 mini-batch 而不是纯 Batch GD 的原因之一。(ApX Machine Learning)


1.3.3.3 深度网络的损失特点

近年来不少工作分析了深度网络的损失景观,一些典型结论包括:(机器学习研究期刊)

  1. 坏的局部极小值在高维情况下不一定很多。 在很多设置下,深度线性网络甚至可以证明不存在“劣质局部极小值”,只有全局极小和鞍点。
  2. 鞍点和平坦区域是主要障碍。 训练变慢或停滞往往源于梯度接近零的平原或鞍点,而不是被困在某个特别高的局部谷底。
  3. “好极小值”往往成片存在(flat minima)。 一些较“平坦”的极小值(改变参数一点点损失不变太多)与泛化性能有一定关联——通常认为平坦极小值对应更好的泛化。

对具身智能的实际意义:

  • 训练 VLA 或控制策略时,如果损失长时间不下降,未必是“模型不够强”,也可能是优化在不利的几何结构中爬得太慢;
  • 调整优化器(如从 Adam 换成 SGD+Momentum),修改学习率调度、增加噪声等,常常可以改变在损失景观中的“走路方式”,找到更好的解。

1.3.4 约束优化与拉格朗日乘子基本思想

前面讨论的是 无约束优化,但在机器人和具身智能里,很多问题天然带有约束,例如:

  • 关节角必须在物理范围内;
  • 控制输入不能超过最大电机扭矩;
  • 概率分布的参数必须非负且和为 1;
  • 路径规划中必须避开障碍物等。

这类问题统称为 约束优化(constrained optimization)


1.3.4.1 约束优化

一般形式可以写作:

\[ \begin{aligned} \min_{x} \quad & f(x) \text{s.t.} \quad & g_i(x) = 0,\quad i=1,\dots,m \quad \text{(等式约束)} & h_j(x) \le 0,\quad j=1,\dots,p \quad \text{(不等式约束)} \end{aligned} \]

其中:

  • \(x\in \mathbb{R}^d\):待求参数(比如控制变量、概率参数等);
  • \(f(x)\):目标函数(损失或代价);
  • \(g_i(x)\)、\(h_j(x)\):约束条件。

机器人中的若干例子:

  • 机械臂逆运动学求解时要求末端达到给定位置(等式约束);
  • 控制优化中限制关节速度或力矩不超过上限(不等式约束);
  • 最大熵模型或概率分布学习中要求 \(\sum_i p_i = 1, p_i \ge 0\)。

1.3.4.2 拉格朗日乘子

(1)等式约束:拉格朗日乘子法

考虑只有等式约束的情形:

\[ \begin{aligned} \min_x \quad & f(x) \text{s.t.}\quad & g_i(x) = 0,\quad i=1,\dots,m. \end{aligned} \]

拉格朗日乘子法 的关键思想是:

把“在约束面上找极值”的问题,转化为“在更高维空间中找无约束极值”的问题。(cs.toronto.edu)

构造 拉格朗日函数:

\[ \mathcal{L}(x, \lambda) = f(x) + \sum_{i=1}^m \lambda_i g_i(x), \]

其中 \(\lambda_i\) 称为 拉格朗日乘子 。此时的最优性条件(在一些技术条件下)可以写成:

\[ \nabla_x \mathcal{L}(x^\star,\lambda^\star) = 0,\quad g_i(x^\star)=0. \]

直观意义:

  • 在最优点上,目标函数 \(f(x)\) 的梯度在约束面切平面内不能再下降;
  • 拉格朗日乘子 \(\lambda_i\) 可以理解为“满足约束对目标值的边际代价”,在许多物理和经济问题中有很直观的解释。

【图 1.3-5 占位:二维函数等高线 + 一条曲线约束 \(g(x)=0\)(例如椭圆),示意在最优点处水平集与约束曲线切触,梯度方向与约束的梯度共线。】

(2)从优化到“方程组”

使用拉格朗日乘子或 KKT 条件,本质上就是把“优化问题”转换为一组方程/不等式系统:

\[ \begin{cases} \nabla_x \mathcal{L}(x,\lambda,\mu) = 0 g_i(x)=0 h_j(x)\le 0, \dots \end{cases} \]

这类系统在理论分析和某些算法(如内点法)中更容易处理。(Mathematics Stack Exchange)


1.3.4.3 KKT 条件

当存在不等式约束时,拉格朗日乘子法需要推广到 Karush–Kuhn–Tucker(KKT)条件 。它是非线性规划中非常重要的一阶必要条件。(维基百科)

考虑一般问题:

\[ \begin{aligned} \min_x \quad & f(x) \text{s.t.} \quad & g_i(x) = 0,\quad i=1,\dots,m & h_j(x) \le 0,\quad j=1,\dots,p. \end{aligned} \]

构造 拉格朗日函数

\[ \mathcal{L}(x,\lambda,\mu) = f(x) + \sum_{i=1}^m \lambda_i g_i(x) + \sum_{j=1}^p \mu_j h_j(x), \]

其中:

  • \(\lambda_i\):等式约束的乘子;
  • \(\mu_j\):不等式约束的乘子。

KKT 条件 包括:

  1. 原始可行性(primal feasibility) 满足原始约束:

    \[ g_i(x^\star)=0,\quad h_j(x^\star)\le 0. \]

  2. 对偶可行性(dual feasibility) 不等式乘子非负:

    \[ \mu_j^\star \ge 0. \]

  3. 站立条件(stationarity)

    \[ \nabla_x \mathcal{L}(x^\star,\lambda^\star,\mu^\star) = 0. \]

  4. 互补松弛(complementary slackness)

    \[ \mu_j^\star h_j(x^\star) = 0,\quad \forall j. \]

    这表示:

    • 若某个不等式约束严格不等(\(h_j(x^\star) < 0\)),则对应乘子必须为 0;
    • 若乘子 \(\mu_j^\star>0\),则该约束一定正好“紧到边上”(\(h_j(x^\star)=0\))。

在凸优化问题且满足一定正则条件时,KKT 条件不仅是必要条件,也是充分条件——即解满足 KKT 条件就一定是全局最优解 。这为许多机器学习模型(如支持向量机)的推导提供了理论基础。

后面讲到最大间隔分类、软间隔 SVM 时,会再次用到这些工具。


1.3.5 神经网络训练中的优化实践问题(学习率、收敛与稳定性)

从这一小节开始,重点从“理论优化”切换到“神经网络训练实践”。在具身智能中,无论训练 VLM、VLA 还是 RL policy,都要面对如下问题:

  • 学习率如何设定与调度?
  • 梯度为什么会消失或爆炸?
  • 训练过程算不算收敛?什么时候终止?如何保持稳定?

1.3.5.1 学习率调度

在 1.3.1.3 中,我们已经看到学习率大小对收敛速度和稳定性的影响。进一步地,学习率调度(learning rate schedule) 指的是在训练过程中随时间改变学习率的策略。

(1)为什么要调度?

  • 训练初期:需要较大的学习率快速“粗略找到好区域”;
  • 训练后期:需要较小的学习率在最优附近细致调整,避免震荡;
  • 某些模型训练需要“预热”(warm-up),防止一开始梯度太大导致发散。

(2)常见调度策略

  1. Step Decay:每过固定若干 epoch,将学习率乘以一个小于 1 的因子(例如每 30 个 epoch 乘以 0.1)。
  2. Exponential Decay:按 \(\eta_t = \eta_0 \cdot \gamma^t\) 指数衰减。
  3. Cosine Annealing(余弦退火):学习率随训练进度在一个余弦曲线上缓慢减小,有时结合周期性重启使用。
  4. Warm-up + Scheduler:在前几百/几千步从非常小的值线性升高到目标学习率,然后按上述某种策略减小。

实践经验(特别是在 Transformer 和大规模模型训练中)表明,合理的学习率调度往往比“纯粹换更复杂的优化器”带来的收益更稳定且可控。(DigitalOcean)


1.3.5.2 梯度消失与爆炸

(1)问题现象

在深层网络中,反向传播时梯度会通过链式法则逐层相乘,如果每层的导数绝对值多数小于 1,则梯度会指数级减小,最终前面层几乎得不到更新,这就是 梯度消失(vanishing gradients) 。(维基百科)

反过来,如果导数绝对值多为大于 1,则梯度会指数级放大,导致 梯度爆炸(exploding gradients)

  • 参数更新剧烈震荡甚至变成 NaN;
  • loss 突然变得非常大。

这些问题在 RNN、非常深的前馈网络以及不合理初始化时尤其严重。(arXiv)

(2)成因直观

简单看一维链式法则:

\[ \frac{\partial L}{\partial x_0} = \frac{\partial L}{\partial x_1} \frac{\partial x_1}{\partial x_0} = \frac{\partial L}{\partial x_n} \prod_{k=0}^{n-1} \frac{\partial x_{k+1}}{\partial x_k}. \]

若每个 \(\big|\frac{\partial x_{k+1}}{\partial x_k}\big|\) 大约为 0.5,10 层后得到 \(0.5^{10}\approx 1/1024\),梯度几乎消失;若每层约为 2,则 \(2^{10}\approx 1024\),梯度爆炸。

在多层线性/非线性组合中,这种现象极易出现。

(3)缓解方法

常见手段包括:(维基百科)

  1. 合理的权重初始化
    • Xavier 初始化:保证前向/反向信号方差在层间大致保持一致,适合 tanh 等。
    • Kaiming 初始化:针对 ReLU 族激活,考虑其非对称性。
  2. 合适的激活函数
    • 用 ReLU、GELU 等替代 Sigmoid/Tanh,可以减轻梯度饱和问题。
  3. 归一化层
    • Batch Normalization、LayerNorm 等在前向上稳定中间层分布,也有助于避免梯度过大或过小。
  4. 残差连接(Residual Connections)
    • 在 ResNet、Transformer 中广泛使用,允许梯度沿“捷径”反向传播,大幅缓解梯度消失问题。
  5. 梯度裁剪(Gradient Clipping)
    • 对梯度的范数设置上限,例如若 \((|g|_2 > c)\) 则缩放为 \(\frac{c}{|g|_2}g\),常用于 RNN 和强化学习策略网络中,防止爆炸。(Data Science Stack Exchange)

在具身智能相关网络(例如 RNN/Transformer 控制策略、多帧视觉编码器)中,梯度消失与爆炸会直接导致策略不学或训练不稳定,是工程调参中的常见“坑”。


1.3.5.3 收敛判断与稳定训练

(1)什么叫“收敛”?

在理论上,收敛可以是:

  • 参数 \(\theta^{(k)}\) 收敛;
  • 梯度 \(\nabla L(\theta^{(k)}) \to 0\);
  • 损失 \(L(\theta^{(k)})\) 收敛到某个值。

在深度学习实践中,我们更关心:

  • 训练集损失是否持续下降并趋于平稳;
  • 验证集性能是否达到平台期甚至开始下降(过拟合)。

(2)训练监控

通常会绘制如下曲线:

  • 训练 loss vs. iteration / epoch;
  • 验证 loss / 准确率 vs. epoch。

在“健康”的训练过程中,一般会看到:

  • 前期训练 loss 快速下降;
  • 中后期下降变缓,接近收敛;
  • 若模型开始过拟合,训练集指标继续变好而验证集变差。

(3)稳定训练的常用技巧

  1. 早停(Early Stopping) 在验证集性能长时间未提升甚至下降时,停止训练并回退到最佳验证点对应的参数,防止过拟合。
  2. 检查学习率与梯度范围 若 loss 突然爆炸或梯度出现 NaN,优先怀疑学习率是否过大、是否缺少梯度裁剪或数值稳定处理。
  3. 使用验证集而非训练 loss 判断收敛 对具身智能任务尤其重要,因为在真实机器人上往往只关心“在新场景、新物体上的成功率”,不能只看训练轨迹上的表现。
  4. 多次重复实验与随机种子控制 优化过程本身带有随机性(初始化、mini-batch 抽样等),稳定结果应当在不同随机种子下大致一致,防止“偶然跑出一次好结果”。

在后续章节(例如 2.2 深度网络训练技巧、9.4 数据工程与 MLOps)中,会进一步结合实验工程细节讨论如何系统监控和管理训练过程。


这一节从导数和梯度开始,依次介绍了梯度下降、一阶/二阶方法直觉、损失景观与鞍点、约束优化与拉格朗日/KKT,再到神经网络训练中的学习率、梯度消失/爆炸以及收敛判断。掌握这些内容后,读者应该能:

  • 看懂大多数深度学习论文中涉及优化的公式;
  • 理解主流优化器(SGD、Momentum、Adam 等)的核心思想;
  • 在训练自己的网络(包括具身智能中的 VLA 模型)时,有一套清晰的调参和诊断思路。

后续章节将在此基础上,进一步讨论深度网络结构、Transformer、RL 与模仿学习中的优化问题,逐步搭建起完整的“从感知到控制”的学习图景。