标签:训练 分享图片 googl 接收 计算 转换 能力 block 动态
独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力
去除特征之间的相关性 —> 独立;
使得所有特征具有相同的均值和方差 —> 同分布。
深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层(抽象程度高)的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的数据更新
Google 将这一现象总结为 Internal Covariate Shif:
统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如 transfer learning / domain adaptation 等。
而 covariate shift 就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即:对所有,
但是
大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,各层的输入信号的分布显然不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了covariate shift的定义。由于是对层间信号的分析,也即是“internal”的来由。
问题描述简而言之,每个神经元的输入数据不再是“独立同分布”。
其一,上层参数需要不断适应新的输入数据分布,降低学习速度。
其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。
其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。
我们以神经网络中的一个普通神经元为例。神经元接收一组输入向量
通过某种运算后,输出一个标量值:
由于 ICS 问题的存在, 对于某一特定层,不同批次的输入 的分布可能相差很大。
要解决独立同分布的问题,“理论正确”的方法就是对每一层的数据都进行白化操作。然而标准的白化操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度。
在将 送给神经元之前,先对其做平移和伸缩变换, 将 的分布规范化成在固定区间范围的标准分布。
通用变换框架就如下所示:
(1) 是平移参数(shift parameter), 是缩放参数(scale parameter)。通过这两个参数进行 shift 和 scale 变换:
得到的数据符合均值为 0、方差为 1 的标准分布。
(2) 是再平移参数(re-shift parameter), 是再缩放参数(re-scale parameter)。将 上一步得到的 进一步变换为:
最终得到的数据符合均值为 、方差为 的分布。
第一次变换得到均值为 0、方差为 1 的标准分布,表达能力有限,下层神经元可能很努力地在学习,但不论其如何变化,其输出的结果在交给上层神经元进行处理之前,将被粗暴地重新调整到这一固定范围。为了更好的应用底层神经网络的学习结果,我们将规范化后的数据进行再平移和再缩放,使得每个神经元对应的输入范围是针对该神经元量身定制的一个确定范围(均值为 、方差为 )。rescale 和 reshift 的参数都是可学习的,这就使得 Normalization 层可以学习如何去适应底层的学习结果。
除了充分利用底层学习的能力,另一方面的重要意义在于保证获得非线性的表达能力。
Sigmoid 等激活函数在神经网络中有着重要作用,通过区分饱和区和非饱和区,使得神经网络的数据变换具有了非线性计算能力。而第一步的规范化会将几乎所有数据映射到激活函数的非饱和区(线性区),仅利用到了线性变化能力,从而降低了神经网络的表达能力。而进行再变换,则可以将数据从线性区变换到非线性区,恢复模型的表达能力。
不添加正则化, 的均值取决于下层神经网络的复杂关联;添加本层后,取值 仅由 来确定,去除了与下层计算的密切耦合。新参数很容易通过梯度下降来学习,简化了神经网络的训练。
标准白化操作的目的是“独立同分布”。独立就不说了,暂不考虑。变换为均值为 、方差为 的分布,也并不是严格的同分布,只是映射到了一个确定的区间范围而已(所以,这个问题仍然有研究空间)。
于2015年由 Google 提出。具体过程见『教程』Batch Normalization 层介绍。
BN 独立地规范化每一个层不同批次的 ,但规范化的参数是一个 mini-batch 的一阶统计量和二阶统计量。这就要求 每一个 mini-batch 的统计量是整体统计量的近似估计,或者说每一个 mini-batch 彼此之间,以及和整体数据,都应该是近似同分布的。分布差距较小的 mini-batch 可以看做是为规范化操作和模型训练引入了噪声,可以增加模型的鲁棒性;但如果每个 mini-batch的原始分布差别很大,那么不同 mini-batch 的数据将会进行不一样的数据变换,这就增加了模型训练的难度。
BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle,否则效果会差很多。
另外,由于 BN 需要在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量,因此不适用于 动态的网络结构 和 RNN 网络。不过,也有研究者专门提出了适用于 RNN 的 BN 使用方法,这里先不展开了。
与 BN 不同,LN 是一种横向的规范化。它综合考虑一层所有批次的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。
标签:训练 分享图片 googl 接收 计算 转换 能力 block 动态
原文地址:https://www.cnblogs.com/hellcat/p/9735041.html