【LLM 论文阅读】NEFTU N E: LLM微调的免费午餐

指令微调的局限性

指令微调对于训练llm的能力至关重要,而模型的有用性在很大程度上取决于我们从小指令数据集中获得最大信息的能力。在本文中,我们提出在微调正向传递的过程中,在训练数据的嵌入向量中添加随机噪声,论文实验显示这个简单的技巧可以提高指令微调的效果,通常有很大的优势,而不需要额外的计算或数据开销。

NEFTune虽然简单,但对下游的会话质量有很大的影响。当像LLaMA-2-7B这样的原始LLM被噪声嵌入所微调时,AlpacaEval从29.8%提高到64.7%(图1),令人印象深刻地提高了约35个百分点。NEFTune可以实现在会话任务上惊人的性能跳跃,同时在事实问题回答基线上保持性能,这种技术似乎是LLM微调的免费午餐

代码仓库:https://github.com/neelsjain/NEFTune
论文链接:https://arxiv.org/abs/2310.05914

NEFTune原理

指令模型是在由指令和响应对组成的数据集上进行训练的。

NEFTune的每一步都首先从数据集中采样一条指令,并将其标记转换为嵌入向量。

然后,NEFTune通过向嵌入中添加一个随机噪声向量来脱离标准训练。

噪声通过采样iid均匀分布产生,每个样本都在范围内[−1,1],然后将整个噪声向量缩放为 α / L d α/\sqrt{Ld} α/Ld ,其中L为序列长度,d为嵌入维数,α为可调参数。

