DCAI:Data-Centric AI 以数据为中心的AI

1. 什么是DCAI?

1.1. 当下的研究背景

想象当中的数据集:通常是干净且精选的(例如猫或狗的图片)。 猫就是猫,狗就是狗

实际现实生活中的数据集:非常混乱~ https://labelerrors.com/ 比如这个网站里提供了一些人们常用的开源数据集中的错误标签部分

两个大佬的meme,乐呵一下

经验丰富的数据科学家:投资探索和修复数据比修补模型更值得。(即避免“垃圾进,垃圾出”)

因此我们要意识到我们所用到的数据并不是完美无缺的,相反,里面有非常多的陷阱。

而业界也花了很多时间和精力在处理数据,而非模型上。

1.2. 现在就来简易区分:以模型为中心的AI和以数据为中心的AI

以模型为中心的AI:重心在于调整模型;调参侠,掉包侠,fancy modeler

以数据为中心的AI:重心在于调整feed的数据本身,适配你所选的模型

当然两者最终目标都是优化模型训练结果。

其中,以数据为中心的AI需要自动化完成对数据质量的提升,例如

  • Coreset selection 自动挑出来数据集中真正能够boosting performance的部分,这主要是在降能增效
  • Dataset Augmentation 避免overfit/underfit的常用方法

常用的technique:

  • Outlier Detection and Removal (handling abnormal examples in dataset) 异常值检测
  • Error Detection and Correction (handling incorrect values/labels in dataset) 错误识别
  • Data Augmentation (adding examples to data to encode prior knowledge) 数据增强
  • Feature Engineering and Selection (manipulating how data are represented) 特征工程及筛选
  • Establishing Consensus Labels (determining true label from crowdsourced annotations) 一致标签
  • Active Learning (selecting the most informative data to label next) 主动学习
  • Curriculum Learning (ordering the examples in dataset from easiest to hardest) 课程学习

总的来说就是提升喂进模型的数据质量,进一步提升模型表现
好处是,不仅纠正了错误,而且还事半功倍!

DCAI更能够提升模型表现

2. 从label error开始探寻DCAI

DCAI一开始主攻的点就在label error上。诚如前所说,实际现实生活中的数据集非常混乱,label部分也是混乱的。

2.1. label error有哪些?

产生这些错误的标签的原因也是多种多样:比如你摁错了(大众点评上给餐馆打星);不小心标错了;测量度搞错了(单位!!);你不认识真实的label所以标错了;用了其他的ML模型的错误输出(比如你做生成模型时);硬件层级的,数据传输或者保存时出的错……

2.2. label error的识别

置信学习(CL)

核心思想还是根据历史训练结果(confidence),辅助判断该label是否有问题。具体我就不展示啦,逻辑还是比较清晰的

通过CL估计发现,这些著名的数据集中居然有这么多label error!

2.3. label error对benchmark的影响

首先我们来看CIFAR-10上的例子。横坐标是在未修改的validation(correctable,意味着能被修正的错误标签)上的top1 acc,纵坐标是在修正了label的validation上的acc。可以看出,随着层数的加深,参数量的进一步扩大,Acc能够占优,但修正label之后反而变差了。因为他overfit了这些noise。当然横坐标之所以低于纵坐标也是因为这里用来测试的validation dataset本身是噪音,本不该学到其中的信息

然后我们在ImageNet上观察。随着test data(或者validation)中correctable noise(错误标签)占比增加,ResNet50和ResNet18的acc均有下降。

但是神奇的是,当我们在修正了label error的test data上测试时,ResNet18的acc显示出非常强的robustness,超越了ResNet50.

这在一定程度上说明了label error对benchmark的表现有很大影响,因此在此之前的paper 所依据的benchmark很有可能并不准确。

3. DCAI:对数据集的构建和维护应该注意的地方

这个章节主要有三个小问题:选择偏差数据集容量估计以及一致标签

3.1. Selection Bias 选择偏差

