标题: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
随机梯度下降法(SGD)是训练深度网络的首选,利用momentum 和Adagrad等来达到最佳的性能。尽管随机梯度下降法对于训练深度网络简单高效,但是需要我们人为的去选择参数,比如学习速率、初始化参数、权重衰减系数、Dropout比例,等等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。
神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低。
输入层的数据,已经人为的的归一化,后面网络每一层的输入数据分布是一直在发生变化的,前面层训练参数的更新将导致后面层输入数据分布的变化,因此必然会引起后面每一层输入数据分布的改变。而且,网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。
BN步骤:
- 求每一个小批量训练数据的均值;
- 求每一个小批量训练数据的方差;
- 使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε 是为了避免除数为0时所使用的微小正数;
- 尺度变换和偏移:将xi乘以γ调整数值大小,再加上β 增加偏移后得到yi,这里的γ 是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi 基本会被限制在正态分