从广义上讲,数据预处理可以认为是在正式进入深度网络计算之前的一切操作。除了狭义上的对数据做归一化、缩放等直接的数据预处理外,数据扩充、不平衡样本的处理、数据shuffle等也可以认为是数据预处理的方式。这里,就几种总结一下对数据的各种操作方式以及他们的作用和意义。
数据扩充(Data Augmentation)
深度卷积网络自身拥有请打的表达能力,网络本身需要大量甚至海量数据来驱动模型训练,否则便有极大可能陷入过拟合的窘境。有效的数据扩充(data augmentation)不仅能扩充训练样本数量,还能增加训练样本的多样性,一方面可以避免过拟合,另一方面又会带来模型性能的提升。
- Horizontal/Vertical Flip: 水平/垂直翻转
- Random Crop: 随机抠取操作一般用较大的正方形在原图的随机位置处抠取图像块,每张图像随机抠取的次数决定了数据集扩充的倍数
- Scaling: 尺度变换,一般是讲图像分辨率变为原图的0.8、0.9
Rotating: 旋转
Color Jittering
不平衡样本的处理
数据预处理
在有了充足的数据样本以后,通过对图像的预处理可以帮助我们大大提升模型性能。
数据预处理的基本方式有数据归一化和白化。
数据归一化
数据归一化常用的方法有:
- 简单缩放(Simple Rescaling)
在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1]或[ − 1,1] 的区间内(根据数据情况而定)。这对后续的处理十分重要,因为很多默认参数(如 PCA-白化中的 epsilon)都假定数据已被缩放到合理区间。例如,在sparse auto-encoder中,由于网络的输出和输入是近似相等的,而隐含层和输出层神经元通常采用的是sigmoid函数作为激活函数,该函数值域为[0,1],因此为了保证输出等于输入,通常需要将输入缩放至[0,1]这个范围,然后再进行训练。
例子:在处理自然图像时,我们获得的像素值在 [0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1] 中。
- 逐样本均值消减(Per-sample mean subtraction)
图像处理中,图像的每个像素信息可以看作是一种特征,对每个特征减去平均值来中心化数据是非常重要的,这种归一化处理方式被称作“中心式归一化”(mean normalization)。
卷积神经网络中的数据预处理方式通常是计算训练集图像像素均值,之后在处理训练集、验证集和测试集图像时分别减去该均值。
减均值的原理是,默认自然图像是一类平稳的数据分布(即数据每一个维度的统计都服从相同分布),此时在每个样本上减去数据的统计平均值(逐样本消减)可以移除共同部分,凸显个体差异。
注意:1. 该均值仅针对划分后的训练集计算,不可直接在未划分的所有图像上计算均值。2.该方法通常用于灰度图像,因彩色不同通道中像素并不都存在平稳特性。
- 特征标准化(Feature Standardization)
特征标准化指的是(独立地)使得数据的每一个维度具有零均值和单位方差。这是归一化中最常见的方法并被广泛地使用(例如,在使用支持向量机(SVM)时,特征标准化常被建议用作预处理的一部分)。在实际应用中,特征标准化的具体做法是:首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。
白化
If we are training on images, the raw input is redundant, since adjacent pixel values are highly correlated. The goal of whitening is to make the input less redundant; more formally, our desiderata are that our learning algorithms sees a training input where (i) the features are less correlated with each other, and (ii) the features all have the same variance.
通过白化处理,数据具有以下特点:
- 特征之间相关性较低(协方差越小,相关性越低)
- 所有特征具有相同的方差
PCA 白化
参见 https://www.jiqizhixin.com/articles/2017-07-05-2
数据预处理标准流程
- 自然灰度图像
每个样本均值消减,然后PCA/ZCA白化。
- 彩色图像
数据特征缩放,使像素值位于[0,1]区间,再PCA/ZCA 白化。在PCA之前需要对特征进行分量均值归零化。
数据Shuffle
信息论中曾提到:“从不相似的事件中学习总是比从相似事件中学习更具信息量。”
在训练神经网络时,尽管训练数据固定,但是由于采用了随机批处理(mini-batch)的训练机智,因此我们可在模型每轮(epoch)训练进行前将训练数据集随机打乱(shuffle),确保模型不同轮数相同批次“看到”的数据是不同的。
这样的处理不仅会提高模型收敛速率,同时,相对固定次序训练的模型,此操作会略微提升模型在测试集上的预测结果。