神经网络之LN(Layer Normalization)

上一篇博客提到了BN不适用于RNN等动态网络以及batchsize较小的时候,而LN可以。这篇博客就对LN做一个简单的介绍。
在这里插入图片描述
深度网络中的数据维度一般是[N, C, H, W]或者[N, H, W,C]格式,N是batch size,H/W是feature的高/宽,C是feature的channel,压缩H/W至一个维度,其三维的表示如上图,假设单个方格的长度是1,那么其表示的是[6, 6,*, * ]。LN避开了batch维度,归一化的维度为[C,H,W]。简单来说,对同一样本的不同特征做归一化。

背景

BN针对一个minibatch的输入样本,计算均值和方差,基于计算的均值和方差来对某一层神经网络的输入X中每一个case进行归一化操作。但BN有两个明显不足:
1、高度依赖于mini-batch的大小,实际使用中会对mini-Batch大小进行约束,不适合类似在线学习(mini-batch为1)情况;
2、不适用于RNN网络中normalize操作:BN实际使用时需要计算并且保存某一层神经网络mini-batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,sequence的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其的sequence长很多,这样training时,计算很麻烦。
但LN可以有效解决上面这两个问题。

MLP中的LN

LN是一个独立于batch size的算法,所以无论样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。

先看MLP中的LN。设 H 是一层中隐层节点的数量, l 是MLP的层数,我们可以计算LN的归一化统计量 μ 和 σ :
在这里插入图片描述
注意上面统计量的计算是和样本数量没有关系的,它的数量只取决于隐层节点的数量,所以只要隐层节点的数量足够多,我们就能保证LN的归一化统计量足够具有代表性。
在这里插入图片描述
其中 ϵ是一个很小的小数,防止除0(论文中忽略了这个参数)。
在LN中我们也需要一组参数来保证归一化操作不会破坏之前的信息,在LN中这组参数叫做增益(gain)和偏置(bias)(等同于BN中的 γ 和β)。假设激活函数为f,最终LN的输出为:
在这里插入图片描述
合并公式(2),(3)并忽略参数 l,我们有:
在这里插入图片描述

RNN中的LN

在RNN中,我们可以非常简单的在每个时间片中使用LN,而且在任何时间片我们都能保证归一化统计量统计的是 H个节点的信息。对于RNN时刻 t 时的节点,其输入是 t-1时刻的隐层状态H t-1和 t 时刻的输入数据 X t ,可以表示为:
在这里插入图片描述
接着我们便可以在 a t 上采取和1.1节中完全相同的归一化过程:
在这里插入图片描述

总结

LN是和BN非常近似的一种归一化方法,不同的是BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

### Layer Normalization 与 Batch Normalization 的区别 #### 定义与计算方式 Batch Normalization 是一种通过标准化每批次数据来加速神经网络训练的技术。具体来说,在前向传播过程中,对于每一层中的激活值,BN 计算该批样本的均值方差,并据此对输入进行归一化处理[^4]。 相比之下,Layer Normalization 对单一样本的所有特征维度执行规范化操作,而不是基于批量统计信息。LN 考虑的是同一时间步或序列位置上的所有隐藏单元的状态分布情况[^2]。 ```python import torch.nn as nn # 批量归一化示例 batch_norm = nn.BatchNorm1d(num_features=hidden_size) # 层级归一化示例 layer_norm = nn.LayerNorm(normalized_shape=[sequence_length, hidden_size]) ``` #### 序列模型适应性 由于 BN 需要依赖于整个 mini-batch 中的数据来进行参数估计,因此当 batch size 较小时效果会受到影响。而在自然语言处理等领域常见的 RNN/LSTM/GRU 等结构中,不同长度的时间序列可能导致难以找到合适的 batch 组合[^3]。 而 LN 不受 batch 大小的影响,可以更好地应用于变长输入的任务上,比如文本生成、机器翻译等场景下表现更为稳定可靠。 #### 并行计算友好度 BN 可以利用 GPU 上高效的矩阵运算实现快速并行化,因为其主要涉及按通道方向求平均数标准差的操作。然而这同时也意味着它不适合那些无法轻易获得大规模并行性的环境,例如分布式设置下的异构硬件平台。 相反,LN 更容易移植到各种设备之上,因为它只涉及到沿着特定轴(通常是最后一个轴对应着特征维)做简单的线性变换,易于部署在资源受限条件下运行的小型嵌入式系统里。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值