深度学习 —— 正则化&批量归一化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}")

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

相关推荐
科技小花2 小时前
测评|2026五大数据治理平台横向对比:谁在定义数据中台的“智能引擎”?
大数据·数据库·人工智能·数据治理·数据中台
Lsk_Smion2 小时前
【类增量学习之2025ICCV】TUNA : 让AI像搭积木一样学习新知识,TUNA的适配器融合之道
人工智能·深度学习·机器学习·论文笔记
沫儿笙2 小时前
弧焊机器人智能节气设备
人工智能·机器人
前端不太难2 小时前
如何设计 Agent 的“最小权限原则”
人工智能·状态模式·agent
天天进步20152 小时前
Python全栈项目实战:自建高效多媒体处理工具
开发语言·python
JAVA学习通2 小时前
AI 工作流编排系统的任务拆分、重试与观测:2026年工程实践深度解析
java·人工智能·spring
cl131413142 小时前
烟气测量格恩朗流量计选型指南
大数据·网络·人工智能·产品运营
xixixi777772 小时前
国内首家“AI+量子”实体公司成立:量智开物发布“追风”“扁鹊”,开启下一代计算文明大门
大数据·网络·人工智能·安全·ai·科大讯飞·量子计算
武帝为此2 小时前
【相关性分析综述】
人工智能·数学建模