Feature Scaling
假设我们现在训练的模型有很多特征,我们现在训练的网络长下面这个样子:
其中(x_1,x_2)的数据级别差的比较多,比如一个在100左右,一个在0到1之间,那么两个权重矩阵对最后结果的影响是不同的,在train的过程中你从不同方向看它的梯度是不一样的。为了达到比较好的训练效果,我们有如下两个方法。
Down learning rate
这是一个十分常用的方法,通过降低学习率达到矩阵参数学习较好的效果。
Normalization
将不同数据归一化处理,改变数据的分布特性,能够有效地提升训练效果。
常用的归一化方法有Batch Normalization(BN)和Layer Normalization(LN)。
Batch Normalization
Batch Normalization tutorial on YouTube
Batch Normalization是一种常见的达到Feature Scaling的手段。
Feature Scaling
现在我们要对数据特征做归一化处理。假设Batch size为(N),我们对每一个feature,都去从data batch中计算这一个dimension的均值(mu)和标准差(sigma),注意这两个量也是vector,然后做element wise的运算。
In general, gradient descent converges much faster with feature scaling than without it.
In DNN
在DNN中,我们input可以做feature scaling,output对于下一层而言也是input,所以输出也可以归一化,下面以先经过BN再经过Activation function为例。
train set时,我们一般不会只用一组数据去训练,而是选择一个batch。batch size为(N)的训练,我们可以这样计算均值和标准差:
Internal Convariate Shift
所谓Internal Convariate Shift是值在训练的时候,我们不断调整整个网络的参数,但是我们调好后面的网络后,前面的网络参数仍然在变化,这导致我们训练的效率就会很低。共享参数的网络模型也面临这样的问题,比如RNN网络。
为解决这个问题,可以降低学习率。通过降低学习率,让后面的网络不会太早的就达到适应前面不准确的网络的参数。然而我们都知道,降低学习率一般意味着时间会长一些。
另一个解决办法就是Normalization,归一化后,数据的统计特性就会比较确定,前面的参数变化影响相对较小,所以解决Internal Convariate Shift也是我们BN的一个优点。
局限
需要注意,BN有一个要求,(N)必须足够大才能表示整个数据集的统计特性。因为要避免上面的 Internal Convariate Shift 问题,如果输入有噪音或者较多离群点,那么我们得到的统计结果是有偏差的,这一次train也是有问题的。
以及在 Back Propagation 时,均值和标准差是依赖于layer的输出(z)的,不能直接将其作为Constant计算梯度。
Testing
用有BN的NN去测试时,我们发现一个问题,就是没有batch了。通常解决方法有下面两个:
- train结束后矩阵参数已经确定了,可以从训练数据中再跑出适应这个model的均值和方差来使用。
- 在训练过程中记录一下两个参数,然后给epoch大的参数赋予更大的权值,得到整个过程的加权结果来使用。
Batch Normalization 的优点
larger learning rate
前面已经提到了它允许我们使用较大的learning rate来快速达到想要的结果。
alleviate vanishing gradient
这是我们在Activation function前面进行Normalization的优势之一。它可以让我们的数据分布尽量在梯度较大的区间。比如后面有sigmoid,那么我们会比较希望数据均值在0附近。
如果你希望得到其他的不同分布,来适应一些均值不在0是梯度更大的Activation Function,可以采用下面这种做法:
不容易受初始化影响
我们可以容易地从数学上证明(W)参数初始化不稳定的影响会被BN消除。
Layer Normalization
Why Layer Normalization
在上文中,我们对 Batch Normalization 提出了一个要求就是 batch 要求足够大,但是在一些情况下这个条件很难满足,比如GPU显存无法容纳这么多的data,或者由于RNN这种动态模型Sequence可能长短不一导致最长的那组最后batch过小。
在这种前提下,我们就提出了layer normalization。
做法
相比于BN,Layer Normalization(LN)的计算均值和方差的维度是垂直的,LN不考虑batch,而是考虑data中不同的dimension做归一化,下面是一个RNN的LN例子。
(H)是隐藏层维数。
Normalization: