Data Filtering Network 论文阅读和理解

ops/2025/1/22 7:49:48/

目录

一、TL;DR

二、Introduction

2.1 apple的结论

2.2 业界做法:

2.3 我们的做法(Apple)

2.4 如何获取好的DFN

三、未完待续(这周出去购物了,下周继续补充)


一、TL;DR

  1. 核心观点:
    1. 高质量的数据过滤网络与下游的表现是不一致的,下游性能好的网络可能过滤不出高质量数据,性能差的网络可能过滤出高质量数据
    2. 假设存在一个大型未整理数据集。DFNs可以诱导出一个大规模、高质量的预训练数据集。
  2. 实际数据集:DFNs与大型未过滤的图像-文本池配对,产出20亿高质量的图文数据集:DFN-2B(20亿)

二、Introduction

2.1 apple的结论

开局放大招,直接说明高质量数据是可以节省算力+提升性能的:

2.2 业界做法:

   LAION数据集的构建方法:

很显然,上述数据的构建方法非常依赖open AI的clip模型,模型的性能会限制实际过滤出的数据的质量(我理解是某些具备高信息熵的FN会被漏掉,且FP会进来),根据我实际的数据集构建经验也确实如此,不再加一级人工逻辑数据集几乎无法直接使用,clip的判断在图像文本对的描述如果足够细节的情况下,极其容易出错,尤其是在小批量数据增加上,会给实际训练的模型带来退化;

DataComp数据集构建和评估方法:

    Common Crawl包括128亿对图像-文本配对,通过使用各种数据filter技术的效果固定使用open-ai的vit-L14的训练资源来评估imagenet等38个下游任务的性能,将这个基准测试作为评估fiter网络的主要方法; 

    同时,datacomp的作者还发布了DataComp-1B的数据集,该数据集是通过聚类和clip的筛选2个方法来提高数据集质量,从而改进来LAION5B,但该方法依旧依赖clip的模型性能,并且引入了昂贵的聚类算法

2.3 我们的做法(Apple)

适用范围:高效的过滤达数万亿的样本,因此数据池子要求比较大,如果满足数据过滤的网络,则保留数据,如下是伪代码:

对于给定的DFN和数据池子,用于训练DFN的数据池称之为过滤数据集,用于DFN过滤后构建的数据集是诱导数据集,将DFN的性能定义为诱导模型的性能,该性能是通过标准的基准测试上评估得到的(例如DataComp上一样),则DFN的质量就是诱导数据集训练出来的模型的强度,apple是基于DataComp来构建的;

apple使用1.28亿、12.8亿、128亿三个级别的数据池子,且使用每个池子的提供的模型超参数也和DataCOmp一致,此外,通过将300亿非DataComp网络爬取的图像与DataComp超大规模池相结合,将DFN扩展到一个包含420亿图像的更大池中。然后使用DFN诱导出的数据集表示为DFN-5B,最后用它来训练一个ViT-H/14模型。

老实说,这张图有一些致命,常见的思路都是使用当前的模型来做过滤,训练一轮以后在使用新的模型来作为过滤,如此迭代,但是下面这张图说明了模型的的过滤表现和最终Imagenet的下游性能也许是不相关的

上图表示,DFN的下游任务性能哪怕差30个点(0.80-0.45-0.55),但是诱导出来的数据集的Imagenet性能还更高

2.4 如何获取好的DFN

核心理念:数据质量是训练好的过滤模型的关键,

如上图所示,横坐标是噪音数据的占比,也就是网络爬取(CC2M中的采样的1KW原始干净的数据),poison是对里面进行一定高质量数据替换成爬虫数据的比例,我们发现,被替换后10%左右,DFN的性能急剧下降,而后缓慢下降,因此说明训练DFN的数据一定是要高质量的数据,而业务model 本身的表现逐步下降,几乎是一条直线了
 

三、未完待续(这周出去购物了,下周继续补充)


http://www.ppmy.cn/ops/152135.html

相关文章

【Pandas】pandas Series rolling

Pandas2.2 Series Function application, GroupBy & window 方法描述Series.apply()用于将一个函数应用到 Series 的每个元素或整个 SeriesSeries.agg()用于对 Series 数据进行聚合操作Series.aggregate()用于对 Series 数据进行聚合操作Series.transform()用于对 Series…

c# PDF文件合并工具

界面 主要用于发票PDF文件的合并。经常出差要报销的很有用。 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System…

【RabbitMQ 消息丢失常见情况分析】

RabbitMQ 消息丢失分析:常见场景与解决策略 RabbitMQ 作为一种流行的消息队列中间件,广泛应用于各类分布式系统中。它通过发布/订阅模式解耦了生产者和消费者,提高了系统的可扩展性和可靠性。然而,在实际应用中,消息丢失仍然是一个亟待关注的问题。本文将探讨导致 Rabbit…

Android studio开发实战之碎片Fragment

一、碎片化的概念 碎片化(Fragment)是 Android 应用开发中的一个重要概念,它的设计初衷是增强界面模块化,便于开发者灵活构建和管理复杂的界面。 什么是模块化? 将应用界面拆分成多个可复用的小模块(Fragm…

Vue平台开发三——项目管理页面

前言 对于多个项目的使用,可能需要进行项目切换管理,所以这里创建一个项目管理页面,登录成功后跳转这个页面,进行选择项目,再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结: 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…

Vue3 中使用组合式API和依赖注入实现自定义公共方法

组合式API 1.在项目根目录 src 文件夹下创建文件夹 utils ,创建 index.js 文件 2.抛出想要对外暴露的方法,以下是一个判断数据类型的方法 export function getType(params) {// 判断是否是基本类型let res typeof paramsif (res ! object) {return re…

ubuntu_查询连接当前服务器的用户ip

在Ubuntu系统中,如果你想查询当前连接到服务器的用户的IP地址,你可以通过以下几种方法来实现: 1. 使用last和awk命令 last命令可以显示最近登录到系统的用户信息,包括他们的IP地址(如果他们是远程登录的)…