文献阅读:The Unreasonable Effectiveness of Easy Training Data for Hard Tasks

news2024/9/29 1:29:55
  • 文献阅读:The Unreasonable Effectiveness of Easy Training Data for Hard Tasks
    • 1. 文章简介
    • 2. 方法介绍
      • 1. 数据集难易度分析
      • 2. 模型训练前后变化
    • 3. 实验考察 & 结论
      • 1. 实验设计
        • 1. 使用数据集
        • 2. 使用模型
      • 2. 实验结果
        • 1. 数据集难度分析
        • 2. 在Easy数据集下训练模型在Hard数据集下的表现
        • 3. hard data与easy data之间的trade-off
        • 4. EasyToHard方法的稳定性
    • 4. 总结 & 思考
  • 文献链接:https://arxiv.org/abs/2401.06751
  • GitHub链接:https://github.com/allenai/easy-to-hard-generalization

1. 文章简介

这篇文章是今年一月的一个工作,讲的是LLM的finetune方面的内容,具体来说是finetune时候的数据来源问题。

众所周知,模型训练的时候,优质数据非常重要,但是好的优质数据非常难以获得,当前的预训练大模型的路子虽然通过自监督的方法一定程度上缓解了上述问题,但是现在的Instruction Tuning以及RLHF等方法其实还是走回了SFT的路子,还是需要一定的标注数据进行训练。

因此,我们又回到了数据的获取问题上,而且,随着LLM效果变得越来越好,我们令LLM处理的问题难度也越来越高,对应的标注难度也越来越高,不但标注成本更高,标注质量也会有所下降,因为很多问题即使是专业人员也往往无法每次都给出准确的回答。

而文中则是另辟蹊径,选择了另外一条路,即放弃这些高难度的数据,直接使用相对容易获得的简单数据集来对模型进行finetune,然后在实际的hard数据集上进行考察,发现在这种情况下,模型效果也能够获得提升,且效果和真正在hard数据集上进行finetune的模型效果也相差不远。

在这里插入图片描述

下面,我们就来看一下文中的具体方法和考察内容。

2. 方法介绍

首先,我们来看一下文中的Easy To Hard Generalization方法。

这个其实并不需要太多的进行展开,因为顾名思义,这个方法的核心就是让模型在同类型任务的简单数据集下进行finetune即可。

文中给出了一个简单的case,即让模型分别在不同年级的数据下进行训练,然后统一在大学测试集下进行考察。

在这里插入图片描述

因此,这里与其说要对文中的方法进行说明,其实反而更需要说明以下两个问题:

  1. 如何来评估数据集的难易度
  2. 如何来评估训练前后模型的变化

1. 数据集难易度分析

首先,关于数据集的难易度评估,文中主要给出了以下几个判断维度:

  1. 教育程度/年纪水平
  2. 专家的评定
  3. 专业技术要求
  4. 问题的复杂程度(单词数目)
  5. 回答的复杂程度(单词数目)
  6. 回答问题需要的步骤数目
  7. 对于问题描述的最短长度

2. 模型训练前后变化

而关于模型在训练前后的效果变化程度,文中给出了一个名为Supervision Gap Recovered (SGR)的指标来进行定义,具体来说,就是模型在简单和复杂数据集上训练前后的效果提升差异度。

具体公式如下:

S G R = E a s y − U n s u p e r v i s e d H a r d − U n s u p e r v i s e d \mathop{SGR} = \frac{\mathop{Easy} - \mathop{Unsupervised}}{\mathop{Hard} - \mathop{Unsupervised}} SGR=HardUnsupervisedEasyUnsupervised

3. 实验考察 & 结论

下面,我们来看一下文中给出的具体实验考察和对应的结果。

1. 实验设计

首先,我们来看一下文中的实验设计,主要包括:

  1. 文中使用的数据集
  2. 文中使用的模型
1. 使用数据集

文中使用的数据集主要包括以下一些:

  1. ARC
  2. MMLU
  3. StrategyQA
  4. GSM8K

而关于每一个数据集,文中使用的难易度评判标准则主要为下表所示的内容:

在这里插入图片描述

2. 使用模型

然后,关于文中实验所使用的模型,主要是Llama-2 7B, 13B和70B的版本,不过文中提到在Qwen-72B,Mixtral-7x8B等模型上也有实验,结果是一致的,因此文中正文只给出了LLama-2上的实验结果。

而关于模型的训练方法,文中则是使用了以下几种方法:

  1. ICL
    • 数据构造上使用In Context Learning
  2. Linear Probing
    • 训练方法上使用Linear Probing
  3. QLoRA
    • Finetune方式使用QLoRA

2. 实验结果

下面,我们来看一下文中具体的实验结果。

