神经网络之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,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Layer normalization的公式如下: $$ \text{LayerNorm}(x_i) = \frac{a(x_i-\mu_i)}{\sqrt{\sigma_i^2 + \epsilon}} + b $$ 其中,$x_i$是输入的向量,$a$和$b$是可学习的缩放和偏移参数,$\mu_i$和$\sigma_i$分别是$x_i$的均值和标准差,$\epsilon$是为了数值稳定性而添加的一个小常数。这里的均值和标准差是在每个特征维度上计算的。具体来说,对于一个尺寸为$(N, D)$的矩阵$x$,我们可以先计算出每个特征维度上的均值和标准差,然后对每个元素进行归一化。最终的输出矩阵的尺寸仍为$(N, D)$。 ### 回答2: Layer normalization是一种用于神经网络中的归一化方法,它通过对输入数据进行归一化处理来帮助网络更好地学习和收敛。其公式如下: LN(x) = g * (x - μ) / √(σ^2 + ε) + b 其中,LN(x)表示归一化后的输出,x表示输入向量,g表示尺度参数,μ表示输入向量x在特定维度上的均值,σ表示输入向量x在特定维度上的标准差,ε是一个小的正常数(用来避免除数为零),b表示位移参数。 具体来说,Layer normalization通过计算输入向量在特定维度上的均值和标准差,将输入向量进行归一化。首先,求出输入向量x在特定维度上的均值μ和标准差σ,然后减去均值,标准化后的结果被尺度参数g缩放,并加上位移参数b。最终,得到归一化的输入向量LN(x)。 通过Layer normalization,可以使得输入向量在特定维度上均值为0,标准差为1,进而提高网络的泛化能力和学习效果。相比于其他归一化方法,Layer normalization更适合于RNN等具有多时间步的网络结构,因为它对每个时间步的输入都进行独立归一化,而不是整个网络层的输出进行归一化。 ### 回答3: Layer Normalization(层归一化)是一种常用的神经网络正则化技术,它在2016年首次被提出。 公式表示为: $$ \text{{Layer Norm}}(x) = \frac{{x - \text{{E}}[x]}}{{\sqrt{{\text{{Var}}[x]} + \epsilon}}} \odot \gamma + \beta $$ 其中$x$表示输入特征向量,$E[x]$表示对$x$在每个样本上计算的均值,$Var[x]$表示对$x$在每个样本上计算的方差,$\epsilon$是一个小的正数用于避免分母为零的情况。$\gamma$和$\beta$是可学习的参数向量,用于缩放和平移标准化后的特征。 Layer Normalization的主要步骤如下: 1. 计算输入特征向量$x$在每个样本上的均值$E[x]$,并使用这个均值减去$x$,得到中心化的特征向量。 2. 计算中心化向量在每个样本上的方差$Var[x]$,并使用这个方差加上$\epsilon$进行平滑。 3. 将中心化和平滑后的特征向量除以标准差,实现特征归一化。 4. 通过学习得到的缩放参数$\gamma$和平移参数$\beta$对特征进行缩放和平移操作。 Layer Normalization的主要优点是对每个样本的特征进行独立归一化,因此可以更好地适应不同样本的分布情况。相比于Batch Normalization(批归一化),Layer Normalization更适合于循环神经网络等网络结构,因为它不需要按批次对数据进行归一化,而是在每个时间步或每个样本上进行归一化。另外,Layer Normalization的计算量更小,因为它不需要对数据的维度进行求和。 总之,Layer Normalization通过对每个样本的特征向量进行均值归零和方差为一的操作,使得神经网络在训练过程中更稳定,提高了模型的泛化能力和训练速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值