标签:cal layer 场景 apt ada 操作 tran 轻量级 训练
统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如 transfer learning / domain adaptation 等。而 covariate shift 就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即对所有的\(x \in \mathcal{X}\),
\[
P_s(Y|X=x) = P_t(Y|X=x)
\]
但是,
\[
P_s(X) \neq P_t(X)
\]
简而言之,每个神经元的输入数据不再是“独立同分布”
以一个神经元为例,接收一组输入向量
\[ \mathbf{x} = (x_1, x_2, \cdots, x_d) \]
通过某种运算后,输出一个标量值:
\[ y = f(\mathbf{x}) \]
以BN为代表的方法进行了简化的白化操作,通用框架如下所示:
\[ h = f(g \cdot \frac{\mathbf{x} - \mu}{\delta} + b) \]
其中,\(\mu\)和\(\delta\)是平移参数和缩放参数,\(g\)和\(b\)是再缩放参数和再平移参数。之所以引入再缩放和再平移,是为了模型的表达能力不会因为规范化下降。这两个参数都是可学习的,保证每个Normalization层学到的是真正有用的分布。
结合上述通用公式,BN中均值和方差由以下公式计算
\[
\mu_i=\dfrac{1}{m}\sum \limits_{i=1}^m x_i
\]
\[
\sigma_i=\sqrt{\dfrac{1}{m}\sum \limits_{i=1}^m(x_i-\mu_i)^2 + \epsilon}
\]
BN独立地规范化每一个输入维度\(x_i\),但规范化的参数是一个 mini-batch的一阶统计量和二阶统计量。这就要求每一个 mini-batch的统计量是整体统计量的近似估计,或者说每一个 mini-batch彼此之间,以及和整体数据,都应该是近似同分布的。分布差距较小的mini-batch可以看做是为规范化操作和模型训练引入了噪声,可以增加模型的鲁棒性;但如果每个mini-batch的原始分布差别很大,那么不同 mini-batch的数据将会进行不一样的数据变换,这就增加了模型训练的难度。
训练时,BN层利用隐藏层输出结果的均值与方差来标准化每一层特征的分布,并且维护所有mini-batch数据的均值与方差,最后利用样本的均值与方差的无偏估计量在测试时使用
与 BN不同,LN是一种横向的规范化,它综合考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入:
\[ \mu = \sum_i x_i \]
\[ \delta = \sqrt{\sum_i (x_i - \mu)^2 + \epsilon} \]
LN针对单个训练样本进行,不依赖于其他数据,因此可以避免BN 中受mini-batch 数据分布影响的问题,可以用于小mini-batch场景、动态网络场景和RNN,特别是自然语言处理领域。此外,LN不需要保存mini-batch 的均值和方差,节省了额外的存储空间
但是,BN的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么LN的处理可能会降低模型的表达能力
标签:cal layer 场景 apt ada 操作 tran 轻量级 训练
原文地址:https://www.cnblogs.com/weilonghu/p/11922941.html