Skip to content

网络优化与正则化

总体框架

机器学习里有一对"矛与盾":

优化:让训练集上的经验风险尽量小。 正则化:控制模型复杂度,提高泛化能力。

深度网络优化难点包括:结构差异大、没有通用优化算法、超参数多、非凸问题、参数初始化困难、局部最优、鞍点、梯度消失/爆炸等。

网络优化

优化目标是在高维损失曲面上找到较低的损失点。深度学习中更常见的问题不是"找不到全局最优",而是:

鞍点多、优化地形复杂、梯度可能不稳定。好的优化地形通常更平滑,例如残差连接、ReLU、逐层归一化都可以改善优化地形。

梯度下降与 Mini-batch SGD

梯度下降的核心思想是:

θt=θt1αgt

其中 α 是学习率,gt 是当前梯度。

Mini-batch SGD 每次取一小批样本估计梯度。批量大小会影响梯度方差:

批量越大,梯度方差越小,训练更稳定,可以用更大学习率; 批量越小,噪声更大,可能帮助跳出局部区域,但学习率不能太大。

当 batch size 增大 m 倍时,学习率常可以近似增大 m 倍。

学习率调整

学习率太小,收敛慢;学习率合适,下降快;学习率太大,可能震荡甚至发散。

常见策略:

  • 学习率衰减:训练后期逐渐减小学习率,使模型更稳定。包括梯级衰减、线性衰减、指数衰减、自然指数衰减、余弦衰减。
  • 周期性学习率:周期性增大学习率,短期会让训练不稳定,但长期可能帮助模型逃离鞍点或尖锐最小值,找到更好的局部最优。
  • Warmup:一开始用小学习率训练几轮,避免随机初始化阶段直接用大学习率造成数值不稳定。

优化算法改进

  • 改进学习率:Adagrad、Adadelta、RMSprop
  • 改进梯度方向:Momentum、Nesterov、梯度截断
  • 综合方法:Adam ≈ Momentum + RMSprop

常见算法理解:

  • SGD:简单,但下降慢,容易在沟壑两边震荡。
  • Momentum:用历史梯度的指数移动平均作为更新方向,相当于有"惯性"。
  • Nesterov:先沿动量方向"预看一步",再计算梯度。
  • Adagrad:频繁更新的参数学习率变小,稀疏参数学习率较大。
  • RMSprop:改进 Adagrad,不累计全部历史梯度,只关注近期梯度。
  • Adam:同时使用一阶动量和二阶动量,自适应调整更新方向和步长。
  • Nadam:Nesterov + Adam。

入门优先考虑 SGD + Nesterov MomentumAdam;快速验证模型时用 Adam,最终精调时可考虑 SGD;数据稀疏时优先考虑自适应学习率算法;训练时要 shuffle,并持续监控训练集和验证集指标。

梯度截断

梯度截断用于处理梯度爆炸。方法是把梯度限制在一定范围内:

  • 按值截断:每个梯度分量限制在 [a,b] 内。
  • 按模截断:如果梯度范数太大,就按比例缩小。

常用于 RNN、LSTM 等容易梯度爆炸的网络。

参数初始化与数据预处理

参数不能全部初始化为 0,否则会产生对称权重问题:同一层神经元学到一样的东西,网络退化。

常见初始化方法:

  • Gaussian 随机初始化
  • 均匀分布初始化
  • 正交初始化
  • Xavier 初始化
  • He 初始化

Xavier 和 He 都属于基于方差缩放的初始化,目的是让信号在多层传播时不要过分放大或减弱。一般来说:

  • Sigmoid / Tanh 常用 Xavier;
  • ReLU 常用 He。

数据预处理包括:

  • 最小最大归一化:把数据压到 [0,1]
  • 标准化:使数据均值为 0、方差为 1;
  • PCA 白化:降低特征相关性。

归一化可以让损失曲面更圆、更平滑,梯度下降更容易。

逐层归一化

逐层归一化的目的:

  • 增强尺度不变性;
  • 缓解内部协变量偏移;
  • 让优化地形更平滑。

主要方法:

  • Batch Normalization:按 batch 统计均值和方差。优点是提高优化效率,也有隐式正则化效果;缺点是 batch 不能太小,对 RNN 不太适合。
  • Layer Normalization:按单个样本的一层神经元统计均值和方差,更适合 RNN。
  • Weight Normalization、Local Response Normalization、Instance Norm、Group Norm 等也是归一化方法。

超参数优化

超参数包括:层数、每层神经元数、激活函数、学习率、学习率调整策略、正则化系数、mini-batch 大小、优化器等。

常见搜索方法:

  • 网格搜索:枚举所有组合,代价高。
  • 随机搜索:随机采样组合,通常比网格搜索更有效。
  • 贝叶斯优化:根据已有实验结果预测下一个更可能有效的组合。
  • 动态资源分配:把更多资源给更有希望的组合。
  • 神经架构搜索:自动搜索网络结构。

网络正则化

正则化的目标是提高泛化能力:

所有损害优化的方法都可以看作正则化。

正则化可以分两类:

  • 干扰优化过程:early stop、权重衰减、SGD、Dropout。
  • 增加优化约束:数据增强、12 正则化。

12 正则化

在原损失函数上加参数范数惩罚:

L=L0+λθp
  • p=11,容易产生稀疏参数;
  • p=22,会限制参数过大,使模型更平滑。

Early Stop

用验证集监控模型。如果验证集误差不再下降,就停止训练。 它本质上是限制训练过程,防止模型继续记住训练集噪声。

权重衰减

每次更新时让参数缩小一点:

θt(1w)θt1αgt

在标准 SGD 中,权重衰减和 2 正则化效果相同;但在 Adam 这类复杂优化器中,它们不完全等价。

Dropout

Dropout 在训练时随机丢弃一部分神经元输入,相当于:

y=f(Wd(x)+b)

其中 d(x) 是随机掩码。

它有两种理解:

  • 从集成学习看,每次 dropout 都是在原网络中采样一个子网络;
  • 从贝叶斯学习看,dropout 相当于对参数进行采样。

在 RNN 中不能每个时间步都随便丢弃隐状态,否则会破坏时间记忆。应使用变分 Dropout:对参数矩阵元素随机丢弃,并在所有时间步使用相同掩码。

数据增强

通过变换数据增加样本多样性,特别常用于图像:

旋转、翻转、缩放、平移、加噪声等。

标签平滑

普通 one-hot 标签太"硬",容易让模型过度自信。标签平滑是在标签中加入少量噪声:

正确类别从 1 变成 1ϵ,其他类别分到 ϵ/(K1)

这样可以缓解过拟合,提高泛化能力。

总结

  • 模型方面:用 ReLU,分类用交叉熵,使用逐层归一化。
  • 优化方面:SGD + mini-batch,配合动态学习率;也可以优先用 Adam。
  • 训练细节:每轮重新随机排序数据,做标准归一化,注意参数初始化。
  • 正则化方面:使用 1/2 正则化、Dropout、Early Stop、数据增强。