深度学习-----数据预处理

原创 2015年08月26日 10:17:25

通过最近一段深度学习的学习与实现,发现数据预处理在深度学习中是非常重要的。

数据归一化

数据预处理中,标准的第一步是数据归一化。虽然这里有一系列可行的方法,但是这一步通常是根据数据的具体情况而明确选择的。特征归一化常用的方法包含如下几种:

  • 简单缩放
  • 逐样本均值消减(也称为移除直流分量)
  • 特征标准化(使数据集中所有特征都具有零均值和单位方差)

简单缩放

在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1][ − 1,1] 的区间内(根据数据情况而定)。这对后续的处理十分重要,因为很多默认参数(如 PCA-白化中的 epsilon)都假定数据已被缩放到合理区间。

Eg:在处理自然图像时,我们获得的像素值在 [0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1] 中.

逐样本均值消减

如果你的数据是平稳的(即数据每一个维度的统计都服从相同分布),那么你可以考虑在每个样本上减去数据的统计平均值(逐样本计算)。

Eg:对于图像,这种归一化可以移除图像的平均亮度值 (intensity)。很多情况下我们对图像的照度并不感兴趣,而更多地关注其内容,这时对每个数据点移除像素的均值是有意义的。注意:虽然该方法广泛地应用于图像,但在处理彩色图像时需要格外小心,具体来说,是因为不同色彩通道中的像素并不都存在平稳特性。

特征标准化

特征标准化指的是(独立地)使得数据的每一个维度具有零均值和单位方差。这是归一化中最常见的方法并被广泛地使用(例如,在使用支持向量机(SVM)时,特征标准化常被建议用作预处理的一部分)。在实际应用中,特征标准化的具体做法是:首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。

Eg:处理音频数据时,常用 Mel 倒频系数 MFCCs 来表征数据。然而MFCC特征的第一个分量(表示直流分量)数值太大,常常会掩盖其他分量。这种情况下,为了平衡各个分量的影响,通常对特征的每个分量独立地使用标准化处理。

PCA/ZCA白化

在做完简单的归一化后,白化通常会被用来作为接下来的预处理步骤,它会使我们的算法工作得更好。实际上许多深度学习算法都依赖于白化来获得好的特征。

在进行 PCA/ZCA 白化时,首先使特征零均值化是很有必要的,这保证了 \frac{1}{m} \sum_i x^{(i)} = 0。特别地,这一步需要在计算协方差矩阵前完成。(唯一例外的情况是已经进行了逐样本均值消减,并且数据在各维度上或像素上是平稳的。)

接下来在 PCA/ZCA 白化中我们需要选择合适的 epsilon(回忆一下,这是规则化项,对数据有低通滤波作用)。 选取合适的 epsilon 值对特征学习起着很大作用,下面讨论在两种不同场合下如何选取 epsilon


基于重构的模型

在基于重构的模型中(包括自编码器,稀疏编码,受限 Boltzman 机(RBM),k-均值(K-Means)),经常倾向于选取合适的 epsilon 以使得白化达到低通滤波的效果。(译注:通常认为数据中的高频分量是噪声,低通滤波的作用就是尽可能抑制这些噪声,同时保留有用的信息。在 PCA 等方法中,假设数据的信息主要分布在方差较高的方向,方差较低的方向是噪声(即高频分量),因此后文中 epsilon 的选择与特征值有关)。一种检验 epsilon 是否合适的方法是用该值对数据进行 ZCA 白化,然后对白化前后的数据进行可视化。如果 epsilon 值过低,白化后的数据会显得噪声很大;相反,如果 epsilon 值过高,白化后的数据与原始数据相比就过于模糊。一种直观上得到 epsilon 大小的方法是以图形方式画出数据的特征值,如下图的例子所示,你可以看到一条"长尾",它对应于数据中的高频噪声部分。你需要选取合适的 epsilon,使其能够在很大程度上过滤掉这条"长尾",也就是说,选取的 epsilon 应大于大多数较小的、反映数据中噪声的特征值。

ZCA Eigenvalues Plot.png

在基于重构的模型中,损失函数有一项是用于惩罚那些与原始输入数据差异较大的重构结果(译注:以自动编码机为例,要求输入数据经过编码和解码之后还能尽可能的还原输入数据)。如果 epsilon 太小,白化后的数据中就会包含很多噪声,而模型要拟合这些噪声,以达到很好的重构结果。因此,对于基于重构的模型来说,对原始数据进行低通滤波就显得非常重要。

提示:如果数据已被缩放到合理范围(如[0,1]),可以从epsilon = 0.01epsilon = 0.1开始调节epsilon


基于正交化ICA的模型

对基于正交化ICA的模型来说,保证输入数据尽可能地白化(即协方差矩阵为单位矩阵)非常重要。这是因为:这类模型需要对学习到的特征做正交化,以解除不同维度之间的相关性(详细内容请参考 ICA 一节)。因此在这种情况下,epsilon 要足够小(比如 epsilon = 1e − 6)。

提示:我们也可以在PCA白化过程中同时降低数据的维度。这是一个很好的主意,因为这样可以大大提升算法的速度(减少了运算量和参数数目)。确定要保留的主成分数目有一个经验法则:即所保留的成分的总方差达到总样本方差的 99% 以上。(详细内容请参考 PCA )


注意: 在使用分类框架时,我们应该只基于练集上的数据计算PCA/ZCA白化矩阵。需要保存以下两个参数留待测试集合使用:(a)用于零均值化数据的平均值向量;(b)白化矩阵。测试集需要采用这两组保存的参数来进行相同的预处理。


