Skip to content

优化与梯度:损失怎么变成更新

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

训练一个模型 = 选一个损失 L(θ),再找让它变小的参数 θ。本章只讲:梯度是什么、梯度下降怎么走、学习率的坑、链式法则为何等于反向传播。凸优化理论点到为止。链式法则的几何在 导数与微分;损失里的「平均」来自 大数定律;线代前置从 向量特征值


一、损失曲面与梯度

把参数想成地图上的坐标,损失想成海拔。梯度 θL 指向上升最快的方向;要下山就走反方向:

θθηθL(θ).
  • η学习率(步长)。太大振荡或发散,太小爬得极慢。
  • 一阶方法只看当地坡度,不保证一次走到谷底——深度网络几乎总是非凸的,但 SGD 在实践中够用。

梯度下降示意

图解说明:等高线谷底是目标;橙色折线是步子过大;平滑轨迹是合适学习率。

动画说明:同一起点。η=0.95 在谷里振荡;η=0.15 沿着等高线走进 (1,0.5)

随机梯度下降(SGD):每次只用一个小批量估计 L,噪声反而有时帮着逃离差的峡谷。Adam 等自适应方法 = 给各维度不同的有效学习率,细节留给深度学习章。

梯度是最陡上坡,训练走反方向

图解说明:等高线碗底。绿箭头 f 上坡,蓝箭头 f 下山。步长过大在谷里振荡。

逐步推导:线性回归 MSE 的梯度为什么是 X(Xwy)(点击展开)

L(w)=12Xwy2=12(Xwy)(Xwy)。对 w 微分:把 Xw 当线性映射,残差 r=Xwy

dL=r(Xdw)=(Xr)dw.

梯度是「与 dw 配对的那个向量」,故 wL=Xr=X(Xwy)。每一行 xi 把标量残差 ri 沿着特征方向推回去——多层网络只是把 X 换成各层雅可比的转置,这就是反向传播。

学习率:对二次碗 L=12λx2,一步 xxηλx=(1ηλ)x|1ηλ|<1 才收敛,即 0<η<2/λmaxη 太大特征值大的方向会振荡,正是动画里 η=0.95 的样子。


二、常见损失的梯度直觉

损失典型用途梯度在说什么
MSE 12(yy^)2回归把预测往标签拉
交叉熵分类 / 语言模型提高正确类概率
HingeSVM只惩罚间隔不够的点

线性回归 L=12Xwy2 的梯度有闭式:

wL=X(Xwy).

这就是「误差反投射回特征」——后面链式法则是同一思想的多层版。


三、链式法则 = 反向传播

复合 L=f3(f2(f1(x)))

Lx=Lz3z3z2z2z1z1x.

神经网络前向算激活,反向把 L/z 从输出一层层乘回去——反向传播不是新魔法,就是系统化的链式法则

链式法则与反传

图解说明:上边前向出损失,下边反传梯度。自动求导框架替你记账,但形状与「谁乘谁」要心里有数。

局部导数若总是 >1<1,多层相乘会爆炸或消失——这是深度网络要残差、归一化、合适激活的原因之一。


四、正则与约束(直觉)

只最小化训练损失容易过拟合。常见补丁:

  • L2 正则 λ2θ2:把参数往 0 拉,等效「别用太大的权重」;
  • 早停 / Dropout:优化路径上的工程正则;
  • 投影 / 裁剪:梯度爆炸时把更新限制在球内。

世界模型里的 free-bits、KL balancing,也是「别让某一项梯度把表示掐死」的优化经验。


五、代码在做什么

demo.py 在二维碗状损失 L(w)=(w11)2+0.25(w2+0.5)2 上跑梯度下降,对比大学习率与小学习率轨迹,并画损失曲线。

梯度下降轨迹与损失曲线


六、小结

概念一句话
梯度上升最快方向;训练走负梯度
学习率步长,太大抖、太小慢
SGD用小批量估计梯度
链式法则复合函数求导;反传的数学本质
下游所有可训练神经网络与凸/非凸 ML

下一章 信息论精简:交叉熵与 KL 从何而来,为何分类和世界模型都在用。通信、容量与编码见 信息论

📥 Code

FileViewDownload
demo.pyOpenDownload
exercise.pyOpenDownload

参考

  1. Boyd & Vandenberghe, Convex Optimization(选读前几章)
  2. Nielsen, Neural Networks and Deep Learning(反传推导清晰)