1. 数据集难度分析

首先,关于数据集当中的难易度分析,具体来说的话,就是考察一下不同维度之间得到的难易度结果之间的相关关系。

文中给出的结果如下:

在这里插入图片描述

在这里插入图片描述

然后发现,结果就比较搞笑,因为发现各个评判标准得到的难易度分类之间相关度很低,也就是说在某些标准下认为的比较难的数据在其他标准下可能就会认为比较简单……

这就很尴尬,也导致文中在后续的时间很尴尬的就只能每次基于某一个维度的分类都做一次实验,使得结果就变得有点繁杂了。

2. 在Easy数据集下训练模型在Hard数据集下的表现

尽管如此,我们还是至少可以单一地根据几个维度确定问题的难易度,然后基于此进行一下实验考察,文中得到的实验结果如下:

在这里插入图片描述

可以看到:

  • 万幸的是,基于各类难易度分类标准,文中都获得了相近的实验结果,即Easy To Hard方法都是有效的,都可以有效地提升模型的效果表达,且相互之间的差别不大。
3. hard data与easy data之间的trade-off

但是,考虑到hard data和easy data获取成本的不同,这里还考察了一下hard data与easy data之间的trade off,具体来说,包含两个方面:

  1. 获取成本上面
  2. 数据的噪声方面

文中得到的结果如下:

  1. 获取成本上面

    假设hard data的获取成本是easy data的两倍,此时有:

    在这里插入图片描述

  2. 数据的噪声方面

    假设hard data的标注噪声是easy data的两倍,此时有:

    在这里插入图片描述

可以看到:

  • 从成本角度,easy data显然可以更快速地获得一个较好的效果,但是对于大多数的任务而言,随着成本的增加而导致的标注数据总量的增加,hard data训练的模型最终总是会追平并超越easy data训练得到的模型的;
  • 但是,从噪声方面,如果标注难度很大,hard data当中的标注准确性并不高的情况下,盲目地增加hard data的量反而会影响模型最终的效果。
4. EasyToHard方法的稳定性

最后,文中还考察了一下Easy To Hard Generalization方法的泛化性,具体包括以下两个角度:

  1. 不同size下的模型上的效果
  2. easy和hard数据的gap对结果的影响

得到结果如下:

  1. 不同size下的模型上的效果

    在这里插入图片描述

  2. easy和hard数据的gap对结果的影响

    在这里插入图片描述

可以看到:

  • 对于不同规模的模型,Easy To Hard Generalization总是成立的;
  • 随着easy data和hard data之间的gap的不断增大,其对于模型效果的增益是不断会减弱的,即数据分布差异越大,训练效果越差。

4. 总结 & 思考

综上,我们可以看到,本质上来说,这篇文章算是一个另类的数据增强的方法,本质上想要处理的问题还是如何获得足量监督数据的问题。

不同于其他比如说反向翻译等数据增强的方法,这里算是直接给出一个平替的思路:

  • 高成本的标注我们搞不起,那么我们就在一些不那么难的数据上做一些更加便宜的标注,也能够使得模型获得足够的效果提升。

倒也算是一个非常实用的方法了,如果真的做SFT的话感觉不妨可以一试,不过对于我们,可能更大的问题在于说,SFT本身搞不动啊……

我差的是那点标注吗?嗯,也差,但我更差的跑模型需要的卡啊!!!

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

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

相关文章

迭代器模式:分离遍历逻辑与数据结构,实现统一访问接口与灵活扩展

文章目录 一、引言二、应用场景与技术背景三、模式定义与实现四、优缺点分析总结: 一、引言 ​ 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。迭…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

NoSQL--2.MongoDB配置

目录 2.MongdoDB配置 2.1 Windows环境下操作 2.1.1 注册MongDB Atlas: 2.1.2 MongoDB Community Server Download: 2.1.3 启动MondgoDB服务: 2.1.3.1 命令行参数的方式启动MongoDB服务: 2.1.3.2 使用配置文件方式启动Mongo…

Python算法100例-3.4 完数

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展 1.问题描述 求某一范围内完数的个数。 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”&…

C#中多语言编程原理及实例解析

文章目录 一、了解C#多语言编程原理1. 通用语言运行库(CLR)2. 通用类型系统(CTS)3. 微软中间语言(MSIL)4. 元数据和反射5. 公共语言规范(CLS) 二、实例说明 一、了解C#多语言编程原理…

Linux笔记--用户与用户组

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root)申请一个账号,然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系…

MIT-BEVFusion系列九--CUDA-BEVFusion部署6 前向推理的数据加载与图像预处理

