梯度下降可视化拆解:学习率边界与归一化

梯度下降是深度学习的地基,但多数人停留在"沿着梯度反方向走"的口诀层面。拿一条最简单的一元线性回归做手算实验,能把这个口诀背后的所有细节看清:为什么 w 和 b 收敛速度差几十倍、学习率怎么选、发散的临界线居然能算出来。

实验设定

目标:对带噪声的数据 y = 3x + 2 + ε 拟合 w 和 b,损失用均方误差,梯度手推:

∂L/∂w = (2/N) · Σ (w·x_i + b - y_i) · x_i
∂L/∂b = (2/N) · Σ (w·x_i + b - y_i)
w ← w - η · ∂L/∂w

学习率 η = 0.01,从 w = b = 0 起步(loss = 345.91)。跑到 901 步时 loss 收敛到 3.8356,w = 3.0186,b = 1.8766——逼近真实值 (3, 2) 但没有精确到达。

第一发现:两个参数不同速

训练日志里有个扎眼的现象:第 1 步 w 就从 0 冲到 2.06,而 b 只挪到 0.33——w 一步走了 b 上百步的距离。

根因在梯度公式里:w 的梯度多一个 x_i 乘子。这批数据 x 在 0 到 10 之间,mean(x²) = 31.1,w 方向的"坡度"被 x 放大了三十倍。同一个学习率下,陡坡大步走,缓坡挪小步。第 101 步时 w 已经冲过 3(3.15),b 还在 1.03 爬——这就是不同尺度参数共用水率的典型失衡。

特征归一化的必要性在这里有了第一性原理级的解释:把特征拉到同一尺度,各参数方向的坡度才相当,一个学习率才能同时伺候所有参数。深度学习里输入层必做归一化,不是玄学是算术。

第二发现:学习率不是"学得快慢",是"步幅上限"

把 η 从 0.01 调到 0.05,画面突变:loss 从 345 → 1638 → 7817 → 37371,每步膨胀 4 倍以上,第 10 步过四亿,第 12 步后直接 inf。这不是"学得快",是每一步都跨过了谷底落到对面更高的坡上,越弹越高。

第三发现:发散临界线能算出来

对二次损失碗,二阶导决定碗的形状:

loss 对 w 的二阶导 = 2 · mean(x²) = 62.2
发散条件:η > 2 / 62.2 ≈ 0.0322

也就是说学习率超过 0.0322 必发散——0.05 的爆炸不是运气差,是数学必然。这个公式只在二次损失下精确成立,但它给出的直觉普遍适用:学习率与损失曲面的曲率成反比,曲率越大(碗越尖)安全的水率上限越低。调参时 loss 爆炸,第一反应应该是"水率超过了 2/最大曲率",而不是随机降低试试。

实验的迁移价值

这个十行代码的实验能回答三个高频面试题:为什么需要特征归一化(参数方向尺度不均)、学习率过大是什么现象(步幅超过曲率允许的收敛半径,指数发散)、为什么收敛慢(学习率受最陡方向约束,缓方向被迫慢走)。手算一遍的成本是一小时,换来的直觉能迁移到所有后续模型——这是纸上推导和框架调参都给不了的。

留一个练习:把输入先归一化再跑同样的实验,观察 w 和 b 的收敛速度差异消失——这一步做完,"为什么要归一化"就从知识变成了体验。

0

评论0

请先
显示验证码
没有账号?注册  忘记密码?