NLP高频面(55)深度学习正则化详解
NLP高频面(55)深度学习正则化详解¶
本文讨论了 NLP 高频面试中深度学习正则化的相关内容,包括正则化的动因、Ln 正则化、Dropout 等方面。关键要点包括:
正则化的动因:深度神经网络参数多易过拟合,正则化通过在损失函数加约束项,限制参数自由度,提升模型在未见数据上的表现;权重衰减是对权重参数施加 L2 惩罚,可防止权重过大,降低模型复杂度。
L1 正则化:惩罚项为所有权重绝对值之和,会使许多权重压缩为零,实现稀疏化和特征选择。
L2 正则化:惩罚项为所有权重平方和,使权重均匀收缩,强调平滑性,防止对某一维特征过度依赖。
L1 与 L2 异同:共同点是都能缓解过拟合;不同点在于惩罚强度增长方式、约束区域形状不同,L1 易产生稀疏解,L2 难逼近零。
正则惩罚对象:只对权重进行正则惩罚,不针对偏置,因偏置对模型复杂度影响小,正则化会导致欠拟合。
Dropout:训练时随机丢弃神经元输出的技术,可防止协同适应、近似模型集成,解决过拟合问题,训练和测试阶段处理方式不同。
Dropout 与其他正则化方法区别:L1/L2 是显式对权重约束,Dropout 是隐式通过随机屏蔽神经元输出和模型集成提升泛化,可协同使用。
一、 动因篇¶
为什么要正则化?¶
深度神经网络通常包含数以万计甚至数以亿计的参数,模型容量极大,极易在有限的训练数据上“记住”噪声与异常样本,从而出现过拟合(overfitting)现象。过拟合导致模型在训练集上表现优异,但在测试集或真实场景中泛化能力大幅下降。正则化(regularization)就是在损失函数中加入约束项,限制模型参数的自由度,使模型在拟合训练数据的同时保留一定的平滑性与鲁棒性,从而提升在未见数据上的表现。
权重衰减的目的?¶
权重衰减(Weight Decay)实质上是对权重参数施加 L2 惩罚,将损失函数由原来的
$$ L_{0}\left(\mathbf{w}\right) $$
变为
$$ L\left(\mathbf{w}\right)=L_{0}\left(\mathbf{w}\right)+\frac{\lambda}{2}\sum_{i}w_{i}^{2}. $$
这里的超参数 $ \lambda $控制惩罚强度。当 $ \lambda $增大时,权重更新时会额外扣除一次与当前权重成正比的值,使得参数趋向于较小范围内。这样可以防止某些权重因过度拟合而变得过大,降低模型复杂度,增强稳定性。此外,在优化算法实现(如SGD或Adam)中,Weight Decay常作为额外的梯度项直接加入梯度更新,也方便与大多数深度学习框架无缝结合。
二、 Ln正则化篇¶
什么是 L1 正则化?
L1 正则化的惩罚项为所有权重绝对值之和:
$$ R_{1}(\mathbf{w})=\sum_{i}|w_{i}|. $$
它会在优化过程中倾向于将许多权重压缩为零,实现稀疏化(sparsity)。稀疏模型不仅在存储和推理时更高效,也能自动完成特征选择,因为被置零的参数对应的输入特征被认为不重要。
什么是 L2 正则化?
L2 正则化的惩罚项为所有权重平方和:
$$ R_{2}(\mathbf{w})=\sum_{i}w_{i}^{2}. $$
它会使得权重均匀收缩,但很少将其精确推到零。相比 L1,L2 更强调平滑性(smoothness),防止任意一个权重过大,从而降低模型对某一维特征的过度依赖。
L1 与 L2 的异同
共同点:都在损失函数中加入权重惩罚,使得模型复杂度受控,从而缓解过拟合。
不同点:
为什么 L1 正则化可以产生稀疏值,而 L2 不会?
从优化梯度角度看,L1在零点处导数存在不连续性(次梯度在 $ [-λ, +λ] $),意味着优化过程更容易在权重等于零的边界停留;而L2的导数在零点处为0,只有当权重大于零时才有反馈,使其难以在训练
中完全逼近零,只能无限趋近。
为何只对权重进行正则惩罚,而不针对偏置?
偏置(bias)项数量相对极少,且对模型整体复杂度影响有限。对偏置做正则化往往会限制模型对输入均值的调整能力,导致欠拟合。实践中大多数框架都默认只对权重矩阵实施正则,保持偏置项不受约束。
为何 L1 和 L2 正则化可以防止过拟合?
L1:通过零化不重要的特征权重,实现“特征选择”,降低模型有效自由度;
L2:统一收缩所有权重,防止某些权重过大,从而平滑模型输出。二者都抑制了模型对训练数据噪声的过度拟合,使得学习到的函数更加稳定。
三、 Dropout篇¶
什么是 Dropout?¶
Dropout 是一种在训练时随机丢弃神经元输出的技术。对于每个神经元,以概率 (p) 将其输出置为0;以概率 (1-p) 保留并按 ( $ frac{1}{1-p} $) 进行缩放,确保训练与测试时的激活期望一致。这样,每次前向传播相当于在原始网络上抽取一个子网络进行训练。
为什么 Dropout 可以解决过拟合问题?
防止协同适应:丢弃部分神经元打破了神经元间高度依赖,迫使每个神经元独立学习更具泛化能力的特征;
近似模型集成:训练阶段不断更新不同结构的子网络,测试阶段相当于对这些子网络做一次平均,提升了鲁棒性。
Dropout 在训练和测试阶段的区别是什么?
训练阶段:根据设定的丢弃率(p),随机屏蔽神经元,并对保留的激活值做缩放;
测试阶段:不再丢弃任何神经元,直接使用完整网络,并不对激活值另外缩放(因训练时已做期望缩放)。
Dropout 的变体有哪些?
SpatialDropout:在卷积网络中按通道丢弃整张特征图,更好地保持空间一致性;
DropConnect:随机丢弃连接权重而非神经元输出;
Gaussian Dropout:用高斯噪声替代二值掩码,使得梯度更新更平滑;
AlphaDropout:设计用于 SELU 激活函数,保持输入均值和方差不变。
如何选择合适的 Dropout 率?
全连接层:常用 0.2–0.5 之间;
卷积层:可适当降低至0.1-0.3;
技巧:先在验证集上扫描多个离散候选值,观察模型的训练/验证损失,选择在不过拟合又不过度欠拟合时的最佳丢弃率。
Dropout 和其他正则化方法(如 L1、L2 正则化)有何不同?¶
显式 vs. 隐式:L1/L2 通过在损失函数中加入显式惩罚项对权重进行约束;Dropout 则是通过随机屏蔽神经元输出,等价于对多个子网络进行训练,并在测试时做集成。
作用方式:权重惩罚直接改变参数优化目标,Dropout则通过引入噪声和模型集成来提升泛化。两者可以协同使用,共同抑制过拟合。