正则化与防过拟合
L1 和 L2 正则化的公式是什么?它们分别导致怎样的参数分布?¶
公式
- L1 正则化(Lasso):在损失函数上添加参数绝对值之和的惩罚项。

- L2 正则化(Ridge):添加参数平方和的惩罚项。

导致的参数分布(先验视角)
从贝叶斯角度看,正则化相当于给参数引入先验分布。

直观上,L1 正则化的约束域是菱形(等值线是方形),L2 的约束域是圆形。当损失函数的等高线与这些约束域相切时,在菱形的角点(坐标轴上)更容易发生接触,导致某些参数直接为零。

L1 正则化为什么能产生稀疏解?L2 正则化为什么不能?¶
从优化几何上看,L1 正则化项不可微于零,且梯度为常数(符号函数),这使得那些不重要特征的权重在优化过程中被推向 0,并且一旦到达 0 就很难再“复活”,因为 0 附近的梯度会立刻把它推向 0。
而 L2 正则化的梯度与权重大小成正比,当权重接近 0 时,梯度也趋近于 0,因此权重会逐渐衰减但难以精确达到 0,除非损失函数本身要求。
此外,从拉普拉斯先验的尖峰特性可知,后验分布的最大值更可能出现在参数为 0 的点上。所以 L1 能够实现特征选择,L2 则只能将权重压缩但保持所有特征。
权重衰减(Weight Decay)与 L2 正则化在 SGD 中是等价的,为什么在 Adam 中不等价?AdamW 如何修正?¶
在 SGD 中的等价性

差有关,不再是纯粹的固定衰减率。 而真正的权重衰减是直接在更新前将参数乘以 (1−ηλ),不受自适应学习率影响。 因此,在 Adam 中 L2 正则化与权重衰减不等价,而且 L2 正则化方式可能导致大梯度参数的正则化被削弱,小梯度参数的正则化被放大,不利于解耦调整。
AdamW 的修正
AdamW 将权重衰减从梯度计算中解耦出来,直接修改参数更新步骤:

这样就保证了权重衰减独立于自适应梯度缩放,恢复了与 SGD 一致的衰减效果。大量实验表明 AdamW 拥有更好的泛化能力和更稳定的训练。
Dropout 的工作原理是什么?为什么它可以看作一种集成学习?¶
工作原理

测试时,所有神经元都保留,但为了保持与训练时输出期望一致,需要将权重乘以 1−p(或训练时除以 1−p,两种实现等价)。
为什么可看作集成学习
每次训练时,由于随机丢弃,网络结构都会变化,相当于从完整的网络中采样出一个“子网络”。
经过多次迭代,模型实际上是在指数级数量的不同子网络上训练,这些子网络共享大部分参数。
测试时使用完整网络,可近似为对这些子网络进行模型平均。因此 Dropout 是一种隐式集成,有效降低了过拟合,提高泛化能力。
在训练时使用 Dropout,在测试时需要做什么?为什么通常要缩放权重?¶
测试时需关闭 Dropout,所有神经元参与计算。
为了保持训练和测试时神经元输出值的期望一致,有两种常见策略:

