从入门AI到手写Transformer-6.Dropout
整理自视频 老袁不说话 。
6.Dropout
Dropout:暂退法
欠拟合:无论训练集还是测试集,模型误差都很大
过拟合:在训练集上误差很小,在测试集上误差很大
正则化方法:为了解决过拟合提出的方法。
Dropout:其中一种正则化方法。过拟合之所以产生,是因为模型对于噪声没有适应性,对噪声太敏感,微小的噪声都可以让模型产生很大的误差。正则化方法还有L1范数,L2范数,BatchNormal,LayerNormal等。
一个好的AI模型,应该对微小的噪声不敏感,对噪声有适应性。
解决方法:向模型中添加噪声,是向中间值添加噪声。
实现公式:以概率
p
p
p 舍弃值,剩下的给原数值除以
1
−
p
1-p
1−p。
h
′
=
{
0
p
h
1
−
p
1
−
p
h^{\prime}=\left\{\begin{array}{ccc}0&&p\\\frac{h}{1-p}&&1-p\end{array}\right.
h′={01−php1−p
实现办法,随机舍弃一些值。
代码
import torch
from torch import nn
dropout=nn.Dropout(0.1) # 概率p,0.1
inputs=torch.randn(10000,dtype=torch.float)
outputs=dropout(inputs) # forward
print((outputs==0).sum().item()) # 大约有10000*p个数字为0
Dropout已经称为AI中非常常见的技术,在各种模块之后通常都会添加dropout。
正则化方法
正则化(Regularization)方法是机器学习中用于防止过拟合、提高模型泛化能力的技术,主要通过在损失函数中添加约束项或在训练过程中引入限制来实现。以下是常见的正则化方法分类及说明:
1. L1 和 L2 正则化
-
L1 正则化(Lasso)
- 在损失函数中添加权重的绝对值之和:( λ ∑ ∣ w i ∣ \lambda\sum|w_i| λ∑∣wi∣)
- 作用:倾向于产生稀疏权重矩阵,适合特征选择(部分权重变为0)。
- 适用场景:高维数据、特征数量远大于样本数时。
-
L2 正则化(Ridge)
- 在损失函数中添加权重的平方和:( λ ∑ w i 2 \lambda \sum w_i^2 λ∑wi2)
- 作用:使权重整体缩小,但不会完全为0,提高稳定性。
- 适用场景:通用性强,尤其适用于特征间相关性高的数据。
-
弹性网络(Elastic Net)
- 结合L1和L2正则化:( λ 1 ∑ ∣ w i ∣ + λ 2 ∑ w i 2 \lambda_1 \sum |w_i| + \lambda_2 \sum w_i^2 λ1∑∣wi∣+λ2∑wi2)
- 平衡稀疏性和稳定性,适用于特征数量极多且存在共线性的情况。
2. Dropout
- 原理:在神经网络训练中,随机丢弃(置零)一部分神经元的输出。
- 作用:打破神经元间的依赖,防止过拟合,类似模型集成(Ensemble)。
- 注意:仅在训练时使用,测试时需要调整输出(如乘以保留概率)。
3. 早停(Early Stopping)
- 原理:在训练过程中监控验证集性能,当性能不再提升时提前终止训练。
- 作用:避免模型在训练集上过度优化(过拟合)。
- 优点:简单高效,无需修改损失函数。
4. 数据增强(Data Augmentation)
- 原理:通过人工扩展训练数据(如旋转、平移图像,添加噪声等)。
- 作用:增加数据多样性,等效于隐式正则化。
- 典型应用:计算机视觉(CV)、自然语言处理(NLP)中的文本替换/回译。
5. 批量归一化(Batch Normalization)
- 原理:对每一层的输入进行标准化(均值为0,方差为1)。
- 间接作用:减少内部协变量偏移(Internal Covariate Shift),允许更大的学习率,从而隐式正则化模型。
6. 权重衰减(Weight Decay)
- 本质:等价于L2正则化,通过优化器(如SGD)在每一步更新时对权重施加惩罚。
- 公式:( w t + 1 = w t − η ( ∇ L + λ w t ) w_{t+1} = w_t - \eta (\nabla L + \lambda w_t) wt+1=wt−η(∇L+λwt))。
7. 标签平滑(Label Smoothing)
- 原理:将硬标签(如0或1)替换为软标签(如0.1和0.9)。
- 作用:防止模型对训练标签过度自信,提升泛化能力。
8. 其他方法
- 参数共享:如卷积神经网络(CNN)中的卷积核共享,减少参数量。
- 噪声注入:在输入、权重或梯度中添加随机噪声(类似数据增强)。
- 稀疏性约束:如对激活函数施加L1惩罚(如稀疏自编码器)。
选择建议
- 神经网络:常用Dropout、批量归一化、早停。
- 线性模型:L1/L2正则化或弹性网络。
- 数据不足时:数据增强或标签平滑。
不同方法可组合使用(如L2正则化+Dropout),具体需根据任务和模型调整超参数(如正则化系数λ)。
LayerNorm归一化
彻底搞懂:Batch Norm, Layer Norm, Instance Norm & Group Norm
Layer Normalization(LayerNorm) 本身并不是一种典型的正则化方法,但它能通过稳定训练过程间接起到类似正则化的效果,尤其是在深层神经网络中。LayerNorm 不是严格意义上的正则化方法,但它通过标准化层输入改善模型训练,间接影响了泛化能力。若需显式正则化,仍需结合Dropout、L2权重衰减等方法。以下是详细分析:
1. LayerNorm 的核心作用
-
功能:对神经网络中某一层的输入进行标准化(按特征维度进行,区别于BatchNorm的按批次标准化),使其均值为0、方差为1。
-
公式:
输出 = γ ⋅ x − μ σ 2 + ϵ + β \text{输出} = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta 输出=γ⋅σ2+ϵx−μ+β
其中 μ \mu μ 和 σ \sigma σ 是当前层输入的均值和标准差, γ \gamma γ 和 β \beta β 是可学习的缩放和偏移参数。 -
主要目的:
- 缓解内部协变量偏移(Internal Covariate Shift),加速训练收敛。
- 对小批量数据(如RNN/Transformer)更鲁棒,不依赖批量大小(与BatchNorm不同)。
2. 与正则化的关联
虽然LayerNorm的设计初衷不是直接防止过拟合,但它可能间接带来正则化效果:
- 梯度稳定性:通过标准化激活值,避免梯度爆炸/消失,使优化过程更平滑,类似早停或权重衰减的作用。
- 隐式约束:对层输入的分布进行约束,可能限制模型的自由度(类似L2正则化对权重的约束)。
- 与Dropout的协同:在Transformer等模型中,LayerNorm常与Dropout共用,进一步防止过拟合。
3. 与典型正则化的区别
特性 | LayerNorm | 经典正则化(如L2/Dropout) |
---|---|---|
主要目标 | 稳定训练过程 | 显式防止过拟合 |
实现方式 | 标准化层输入 | 修改损失函数或随机丢弃单元 |
是否依赖超参数 | 依赖缩放参数(\gamma) | 依赖正则化系数(\lambda)或丢弃率 |
4. 典型应用场景
- Transformer 模型:LayerNorm是核心组件(如每个子层后应用),对训练稳定性至关重要。
- RNN/LSTM:解决长序列训练中的梯度问题。
- 小批量或在线学习:当BatchNorm不适用时(因依赖大批次统计量)。