for step_count in range(start_step_count, args.max_steps):
        train_loss = 0
        for _ in range(accumulation_steps):
            try:
                data = next(epoch_iterator)
            except StopIteration:
                sampler.set_epoch(sampler.epoch + 1)
                dataloader = dataloader_full
                epoch_iterator = iter(dataloader)
                data = next(epoch_iterator)

            if args.neftune_alpha is not None:
                if isinstance(model, torch.distributed.fsdp.fully_sharded_data_parallel.FullyShardedDataParallel):
                    embed_device = model._fsdp_wrapped_module.model.embed_tokens.weight.device
                    embeds_init = model._fsdp_wrapped_module.model.embed_tokens.forward(data['input_ids'].to(embed_device))

                    ### add noise to embeds
                    input_mask = data['attention_mask'].to(embeds_init) # B x L
                    input_lengths = torch.sum(input_mask, 1) # B
                    
                    noise_ = torch.zeros_like(embeds_init).uniform_(-1,1)
                    delta = noise_ * input_mask.unsqueeze(2)
                    dims = input_lengths * embeds_init.size(-1)
                    mag = args.neftune_alpha / torch.sqrt(dims)
                    delta = (delta * mag.view(-1, 1, 1)).detach()
                    data['inputs_embeds'] = delta + embeds_init
                    data['input_ids'] = None
                    ### add noise to embeds

            out = model(**data)

            (out.loss/accumulation_steps).backward()
            train_loss += out.loss.item()/accumulation_steps
        model.clip_grad_norm_(args.max_grad_norm

实验结果

  • NEFTune提高了文本质量

从表1中,我们可以看到7B尺度的所有数据集的增加,平均增加了15.1%,这表明NEFT训练显著提高了对话能力和回答质量。此外,我们可以从图2中看到,我们也看到了对旧模型的改进,如LLaMA-1和OPT。有趣的是,根据ChatGPT,我们看到ShareGPT的改进不如其他数据集改进。然而,这并没有反映在GPT-4的评估中。

从表2中我们可以看到,在NEFTune加入70B参数模型后,WinRate从75.03%上升到88.81%(+13.78%)

  • NEFTune可以改进Chat模型

从表2中,我们可以看到,在Evol-指令上进一步对LLaMA-2 Chat进行微调(7B)可以将LLaMA-2聊天的性能提高3%。这个模型已经被广泛地调整了,使用了多轮的RLHF。然而,在NEFTune中,我们看到了相当大的额外性能增长10%,尽管我们注意到这个检查点模型的一些功能可能会受到影响,比如它避免输出有毒行为的能力。

  • 基础能力的影响

一个潜在的担忧是,NEFTune会牺牲其他能力为代价来提高会话能力,但是比较微小。我们评估了OpenLLM排行榜任务,使用LMEval利用MMLU、ARC、HellaSwag和真实QA。这些基准让我们得以评测模型知识、推理和真实性。图3显示了分数保持稳定,NEFTune保留了模型功能。

  • NEFTune对QLORA有效

论文表明,NEFTune还通过使用量化低等级适配器(QLORA)进行训练,提高了在受限资源环境下的性能。对于30B,论文将有效批处理规模增加一倍,并将学习率提高一半。表3显示,当使用QLORA进行训练时,在所有研究的模型大小和数据集中,空间性能都有所提高。然而,性能的提高没有全面微调的明显。这可能是因为需要不同的超参数(即微调周期的数量),或者因为量化到4位。

  • 一个定性的例子

在这里,论文展示了一个来自LLaMA-2的含NEFT的羊驼的定性例子。我们从这个例子中可以看到,羊驼产生的回复更短,只给出了量子计算的一个非常基本的定义,提到了量子位元、叠加、纠缠和增加的复杂计算。在Alpaca-NEFT回复中,该模型提供了一个更流畅的答案,对这些主题,更清晰的解释了叠加和量子纠缠,并提到了潜在的应用。我们认为这个例子代表了由NEFT引起的各种变化。

结论

NEFTune的成功指出了算法和正则化器在LLM训练中的重要性被忽视。与多年来一直在研究正则化和过拟合的计算机视觉社区不同,LLM社区倾向于使用标准化的训练循环,而不是泛化。在这种环境下,LLM的研究人员已经专注于数据集和模型缩放作为前进的主要路径。考虑到NEFTune的一致性收益,以及在小指令数据集上的过拟合的倾向,似乎正则化值得在LLM设置中重新加入。

论文的研究有几个局限性:

  • 采用AlpacaEval作为llm教学遵循能力的中心指标,它受到单一法官(GPT-4)偏见的影响。
  • 此外,由于有限的计算资源,无法验证在多个数据集的更大的70B变体上的成功,不得不对大多数NEFTune运行依赖固定的超参数,而不是扫描。
  • 最后,尽管我们进行了实证研究,但我们尚未确定NEFTune工作的原因。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s的存储卷

存储卷------数据卷 把容器内的目录,和宿主机的目录进行挂载。 容器在系统上的生命周期是短暂的,delete,k8s用控制(deployment)创建的pod,delete相当于重启,容器的状态也会回复到初始状态。 …

中国京津冀光伏展

京津冀在中国光伏展是中国光伏行业的一次重要展览活动,旨在推动京津冀地区光伏产业的发展和合作,促进全国光伏产业的健康发展。 京津冀地区是中国光伏产业的重要基地之一,拥有丰富的太阳能资源和发展潜力。中国光伏展作为光伏行业的盛会&…

firewall防火墙(二)

一、IP伪装与端口转发: 当用户数据包经过NAT设备时.NAT设备将源地址替换为公网P地址.而返回的数据包就可以被路由,NAT技术一般都是在企业边界路由器或者防火墙上来配置. Firewaild支持两种类型的NAT;P地址伪装和端口转发. 1.1 I…

优化 ParamValidator,让编辑器Pycharm智能提示校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 基于 Valid…

鱼哥赠书活动第⑥期:《内网渗透实战攻略》看完这本书教你玩转内网渗透测试成为实战高手!!!!

鱼哥赠书活动第⑥期:《内网渗透实战攻略》 如何阅读本书:本书章节介绍:本书大致目录:适合阅读对象:赠书抽奖规则:往期赠书福利: 当今,网络系统面临着越来越严峻的安全挑战。在众多的安全挑战中&…

产品使用说明书也能进行SEO?要怎么制作才能使其易于搜索?

产品使用说明书也能进行SEO?是的,你没有听错,不过是在线化的产品使用说明书。产品使用说明书能通过特定的策略和技巧进行搜索引擎优化(SEO)。这不只是为了让产品信息更易被找到,更是为了提升品牌知名度和用…

ubuntu20.04安装cuda11.4以及cudnn

系统:ubuntu20.04硬件配置:GPU3080、CPU未知通过《软件和更新》在附加驱动选项中添加了驱动: 1.检查自己电脑支持的cuda nvidia-smi4. 下载cuda11.4.2 wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/c…

昇腾910b部署qwen-7b-chat进行流式输出【pytorch框架】NPU推理

文章目录 准备阶段避坑阶段解决方案一、modeling_qwen.py二、cli_demo.py 结果展示 准备阶段 参考我上一篇文章910b上跑Chatglm3-6b进行流式输出【pytorch框架】 避坑阶段 我在mindspore框架下运行了qwen-7b-base、qwen-7b-chat输出都有大大的问题,参考官方文档 …

C++qt-信号-信号槽

1、概念 信号和槽是两种函数,这是Qt在C基础上新增的特性,类似于其他技术中的回调的概念。 信号和槽通过程序员提前设定的“约定”,可以实现对象之间的通信,有两个先决的条件: 通信的对象必须都是从QObject类中派生出来…

iOS 应用上架指南:资料填写及提交审核

摘要 本文提供了iOS新站上架资料填写及提交审核的详细指南,包括创建应用、资料填写-综合、资料填写-IOS App和提交审核等步骤。通过本指南,您将了解到如何填写正确的资料,并顺利通过苹果公司的审核。 引言 在开发iOS应用后,将其…

视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?

智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…

oracle基本用户管理和权限分配

1.用户与模式的关系,一一对应的关系 2.创建与管理用户 2.1创建用户语法 CREATE user wdf IDENTIFIED by tiger--创建用户wdf,密码tiger DEFAULT tablespace users--用户的默认表空间 quota 10M on users;--在表空间的占用最大空间 注意:用户创建以后…

基于TableAgent实现IT职位招聘数据分析—以传统机器学习与TableAgent 数据分析方式相对比以凸显TableAgent 特性

目录 🚀一. TableAgent—新AI时代的数据分析智能体 🔎1.1 基于DataCanvas Alaya九章元识大模型 🔎1.2 TableAgent的亮点 🚀二. 使用TableAgent分析数据与传统机器学习分析数据对比 🔎2.1 项目背景 🔎2.2 数…

统信UOS命令行设置未签名软件安装权限

原文链接:统信UOS命令行设置未签名软件安装权限 hello,大家好啊!今天我要给大家介绍的是在统信UOS操作系统上通过命令行设置安全中心应用安装权限的方法。在某些情况下,用户可能需要安装未经官方签名的软件包。虽然这可以提供更多…

在python里面探索web框架

一、常识性知识 python Web框架三巨头:Flask(简单易学)、Django(复杂庞大)、FastAPI 1. Django:Django是一个高级的Web框架,它提供了强大的功能和工具,用于快速开发复杂的Web应用程序。 2. Flask&#xff…

2024 CSRankings全球计算机科学排名发布!清华AI第一,哈工大NLP第一

大家好我是二狗。 这两天全球计算机科学排名 CSRankings 2024发布啦! 下面二狗就带大家来看一下最新的排名情况。 清华、北大、上海交大AI领域霸榜前三 在AI板块,主要有人工智能、计算机视觉、机器学习、自然语言处理、网络&信息检索5个细分领域。…

【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数 (一)

目录 0 引言1 3DTiles数据2 objTo3DTiles2.1 工具的安装2.1.1 拓展:Node.js 和 npm 2.2 工具的使用2.2.1 输出成瓦片数据2.2.2 输出带有坐标参数的瓦片数据 3 查看3DTiles数据 🙋‍♂️ 作者:海码007📜 专栏:Cesiumfor…

玄子Share-云计算入门指南

玄子Share-云计算入门指南 一、Windows 键盘字符输入 1. 单键位 直接通过键盘输入即可 2. 双键位 功能键,键盘上显示为两排符号,普通输入模式默认输入下排字符,键盘按下Shift(转换)键,上档键&#xff0…

8 单链表---带表头节点

上节课所学的顺序表的缺点 顺序表的最大问题:插入和删除时需要移动大量元素 链式存储的定义 链式存储的逻辑结构 链表中的基本概念: 注意:表头节点并不属于数据元素 单链表图示: 把3个需要的结构体定义出来: typdef …

矩阵中的最长递增路径

题目链接 矩阵中的最长递增路径 题目描述 注意点 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕) 解答思路 因为最长递增路径一定是连续的,所以想到使用深度优先遍历来做。如果只使用深度优先遍历会导致超时(同一个…