深度学习常见trick的理论

Normalization

https://zhuanlan.zhihu.com/p/33173246
原因:Internal Covariate Shift
深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。

简而言之,每个神经元的输入数据不再是“独立同分布”。
其一,上层参数需要不断适应新的输入数据分布,降低学习速度。
其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。
其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

解决
标准的白化操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度。

BN 为代表的 Normalization 方法退而求其次,进行了简化的白化操作。基本思想是:在将 x 送给神经元之前,先对其做平移和伸缩变换, 将x 的分布规范化成在固定区间范围的标准分布。

通用公式

Batch Normalization —— 纵向规范化:(对某一个维度规范化)

其中M 是 mini-batch 的大小

相对于一层神经元的水平排列,BN 可以看做一种纵向的规范化.BN 独立地规范化每一个输入维度

BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多
由于 BN 需要在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量,因此不适用于 动态的网络结构 和 RNN 网络。不过,也有研究者专门提出了适用于 RNN 的 BN 使用方法,

Layer Normalization —— 横向规范化

LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。

Weight Normalization —— 参数规范化
BN 和 LN 均将规范化应用于输入的特征数据x ,而 WN 则另辟蹊径,将规范化应用于线性变换函数的权重 W ,这就是 WN 名称的来源。
WN 的规范化不直接使用输入数据的统计量,因此避免了 BN 过于依赖 mini-batch 的不足,以及 LN 每层唯一转换器的限制,同时也可以用于动态网络结构。

Cosine Normalization —— 余弦规范化
把点积换成余弦相似度,范围控制在【-1,1】,避免了weight爆炸


去掉scale信息,可能导致表达能力的下降,因此也引起了一些争议和讨论。具体效果如何,可能需要在特定的场景下深入实验。

为什么normalization有效?
Normalization 的权重伸缩不变性(weight scale invariance),当权重 W 按照常量 进行伸缩时,得到的规范化后的值保持不变
得到的规范化后的值保持不变,


  • 权重的伸缩变化不会影响反向梯度的 Jacobian 矩阵,因此也就对反向传播没有影响,避免了反向传播时因为权重过大或过小导致的梯度消失或梯度爆炸问题,从而加速了神经网络的训练。

  • 权重伸缩不变性还具有参数正则化的效果,可以使用更高的学习率。

Normalization 的数据伸缩不变性(data scale invariance),当数据 x 按照常量 进行伸缩时,得到的规范化后的值保持不变,


  • 数据伸缩不变性仅对 BN、LN 和 CN 成立
  • 数据伸缩不变性可以有效地减少梯度弥散,简化对学习率的选择

dropout

在训练的时候,我们会对没有被dropout的神经元权值做一个rescale

rescale rate = 1 / (1 - dropout rate)

withour dropout

with dropout and rescale
  • 取平均的作用: 先回到正常的模型(没有dropout),我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。

  • 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。 迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式(鲁棒性)。(这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高)

你可能感兴趣的:(深度学习常见trick的理论)