- batch normalization与 layer norma
- CS231n Group Normalization (分组归一
- CS231n Spring 2019 Assignment 2—
- Batch normalization and layer no
- Batch normalization和weight norma
- 5. Batch normalization 与 Layer N
- 如何区分并记住常见的几种 Normalization 算法
- BatchNormalization和LayerNormaliz
- Batch Normalization和Layer Normal
- batch_normalization
Layer Normalization:
Layer Normalization 的作用是把神经网络中隐藏层归一为标准正态分布,也就是 独立同分布,以起到加快训练速度,加速收敛的作用。
因为神经网络的训练过程本质就是对数据分布的学习,因此训练前对输入数据进行归一化处理显得很重要。我们知道,神经网络有很多层,每经过一个隐含层,训练数据的分布会因为参数的变化而发生改变,导致网络在每次迭代中都需要拟合不同的数据分布,这样子会增加训练的复杂度以及过拟合的风险。
因此我们需要对数据进行归一化处理(均值为0,标准差为1),把数据分布强制统一在一个数据分布下,而且这一步不是一开始做的,而是在每次进行下一层之前都需要做的。也就是说,在网络的每一层输入之前增加一个当前数据归一化处理,然后再输入到下一层网络中去训练。
layer normalization 的做法是在每一个样本上计算均值和方差;用每一列的每一个元素减去这列的均值,再除以这列的标准差,从而得到归一化后的数值。图中另外一种是 batch normalization,是在batch 上计算均值和方差,可以使得数据收敛更快,但是缺点会比较明显,比如当Batch size很小的时候,BN的效果就非常不理想了。在很多情况下,Batch size大不了,因为你GPU的显存不够。
batch normalization:
Batch 顾名思义是对一个batch进行操作。假设我们有 10行 3列 的数据,即我们的batchsize = 10,每一行数据有三个特征,假设这三个特征是【身高、体重、年龄】。那么BN是针对每一列(特征)进行缩放,例如算出【身高】的均值与方差,再对身高这一列的10个数据进行缩放。体重和年龄同理。这是一种“列缩放”。
而layer方向相反,它针对的是每一行进行缩放。即只看一行数据,算出这行所有特征的均值与方差再缩放。这是一种“行缩放”。
layer normalization 对所有的特征进行缩放,这显得很没道理。我们算出一行这【身高、体重、年龄】三个特征的均值方差并对其进行缩放,事实上会因为特征的量纲不同而产生很大的影响。但是BN则没有这个影响,因为BN是对一列进行缩放,一列的量纲单位都是相同的。
那么为什么还要使用LN呢?因为NLP领域中,LN更为合适。
1)BN 是对样本内部特征的缩放,LN 是样本之间所有特征的缩放。为啥BN不适合NLP 是因为NLP模型训练里的每次输入的句子都是多个句子,并且长度不一,那么 针对每一句的缩放才更加合理,才能表达每个句子之间代表不同的语义表示,这样让模型更加能捕捉句子之间的上下语义关系。如果要用BN,它首先要面临的长度不一的问题。有时候batch size 越小的 BN 效果更不好。
2)如果我们将一批文本组成一个batch,那么BN的操作方向是,对每句话的每个位置的词在batch维度分别操作。但语言文本的复杂性是很高的,任何一个词都有可能放在初始位置,且词序可能并不影响我们对句子的理解。而BN是针对每个位置进行缩放,这不符合NLP的规律。并且上文说过了,每个batch是多个句子,句子长度不一会产生误差。
3)而LN则是针对一句话进行缩放的,且LN一般用在第三维度,如[batchsize, seq_len, dims]中的dims,一般为词向量的维度,或者是RNN的输出维度等等,这一维度各个特征的量纲应该相同。因此也不会遇到上面因为特征的量纲不同而导致的缩放问题。
网友评论