进入到深度学习阶段,优化任务是一个非凸优化问题。模型收敛的稳定和速度是算法工程师不得不考虑的问题。归一化自提出后,就是该领域神器。本文将从归一化的思想,介绍常见的几种归一化,探究生效原理三部分来展开,最后是个人使用心得。
归一化思想
深度神经网络模型的训练为什么会很困难?其中一个重要的原因是,深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。Google将这一现象总结为Internal Covariate Shift。
这会导致几部分问题。其一,上层参数需要不断适应新的输入数据分布,降低学习速度。其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。
因此,以 BN 为代表的 Normalization 方法退而求其次,进行了简化的白化操作。基本思想是:在将x送给神经元之前,先对其做平移和伸缩变换, 将x分布规范化成在固定区间范围的标准分布。
通用变换框架就如下所示:
μ是平移参数(shift parameter), θ是缩放参数(scale parameter)。通过这两个参数进行 shift 和 scale 变换,得到的数据符合均值为 0、方差为 1 的标准分布。b是再平移参数(re-shift parameter),g是再缩放参数(re-scale parameter)。将上一步得到的进一步变换,最终得到的数据符合均值为b 、标准差为g的分布。
常见归一化
Batch Normalization —— 纵向规范化
Batch Normalization 于2015年由 Google 提出,开 Normalization 之先河。其规范化针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元x的均值和方差,因而称为 Batch Normalization。