深度学习 —— 正则化&批量归一化BN

正则化概念

是什么? 机器学习/深度学习中,防止模型过拟合/提高模型泛化能力的方法

L1与L2正则化

L1和L2正则化通过在损失函数上添加惩罚项来实现

L1正则化在工程中,通常引入软阈值操作,权重小于某个值时,强制为0

深度学习中使用L1/L2 正则化的方式:

Adam/AdamW 中的权重衰减项,实现L2正则化

深度学习/神经网络中不会单独使用L1正则化

梯度优化器对象。参数

Dropout 正则化 (随机失活)

1. 概念

训练时,让神经元以概率p 随机失活,输出强制为0,并对保留的神经元进行1/(1-p)缩放,相当于在训练不同的子网络。

类比:让部分对应上传,让每个队员得到更充分的锻炼。

测试时,Droput 关闭(不失活)。使用完整网络进行预测。

类比:所有队员一起上场。

是一种提高模型泛化能力的方法。

2. Dropout 随机失活图示:

随机丢弃部分模型参数 参数P (丢弃概率)

在训练深层神经网络时,由于模型参数较多,在数据量不足的情况下,很容易过拟合。Dropout 随机失活 是一个简单有效的正则化方法。

3. 原理

为什么对保留的神经元输出 1/(1-p) 的缩放?

++保证训练过程中网络输出数据均值不变++

假设没有dropout时,网络输出的激活值的均值为mean,对应的激活值【x0,x1,...xn】

p * n 个激活值为0

有Dropout 之后的激活值的平均值是多少?

mean_dropout = (mean * (n-p*n) + 0*p*n)/n = mean*(1-p)

所以,dropout 之后的保留神经元的输出要进行1/(1-p)缩放

4. API

nn.Dropout(p = 0.1)

参数p设置:0 < p < 1 ,通常p < 0.5 ,当模型参数较多时,数据量较大时,可以适当增加p,比如0.4~0.5

5.什么时候用?

按这个图例:

输入 → Linear → 激活 → Dropout → Linear → 激活 → Dropout → Linear → Softmax 输出

批量归一化 BN(Batch Normailization)

应用:在CV计算机视觉领域使用较多,尤其CNN网络

1. 概念

批量归一化,属于正则化方法,缓解 模型过拟合,主要用于CV计算机视觉,比如CNN网络中

先标准化为均值0,方差1的分布,然后再进行重构(缩放+平移,缩放系数和平移系数都是可学习的),进一步提取特征。

++对每一个batch的数据进行标准化,数据分布就变得稳定,参数的梯度变化也变得稳定,有助于加快模型的收敛。++

++通过标准化每一层的输入,使其均值接近0,方差接近1,从而加速训练并提高泛化能力。++

2. 公式

λ和β是可学习的参数,相当于对标准化后的值做了一个线性变换,λ为系数,β为偏置;

eps 通常指为 1e-5,避免分母为 0;

E(x) 表示变量的均值;

Var(x) 表示变量的方差;

3. 模型训练中绝对顺序:

线性层 → BN 归一化 → 激活函数

4. 涉及到的API:

CV计算机视觉领域

① BatchNorm1d: 处理2D/3D数据,主要用于处理文本数据/序列数据,NCS

② BatchNorm2d: 处理4D数据,主要用于二维卷积神经网络Conv2d来处理图片数据,

++NCHW,(N,C,H,W), N批次大小,C通道数,H高度,W宽度++

③ BatchNorm3d: 处理5D数据,主要用于三维卷积神经网络Conv3d,来处理高维的视觉数据,比如医学图像,卫星遥感视频,接收形状为 NCDHW/NCTHW 的张量作为输入。

5. 代码示例:

python 复制代码
# 1.创建数据,模拟NCHW图片数据 torch.randint(0,256,size=(1,3,32,32))
# 1 一张图片
# 3 RGB  彩色图。
# 32 32 高度和宽度  像素
x = torch.randint(0,256,size=(1,3,32,32)).to(dtype=torch.float32)
print(f"原始数据x:{x}, shape: {x.shape}")
# 2.创建BatchNorm2d层
# running_mean = (1 - momentum) * running_mean + momentum * batch_mean
# running_var = (1 - momentum) * running_var + momentum * batch_var
bn = nn.BatchNorm2d(
    num_features=3, # 通道数,C
    eps=1e-05,  # 极小值,防止除零
    momentum=0.1,   # 动量,控制参数的更新
    affine=True,    # 缩放参数和平移参数是否可学习
)
# 3.输入数据到BatchNorm2d层中
y = bn(x)   # (1,3,32,32)
# 4.打印输出
print(f"处理后的数据y:{y}, shape: {y.shape}")

和机器学习 标准化类似。多了科学系 λ和β

相关推荐
人工智能培训9 小时前
数字孪生建模常用方式有哪些?
人工智能·深度学习·机器学习·容器·知识图谱
CCC:CarCrazeCurator9 小时前
【DriveGen 文件详解】04——evaluate.py
人工智能·自动驾驶·transformer
老高学长9 小时前
金融机构文档加密软件哪个好|合规与安全兼顾|2026新测评
网络·人工智能·安全
闻道参看9 小时前
生成式智能搜索下的流量卡位攻略:初创个体如何甄选高兼容性的 GEO 优化 服务商
人工智能
Herlie9 小时前
6款可编辑AI海报工具深度横测(2026)
大数据·人工智能
轻刀快马9 小时前
跨越“拟人”的最后一道天堑:大模型强化学习(RLHF/RLAIF)底层原理解析
人工智能·深度学习·机器学习
hsg779 小时前
简述:小数据集照片分类的模型训练
人工智能·分类·数据挖掘
清 晨9 小时前
YouTube自动AI标签上线后跨境内容团队如何调整素材审核流程
大数据·人工智能·新媒体运营·内容营销·跨境
qq_283720059 小时前
2026 最新 Python+AI 零基础入门全教程 :从零搭建人工智能完整项目
开发语言·人工智能·python