【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 = 0for _ in range(accumulation_steps):try:data = next(epoch_iterator)except StopIteration:sampler.set_epoch(sampler.epoch + 1)dataloader = dataloader_fullepoch_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.deviceembeds_init = model._fsdp_wrapped_module.model.embed_tokens.forward(data['input_ids'].to(embed_device))### add noise to embedsinput_mask = data['attention_mask'].to(embeds_init) # B x Linput_lengths = torch.sum(input_mask, 1) # Bnoise_ = 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_initdata['input_ids'] = None### add noise to embedsout = model(**data)(out.loss/accumulation_steps).backward()train_loss += out.loss.item()/accumulation_stepsmodel.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工作的原因。

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

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

相关文章

静态路由、代理ARP

目录 静态路由静态路由指明下一跳和指明端口的区别代理ARP 我们知道,跨网络通信需要路由 路由有三种类型: 1.直连路由。 自动产生的路由,当网络设备连接到同一网络时,他们可以自动学习到对方的存在。自动学习相邻网络设备的直连信…

使用Excel批量给数据添加单引号和逗号

表格制作过程如下: A2表格暂时为空,模板建立完成以后,用来放置原始数据; 在B2表格内输入公式: ""&A2&""&"," 敲击回车; 解释: B2表格的公式&q…

科大讯飞星火大模型接入API js 部分 接口 安装注意事项

下载以下链接例子运行程序 https://xfyun-doc.xfyun.cn/static%2F16968175055332330%2Fspark_js_demo.zip 官网给的说明 准备 1.在demo中填写APPID、APISecret、APIKey,可到控制台-我的应用-大模型页面获取 2.安装nodejs 本地运行 1.打开cmd,进入dem…

微软等开源评估ChatGPT、Phi、Llma等,统一测试平台

微软亚洲研究院、中国科学院自动化研究所、中国科学技术大学和卡内基梅隆大学联合开源了,用于评估、分析大语言模型的统一测试平台——PromptBench。 Prompt Bench支持目前主流的开源、闭源大语言模型,例如,ChatGPT、GPT-4、Phi、Llma1/2、G…

【深度学习目标检测】十五、基于深度学习的口罩检测系统-含GUI和源码(python,yolov8)

YOLOv8是一种物体检测算法,是YOLO系列算法的最新版本。 YOLO(You Only Look Once)是一种实时物体检测算法,其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化,提高了检测速度和准确性。…

大语言模型向量数据库

大语言模型&向量数据库 LARGE LANGUAGE MODELSA. Vector Database & LLM WorkflowB. Vector Database for LLMC. Potential Applications for Vector Database on LLMD. Potential Applications for LLM on Vector DatabaseE. Retrieval-Based LLMF. Synergized Exampl…

使用Notepad++将多行数据合并成一行

步骤 1、按CtrlF,弹出“替换”的窗口; 2、选择“替换”菜单; 3、“查找目标”内容输入为:\r\n; 4、“替换为”内容为空; 5、“查找模式”选择为正则表达式; 6、设置好之后,点击“全…

BUG-<el-option>多选框不能多选,前端Element

文章目录 来源解决 来源 在一个 <el-select> 菜单组件中使用<el-option>时&#xff0c;为下拉菜单提供多个选项。每个 <el-option> 代表一个选项。 测试为一个用户添加多个角色&#xff0c;多选异常。 贴BUG代码&#xff1a; <el-form-item label"…

云原生分布式多模架构:华为云多模数据库 GeminiDB 架构与应用实践

文章目录 前言一、GeminiDB 总体介绍1.1、华为云数据库全景图1.2、GeminiDB 发展历程1.3、GeminiDB 全球分布情况 二、GeminiDB 云原生架构2.1、核心设计&#xff1a;存算分离&多模扩展2.2、存算分离&多模扩展核心优势2.3、高可用&#xff1a;秒级故障接管2.4、弹性扩展…

.NetCore部署微服务(二)

目录 前言 概念 一 Consul注册服务中心 1.1 consul下载 1.2 consul运行 二 服务注册 2.1 安装Consul包 2.2 修改配置文件 2.3 注入Consul服务 2.3 修改Controller&#xff0c;增加HealthCheck方法 三 运行服务 3.1 docker运行服务 前言 上一篇讲到微服务要灵活伸缩…

5 - 异常处理

目录 1. 总览 1.1 Exception 与 Error 1.2 checked unchecked 异常 1&#xff09;使用 try-catch 进行捕获 2&#xff09;使用 throws 关键字抛出 1.3 throw 与 throws 1&#xff09;throw 2&#xff09;throws 3&#xff09;区别 1.4 try-catch-finally 2. try wit…

leetcode 每日一题 2024年01月11日 构造有效字符串的最少插入数

题目 2645. 构造有效字符串的最少插入数 给你一个字符串 word &#xff0c;你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次&#xff0c;返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到&#xff0c;则认为该字符串 有效 。 示例 …

17. 电话号码的字母组合(回溯)

从第一个数字开始遍历其对应的字母&#xff0c;将其加入StringBuffer中&#xff0c;继续深度优先搜索&#xff0c;当访问到最后一个数字的时候&#xff0c;将StringBuffer存储到ans中&#xff0c;然后回溯到下一个对应字母。 class Solution {public List<String> lette…

【二十】【动态规划】879. 盈利计划、377. 组合总和 Ⅳ、96. 不同的二叉搜索树 ,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

ALIENWARE:卓越游戏体验,源自创新基因

美国拉斯维加斯当地时间1月9日&#xff0c;CES 2024在万众期盼中如约而至。 作为全球消费电子领域一年一度的盛宴和行业风向标&#xff0c;CES 2024汇聚了来自全球的众多消费电子企业以及令人目不暇接的最新科技产品&#xff0c;因而受到了全球广大消费者的密切关注。 众所周知…

GitHub项目推荐-incubator

项目地址 Github地址&#xff1a;GitHub - apache/incubator-anser 官网&#xff1a;Apache Answer | Free Open-source Q&A Platform 项目简述 这是Apache的一个开源在线论坛&#xff0c;也可以部署成为一个自有的QA知识库。项目主要使用了Go和Typescript来开发&#…

持续集成-Jenkins显示HTML报告

1 需要安装startup-trigger-plugin和Groovy插件。 2 在Job配置页面&#xff0c;构建触发器&#xff0c;勾选Build when job nodes start&#xff1b; 3 在Job配置页面&#xff0c;增加构建步骤Execute system Groovy script&#xff0c;在Groovy Command中输入上面命令&…

element ui el-table展示列表,结合分页+过滤功能

vueelement-ui实现的列表展示&#xff0c;列表分页&#xff0c;列表筛选功能 1&#xff0c;分页器 el-table模块下面是分页器代码 <el-pagination></el-pagination> <el-table></el-table> <!-- 分页器 --><div class"block" st…

【代码随想录04】24. 两两交换链表中的节点 19. 删除链表的倒数第 N 个结点 面试题 02.07. 链表相交 142. 环形链表 II

24. 两两交换链表中的节点 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 做题思路 可以设置虚拟头结点cur和画图…

erlang/OTP 平台(学习笔记)(四)

Erlang语言精要 Erlang shell 相较于日常惯用的系统&#xff0c;Erlang系统是一套更富交互性的环境。使用大部分编程语言时&#xff0c;要么把程序编译成OS可执行文件后运行&#xff0c;要么用解释器来执行一堆脚本文件或编译后的字节码文件。无论哪种情况&#xff0c;都是让…