深度学习基础-数据处理

数据部分

所谓AI三要素:算力,算法,数据。

对于深度学习来说,模型需要大量不同种的数据(暂且先不谈小样本学习Few-shot Learing),才能训练出正确率高、泛化性好的模型,而数据的质量很大程度上决定了模型的性能与鲁棒性。

Huber从稳健统计的角度系统地给出了鲁棒性3个层面的概念:

  1. 模型具有较高的精度或有效性;

  2. 对于模型假设出现的较小偏差,只能对算法性能产生较小的影响;噪声点

  3. 对于模型假设出现的较大偏差,不可对算法性能产生“灾难性”的影响。离群点

题外话: ChatGPT的训练集60%是互联网爬取(也没管网站的Robots协议),20%是OpenAI的WebText2数据集,剩下的来自书或Wiki,一共4100亿的tokens(词元?)。国内的大模型(Foundation Model)的训练集数据主要就是爬取网页和搜索引擎,数据质量良莠不齐,训练出的模型也只在中文处理能力上跟ChatGPT差不多,国内大模型下一步的重点应该放在数据上,而不是去扩大参数。

数据处理的过程主要分为:

数据采集–>数据标注–>数据增强–>数据清洗

本文将主要介绍数据增强与数据清洗

数据采集(Data Acquisition)

在深度学习中所使用的数据,其本身是存在于现实世界的,是杂乱的、随机的、数量是无法确定的,因为现实世界中无时无刻都在产生各种不同的新数据。而我们要使用的数据一般是结构化的、有规律的、确定数量的数据,所以一般数据采集就是从现实世界的数据中进行采样,这一过程就是完成从现实世界把数据转移到我们当前任务环境中的过程,值得注意的是,在采样过程中,要保证采样的数据分布规律和现实世界中的数据分布规律一样,因为只有这样,采样得到的数据在一定程度上才能能够代替现实世界中的数据。

数据采集的方法主要有:

  • 网络数据采集(网络爬虫或公开数据)

  • 感知设备采集(摄像头、传感器或其他采集设备)

  • 生成数据(GAN、VAE或扩散模型)

数据标注(Data Annotation)

数据标注是对未经处理过的语音、图片、文本、视频等数据进行加工处理,从而转变成机器可识别信息的过程。目前主流的模型都是监督学习,数据与标签一一映射才能参与训练。

数据标准一般是借助标注工具来完成,比如labelme、Labelbox、CVAT,或者是通过数据标注众包(百度众包之类的)标注

数据增强(Data Augmentation)

数据增强指通过对已有数据添加微小改动或从已有数据新创建合成数据,以增加数据量的方法。

数据增强是对数据采集的补充,如果数据在采样过程中就已经包括了各种复杂环境下的数据,那么数据增强不是必要的(但是这可以增加你数据集中相关数据的数据量),然而采集到的数据一般都是不足以表达实际数据分布情况的,数据增强的本质原因是由于原始数据无论是从数量还是质量上来说都不够丰富。

CV领域的数据增强主要有:

  • 空间几何变换:翻转(水平和垂直)、随机裁剪、旋转、仿射变换、视觉变换(四点透视变换)

  • 光照变换:随机亮度变换、对比度变换、色彩度变换、饱和度变换、噪声变换

  • 遮挡变换:Random erase(随机删除,在图上随机遮挡某一部分的像素)、Cutout(裁剪,按照一定的间隔遮挡NxN像素大小的小格子,是具有规律的,一般是等距间隔的小格子,N一般取2或4很小的值,类似于给图片加噪声)、hide and seek(裁剪,按照更大的间隔遮挡NxN像素大小的小格子,是具有规律的,一般是等距间隔的小格子,N一般取值更大一些)、Grid Mask(网格掩码,先把图像进行分成不同的格子,然后按照一定的方法去挑选遮挡某些格子。遮挡的效果取决于格子的大小和被遮挡的格子数量。类似于增加正样本的权重)、Dropblock(对图像数据使用dropout,然后再将多个dropout之间连成块,以此达到遮挡的目的)。

  • 模糊类:高斯模糊、ElasticTransformation

  • HSV对比度变换

  • 图像融合操作

NLP领域的数据增强主要有:

  • 同义词替换

  • 随机drop,对于标题和描述中的字或词,随机的进行删除,用空格代替

  • 随机 shuffle, 即打乱词序

  • 回译,快速产生一些不那么准确的翻译结果达到增加数据的目的

  • 添加一些随机单词的拼写错误

实际上,只有当我们增强后的样本与测试样本(应用场景)分布一致时,才会达到性能最好。大部分模型在做了数据增强后,在最终的效果上还是有很大的提升的,这是因为数据增强的方法中经常会加入一些极端情况下的数据,而这种极端情况下的数据在现实环境中一般很难采集得到。但是也有一些小模型在做了扰动过大的数据增强后,在最终识别效果反而会下降

数据清洗(Cleansing)

数据清洗常用的过程有:缺失值处理、删除重复值、异常值处理、归一化、标准化、白化处理。

笔者主要介绍归一化、标准化与白化。

归一化

把数据变成(0,1)或者(-1,1)之间的小数,把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。
如:

  • Min-Max归一化:$ \displaystyle x' = \frac{x - X_{min}}{X_{max} - X_{min}}$
  • 平均归一化:$ \displaystyle x' = \frac{x - \mu}{X_{max} - X_{min}}$
  • 对数函数转换:$ \displaystyle x' = log_n(x)$
  • 反余切函数转换:$ \displaystyle x' = arctan(x) *\frac{2}{\pi}$

标准化

使每个特征中的数值平均值变为0(将每个特征的值都减掉原始数据中该特征的平均)、标准差变为1,数据存在异常值和噪声时常用。
如:

  • Z-score标准化:$ \displaystyle x' = \frac{x-\mu}{\sigma}$

归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度;
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN,如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,模型的泛化性降低

白化处理

白化的目的是去除输入数据的冗余信息,输入数据集X,经过白化处理后,新的数据X’满足两个性质:

  • 特征之间相关性较低;
  • 所有特征具有相同的方差。