我们的训练数据和实际的应用场景有很大差异——这也叫做分布迁移(distribution shift。这种偏差在建模的时候很难发觉。

统计学直观展示

举例:

  • Time/location bias 过去现在和未来,不同国家地理位置(比如对金融时序数据,过去和现在,未来的市场环境在随时变换,不同的市场特征也显著不同)
  • Demographics bias (少数群体的underrepresent)
  • Response bias (主要是对调查问卷中答案设置本身自带bias,)
  • Availability bias – using data that happens to be convenient rather than most representative (可以用幸存者偏差来概括)
  • Long tail bias – in applications with many different possible rare scenarios, collection mechanisms may prevent some from appearing in the dataset (e.g. autonomous vehicle gets bumped into wrong side of road).(极端情况,比如自动驾驶驶入了错误行道,训练集很少,但实际一定会碰到)

比较好的解决办法: ***让validation数据集更贴近实际应用场景***

  • If data are collected over time in a changing environment, one might hold out the most recent data as the validation set. TS数据用最近的数据来做validation
  • If data are collected from multiple locations and new locations will be encountered during deployment, one might reserve all data from some locations for validation. 把所有location的数据,inclusive地放进validation
  • If data contain important but rare events, one might over-sample these when randomly selecting validation data. oversample偶发事件

这个topic会在后面有更详尽的说明。

3.2. 我们到底需要多少数据?

根据实证得到的error和训练样本集n大概符合以下关系:

你只需要不断增大n,通过在相同测试集上的error便可以拟合得到ab参数值,然后根据你想要的精度,计算出合适大小的训练集。

这篇文章来自于ICLR2020:Rosenfeld, J., Rosenfeld, A., and Belinkov, Y. A constructive prediction of the generalization error across scales. International Conference on Learning Representations, 2020.

3.3. Curating a dataset labeled by multiple annotators 多个标注者共同标注数据集

这里的问题主要来自 crowdsourcing(外包)。外包可能产生两个问题:

  • 外包标注不一定准确
  • 外包人员有可能互相抄抄(图省事儿就拿其他人的标注交作业)

一般来说应对这种问题的解决办法是掺杂一些quality control,即已知真实label的数据进去,这样就能发现一些端倪。但是事实上,很多时候我们没有这样的样本。

于是我们想解决这样的问题,我们需要三类数据:

  • 一致标注(single best label)
  • 标注的质量(confidence)
  • 标注者的质量

在这里我们有以下方法获得以上的数据。

  • Majority Vote + Inter-Annotator Agreement

这很简单,就是取标注者们的 Majority Vote,并把它当作真是label,进一步可以得到标注者的质量(用正确率衡量)。这样问题在于:可能出现tie;并且好坏标注者对标注的贡献是等同的。

  • Majority Vote

如果有tie的话,我们可以先根据 Majority Vote 训练一个分类器,然后用它生成的label辅助判断(因为它用到了其他图片的信息)。这对只有一个label的样本也很有用。当然这个分类器也是有噪音的,后期可以根据chapter2提到的CL(confidence learning)进行修正。

  • CROWDLAB

把标注者们的标注(前部分)和分类器(后部分)的标注集合起来。其中可以看见有不同的权重,这就是可以调整的地方,你可以下调一个bad annotator的权重,也可以上调分类器的权重。值得注意的是,这其实是一个迭代的过程,回到a步骤,计算标注者的质量,权重能依据标注者质量进行优化,最后能converge到一个比较理想的状态。

CROWDLAB来自 NeurIPS 2022,CROWDLAB: Supervised learning to infer consensus labels and quality scores for data with multiple annotators 具体推证及实施细节可以参考原论文。

4. Data-Centric的模型评估方式

这一章节主要解决这一问题: Investigate shortcomings of the model and the dataset.即怎么检查模型和数据的短板。

主要分为evaluation和inspection.

4.1. 模型评估(a prerequisite for improving

首先我们不能依据一个metric就判断我们的模型好坏(虽然大家都这么做哈),就好像直接用所有样本的loss平均数。

最好是能够细化到每一类的accuracy,或者直接输出混淆矩阵。 总之要认识到对模型评估方式非常重要。

比如你的模型效果超好,但只是在某一prevailing的子类上表现超好~

因此我们要关注一下在评估(evaluation)时的陷阱,主要针对validation dataset来说:

  • Failing to use truly held-out data (data leakage)
  • Reporting only average loss can under-represent severe failure cases for rare examples/subpopulations (misspecified metric)
  • Validation data not representative of deployment setting(selection bias)
  • Some labels incorrect(annotation error)

这些包含在前面章节提到的数据泄露,选择偏差和标注错误等,那么解决措施在前面也有提到。

4.2. 关注并处理切片数据的欠拟合情况

中心思想就是:Model predictions should not depend on which slice a datapoint belongs to.
data slice = a subset of the dataset that shares a common characteristic
如种族、性别、社会经济学、年龄或位置。切片也称为:群组、子群体或数据的子组。通常我们不希望模型预测取决于数据点属于哪个切片。

我们能不能从特征中删掉这些切片?显然不能,因为这些切片特征和其他变量也息息相关(比如种族和pay,这两者事实上有很大关联。学线性回归的时候老师强调说相关效应存在时不应该去除主效应)
有以下几种方法减弱这种效应:

  • Try a more flexible ML model that has higher fitting capacity.比如用复杂度更高的模型
  • Over-sample or up-weight the examples from a minority subgroup that is currently receiving poor predictions


橙色和蓝色子组具有重叠的特征值。如果这两个子组的标签往往不同,那么任何模型都必须在对一个子组和另一个子组产生更差的预测之间进行权衡。如果您为橙色数据点分配更高的权重,那么生成的模型应该以对蓝色子组的潜在更差预测为代价为它们产生更好的预测。

还有一些其他的,不在这里列举。

4.3. 发现部分表现欠佳的样本

这里表现欠佳的不一定是某一个切片,就是一些零散的数据样本点。

首先找到它们

  • Sort examples in the validation data by their loss value, and look at the examples with high loss for which your model is making the worst predictions (Error Analysis) 挑loss最高的样本出来看看
  • Apply clustering to these examples with high loss to uncover clusters that share common themes amongst these examples 依据loss把样本分类看看有无明显聚类特征

它们产生的原因也很多。在前面讲我们应该注意的对数据集处理的情况也有重合。

  • Given label is incorrect 错误标签
  • Example does not belong to any of the K classes 样本根本不在目标分类里
  • Outlier 异常值 (遇到这种一般用data augmentation,或者把它调整到和其他样本相似的程度(就是让它看上去不那么out),更具体的在第五章有介绍。)
  • 你用的模型就不适用。这时候转去model-centric ai吧。

4.4. 量化单个样本对模型效果的影响

  • Leave-one-out (LOO)
impact=98.5%-98.3%=0.2%
  • Data Shapely

从包含这个点的任意子集中计算LOO,然后平均。计算量太大,可以用蒙特卡罗模拟。

  • 对于特殊的模型族,我们可以有效地计算出准确的影响函数。

在我们使用线性回归模型和均方误差损失,训练模型的拟合参数是数据集的封闭形式函数。因此对于线性回归,LOO也被叫做库克距离(学过线性回归的同学都很熟悉)。在分类中,对embedding进行KNN聚类,可以以O(Nlog(N))的时间复杂度下完成LOO的计算。

以上的这些方法所指向的数据都叫做influencial data sample,他们并不一定是异常值,只是对模型有较大影响的独立样本,其实翻译过来是高杠杆点。学过线性回归的同学也知道这两者的定义和检验方式不同。

5. 类别不均衡,异常值和分布迁移

5.1. 类别不均衡

在以下阶段都需要额外关注。

  • 在划分训练测试集的时候:If you're splitting a dataset into train/test splits, make sure to use stratified data splitting to ensure that the train distribution matches the test distribution (otherwise, you’re creating a distribution shift) problem.
  • 在评估模型的时候:There is no one-size-fits-all solution for choosing an evaluation metric: the choice should depend on the problem. For example, an evaluation metric for credit card fraud detection might be a weighted average of the precision and recall scores (the F-beta score), with the weights determined by weighing the relative costs of failing to block a fraudulent transaction and incorrectly blocking a genuine transaction

  • 在实际训练的时候,可以采用下面一些方式。

样本权重:实践中通常效果不佳。对于使用 mini batch 训练的分类器,使用样本权重会导致不同 mini batch 之间学习率发生变化,这会使学习变得不稳定。

过采样:简单地复制少数类中的数据点以使数据集更加平衡。通常比样本权重表现更好。该解决方案通常不稳定,并且可能导致过度拟合。

欠采样:在多数类中删除数据点。这种方法在实践中的效果出奇地好。在某些情况下,当数据集高度不平衡时,它可能会导致丢弃大量数据,从而导致性能不佳。

SMOTE可以使用数据集扩充通过组合或扰乱少数样本来创建少数类的新样本,而不是通过复制数据点进行过度采样。SMOTE 算法中特征空间的插值是有意义的,但对某些其他数据类型没有意义:将一张狗的图片与另一张狗的图片的像素值平均不太可能产生一只狗的照片。根据应用程序的不同,其他数据增强方法可能效果更好。

平衡的小批量训练( Balanced Mini-Batch Training ):对于使用 mini batch 训练的模型(如神经网络),让每个mini batch更高概率地抽取少数类的数据点。

这些技术可以结合使用。例如,SMOTE 作者指出,SMOTE 和欠采样的组合比普通欠采样表现更好。

5.2. 异常值

异常值:异常值是与其他数据点明显不同的数据点。原因包括测量错误(例如,损坏的空气质量传感器)、错误的数据收集(例如,表格数据集中缺少字段)、恶意输入(例如,对抗性示例)和罕见事件(统计异常值,例如,白化动物在图像分类数据集中)。

异常值检测又被细分为以下两类:

Outlier detection:在无标签的数据集中监测异常点——清洗数据集(预处理中)

Anomaly detection. 在无标签的数据集基础上判断新数据样本是否和原训练集为相同分布——在查看inference dataset和training dataset是否一致的时候。

检测异常值的方法很多

  • 孤立森林

该技术与决策树相关。直观地说,该方法创建一个“随机决策树”,并根据隔离数据点所需的节点数量对数据点进行评分。该算法通过随机选择一个特征和一个分割值来递归地划分数据集(的子集),直到该子集只有一个实例。这个想法是,离群数据点需要更少的分割才能变得孤立。

  • KNN距离

分布内的数据可能更接近其邻居。您可以使用到数据点的 k 个最近邻居的平均距离(选择适当的距离度量,例如余弦距离)作为分数。对于图像等高维数据,您可以使用经过训练的模型的嵌入,并在嵌入空间中执行 KNN。

  • 基于重建的方法

自动编码器是生成模型,经过训练将高维数据压缩为低维表示,然后重建原始数据。如果自动编码器学习数据分布,那么它应该能够将分布内数据点编码然后解码回接近原始输入数据的数据点。然而,对于分布外的数据,重建会更差,因此可以使用重建损失作为检测异常值的分数。

许多离群值检测涉及计算每个数据点的分数,然后根据阈值判断是不是异常值。这里可以用ROC,或者AUC.

5.3. 分布迁移

在这里的分布迁移专指的是在train 和 test之间的差异。在这里又可以分为三类:

  • Covariate shift / data shift 协变量迁移/数据自身迁移

p(y|x)没变,p(x)变了. 这个最好理解了,就是训练集和测试集的自变量数据差别太大。

  • 概念迁移Concept shift

p(x)没变,p(y|x)变了;即输入分布未改变,但输入和输出之间的关系变了。比如粉色还是粉色,蓝色还是蓝色,但是随着时间变化,喜欢这些颜色的人群却不一样了(好像中世纪男性更崇尚粉色,因为是血液稀释的颜色,女性更偏爱蓝色,是圣母玛利亚的颜色??我自己补充的例子哈哈)。

  • Prior probability shift / label shift 先验概率迁移/标签迁移

p(x|y)没变,p(y)变了,这里需要注意有一条潜在的因果链:y导致x。例如训练分类器预测给定症状的诊断, y是疾病,x是症状,因为疾病的相对流行率p(y)会随着时间而变化。但是疾病对症状的显式体现的概率没有发生变化。

5.4. 检测和解决分布迁移

检测分布迁移:

  • 监控模型的性能。监控准确度、精确度、统计量度或其他评估指标。如果这些随着时间的推移发生变化,则可能是由于分布迁移。
  • 监控数据。可以通过比较训练数据和部署中看到的数据的统计属性来检测分布迁移中的协变量迁移。

怎么解决呢?

在高层次上,可以通过修复数据重新训练模型来解决分布迁移问题。在某些情况下,最好的解决方案是收集更好的训练集

如果训练时未标记的test data可用,那么解决协变量迁移的一种方法是,将单个样本权重分配给train data以权衡它们的特征分布,使得加权分布类似于test data的特征分布。即使test data的标签未知,标签的迁移也可以通过对具有相同类别标签的所有train data使用共享样本权重来类似地解决,以使train data中的加权特征分布类似于test data中的特征分布。但是这无法解决概念迁移,因为无法从未标记的test data中对其进行量化。

参考文献

DCAI:Data-Centric AI 以数据为中心的AI ——来自MIT的公开网课(上) - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品推荐 - ALINX XILINX FPGA开发板 Artix-7 XC7A100T-2FGG484I

01开发板介绍 此款开发板采用核心板扩展板的模式,方便用户对核心板的二次开发利用。FPGA使用的是Xilinx公司的ARTIX-7系列的芯片,型号为XC7A100T-2FGG484I。在核心板使用了2片MICRON公司的MT41J256M16HA-125 DDR3芯片,组合成32bit的数据总线…

栈的应用——括号匹配

用栈实现 1、初始化一个栈,用来存左括号 2、遍历扫描括号字符串 如果遇到左括号,无脑入栈如果遇到右括号,此时栈空返回false,不空的话进行括号匹配。匹配不成功返回false,匹配成功将栈顶的那个左括号出栈。 遍历完之后…

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1:按照二叉搜索树的方法插入结点步骤2:自底向上调整平衡因子步骤3:触发旋转操作(AVL树平衡的精髓)右单旋左单旋左右双旋右左双旋…

TSINGSEE青犀视频AI方案:数据+算力+算法,人工智能的三大基石

背景分析 随着信息技术的迅猛发展,人工智能(AI)已经逐渐渗透到我们生活的各个领域,从智能家居到自动驾驶,从医疗诊断到金融风控,AI的应用正在改变着我们的生活方式。而数据、算法和算力,正是构成…

【矩阵】48. 旋转图像【中等】

旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,…

rust学习笔记(1-7)

原文 8万字带你入门Rust 1.包管理工具Cargo 新建项目 1)打开 cmd 输入命令查看 cargo 版本 cargo --version2) 使用 cargo new 项目名 在文件夹,按 shift 鼠标右键 ,打开命令行,运行如下命令,即可创建…

