深度学习归一化算法详解(BN,LN,IN,GN)

目录

一、Batch Normalization(BN)

1.1为什么提出BN?

1.2BN的基本原理和公式

1.3BN在神经网络中的实现

1.4BN的优点和缺点

二、LN,IN,GN的原理和适用范围

三、Reference和注释

一、Batch Normalization(BN)

1.1为什么提出BN?

在深层网络的训练中,由于反向传播算法,模型的参数在发生指数型变化(因为是链式传播),从而导致每一层的输入分布会发生剧烈变化,这就会引起两个问题:

1.网络需要不断调整来适应输入数据分布的变化,导致网络学习速度的降低

2.网络的训练过程容易陷入梯度饱和区(详解见文章底部注释),减缓网络收敛速度

怎么解决这两个问题?

我们可以通过固定网络每一层输入值的分布来减缓这两个问题

所以有学者提出了用白化来解决这个问题(白化是机器学习里面常用的规范化数据分布的方法,一般是PCA白化和ZCA白化使得输入的特征具有相同的均值和方差,PCA均值为0,方差为1,而ZCA均值为0,方差相同)但是白化又存在两个问题:

1.计算成本太高,每一轮每一层都要计算

2.改变了网络中原始数据本身的表达能力,都是一样的均值方差

为了解决上面这两个问题,所以就提出了BN算法

1.2BN的基本原理和公式

 \gamma\beta是两个可训练参数,主要是在一定程度上恢复数据本身的表达能力,对规范化后的数据进行线性处理。

1.3BN在神经网络中的实现

神经网络里面一般传递的都是张量数据,如[N, H, W, C],其中N是batch_size,H、W是特征图宽高,C是通道数。那么上面公式中的B就是下图的蓝色部分。

 也就是说BN是对不同样本里面的同一个特征通道进行归一化处理,逐特征维度归一化,可训练参数\beta \gamma的维度为C。

BN训练时的均值和方差该批次内数据相应维度的均值与方差;

BN测试时的均值和方差基于所有批次的期望(无偏估计)计算所得

1.4BN的优点和缺点

优点:

1.使得网络中每层输入数据的分布相对稳定,加速模型的训练速度。

2.允许网络使用饱和性激活函数(sigmoid,tanh),缓解了梯度消失的问题。

3.因为不同的mini_batch均值和方差都有所不同,这就为网络的学习过程增加了随机噪音,与dropout随机关闭神经元给网络带来的噪音类似,一定程度上起到了正则化的作用。

缺点:

1.BN特别依赖于大的batch_size,而由于显卡等硬件限制,我们大多数batch_size都设置的较小。

2.对于序列化数据的网络不太适用,尤其是序列样本长度不同时。如RNN,LSTM

二、LN,IN,GN的原理和适用范围

LN:取同一个样本的不同通道做归一化,逐样本归一化。是由Hinton及其学生提出,可以很好的用在序列型网络如RNN中,同时LN在训练和预测时均值方差都由当前样本确定,这与BN不同。可以不进行批训练。

IN:仅仅对每一个样本的每一个通道做归一化。主要用于生成模型中, feature map 的各个 channel 的均值和方差会影响到最终生成图像的风格,如图片风格迁移,图片生成结果主要依赖于某个图像实例,所以BN不行

GN:介于LN和IN之间的一种方法,对每个样本的多个通道进行归一化。用由何凯明团队提出,优化了BN在batch_size较小时的劣势,适用于占用显存较大的任务,如图像分割,一般为16个通道为一组(经验)

三、Reference和注释

https://zhuanlan.zhihu.com/p/93643523

https://zhuanlan.zhihu.com/p/34879333

什么是梯度饱和区?

当我们在神经网络中采用饱和激活函数(saturated activation function)时,例如sigmoid,tanh激活函数,很容易使得模型训练陷入梯度饱和区,此时梯度会变得很小接近于0,从而导致网络收敛很慢。有两种解决方法:

1.线性整流函数ReLU可以在一定程度上解决训练进入梯度饱和区的问题

2.我们可以让激活函数的输入分布保持在一个稳定的状态来尽可能避免他们陷入梯度饱和区,这就是BN的想法。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在深度学习中,归一化是非常重要的。随着深层网络的出现,数据在传递过程中的梯度往往会非常小,导致网络无法有效地训练。而归一化可以解决这个问题,使得数据分布可以更加均匀,从而提高网络的训练效果。 在Matlab中,可以通过一些内置的函数和工具箱实现深度学习归一化处理。例如,可以使用Matlab中的normc函数将数据列向量进行单位向量归一化,使得每个向量的长度都为1。此外,还可以使用Matlab中的zscore函数进行标准化,将数据转化为均值为0,方差为1的分布。这种归一化方式既可以用于训练数据,也可以用于测试数据。 如果需要对网络的输入数据进行归一化,也可以使用Matlab中的Preprocessing Toolbox中的函数。例如,可以使用mapminmax函数将数据缩放到指定的范围内,使得所有的数据都在0到1之间。通过预处理数据进行归一化,可以减少训练时间,提高网络的鲁棒性,同时还可以避免过拟合的问题。 总之,Matlab中提供了一系列的工具和函数,可以方便地进行深度学习归一化处理。无论是对输入数据进行预处理,还是对网络的输出进行后处理,都可以通过Matlab来实现。通过归一化,可以提高网络的训练效果,从而更好地完成任务。 ### 回答2: Matlab深度学习中的归一化涉及到将不同的输入数据转换为相同的范围,使得数据更易于处理和比较。在Matlab中,有很多种归一化方法可供选择,其中最常用的方法是标准化和最小-最大缩放。 标准化方法使用数据集的均值和标准差进行归一化。该方法会将所有数据缩放到均值为0、标准差为1的范围内。最小-最大缩放方法通过将数据缩放到指定的最小和最大值之间进行归一化。该方法被广泛用于图片处理中。 在Matlab中,可以使用命令‘zscore’和‘mapminmax’来实现标准化和最小-最大缩放。例如,要对一个矩阵x进行标准化,可以使用以下代码: x_norm = zscore(x); 要对x进行最小-最大缩放,则可以使用如下命令: x_norm = mapminmax(x); Matlab深度学习归一化方法是非常重要的,因为它有助于网络模型的学习和更准确的结果。在应用归一化时,要选择合适的方法并调整归一化参数以获得最佳效果。 ### 回答3: 归一化深度学习中非常重要的预处理步骤,它可以保证输入数据具有相似的分布特点,提高模型的准确性和稳定性。而Matlab是一个应用广泛的科学计算软件,也提供了多种归一化方法来帮助用户进行深度学习的数据预处理。 Matlab中使用最广泛的归一化方法是Z-score标准化,也称为标准差标准化。它的原理是将数据转换为均值为0,标准差为1的正态分布。这个方法可以消除不同特征之间的尺度差异,使得它们具有同等的权重。Matlab中可以使用内置函数zscore来进行Z-score标准化。 除了Z-score标准化,Matlab还提供了MinMax归一化方法。它的原理是将数据转换到[0, 1]的区间内。这个方法比较适用于具有明确范围的数据,在图像处理和计算机视觉中也经常被使用。Matlab中可以使用内置函数minmax来进行MinMax归一化。 除此之外,还有其他归一化方法,例如对数变换、指数变换和Box-Cox变换等。根据不同的应用场景和数据分布情况,选择不同的归一化方法可以提高模型的精度和泛化能力。 综上,Matlab提供了多种归一化方法,帮助用户进行深度学习的数据预处理。这些方法可以消除输入数据之间的尺度差异,保证模型的准确性和稳定性,对于深度学习的应用非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CVplayer111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值