与数据集偏差的十年之战:我们成功了吗?

在这里插入图片描述
论文地址:https://arxiv.org/pdf/2403.08632.pdf
代码地址:https://github.com/liuzhuang13/bias

1. Introduction

    2011年,深度学习革命的黎明之前,Torralba 和 Efros 在十年之前呼吁 “数据集分类 (Dataset Classification)” 问题[1],即对图像所来自的数据集进行分类。如果数据集分类的精度很容易很高,那么说明数据集偏差的问题广泛存在。反之,如果这个精度很难提升,那么说明今天数据集偏差的问题解决得还不错。在过去的十年中,构建多样化、大规模、全面以及可能是偏差更少的数据集[2][3][4]一直是推动深度学习革命的重要引擎。与此同时,算法方面,尤其是神经网络架构,也在从数据中发现概念、抽象和模式 (包括偏差) 等方面取得了前所未有的进步。
    在本文中,作者带我们重新审视了这场浩大的十年之战,力求 “不偏不倚地看待数据集的偏差 (unbiased look at dataset bias)”。本文研究的动机是一种 “紧张关系”,即: “构建具有更少偏差的数据集” 和 “构建更高级的神经网络模型” 之间的一种紧张关系。在 Torralba 和 Efros 发文的 2011 年,神经网络模型能力还相对较弱。如今十年过去了,虽然我们能够构建偏差更少的数据集,但是神经网络也变得更加高级了,它们又可以更好地利用数据集中的偏差。所以数据集分类的问题到今天发展到哪一步了?
    为此,本文研究了这样一个虚构的任务,即 2024 版的 “数据集分类 (Dataset Classification)” 实验[1],也就是 “Name That Dataset” 实验,如下图1所示。具体而言,作者从 YFCC[4], CC[5]和 DataComp[6]这三个数据集 (合在一起叫做 YCD 数据集) 中的每一个中随机抽取大量 (高达 100 万) 的图像,并在它们的联合上训练一个神经网络来对图像取自哪个数据集进行分类。
    令人惊讶的是,现代神经网络可以在这样的数据集分类任务上达到非常出色的精度。比如在上面的对人类十分具有挑战性的 YCD 数据集上训练,模型的分类准确度 >84%,而瞎猜的准确度只有 33.3%。这一观察结果非常稳健,在各种数据集组合和几代的神经网络架构 (AlexNet, VGG, ResNet, ViT, ConvNeXt) 上,在大多数情况下实现了非常高的准确度 (比如超过了 80%)。
    有趣的是,就是对于这样的数据集分类任务,也可以观察到很多在类似于在语义分类任务 (比如图像分类) 中观察到的观察结果。比如,作者观察到即使训练任务变得更加困难,在更多样本上训练数据集分类器或使用更强的数据增强可以提高验证集的精度。这类似于语义分类任务中的泛化行为。这种行为表明神经网络在试图发现特定于数据集的模式,即:神经网络在试图学到一种特定的偏差形式来解决数据集分类任务。而且,也可以观察到,通过数据集分类任务训练的模型也展示出迁移性,即带有一些可以迁移到图像分类任务上面的语义信息。相比之下,如果不同数据集的样本都无偏地来自相同的分布,则模型就没法学到任何数据集特定的偏差。为了验证这一点,作者研究了一个伪数据集分类任务,其中不同的 “数据集” 是从单个数据集中统一采样的。作者观察到这个分类任务很快变得很难处理,因为分类器处理此任务的唯一方法是记住每个单独的示例及其来自那个数据集的子集。因此,增加样本数量或使用更强的数据增强没有任何额外作用,反而使得记忆这些数据集的子集变得更加困难。而且,也观察不到迁移性。这些行为与真实数据集分类任务表现的行为截然不同。更令人惊讶的是,作者观察到即使是自监督学习训练出来的模型,也能够捕获到不同数据集之间的偏差。具体而言,作者在在不同数据集的联合上预训练自监督模型,且不使用任何数据集身份作为标签。然后类似于传统自监督学习的做法,冻结预训练的特征,单独训练一个分类头。那这样得到的模型在数据集分类任务上仍然可以实现令人惊讶的超高精度 (比如 78%)。这样的表现十分类似于典型的自监督学习模型。

