从线性到非线性
当直线不再够用
如果你刚用线性回归拟合过真实数据,大概率遇到过这种情况:损失值降到某个位置就卡住,残差图画出明显的弧线。这通常意味着模型表达力到顶了。现实数据几乎总是非线性的,线性回归只能画直线。
我们需要一种能自动学习非线性映射的函数形式。工程中我们追求的是能用有限数据训练出来、泛化能力强的复杂函数,而非任意复杂的函数。这就引出三个实际问题:网络要多宽多深才够?怎么高效算梯度?表达力太强时怎么防过拟合?
本文围绕这三个问题展开,跳过数学证明,只讲什么时候用什么、为什么这样用。
万能近似定理的工程用法
万能近似定理说单隐藏层网络足够宽就能逼近任意连续函数。但“足够宽”在工程里是个黑箱,定理只管存在性,不管你能不能训出来。
实践中我们靠经验法则起步。输入维度为d时,隐藏层神经元通常要d到d平方量级才能捕捉特征交互,但超过阈值后加宽收益急剧下降,反而容易过拟合。
现代架构普遍偏好深而窄。深层通过组合低层特征构建抽象,用更少参数达到同等表达力。这也是ResNet和Transformer都走向纵深的原因。
可训练性才是真正的瓶颈。我原以为只要网络够宽就能拟合一切,后来才发现深度才是关键。理论上千神经元单层能拟合的数据,实际可能因梯度消失或优化地形崎岖而失败。此时加深度、加残差连接或换激活函数,往往比单纯加宽有效得多。
激活函数的选择直接影响表达力能否落地。Sigmoid在深层极易梯度消失,ReLU家族改善了这个问题。GELU在现代大模型中普及,是因为它在负区间平滑过渡,减少信息损失;SwiGLU结合门控机制,同参数量下拟合效率更高。它们让“足够宽”在实践中变得可达成。
定理给你信心,经验法则给你起点,激活函数决定你能否走到终点。
反向传播是调试工具
很多教程把反向传播讲成链式法则练习,但工程中你几乎不会手算梯度。它真正解决的是如何把输出误差归因到百万参数上。没有它,神经网络只是个无法训练的函数模板。
计算图是调试第一现场。损失异常或梯度NaN时,别急着调学习率。我见过最常见的一种误诊是把未初始化的权重当成超参数问题调了一整天,其实是计算图里有log(0)或除零。用框架的自动微分工具逐层验证梯度,比看公式有用。
梯度不等于更新方向。反向传播给的是偏导,优化器还会做动量或自适应缩放。即使梯度正确,更新也可能无效。一个实用的监控指标是梯度范数与参数更新幅度的比值,超过100通常说明优化器在硬撑,低于0.01则可能学习率太小或梯度被截断。
显存瓶颈决定了你能跑多大的模型。反向传播要存前向激活值,这是显存大头。梯度检查点用时间换空间,混合精度用精度换速度,具体选哪个要看你的硬件条件。
正则化要对症下药
训练损失降、验证损失升时,别急着加Dropout。先问模型在哪里过度适应了噪声。不同过拟合模式需要不同手段,盲目堆叠反而伤性能。
参数范数持续增长、微小扰动引发输出剧变,说明学到了尖锐极小值。这时用Weight Decay加L2惩罚约束参数规模,促使找平坦极小值。注意它对BatchNorm层和偏置项通常禁用,否则破坏归一化效果。
移除少量输入特征后性能骤降,或隐藏层激活高度相关,说明神经元共适应。Dropout随机屏蔽神经元强制独立有用,但现代大模型用得少了,因为它和LayerNorm、残差连接交互时可能干扰训练稳定性。我自己在BERT微调时就踩过这个坑,换成Stochastic Depth后收敛更稳。
训练集完美拟合但新样本失效,且加数据能改善,根源是数据覆盖不足。这时Data Augmentation比模型端正则化更治本。关键是增强必须保持标签语义不变,错误的增强等于注入标签噪声。
正则化的本质是注入归纳偏置。选哪种取决于你对问题的诊断,不是流行趋势。
建立你的训练心智模型
回顾全程,核心收获是一套工程决策框架:表达力有代价,梯度是诊断信号,正则化需对症。这套框架没有标准答案,只有权衡。
理论到实践的鸿沟只能动手跨越。推荐两个练习:用线性回归拟合MNIST子集记录损失平台期,再换两层MLP对比;在简单网络上故意引入log(0)或未初始化权重,观察梯度异常并定位。至于正则化的A/B测试,等你真正遇到过拟合时再做也不迟,那时候你自然知道该对比什么。
还有个问题值得留着以后想:为什么有些模型明明过拟合了,泛化却还不错?这个问题目前没有定论,但意识到它的存在,能让你在调参时少几分执念。