基于springboot的七彩云南文化旅游网站的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装七彩云南文化旅游网站软件来发挥其高效地信息处理的作用&am…

【使用postman测试python接口】

打开python服务 设置postman如下,并发送: postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果: python如下: from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…

你为什么是你,而不是别人?认识人格的力量

你为什么是你,而不是别人?让你做自我介绍,你会怎么描述自己呢? 人格心理学是心理学的一门重要分支学科。探求、描述和揭示个体思想、情绪及行为的独特模式,综合个人与环境诸多影响因素,对现实社会中的个人作…

Vite为什么比Webpack快

一、引言 主流的前端构建工具包括以下几种: Webpack:当下最热门的前端资源模块化管理和打包工具。它能够将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。同时,Webpack还支持代码分割,可以按需加载模块&#…

Redis底层数据结构之String

文章目录 1. 前提回顾2. RedisObject三大数据类型简介3. SDS字符串4. SDS字符串源码分析5. 总结 1. 前提回顾 前面我们说到redis的String数据结构在底层有多种编码方式。例如我们执行下面两条语句 set k1 v1 set age 17我们查看类型,发现这类型都是String类型 我们…

docker desktop 启动失败

docker desktop 启动失败 1.如果直接启动报错,设置 2.如果启动报 Failed to set version to docker-desktop: exit code: -1的解决方法. netsh winsock reset

