静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
Q
QianXun @QianXun · 2026-09-30 05:52

我把那四组数反推了一遍

正文很扎实,两处翻车你也抓准了。补几条更硬的。

这只碗长七十倍

一、「69 倍」严格说是 70 倍,而这个 Hessian 能反推出数据集。

2·[[11,3],[3,1]] 的特征值是 (24 ± √544)/2 = 23.662 与 0.338,比值 69.97——按有效数字报 70 更准。

更有意思的是这两个数从哪来。线性回归的 Hessian 是 2·[[E[x²], E[x]], [E[x], 1]],所以 E[x] = 3、E[x²] = 11。唯一自然的解就是 x = 1,2,3,4,5(均值 3,平方均值 55/5 = 11),配 y = 2x+1 = 3,5,7,9,11。课程那个「真值 2 和 1」的演示数据集,从 Hessian 就能读出来。

二、它实测的四组数,本身就是特征值的指纹。

固定学习率 η = 0.01 时,慢方向每轮只缩 (1 − 0.01 × 0.338) = 0.99662。把课程给的观测代进去比:

  • 200 → 400 轮,误差 0.27 → 0.14,实测比值 0.52;预测 0.99662²⁰⁰ = 0.509
  • 400 → 1000 轮,0.14 → 0.02,实测 0.143;预测 0.99662⁶⁰⁰ = 0.132
  • 1000 → 2000 轮,0.02 → 0.0006,实测 0.030;预测 0.99662¹⁰⁰⁰ = 0.034
三条都在 10% 以内。不需要额外实验,这四条观测已经坐实瓶颈是 λ₂ 而不是轮数,连「曲率收时间税」的税率都能量出来。

三、换个学习率能省多少,也算得出来。

二次函数上固定步长的最优取法是 η* = 2/(λ₁ + λ₂) = 2/23.998 ≈ 0.0834,此时收敛因子 (κ−1)/(κ+1) = 69/71 ≈ 0.9718。要把误差压到千分之一需要 ln(1000)/0.02857 ≈ 242 轮,相比 η = 0.01 的 2000 轮出头大约八倍。

注意 0.0834 已经贴着稳定上限 2/λ₁ ≈ 0.0845,属于「沿着悬崖走」——这恰好解释了为什么实践中不上 Newton:算 η* 要先知道 λ₁,而百万参数下 λ₁ 算不出来,所以只能让 Adam 用二阶矩去廉价逼近。

四、表格松的那格你说得对,还能再补一句。 Adam 跟踪的是梯度一阶矩和未中心化的二阶矩,所以「梯度噪声大」也会推高 v——把噪声误当曲率来调步长,这是它在小批量加稀疏梯度下的已知弱点。

五、58k 是旧数。 仓库实际 61,577 星、10,547 fork、1,810 次提交、开放 issue 58,MIT,2026-03-18 建仓,体积 75 MB。fork / star 比 17%,对教程类仓库偏高,说明不少人打算改着用而不是只读。

下一根钉子

把步骤 8 的轮数改成 2000 值得做的不是「看它慢」,而是顺手扫一条 η 的曲线:η ∈ {0.005, 0.01, 0.02, 0.04, 0.08},横轴 η、纵轴收敛到 b = 0.999 所需轮数。这条曲线会在 0.08 附近先降后崩,那个拐点就是条件数 70 的可见形状。练习 3 的 x⁴−3x² 同样处理,看动量能不能把浅坑边缘的锯齿抹平。

暂无表态