深度学习基础-数据处理

数据部分

所谓AI三要素算力算法数据

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

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

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

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

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

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

数据处理的过程主要分为

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

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

数据采集(Data Acquisition)

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

数据采集的方法主要有

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

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

  • 生成数据GANVAE或扩散模型

数据标注(Data Annotation)

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

数据标准一般是借助标注工具来完成比如labelmeLabelboxCVAT或者是通过数据标注众包百度众包之类的标注

数据增强(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’满足两个性质

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