深度学习中的数据预处理方法
本文主要讲深度学习中的数据预处理方法,主要参考NG的UFLDL教程以及其他一些博客和论文进行总结,UFLDL数据预处理教程链接为
http://deeplearning.stanford.edu/wiki/index.php/数据预处理
数据预处理在众多深度学习算法中都起着重要作用,通常所讲的预处理包括数据归一化和白化。以下分别对数据归一化和白化进行说明。
数据归一化。数据归一化(Data Normalization)是数据预处理的第一步,有很多方法,如常见的高斯归一化、最大最小值归一化等,而在深度学习中常用的是以下几种:
(1)简单缩放 (Simple Rescaling)
在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1]或[ − 1,1] 的区间内(根据数据情况而定),以满足应用需求。例如,在sparse auto-encoder中,由于网络的输出和输入是近似相等的,而隐含层和输出层神经元通常采用的是sigmoid函数作为激活函数,该函数值域为[0,1],因此为了保证输出等于输入,通常需要将输入缩放至[0,1]这个范围,然后再进行训练。
(2)逐样本均值消减(Per-example mean subtraction)
逐样本均值消减,也称为移除直流分量(remove DC),当数据时平稳的(stationary),即数据每一个维度的统计都服从相同分布,可以考虑在每个样本上减去数据的统计平均值(逐样本计算,即分别计算各样本的均值,然后各样本减去其对应的均值)。自然图像具有平稳的性质,所以这种归一化方法也是比较常用的。对自然图像应用PCA算法时候,通常也会这样处理,参考以下链接:
http://deeplearning.stanford.edu/wiki/index.php/PCA
注意:通常这种方法只用于灰度图像,因为彩色图像不同色彩通道中的像素并不都存在平稳特性。此外,对于教程这部分内容还有点疑惑,“对图像数据应用PCA算法”这部分内容上面讲的是标准的PCA处理方法(各维度去均值),而下面给的公式却是单独处理每个图像块(逐样本去均值)。
(3)特征标准化(Feature Standardization)
特征标准化的目的是使数据集中所有特征都具有零均值和单位方差,即数据的每一个维度具有零均值和单位方差,这也是比较常见的一种归一化方法,比如使用SVM时候也要进行类似处理。在实际应用中,特征标准化的具体做法是:首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。
例如X是一个训练样本集,包含m个训练样本且每个训练样本的维数是n。应用特征标准化时先计算各行数据的均值
,然后样本集X减去该均值得到零均值化后的样本集XX。之后XX的各行除以该行数据的标准差就会得到特征标准化后的样本。
总结:以上有三种方法,具体预处理时候到底该如何选择预处理方法呢?一般可以根据自己的需要来选择(或者说数据类型)。
若图像是自然灰度图像,由于灰度图像具有平稳特性,通常可选择第二种方法,即移除直流分量(逐样本移除直流分量后还可以继续逐样本除以各样本的标准差,不过这一步通常不做,因为其平稳特性)。
若图像是自然彩色图像,由于色彩通道间并不存在平稳特性,因此通常对数据进行特征缩放(使像素值位于 [0,1] 区间)。然后再进行PCA/ZCA白化等操作,在白化前需进行特征分量均值归零(即使特征的每一个维度具有零均值,通常不需要除以各维度数据的标准差,因为各维度标准差很接近,可以对上文中的X进行验证)。在UFLDL教程的练习中(linear decoder)采用的是这种方法,而在有些论文中,也会采用第二种方法(逐样本去均值和除以标准差),如论文“An Analysis of Single-Layer Networks in Unsupervised Feature Learning”,这样在后续白化处理时是不是还需要再对各维度进行零均值化(因为计算协方差矩阵时需要这一步),论文里这点没说明。因此应用时建议根据练习中的方法来处理。
若图像是遥感图像,可采用linear decoder这个练习中的处理方法。
PCA/ZCA(zero-phase component analysis)白化。数据归一化后的一个处理步骤就是数据白化。关于白化的基本知识可参考教程:
http://deeplearning.stanford.edu/wiki/index.php/Whitening
在进行 PCA/ZCA 白化时,首先使特征零均值化是很有必要的, 这一步需要在计算协方差矩阵前完成(计算协方差矩阵前的必要处理)。
总结:其实数据归一化和白化可以合并成一部分,即数据白化。因为白化前肯定需要进行一些必要的数据归一化,比如计算协方差矩阵前需进行特征零均值化操作。
此外关于预处理这部分内容,还可以参考博客:
http://www.cnblogs.com/tornadomeet/archive/2013/04/12/3016319.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!