目录 加载图像数据加载点云数据模型推理并计时预热操作模型推理检查点云输入数据量打印信息中CopyLidar部分的计算和耗时打印信息中ImageNrom图像预处理部分计算和耗时 该系列文章与qwe、Dorothea一同创作,喜欢的话不妨点个赞。 接上面的文章,目光聚焦回…

为啥要用C艹不用C?

在很多时候,有人会有这样的疑问 ——为什么要用C?C相对于C优势是什么? 最近两年一直在做Linux应用,能明显的感受到C带来到帮助以及快感 之前,我在文章里面提到环形队列 C语言,环形队列 环形队列到底是怎么回…

数据结构——lesson5栈和队列详解

hellohello~这里是土土数据结构学习笔记🥳🥳 💥个人主页:大耳朵土土垚的博客 💥 所属专栏:数据结构学习笔记 💥对于顺序表链表有疑问的都可以在上面数据结构的专栏进行学习哦~感谢大家的观看与…

ElasticSearch相关知识点

ElasticSearch相关知识点 1.了解ES ES的作用:ES是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ELK技术栈:ES结合kibana、Logstash、Beasts,也就是 elastic stack 。…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先,导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作: 1.1.2.1 点击开启虚拟机: 1.1.2.2 默认选择回车CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

小白必看的Python函数讲解

定义函数 我们通过斐波那契数列来理解定义函数 >>> def fib(n): # 将斐波那契数列打印到 n ... """将斐波那契数列打印到 n""" ... a, b 0, 1 ... while a < n: ... print(a, end ) ... a, b b, …

IPC资源在linux内核中如何管理

1.先看各个通信的接口 1.共享内存接口 2.消息队列接口 3.信号量接口 2.管理他们的结构体&#xff1a; 其实管理他们的是一个数组&#xff0c;和open返回的fd差不多&#xff0c;shmid&#xff0c;msqid,semid的大小都是这个数组的下标。那数组的结构是什么呢&#xff1f; 然后…

hive中spark SQL做算子引擎,PG作为MetaDatabase

简介 hive架构原理 1.客户端可以采用jdbc的方式访问hive 2.客户端将编写好的HQL语句提交&#xff0c;经过SQL解析器&#xff0c;编译器&#xff0c;优化器&#xff0c;执行器执行任务。hive的存算都依赖于hadoop框架&#xff0c;所依赖的真实数据存放在hdfs中&#xff0c;解析…

JCL中IEFBR14和COND

JCL中IEFBR14和COND ​ COND CODE&#xff0c;就是反映JCL中STEP运行状态的参数&#xff0c;JCL正常终了的COND CODE 是0000&#xff0c;另外笔者在执行某些工具JCL时候&#xff0c;比方说简单一个COMPARE吧&#xff0c;可能会出现0012、0004或者0016&#xff0c;0001&#xf…

【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)

字符流练习 练习1&#xff1a;文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2&#xff1a;文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3&#xff1a;修改文件数据&#xff08;常规方法&#xff09;3.1 需求3.2 代码实现3.3 输出结果 练习4&#xff1a;修改文件数…

Sqli-labs靶场第19关详解[Sqli-labs-less-19]自动化注入-SQLmap工具注入

Sqli-labs-Less-19 通过测试发现&#xff0c;在登录界面没有注入点&#xff0c;通过已知账号密码admin&#xff0c;admin进行登录发现&#xff1a; 返回了Referer &#xff0c;设想如果在Referer 尝试加上注入语句&#xff08;报错注入&#xff09;&#xff0c;测试是否会执行…

javaEE--后端环境变量配置

目录 pre 文件准备 最终运行成功结果 后端运行步骤 1.修改setenv文件 2.运行setenv&#xff0c;设置环境变量 3.查看jdk版本 4.修改mysql文件夹下的my文件 前端运行步骤 1.nodejs环境配置 2.查看node和npm版本 3.下载并运行npm 4.注册登录 pre 文件准备 最终运行…

c++基础学习第一天

c基础学习第一天 文章目录 1、C初识1.1、注释1.2、变量1.3、常量1.4、关键字1.5、标识符命名规则 2、数据类型2.1、整型2.2、sizeof关键字2.3、实型&#xff08;浮点型&#xff09;2.4、字符型2.5、转义字符2.6、字符串型2.7、布尔类型bool2.8、数据的输入 3、运算符3.1、算术运…

黑马点评-短信登录业务

原理 模型如下 nginx nginx基于七层模型走的事HTTP协议&#xff0c;可以实现基于Lua直接绕开tomcat访问redis&#xff0c;也可以作为静态资源服务器&#xff0c;轻松扛下上万并发&#xff0c; 负载均衡到下游tomcat服务器&#xff0c;打散流量。 我们都知道一台4核8G的tomca…