vue3+Ts项目按需引入Echarts,并封装成hooks

记录 vue3Ts 项目中,按需引入echarts并进行二次封装使用。 1、安装:npm i echarts 2、新增按需引入配置文件:echartsConfig.ts // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。 import * as echarts from …

3.Windows下安装MongoDB和Compass教程

Windows下安装MongoDB 总体体验下来,,要比MySQL的安装简单了许多,没有过多的配置,直接就上手了! 1、下载 进入官方的下载页面https://www.mongodb.com/try/download/community,如下选择,我选…

第七节:使用SMB发布Web前端程序

一、概述 一直以来,多数人都使用Apache、IIS、Tomcat等开源或商业Web服务器来运行Web程序,各种参数太多,与我们简单易用逻辑相左。所以在架构设计的时候,我们也在考虑,我们公司的Web程序是否能运行在SMB中,…

52 硬中断的实现

前言 呵呵 中断机制 也是内核中很常见的机制了 中断机制是现代计算机系统中的基本机制之一,它在系统中起着通信网络的作用,以协调系统对各种外部事件的响应和处理,中断是实现多道程序设计的必要条件,中断是CPU 对系统发生的某个…

idea Springboot 在线考试管理系统开发mysql数据库web结构java编程计算机网页

一、源码特点 springboot 在线考试管理系统是一套完善的完整信息系统,结合mvc框架和bootstrap完成本系统springboot spring mybatis ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有…

关于-机器人学导论

机器人学导论,经典的基础教材,原书叫introduction to robotics mechanics and control ,在网上看到这个下载,这个好像不像有些书已经免费了,但是太经典拿它当教材的很多,最好看清晰的纸质版,特别…