Dropout 的丢弃概率一般如何设置?在不同层上设置不同概率的原因是什么?¶
-
一般设置:隐藏层常用 p=0.5,输入层常用 p=0.2 或更小(如 0.1),输出层一般不使用 Dropout。
-
原因:
- 输入层特征维度高且较为稀疏,保持较多输入信息更有利,因此丢弃率较低。
- 隐藏层参数多、容易过拟合,使用较大的丢弃率(0.5)能产生丰富的子网络,增强正则化。
-
如果对所有层使用相同的丢弃概率,可能会导致浅层信息丢失过多或深层正则化不足。
-
现代趋势:在大模型(如 Transformer)中,Dropout 率通常更低(0.1),有时只在特定子层使用。
另外,丢弃率也可以作为超参数通过验证集调整;如果模型不收敛或欠拟合,可适当降低 Dropout。
Spatial Dropout 与普通 Dropout 有什么区别?适用于什么场景?¶
-
普通 Dropout:对每个标量元素独立随机丢弃,适用于全连接层。
-
Spatial Dropout:对整个通道(特征图)进行随机丢弃。即同一个通道的所有空间位置(宽、高)被同时置零或保留。
-
适用场景:常用于卷积神经网络(CNN)。因为 CNN 的特征图在空间上高度相关,若按像素点独立丢弃,相邻像素可能一部分保留一部分丢失,网络容易通过周围像素“猜出”被丢弃的值,削弱正则化效果。将整个通道丢弃可以强制特征图学习更鲁棒的特征表达,防止通道间的共适应。
DropConnect 与 Dropout 的不同之处是什么?¶
-
Dropout:随机丢弃神经元输出(激活值),即每次将某些激活值置为 0。
-
DropConnect:随机丢弃权重连接,即每次将权重矩阵中的某些元素置为 0,保留的权重不重新缩放,而是在训练时对输出产生影响。相当于随机断开输入与输出之间的连接。
-
主要区别:DropConnect 作用于权重矩阵,Dropout 作用于激活向量。DropConnect 提供了更细粒度的正则化,能训练出更稀疏的连接,但计算效率通常较低,收敛可能需要更长时间。效果上,在某些任务中 DropConnect 能进一步提升泛化性能。
随机深度(Stochastic Depth)是怎么做的?它在训练深层 ResNet 时有什么好处?¶
做法:在 ResNet 的残差块中,随机将整个残差分支“关闭”,即直接跳过该块,只保留恒等映射(Identity 通路),相当于将该块从网络中丢弃。具体公式:

其中 bl∈{0,1} 是一个伯努利随机变量,控制残差分支是否激活。存活概率 plpl 可能随深度递减(如线性衰减)。
好处:
-
训练深层网络时,随机深度相当于缩短了网络的有效深度,缓解了梯度消失,使得深层信息更容易传递。
-
可视为训练了多个不同深度的网络并进行了隐式集成,测试时使用完整深度,相当于平均了浅层与深层网络的预测。
-
能显著加速训练(因为跳过块不计算),同时作为一种强大的正则化,防止深层 ResNet 过拟合。
数据增强作为一种正则化手段,是如何防止过拟合的?举例说明图像和文本增强方法。¶
原理:数据增强通过人为生成更多训练样本变体,增加数据的多样性,从而减小模型对训练集中特定细节的依赖,强制模型学习更本质、不变的特征,降低过拟合风险。本质上相当于在数据分布上施加了扰动,约束模型在局部变化下的稳定性。
图像增强方法:
-
随机翻转(水平、垂直)
-
随机裁剪与缩放
-
色彩抖动(亮度、对比度、饱和度、色调调整)
-
随机旋转、平移、仿射变换
-
高斯噪声、模糊
-
Mixup、CutMix(后文详述)
文本增强方法:
-
同义词替换:随机选择词汇替换为同义词
-
回译:将文本翻译成其他语言再翻译回来,产生语义相似但表达不同的句子
-
随机插入、删除或交换单词
-
使用预训练语言模型生成改写(如基于 BERT 的上下文增强)
-
掩码语言模型预测替换(如用 BERT 预测被 mask 的词)
这些方法都能够在保持语义/类别标签的前提下创造新样本,使模型不容易记住训练数据的噪声和细节。
Early Stopping 是如何防止过拟合的?如何根据验证集曲线选择停止点?¶
原理:训练过程中,随着迭代次数增加,模型在训练集上的损失通常会持续下降,但在验证集上的损失往往先下降后上升(或误差先减后增)。Early Stopping 就是在验证集指标开始恶化时停止训练,从而避免模型过度拟合训练数据中的噪声。
如何选择停止点:
-
监控验证集损失(或准确率等指标),当它在连续 k 个 epoch 内没有改善(即不再下降或上升)时,停止训练,并恢复至最佳验证指标对应的模型参数。
-
k 为“耐心”超参数(patience),设置过大可能仍过拟合,过小可能过早停止。
-
实际中常绘制训练和验证损失曲线,寻找验证损失最小点。可使用“保存最佳模型”的回调。
从宏观角度看,Early Stopping 通过限制有效训练步数,限制了模型有效容量,与权重衰减等方法有相似的泛化效果,也可视为一种高效的超参数选择手段。
标签平滑(Label Smoothing)是如何作为一种正则化手段的?它改变了损失函数的什么性质?¶

