关于Neural Network(MLPs)的训练前准备:数据预处理和网络初始化
训练一个的Neural Network(特指由FC层和non-linearity构成的MLP式网络),为了达到又快又好的convergence,训练前的准备非常重要。这里主要谈个主要的预训练措施:数据预处理 and 网络初始化。
一. 数据预处理:
本文还是以在CIFAR-10上做10分类任务为背景展开(训练集50000张32 * 32 * 3 = 3072dim的图片,X∈[N , D] = [50000, 3072])。所谓数据预处理,就是把这个3072维空间上的50000个点的数据进行处理,使得他们在3072维feature空间的各个单个feature维度上,具有很好的分布(distribution)性质。注意,这里把3072维feature中的每一维看做一个variable,是50000个采样的distribution。
数据预处理的核心(即希望处理后的数据集)有三:1. zero-mean(zero-centered);2. unit varaiance;3. low dimensionality; 4. Features de-correlation。
1. Mean Subtraction for zero-mean(centered):
对3072维feature的每一维重复以下操作:求50000个值的mean,然后用50000个值各自减去这个mean;
2. Scaling/Normalization by dividing std:
对3072维feature的每一维重复一下操作:求50000个值得标准差(std, i.e. varaince的算术平方根),然后用50000个值各自除以这个标准差。
zero-centered和normalization处理数据的过程如下图:
3. Dimensionality reduciton & de-correlation by PCA:
有时input图像太大导致输入维度很高,从而使得存储和计算代价都很大,而如此高维度的特征中有很多冗余、互相关的信息。可以通过PCA的方法,实现降维和解相关。
PCA,主成分分析,顾名思义是找到样本特征空间X∈[50000, 3072] 中对分类最有效的、50000个样本点之间区辩力最强的、互相之间相关性最低的 主要“成分”(成分即3072维空间的基,即3072个特征中主要的特征)。实现PCA的方法,即待求的这些“主成分”,其实就是X∈[50000, 3072]矩阵的covarance(自相关)矩阵M∈[3072, 3072]的主要特征向量们(Ui∈[3072,1], i up to 3072)。3072个Ui互相正交,可以当做X的一组新基(新的3072个faeture channel),而若将50000个样本点重新投影到这组新基上,那么这个新样本空间Y∈[50000, 3072]中的每两个feature维之间互相de-correlated。
降维的办法是选择Ui中前K个特征值最大的对应的特征向量组成新基完成投影得到X到Y的转换。令K=100,则原训练集X就由[50000, 3072]降维到Y∈[50000, 100],即原先每个sample由3072个特征表示,现在则只由100个特征表示。降维一定会带来信息的损失,但是通过PCA的方法选择保留最主要的成分(特征)来完成降维,能够最有效地完成对重要信息的保留。注意,在特征值越大的特征向量上的50000个sample的投影后的点的varaince越大,而varaince越大可以直观地理解为含有的可用于分类的信息越多,所以这个特征向量所代表的特征(成分、基)越主要。另外,top-100个主成分实现投影和降维后得到的新data Y 有效地保留了原来高维data X中的低频分量(varaince大),即图想象中的颜色、粗线条轮廓、纹理等信息,而那丢失掉的特征信息主要是原X中的高频分量(varaince小),即图像中的细枝末节、random噪声等等。
如上图所示(选取top-144个主成分(特征向量)实现降维),由3072降维到144dim可视化后,图像变模糊,但是基本轮廓和颜色等得以保留,即低频分量保留,高频分量丢失。
Whitening是在投影之后进行的一次rescaling/normalization操作,即将投影到某个特征向量Ui∈[3072, 1]上的50000个数各自除以该特特征向量对应的特征值。
二. 网络初始化:核心就是保证weight的asymmetric,同时设法保证每个FC层(neurons)的输入(输出)数据的distribution有着稳定不shift的mean和variance(低internal covaraite shift)
网络初始化的目的是通过有效地选择weights、bias的初始值,保证:1. break symmetric;2. control internal covariate shit(zero-mean + normalize variance),从而保证网络训练和converge的又快又好。注意,在FCs组成的MLP型的Neural Network中,因为全连接性,所以每一层中的每一个neuron的input都相同,都是上一层所有neuron的输出值。
- Break symmetric:网络训练的一大问题就是symmetric,意思是所有neuron呈现共性,即在Foward pass过程中输出值都相似,从而在Backprop过程中各w上的梯度值也相似。这样的现象就导致网络的学习力和表征力大幅下降,失去neuron各司其职,再ensemble的能力。
- Internal Covariate Shift:NN网络中每层neurons的输入值得distribution,即上一层neurons的输出distribution(某一层由100个neurons,那么这一层的输出,即下一层的输入,就是一个100维的vector,是一个100维的随机变量呈现某种distribution),的mean和varaince不稳定,大小不一,导致网络训练不得不用小learning rate从而减慢converge,而且对参数initialization的要求更高,而且还会更容易使得neurons陷入saturated的状态。
为了解决上述两个问题,网络初始化主要有如下两个操作:
1. 将每个neuron的weights vector初始化从一个zero-mean,unit varaince的Gaussian distribution中采样:保证break symmetric,并且保证一层neuron的输出分布是zero-mean:
这种引入的随机性,是非常好的summetric breaker,打破了neurons的工整对称相似性。但是需要注意的是,网络在BP时候gradient(各weight上的偏导)的大小与网络中weight的大小是成正比的,所以也不能将weight初始化地一味地小。
2. 将每个neuron如上一步采样得到的Wi normalize从而使得每个neuron的输出distribution的unit varaince:保证每一层neuron的输出分布unit varaince:
为了解决internal covariate shift,需要保证每层neurons的输出分布是zero mean,unit variance的。zero mean通过data pre-processing和zero-mean Gaussian weight sampling已经可以实现,那么怎么实现每层输出的unit variance呢?研究发现每个neuron输出值分布的variance与该neuron的输入edge的数目成正比。所以,将该neuron的weights除以input edge数的平方根可以实现对该neuron输出varaince的normalization。
3. Batch Normalization:control the internal covaraite shit:
BN层位于FC(or Conv)与Non-linearity之间,是对其前方那个FC层或Conv层输出的faeture map(即它后面Relu的输入features)进行一次mean和variance的可学习的校正。如果每个FC后面都有一个BN,那么就在网络内部实现了各层的internal covaraite shift管控。
如上,BN就是在每一次Forward Pass(一个Forward Pass即是批量化vectorized并行计算一个batch的samples)中,在网络沿途每一个FC后面,对其输出的features(which is going to be the input of the next FC)的一次可学习normalization。具体做法是求feature中各个channel上在整个batch上的均值和方差(上式中xi是将一张feature map一起计算一个mean map,即假设上一个FC输出的是100维数据,那么xi∈100dim,mean of x也是一个100dim),然后进行一次参数化的mean subtraction & varaince scaling/normalization。这样之后,保证在网络的各个环节,即每次有数据输入FC层时,该输入数据都有很好的mean和varaince的特征,每次输入的数据都很稳定,不shift。
BN的好处是:
- 对抗bad parameter initialization;
- enable large learning rate and faster convergence;
- reularize the model------ BN可以代替dropout;