METHOD / optimization
梯度下降:从局部下降方向到可诊断的优化过程
从一阶近似与光滑性条件推导梯度下降,分析学习率、曲率、尺度、动量和停止准则如何共同决定收敛轨迹。
本页目标
- 从一阶近似和下降引理说明负梯度更新何时降低目标函数。
- 对二次函数精确判断学习率对应的单调收敛、振荡收敛和发散。
- 解释条件数、特征尺度和动量如何改变二维优化轨迹。
- 使用损失、梯度范数、参数步长与验证指标诊断停止和失败。
本页目录
优化问题与更新对象
许多科学计算和机器学习任务最终都包含一个优化问题:在可调变量中寻找使目标函数较小的点。变量可以是一条曲线的系数、物理模型的参数,也可以是神经网络中数百万个权重。把参数写成向量 oldsymbol\theta\in\mathbb R^d,把需要降低的目标写成 ,无约束最小化问题为
梯度下降从初值 出发,重复计算当前位置的梯度并更新:
是第 步的学习率或步长。算法的输入不只有公式,还包括初值、步长规则、最大迭代数、停止条件和数值精度。相同目标在不同初值或步长下可以产生完全不同的轨迹,因此报告“使用了梯度下降”不足以复现实验。
梯度下降解决的是给定目标的数值优化。训练损失、数据构造和模型结构决定目标究竟表达什么;优化器不能修复标签错误、数据泄漏或错误的任务定义。即使迭代精确到达训练目标的最小点,部署表现仍需独立数据评估。
负梯度为什么给出局部下降
若 在 可微,小位移 的一阶展开为
在所有长度固定为 的位移中,柯西—施瓦茨不等式说明一阶项存在明确下界。达到下界的位移在
处最小。因此负梯度是标准欧氏长度下的一阶最陡下降方向。结论依赖局部线性模型和所选度量;改变参数坐标或用矩阵定义长度后,代表最陡方向的向量也会改变。
把 代入一阶式得到
当梯度非零且步长足够小时,主导变化为负。这里没有保证任意正步长都下降,因为二阶及更高阶项会随曲率增长。梯度给方向,学习率决定沿该方向移动多远,两者缺一不可。
光滑性条件与下降引理
为了把局部近似变成可检验不等式,常假设梯度是 -Lipschitz 连续的。该条件写成:
它限制梯度随位置变化的速度,可理解为曲率具有统一上界。下降引理给出
令 ,得到
当 时,右侧的修正项为负,于是非零梯度对应一次严格下降。若采用较保守的 ,还可获得简洁的下降量下界。这个结论需要迭代经过区域内具有统一光滑常数;ReLU 网络的目标可能分段可微,随机小批量梯度也不是完整目标的确定梯度,应用时应区分理论模型与实际训练过程。
光滑性没有保证目标是凸的。对凸且光滑的函数,函数值可以在适当步长下趋近全局最优值;若再有强凸性,可得到几何速度的误差收缩。对一般非凸函数,常见结论只保证某些迭代点的梯度范数趋小,极限点仍可能是局部极小点、鞍点或平坦区域。
例题一:一维二次函数的精确稳定区间
考虑
梯度为 。令误差 ,梯度下降满足
因此收敛的充要条件是 ,即 。若 ,系数位于 ,误差保持符号并单调靠近零;若 ,一步准确到达最优点;若 ,系数为负但绝对值小于一,参数交替越过最优点并逐步收敛;若 ,误差在正负之间等幅振荡;若 ,误差幅度增长。
取 、、。当 时,收缩因子为 ,前三步参数为 ;当 时,因子为 ,前三步为 ,虽振荡仍收敛;当 时,因子为 ,误差绝对值持续增加。三种轨迹来自同一目标和初值,差异完全由学习率造成。
这里 ,下降引理给出的 与精确稳定区间一致。对非二次目标,局部曲率随位置改变,单一常数只能给出控制区域内的保证。
曲率、条件数与狭长谷底
二维正定二次函数可写成
其中 是对称正定矩阵。沿 的特征向量分解误差后,第 个方向每步乘以 。要让所有方向稳定,需要 。最大的特征值限制步长,最小特征值决定最慢方向;条件数 很大时,算法为了高曲率方向稳定而采用小步长,在低曲率方向便前进缓慢。
特征尺度会直接改变曲率。若一个特征以米计量、另一个以毫米计量,未经标准化的参数方向可能相差多个数量级。数据标准化、变量重参数化或预条件可以把狭长等高线变得更接近圆形,从而允许更均衡的更新。它们改变的是优化几何,不应被误解为凭空增加数据。
例题二:各向异性二次函数与动量
令
从 出发,固定学习率 。更新为
方向缓慢同侧衰减, 方向则反复跨过零点。第一步为 ,第二步约为 ,第三步约为 。总损失仍下降,但轨迹在陡峭方向左右折返。若把步长提高到 , 方向因子变为 ,该方向发散,尽管 方向仍然稳定。
一种动量写法是
在持续同向的缓坡上,历史梯度累积会增大有效前进量;在梯度符号反复变化的陡峭方向,正负贡献可部分抵消。取 不能据此保证稳定, 与 必须共同选择。若历史速度过大,参数会越过谷底并产生更长振荡。比较方法时应固定初值、目标、迭代预算和停止规则,并同时记录函数值与轨迹。
交互实验:读取优化轨迹
演示把二维目标的等高线、当前位置和逐步更新轨迹放在同一坐标系中。先固定初值并关闭动量,逐级提高学习率,记录损失是否单调、轨迹是否跨越谷底以及参数是否离开视窗。随后恢复相同初值,打开动量并只改变动量系数。若同时改变目标、初值和两个超参数,轨迹差异便无法归因。
梯度下降
正在加载交互实验…
等高线间距反映函数值变化,却不直接等于梯度大小;坐标轴比例也会改变视觉斜率。图中有限步轨迹只能展示选定目标和参数的行为。一般收敛结论仍需可微性、光滑性、凸性或随机梯度条件等数学假设支持。
批量梯度、随机梯度与学习率调度
若经验目标是 个样本损失的平均
完整梯度使用全部样本。令 表示第 步抽取的小批量索引集合,随机梯度下降每次使用一个样本或小批量:
若抽样机制合适, 可以是完整梯度的无偏或近似无偏估计,但单步方向含有方差,训练损失不必每次都下降。批量增大通常降低梯度噪声并增加单步计算量;实际吞吐还受硬件并行和内存限制。比较批量大小时应说明是固定迭代数、固定样本访问量还是固定墙钟时间。
固定学习率便于分析,在训练后期却可能使参数围绕低损失区域波动。分段衰减、指数衰减、余弦调度和预热分别规定 随时间的变化。调度器增加了新的设计选择;若只报告“使用余弦学习率”而不报告初始值、最低值、周期和总步数,实验仍不可复现。
停止条件与诊断记录
单看训练损失不足以判断是否应停止。可共同记录以下量:
- 目标值及其相对变化,用于发现长期平台或突然发散;
- 梯度范数,反映一阶驻点条件接近程度,但在随机梯度下需要平滑或独立估计;
- 参数步长 ,用于识别数值停滞;
- 验证集指标,用于模型选择和早停,不替代训练目标的数值诊断;
- NaN、无穷值、梯度峰值和运行预算,用于及时中止不可恢复的计算。
梯度很小可能意味着接近局部极小点,也可能来自饱和激活、尺度不当或有限精度下的下溢。损失变化很小可能表示收敛,也可能是学习率过小。诊断应把多个信号与轨迹放在一起,而不是依赖单一阈值。
可复现的二维实现
下面的纯函数只接受显式初值、梯度、损失、学习率与迭代数,不读取全局状态。返回记录同时保存损失和梯度范数,便于调用方绘制轨迹并设置停止诊断。输入检查阻止负学习率和非整数迭代预算进入循环。
type Point2 = readonly [number, number];
interface DescentStep {
readonly iteration: number;
readonly point: Point2;
readonly loss: number;
readonly gradientNorm: number;
}
export function gradientDescent2D(
initial: Point2,
gradient: (point: Point2) => Point2,
loss: (point: Point2) => number,
learningRate: number,
iterations: number,
): DescentStep[] {
if (!(learningRate > 0) || !Number.isInteger(iterations) || iterations < 0) {
throw new Error("Invalid optimization parameters.");
}
const history: DescentStep[] = [];
let point = initial;
for (let iteration = 0; iteration <= iterations; iteration += 1) {
const [gx, gy] = gradient(point);
const value = loss(point);
if (![gx, gy, value].every(Number.isFinite)) {
throw new Error(`Non-finite optimization state at iteration ${iteration}.`);
}
history.push({
iteration,
point,
loss: value,
gradientNorm: Math.hypot(gx, gy),
});
if (iteration < iterations) {
point = [point[0] - learningRate * gx, point[1] - learningRate * gy];
}
}
return history;
}
实现对相同输入给出相同轨迹,并在非有限数值出现时报告具体迭代。调用方仍需检查损失是否按预期下降,并为过大的历史数组设置预算。真实训练还需保存数据版本、批次顺序、随机种子、优化器状态和调度器状态。仅保存最终参数无法重建中途发散、恢复训练或学习率切换的原因。
反例与常见误解
对 ,从 出发时负梯度方向指向左侧。若 ,更新得到 ,损失从 增加到 。方向的一阶性质没有控制任意距离;步长跨越低点后继续前进,最终进入更高函数值区域。
很小的学习率可以降低单步越界风险,却可能在有限预算内几乎不移动。在随机训练中,更新还会受到梯度估计噪声和有限精度影响;信号小于数值或采样波动时,继续减小学习率未必产生有效进展。安全性应结合目标变化、梯度尺度和计算预算判断。
梯度为零只满足无约束可微问题的一阶必要条件。 在零点梯度为零但不是局部极值, 在原点是鞍点。只有凸性等额外结构才能把合适的一阶条件提升为全局最优结论。
训练损失下降表示优化器在当前训练样本和目标下取得进展。验证误差、概率校准、分组性能、鲁棒性和部署分布需要独立检查。若目标函数漏掉重要代价,优化得更充分甚至会强化错误偏好。
适用条件与方法边界
经典梯度下降直接适用于能够计算梯度的连续参数问题。若目标不可微,可使用次梯度、近端方法或平滑近似;若变量必须为整数或离散结构,直接减去梯度通常不产生可行解;若存在等式或不等式约束,需要投影、拉格朗日方法或专门的约束优化器。梯度计算本身也可能昂贵,自动微分只改变求导实现,不消除前向与反向计算成本。
在光滑凸问题中,梯度下降提供清楚的全局误差界,是理解一阶优化方法的基线。在大型非凸学习系统中,它仍是重要构件,但理论保证、数值行为和泛化表现必须分别陈述。可用轨迹和实验诊断具体配置,不能把单次可视化当作普遍证明。
练习
对 ,推导固定学习率梯度下降的收敛范围,并分别给出单调收敛和振荡收敛的学习率区间。说明两个区间的端点为何不能直接包含。
查看解答
,所以 。收敛要求 ,即 。当 时系数在 ,参数同侧单调趋零; 时一步到零;当 时系数为负,参数换侧振荡且幅度衰减。
目标 使用固定学习率。求保证两个坐标都稳定的学习率范围,并解释为何轨迹可能在一个方向很慢。
查看解答
梯度为 ,两个更新因子分别为 与 。稳定要求二者绝对值都小于一,交集为 。在这一范围内, 方向因子接近一,例如 时为 ,因此衰减很慢;步长主要受高曲率的 方向限制。
一次训练中,训练损失仍缓慢下降,梯度范数很小,验证损失连续上升。分别从数值优化和模型选择角度提出检查与行动,并说明哪些证据仍不足。
查看解答
数值侧应核对梯度是否因尺度、饱和或精度问题异常变小,检查学习率、参数步长和独立梯度计算;若这些量一致,优化可能接近训练目标的驻点。模型选择侧应依据预先定义的验证规则考虑早停、正则化或容量调整,并检查训练与验证分布。现有现象不足以证明已到全局最优,也不足以单独证明泛化恶化只由过拟合造成。
知识关系
- 梯度 提供局部方向导数与最陡方向的数学基础。
- 一阶最优性条件 说明驻点为何只是候选解,并区分凸与非凸结论。
- 随机梯度下降 用小批量估计替代完整梯度,引入采样方差。
- 动量优化 利用历史方向缓解高条件数目标中的折返。
- 反向传播 高效计算复合模型对参数的梯度,优化器随后使用这些梯度。
- 过拟合与泛化 区分训练目标下降与未知数据表现。
可信资源
Stanford CS229 Course Materials
Andrew Ng
用于核对经典机器学习模型的目标函数、推导和适用前提。
打开官方来源Stanford CS229 官方课程材料给出线性模型、梯度法和机器学习优化的课程级推导,可用于核对目标函数、批量更新和学习率符号。
Deep Learning
Ian Goodfellow, Yoshua Bengio, Aaron Courville
适合作为反向传播和优化章节的完整参考。
打开官方来源《Deep Learning》作者维护的在线教材系统讨论深度模型的数值优化、随机梯度、动量和参数尺度;阅读时应把一般优化结论与特定网络经验区分开。
两项资源分别提供课程讲义与系统教材视角。正文中的二次函数稳定区间、下降引理代入和二维更新都可以独立手算,外部资源用于核对更广的假设、证明和训练实践。
后续学习
先进入 随机梯度下降,分析小批量梯度的期望与方差;再学习 动量优化 和 学习率调度,比较历史状态与时间变化步长如何改变轨迹。随后可对同一个二次目标实现三种方法,用相同梯度调用次数比较轨迹。神经网络方向可继续阅读 反向传播,把梯度计算与参数更新连接成完整训练循环,并明确求导与更新属于两个阶段。