正则化作用:
-
防止模型对训练标签过于自信(输出概率极端接近 1 或 0),避免网络过分拟合错误标注或噪声标签。
-
鼓励模型学习类别之间的相对关系,使特征表示更加泛化。
-
实验证明它能提升模型校准度(预测置信度与准确率更匹配),减少过拟合。
改变损失函数的性质:

Mixup 和 CutMix 分别是怎么做数据增强的?它们的原理有什么区别?¶
Mixup:

- 原理:在输入空间进行线性凸组合,同时标签也相应混合,迫使模型对输入变化输出线性变化的预测,鼓励模型学习样本之间的线性行为,提升泛化且对对抗样本更鲁棒。这相当于一种数据增广下的邻域风险最小化。
CutMix:
- 方式:随机裁剪一张图片的一个矩形区域,将该区域替换为另一张图片的对应区域,标签也按面积比例混合:

-
其中 λλ 是掩码面积比例,从 Beta 分布采样。
-
原理:通过空间上的替换,强制模型关注局部区域而不只是全局统计;与 Mixup 的不同在于 CutMix 融合更“局部”,没有对整体图像进行模糊混合,保留了局部区域的自然性。它能显著提升 CNN 的定位能力和鲁棒性。
区别:
Mixup 是全局像素级混合,产生像素平均的模糊图像,标签也完全平滑。
CutMix 则是区域级替换,生成图像局部真实、局部属于另一类,混合比例由面积决定。两者均通过混合标签实现正则化,但 CutMix 更有利于需要精细空间信息保持的任务(如目标检测、定位)。
在训练大模型时,为什么有时候会同时使用 Dropout 和 BN?需要注意什么顺序?¶
同时使用的原因:
BN 主要用于加速收敛、稳定训练、允许更大学习率;Dropout 提供强大的正则化以对抗过拟合。两者作用不同且可以互补,尤其在大型全连接层或 Transformer 中。
注意顺序:
理论上,Dropout 会随机改变神经元的激活方差,而 BN 则在每个 batch 内维持稳定的均值和方差。如果顺序不当,可能造成“方差偏移”问题。通常推荐两种顺序:
-
卷积/全连接 → BN → 激活 → Dropout(BN 先于 Dropout,让 BN 稳定分布后再进行随机丢弃)。这种顺序在 ResNet 和现代 CNN 中很常见。
-
一些工作中也使用 Conv → ReLU → Conv → BN → Dropout 等变形,但核心是避免 Dropout 放在 BN 之前影响归一化统计量。
早期的 Inception 系列中曾建议将 Dropout 放在 BN 之后、激活之前,但后来大量实践表明 BN -> ReLU -> Dropout 效果不错。更关键的是,训练和测试时需确保 Dropout 的状态切换正确。
对于 Transformer,通常 Dropout 施加在 Attention 输出的线性层之后,以及 FFN 子层内,而 LN 在子层之前或之后(Pre-Norm/Post-Norm),因此天然位置不同,冲突较小。
如果模型出现过拟合,你会按照什么顺序尝试各种正则化方法?¶
综合成本、效果和常见实践,推荐按以下顺序逐步尝试:
-
数据增强:首先增加数据多样性(如更强的图像裁剪、翻转、Mixup/CutMix 等),这是效果最自然且不易伤害模型能力的方式。
-
Early Stopping:监控验证曲线,选取最佳 checkpoint,阻止过度训练。
-
增加权重衰减(L2 / AdamW):调大正则化系数,或在 Adam 中改用解耦的 AdamW。
-
Dropout:在网络中合适位置添加 Dropout,并调整丢弃概率,通常从较小的概率开始试起。
-
标签平滑:在分类任务中微调 ϵϵ,例如 0.1。
-
降低模型复杂度:减少网络层数、神经元个数,或使用更轻量架构。
-
应用更多显式正则化:如 L1 正则化(稀疏化)、梯度裁剪、DropConnect、Stochastic Depth 等。
-
增大 batch size ? 需注意增大 batch size 可能降低隐式正则化,需要相应调整学习率或配合其他手段。
-
获取更多真实数据:若无数据,使用生成对抗网络或合成数据。
-
半监督或自监督预训练:借助大量无标签数据改善表征,减少有标签数据的过拟合风险。
实际调试时,先从简单且计算开销小的方法开始,观察验证集表现变化,逐步叠加。若过拟合依然严重,则需要重新审视训练集与测试集的数据分布是否一致,或是评估指标本身是否合理。