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

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

相关推荐
米小虾4 分钟前
把 40 步压到 8 步:少步生成的三笔账,Qwen-Image-2.1-Turbo 拆给你看
人工智能
Csvn8 分钟前
线上出问题怎么查?一套可复现的排障 SOP(O04)
人工智能·aigc·agent
Raas1008 分钟前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关能做故障转移吗?AI网关核心功能详解
大数据·人工智能·网关·ai·gateway·mai gateway
全栈练习生11 分钟前
AI Agent 沙箱
python·ai
米小虾13 分钟前
别再让 LLM 写「置信度:0.8」了:决策模型把判别从生成里拆了出来
人工智能
Dawson Zhu1 小时前
《Agentic Design Patterns》第 9 章导读:学习与适应(Learning and Adaptation)
人工智能·语言模型·架构·aigc·agi
IT研究所1 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
SEO_juper1 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
小易老师AI实战1 小时前
RLHF深度详解(超通俗+原理+工程+对比):大模型对齐的核心基石
人工智能·大模型·sft·rlhf·ppo·人类反馈强化学习·llm 对齐
资深电气设计1 小时前
高压直流母线系统测试是什么?宜迈思液冷直流负载方案技术说明
人工智能