大图像

对于大图像,采用基于 PCA/ZCA 的白化方法是不切实际的,因为协方差矩阵太大。在这些情况下我们退而使用 1/f 白化方法(更多内容后续再讲)。


标准流程

在这一部分中,我们将介绍几种在一些数据集上有良好表现的预处理标准流程.


自然灰度图像

灰度图像具有平稳特性,我们通常在第一步对每个数据样本分别做均值消减(即减去直流分量),然后采用 PCA/ZCA 白化处理,其中的 epsilon 要足够大以达到低通滤波的效果。


彩色图像

对于彩色图像,色彩通道间并不存在平稳特性。因此我们通常首先对数据进行特征缩放(使像素值位于 [0,1] 区间),然后使用足够大的 epsilon 来做 PCA/ZCA。注意在进行 PCA 变换前需要对特征进行分量均值归零化。


音频 (MFCC/频谱图)

对于音频数据 (MFCC 和频谱图),每一维度的取值范围(方差)不同。例如 MFCC 的第一分量是直流分量,通常其幅度远大于其他分量,尤其当特征中包含时域导数 (temporal derivatives) 时(这是音频处理中的常用方法)更是如此。因此,对这类数据的预处理通常从简单的数据标准化开始(即使得数据的每一维度均值为零、方差为 1),然后进行 PCA/ZCA 白化(使用合适的 epsilon)。


MNIST 手写数字

MNIST 数据集的像素值在 [0,255] 区间中。我们首先将其缩放到 [0,1] 区间。实际上,进行逐样本均值消去也有助于特征学习。注:也可选择以对 MNIST 进行 PCA/ZCA 白化,但这在实践中不常用。

版权声明:本文为博主原创文章,未经博主允许不得转载 欢迎交流~

深度学习中的数据预处理

数据预处理在众多深度学习算法中都起着重要作用。实际情况中,将数据做归一化和白化处理后,很多算法能够发挥最佳效果。但是预处理的精确参数并非显而易见,一般需要尝试。 1.数据归一化      数据...
  • qq_23981335
  • qq_23981335
  • 2017年03月06日 21:00
  • 769

深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数

1. 引言 上一节我们讲完了各种激励函数的优缺点和选择,以及网络的大小以及正则化对神经网络的影响。这一节我们讲一讲输入数据预处理、正则化以及损失函数设定的一些事情。 2. 数据与网络的设定 前一节提到...
  • yaoqiang2011
  • yaoqiang2011
  • 2016年01月03日 16:43
  • 48124

深度学习小白——神经网络3(数据预处理,dropout,正则化)

一、数据预处理 数据矩阵X,维度是【N*D】N是数据样本数,D是数据维度 1.均值减法 它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点 X-=np.mea...
  • MargretWG
  • MargretWG
  • 2017年03月28日 14:48
  • 1952

深度学习笔记8 数据预处理

数据预处理标准流程 自然灰度图像 (1)灰度图像具有平稳特性,对每个数据样本分别做均值消减(即减去直流分量)——每个图像块,计算平均像素值,并将图像每个像素点减去均值。每个图像块有一个不同的均值。“...
  • yuanchheneducn
  • yuanchheneducn
  • 2015年06月17日 09:18
  • 1269

(Python实现)数据PCA降维白化和L2归一化-深度学习实践常用数据预处理

在深度学习网络训练之前,一般需要对数据进行预处理 1:减去均值,然后归一化 2:PCA白化 本文从python代码实现的角度去实现它 首先生成一个随机数组用于实验,维度是(40,500),代表...
  • u014381600
  • u014381600
  • 2017年01月05日 10:37
  • 3512

深度学习中的数据预处理方法

本文主要讲深度学习中的数据预处理方法,主要参考NG的UFLDL教程以及其他一些博客和论文进行总结,UFLDL数据预处理教程链接为 http://deeplearning.stanford.edu...
  • qq_23981335
  • qq_23981335
  • 2017年03月06日 22:29
  • 2270

深度学习训练中关于数据处理方式--原始样本采集以及数据增广

好久没有写博客,一直想重新调整自己的博客,想尽可能写的前后连贯一点,同时希望自己写的更通熟易懂些,可是迟迟没有动笔修改曾经的博文,哎,还是慢慢跟着自己的理解再修改之前的文章吧,今儿就写写关于深度学习训...
  • SMF0504
  • SMF0504
  • 2017年12月02日 18:37
  • 454

深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数

作者:寒小阳 时间:2016年1月。 出处:http://blog.csdn.net/han_xiaoyang/article/details/50451460 声明:版权所有,转载请联系作者并...
  • u010480899
  • u010480899
  • 2016年10月07日 22:22
  • 584

【Stanford CNN课程笔记】6.神经网络的数据预处理

今天我们来讲一讲神经网络的数据预处理。1. 数据预处理数据预处理的方法通常有三种,假设数据矩阵X是一个N*D维的矩阵,N表示样本数目,D表示数据的维度。 0均值 是最常用的预处理方法,就是把数据的每一...
  • elaine_bao
  • elaine_bao
  • 2016年03月14日 21:04
  • 5968

数据预处理练习(深度学习)

转载自: 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:tornadomeet,欢...
  • yayan01
  • yayan01
  • 2015年12月01日 19:49
  • 917
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习-----数据预处理
举报原因:
原因补充:

(最多只允许输入30个字)