Layer/batch Normalization(归一化泛讲)

五种归一化,在这里我们讨论前两种

一、概念

Batch Normalization(批标准化)和Layer Normalization(层标准化)都是神经网络中的标准化技术,它们对数据进行归一化处理以加速训练和提高模型的稳定性。

1.Batch Normalization

是对每个batch的数据进行归一化处理,通过计算每个神经元的均值和方差,将数据规范化到均值为0、方差为1的分布。这样可以加速模型的收敛速度,提高模型的泛化能力。Batch Normalization主要用于卷积神经网络(CNN)等需要大量数据预处理的模型中。

是第l层的第i个样本(对一个minibatch内所有样本的同一维度去做归一化)

{a_{i}}^{l}是第l层的第i个样本(对一个minibatch内所有样本的同一维度去做归一化)

2.Layer Normalization

则是对单个神经元或一个特征映射的所有神经元进行归一化处理,综合考虑一个层内所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。Layer Normalization主要用于循环神经网络(RNN)和Transformer等需要序列数据的模型中,因为它可以更好地处理序列数据的特性。

对于每一层所有神经元,共享同样的均值和标准差,但每个样本有各自的参数。

如batchsize=10, 我们会有10套均值和标准差

只和神经元的数量有关,与batch size的大小无关

3.layer norm用到RNN中

1.层归一化对于每个时刻进行单独的归一化,归一化的参数跟神经元的个数有关,与batchsize大小无关

2.不同时刻所用到的增益和偏置是共享的,所以不用担心变长问题

{a_{i}}^{t}是第t时刻的第i个隐藏神经元

总的来说,Batch Normalization和Layer Normalization都是为了解决神经网络中数据分布不一致的问题,它们的使用取决于具体的模型和任务需求

二、代码

1.Batch norm

(1)调用官方API 
使用的函数为torch.nn.BatchNorm1d()

代码实现:

因为要求输入的参数为(N,C,L)即(批大小,特征维度,序列长度),所以在第10行将L,C位置进行了交换,再传入函数

(2)手写batch_norm

算均值/方差的时候是对minibatch,时间长度两个维度进行计算,返回的是一个C维(特征维度)的数据,所以要将其扩两维(使用keepdim = True来保证输入和输出维度一样)w

bn_mean = inputx.mean(dim=(0,1), keepdim = True)

bn_std = inputx.std(dim=(0,1), unbiased=False, keepdim = True)

结果(手写和调用API结果一致):

2.Layer norm

(1)调用layer norm API

接受的input只需要保证batch_size在第一纬度就好,不用再进行转置

(2)手写

对于每个样本的每个时刻(per sample, per layer),对embedding求均值和标准差

ls_mean = inputx.mean(dim = -1, keepdim = True)

两种方法的结果

总体代码

Batch Normalization(批归一化)、Layer Normalization(层归一化)、Instance Normalization(实例归一化)、Group Normalization(组归一化)是常用的归一化技术,用于在神经网络提升训练效果和稳定性。它们的区别如下: 1. Batch Normalization(批归一化): - 对每个批次的样本进行归一化,即在每个批次上计算均值和方差。 - 在训练过程,使用当前批次的均值和方差来进行归一化;在测试过程,使用整个训练集的均值和方差来进行归一化。 - 常用于卷积神经网络,对每个通道进行归一化。 2. Layer Normalization(层归一化): - 对每个样本的特征维度进行归一化,即在每个样本上计算均值和方差。 - 在训练和测试过程都使用当前样本的均值和方差来进行归一化。 - 主要应用于循环神经网络(RNN)等不同长度序列数据。 3. Instance Normalization(实例归一化): - 对每个样本的每个通道进行归一化,即在每个样本的每个通道上计算均值和方差。 - 在训练和测试过程都使用当前样本的均值和方差来进行归一化。 - 主要应用于图像风格迁移等任务。 4. Group Normalization(组归一化): - 将通道分成多个组,然后在每个组内对每个样本进行归一化,即在每个样本的每个组上计算均值和方差。 - 在训练和测试过程都使用当前样本的均值和方差来进行归一化。 - 主要用于通道数较少的情况,例如小型网络或者输入数据通道较少的情况。 总结起来,这些归一化方法的区别在于对数据的归一化范围和维度的不同处理方式,适用于不同类型的神经网络和数据。具体选择哪种归一化方法取决于具体的应用场景和网络结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值