【深度学习】归一化(十一)

本文介绍了归一化的作用和常见类型,如Rescaling和Standardization。重点讲解了深度学习中两种重要的归一化技术:批量归一化(Batch Normalization)和权重归一化(Weight Normalization),以及它们在神经网络训练中的应用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天要学习的内容是一个小知识点:归一化

什么是归一化

归一化(Normalization): 是一种无量纲处理手段,即将有量纲的表达式,经过变换,化成无量纲的表达式,称为标量。通常来说,想比较两个有度量单位的物理量是不可以的,但是我们可以先将度量单位去掉,变成标量,就可以作比较了。归一化的具体作用是:归纳样本的统计分布性;操作是:把数据经某种算法限制在(0,1)或者(-1,1)范围内,限制数据到(0,1)区间是统计样本的概率分布,而限制到(-1,1)区间是统计样本的坐标分布。

常见的归一化方式是Rescaling (min-max normalization) 线性归一化:适用在数据比较集中的情况
x ′ = x − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) x^\prime=\frac{x-\min(x)}{\max(x)-\min(x)} x=max(x)min(x)xmin(x)

不论是计算,还是建模,首先要做的是对样本数据进行预处理,这要求样本的度量单位要统一,不然无法做统计分析,因此预处理的第一步往往是对数据去量纲。而去量纲化的操作通常有这几种:归一化和标准化。

易混淆概念–标准化

标准化(Standardization): 是对原始数据按比例进行缩放处理,使得数据落入一个小的特定区间,这跟归一化差不多,但是唯一的差别就是缩放本质不同,归一化是将样本的特征值转化到同一量纲下,把数据映射到(0,1)或者(-1,1)区间。 而标准化是将数据通过去均值实现中心化(中心化:将数据的平均值变为0的操作),得到的数据是符合标准正态分布的,区别在于标准化是依照特征矩阵的列,归一化是依照特征矩阵的行处理数据。

标准化的形式是:Standardization (Z-score normalization)标准差归一化:将数据处理成符合均值为0,方差为1的标准正态分布
x ′ = x − μ ( x ) σ ( x )    ,    μ 为 均 值 , σ 为 方 差 x^\prime=\frac{x-\mu(x)}{\sigma(x)}\;,\; \mu为均值,\sigma为方差 x=σ(x)xμ(x),μσ

个人观点:我认为归一化和标准化其实是起着相同效果的操作,在实际中无需将两者划分得这么清楚,因为他们的共同点都是消除不同量纲,都是一种线性变换,都是对样本x按比例缩放再平移。

为什么要归一化

在训练神经网络之前,我们一般都要对数据进行归一化,这样做的原因有三点:

  1. 避免神经元饱和: 当神经元的激活在接近0或1时会出现饱和现象,这时候,梯度几乎为0,一旦出现梯度接近0,根据梯度的链式反应,在反向传播过程中就会出现梯度消失的问题;
  2. 加快收敛: 样本数据中普遍会存在一些奇异样本,这些样本数据会引起网络训练时间加长,以及网络无法收敛等问题。为避免这种情况,加快网络学习速度,我们先要对数据进行归一化处理,使得所有的样本的输入信号的均值接近0,或者均方差很小;
  3. 避免数值问题: 太大的数会引发计算机的数值问题。

Batch Normalization

批量归一化(Batch Normalization,BN): 顾名思义,就是批量地将样本进行归一化操作,它是基于mini-batch的数据计算均值和方差的,而不是整个training set。当小批次数量,即mini-batch设置较大时,数据分布较接近,在训练前充分打乱,将BN层设置在非线性映射前,这样有利于网络收敛。
BN
BN在具体训练时的操作流程为:

输入:上一层输出的结果 X = { x 1 , . . . , x i , . . . , x n } X=\{x_1,...,x_i,...,x_n\} X=

### 深度学习中的归一化与反归一化 #### 归一化的定义及其重要性 归一化是数据预处理的一个关键步骤,能够有效地提升模型性能、数值稳定性及训练效率。不同的归一化技术适用于不同场景下的神经网络结构,合理的选择能显著改善最终的训练效果[^2]。 #### 常见的归一化方法概述 常见的几种归一化方式包括但不限于: - **最大最小归一化 (Min-Max Scaling)**:通过线性变换将特征缩放到指定范围。 - **Z-score归一化 (Standardization)**:使数据分布具有零均值和单位方差特性。 - **小数定标归一化 (Decimal Scaling)**:基于十进制的比例因子调整原始数值大小。 - **批量归一化 (Batch Normalization, BN)**:针对每一批次的数据,在激活函数之前执行标准化操作。 - **层归一化 (Layer Normalization, LN)** 和 **实例归一化 (Instance Normalization, IN)**:分别作用于单一样本内的所有通道或同一通道的不同位置上。 - **组归一化 (Group Normalization, GN)**:结合了上述两种策略的优点,按一定数量分组后再做标准化处理[^3]。 #### 批量归一化(Batch Normalization)的具体实现过程 为了减少内部协变量偏移(Internal Covariate Shift),即各层输入统计特性的变化,批量归一化被引入到每一层中去。具体来说就是在前向传播过程中计算当前batch内各个维度上的均值μ_B和标准差σ_B;接着利用这两个参数对原输入x进行转换得到y=(x−μ_B)/√(σ²_B+ε),其中ε是一个很小的常数用来防止除以0的情况发生。最后再乘以可学习参数γ并加上β来恢复尺度和平移信息[^4]。 ```python import torch.nn as nn class BatchNorm(nn.Module): def __init__(self, num_features, eps=1e-5, momentum=0.1): super().__init__() self.eps = eps self.momentum = momentum # 初始化gamma和beta为可训练参数 self.gamma = nn.Parameter(torch.ones(num_features)) self.beta = nn.Parameter(torch.zeros(num_features)) # 注册运行时统计数据 self.register_buffer('running_mean', torch.zeros(num_features)) self.register_buffer('running_var', torch.ones(num_features)) def forward(self, x): if self.training: batch_mean = x.mean(dim=0) batch_var = x.var(dim=0, unbiased=False) # 更新移动平均估计 with torch.no_grad(): n = float(x.size()[0]) new_running_mean = (1 - self.momentum) * self.running_mean + \ self.momentum * batch_mean new_running_var = (1 - self.momentum) * self.running_var + \ self.momentum * batch_var y = (x - batch_mean) / ((batch_var + self.eps).sqrt()) # 使用最新的运行状态更新模块属性 self.running_mean.copy_(new_running_mean) self.running_var.copy_(new_running_var) else: y = (x - self.running_mean) / ((self.running_var + self.eps).sqrt()) return self.gamma.view_as(y) * y + self.beta.view_as(y) ``` #### 反归一化的概念及应用场景 当完成预测后,可能需要将经过归一化后的输出重新映射回原来的尺度空间以便解释结果的实际意义。这一步骤被称为反归一化。例如,在图像生成任务中,如果像素强度已经被标准化到了[-1,+1]区间,则在展示图片前需将其还原至[0,255]范围内显示正常色彩。 对于简单的线性变换类归一化方案而言,只需保存最初的平移项b和比例系数a即可轻松实现逆运算z=ax+b。而对于像BN这样的复杂机制由于涉及到了动态计算的过程所以通常不需要显式的反归一化步骤除非特别需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值