2. 本文结论

  • 相比 2011 年,今天新的神经网络架构能够发现数据集中的隐藏偏差,尽管今天的数据集规模更大,类型更多,人工处理程度更低,更可能有偏差。换言之,数据集分类任务有了现代神经网络架构的加持变得更加简单了。从这个意义上讲,数据集偏差的问题仍未解决。
  • 通过有监督学习,或者自监督学习训练得到的模型,都捕获到不同数据集之间的偏差。
  • 呼吁人们探讨到底是应该创造新的偏差更少的数据集,还是应该创建能力更强的神经网络架构。

3.数据集分类实验

数据集分类任务类似于图像分类,只是标签是数据集自己。比如分类 N 个数据集,就相当于是个 N 分类任务。分类精度在验证集上进行评估,验证集通过每个数据集的保留集组成。作者选用的数据集如下图所示:
在这里插入图片描述
尽管这些数据集看起来是更加多样化的,但它们的收集过程仍然存在差异。这可能也是导致其出现偏差的原因。比如:Flickr 是一个网站,用户可以上传和分享照片;Wikipedia 是一个专注于知识和信息的网站;Common Crawl 是一个抓取网络数据的组织。此外,数据收集过程中还涉及不同级别的管理:LAION[11]是通过逆向工程 CLIP 模型[12]收集的。

4. 主要实验结果

用一句话概括就是:神经网络做数据集分类任务的精度惊人,而且这个精度跨越了不同的数据集设置。作者从每个数据集中随机抽取 1M 和 10K 图像作为训练集和验证集,并训练了一个 ConvNeXt-T[13]模型,(这部分如果需要详细内容可自行阅读原paper)得出以下结论:

  • 1) 不同数据集组合的精度都很高
  • 2) 不同架构的模型精度都很高
  • 3) 不同尺寸的模型精度都很高
  • 4) 数据集分类的精度受益于更多的训练数据
  • 5) 数据集分类的精度受益于数据增强

5. 自己反思结论

  • 数据集中存在偏差,这样模型才能更好的区分不同的数据集
  • 分类精度一定程度上取决low-level feature
  • 分类任务模型并不是单纯的记住每一张图片,而是学习到该数据集中一种特定的范式,这种范式恰好可以很好的指导模型进行分类

http://www.niftyadmin.cn/n/5452332.html

相关文章

10本程序员必看的书籍

以下是10本程序员必看的书籍推荐: **1.《代码大全》:**史蒂夫迈克康奈尔著。这本书是编程最佳实践指南之一,它详细讲解了如何编写整洁、高效的代码,对于提升编程技能和代码质量有很大帮助。 **2.《深入理解计算机系统》&#xff1…

c语言中,全局变量是指在哪定义的变量?在两个不同的.c文件中可以定义同名的全局变量吗?

在C语言中,全局变量(也称为外部变量)是在函数外部定义的变量,它们的作用域从定义的位置开始,一直到文件结束或者遇到 static 关键字为止。全局变量可以在整个程序中访问,前提是它们在访问它们的文件中被正确…

C++进阶之路---C++11相关特性 | 左值引用 | 右值引用 | 完美转发

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之…

【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)

一、选择题 第 1 题 第 2 题 表达式1000/3的结果是( A )。 A.333 B.333.3 C.334 D.333.0 第 3 题 下列选项中,判断a等于1并且b等于1正确的表达式是( B )。 A.!((a!1)&&(b!1)) B.!((a!1)||(b!1)) C.!(a1)&&(b1) D.(a1)&&(b1) 【解析】 A…

Leetcode第27题:移除元素

代码实现 class Solution:def removeElement(self, nums: List[int], val: int) -> int:ent_removeTruewhile(ent_remove):if val in nums:nums.remove(val)else:ent_removeFalsereturn len(nums)思路:重复判断列表中是否存在目标值,存在则删除,直到…

【力扣】134.加油站

题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第i个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…

设计模式-装饰者模式在Java中使用实例-打印发票装饰抬头和脚注

场景 设计模式-装饰者模式在Java中的使用示例: 设计模式-装饰者模式在Java中的使用示例_java装饰者模式例子-CSDN博客 上面装饰器的调用示例如下 AbstarctComputer computer;//要买1台电脑computer new BaseComputer();//加一个内存条computer new MemoryDecor…

mysql字段多个值,mybatis/mybatis-plus匹配查询

mysql中有一个字段是字符串类型的,category字段值有多个用逗号分割的,例如:娱乐,时尚美妆,美食 。现在想实现这么一个功能, 前端传参 字符串,美食,娱乐。现在想在mybatis的xml中实现,查询,能查到…