深度学习trick

Batch Normalization加速训练

(6条消息) Batch Normalization:加速神经网络训练的通用手段_hyman.lu-CSDN博客

1.基本的一些防止梯度消失、梯度爆炸的方法包括:

  1. 换用其他激活函数(比如ReLU)
  2. 预学习得到神经网络的初始参数
  3. 降低学习速率
  4. 限制神经网络的学习自由度(比如Dropout)

更进一步地,Batch Normalization的普适性要更强一些,能使整个学习过程平稳化,从而达到加快学习的效果。

2.内部协变量位移(Internal Covariate Shift)

首先我要先理解协变量位移(Covariate Shift),它一般是指在机器学习和模式识别领域,采样得到的训练集数据的特征值分布通常跟最终的预测数据的特征值分布存在一定的偏差,因此导致算法模型的最终预测效果会产生或多或少的下降。

然而,我们今天要讲解的重点是内部协变量位移(Internal Covariate Shift),则是指深度学习领域进行神经网络模型学习时,常使用随机小批量梯度下降算法,此时每一批从训练集采样得到的数据它们的特征值分布也会存在差异。而这些差异会随着神经网络层数不断的深入而不断增大,这就使得整个神经网络(尤其是饱和非线性的部分)的参数难以收敛。

3.白化(whitening)

所谓白化,其实就是先进行PCA,求出新特征空间中X的新坐标,然后再对新的坐标进行方差归一化操作。

对于输入数据集X,经过白化处理后,新的数据X’满足两个性质:
(1)特征之间相关性较低;
(2)所有特征具有相同的方差。

该算法常用于图像处理当中,由于图像中相邻像素之间具有很强的相关性(一个像素的颜色值往往跟它周围的像素的颜色值十分接近),因此常使用白化对输入的像素特征向量进行白化,从而降低输入的冗余性。

同样地,白化也能起到抑制内部协变量位移(Internal Covariate Shift)的作用。我们接下来要详细介绍的Batch Normalization跟白化有点异曲同工之妙。

5.Batch Normalization的好处

①可以使用较大的学习速率

在一般的深度学习中,如果强行提高学习速率,会因为每层网络都会对参数的梯度进行缩放,从而导致梯度消失/梯度爆炸。而使用了Batch Normalization之后,每一次的放缩将不会相互叠加,从而可以大胆地使用更大的学习速率,而不用担心引起梯度消失/梯度爆炸。

②带有正则化的效果

之前,深度学习防止过拟合的最常用的两种方法包括L2正则化和Dropout,但它们都会使模型的训练所需时间增加,而且往往会增加一定的调参工作。而Batch Normalization则可以很好地规避掉这个问题

③不受网络参数初始值的影响

对于一些特定分布的数值(比如像素一般位0-255),模型的训练时间和最终训练效果将十分依赖于网络参数初始值。但是经过Batch Normalization归一化处理后,我们就不需要针对某一维度的数据进行网络参数初始值进行精心调优,统一使用标准正态分布随机初始化即可。

inchannel outchannel

卷积核的层数和卷积核的个数分别对应in channel 和 out channel的大小,stride决定对于特征图H,W大小的改变。设计kernel size,与感受也有关。

decconvolution

ML Lecture 16: Unsupervised Learning - Auto-encoder - YouTube32分钟之后

image-20211025130057963