微调性能赶不上提示工程怎么办?Can Gradient Descent Simulate Prompting?——论文阅读笔记

今天速读一篇文章
Can Gradient Descent Simulate Prompting?

一句话总结

针对【新知识应用的场景里,FT效果往往追不上ICL】这个情况,作者引入MAML的思想↓
内圈让模型学习新知识形成知识FT模型;
外圈通过最小化ICL和知识FT模型的KL散度,来引导模型逼近ICL的效果。

※ 备注1:ICL这里单指把知识召回到上下文当中,不考虑有没有few-shot Example。
※ 备注2:作者把这个方法叫learn by condition, LC,实验中会用到这个称呼。
※ 备注2【新知识应用的场景里,FT效果往往追不上ICL】这个情况举个常见的例子,如果RAG的知识索引和知识切片做的好,本地知识的回答正确率往往比在这些知识库上Train过的模型高。

多说一句【新知识应用的场景里,为什么还要用FT?】

我选这篇读确实是因为这个Setting有现实意义。
比如,在让模型KnowHow的场景下,模型要学习大量的“在什么场景下应该作什么,应该怎么做”这样的知识。如果这些知识的总量比较有限(场景比较静态),那ICL就能做的很好。但如果场景非常非常多(你就想想自己看小红书炒菜会出多少种跟图文攻略不一样的情况,就能体会了),把所有这些知识都塞到上下文里就不如训练更经济了。
而且一些场景中(比如引导型对话),又很难把“场景”的索引建起来以便RAG——因为场景描述本身就是个非结构化知识描述,表征、文本分析法其实都比较难准确建立索引。

想通过训练解决问题,但仅靠背诵一遍 【操作手册】(formalize 在什么场景下应该作什么,应该怎么做的文档),模型的执行性能是远远做不到和ICL相比的。

而且在实际工程开发中,其实存在两个阶段:
阶段一是用提示工程和Agent体系来支持80%的场景,这个时候会积累一些非常精品的知识。
阶段二是想办法把剩下20%的场景也支持起来,这个时候ICL其实受限于场景的膨胀和模型的理解效率,已经无法维继,必须转向其他方案,而转向其他方案时,如果不继续利用前面开发的提示工程和Agent生产的数据,前面的开发成本又白花了。
所以能够弥合这两个阶段的方案,其实非常适合实际场景应用。

整体步骤

  1. 内圈优化(Inner Loop)
    假装微调:给模型θ\thetaθ看一条新知识ccc(如“Bob works at Best Buy”),让它用一次梯度下降更新自己的参数,得到θ′\theta'θ

  2. 外圈优化(Outer Loop)
    训练模型的“学习能力”

    • 拿BASE模型θ\thetaθ 和新知识 ccc 去回答问题 qqq(如“Does Bob work at an electronics store?”)得到答案 aaa
    • 拿内圈“假装微调”后的模型θ′\theta'θ,计算这个目标↓

这个目标就是BASE模型 θ\thetaθ 给定新知识 ccc ,问题 qqq 的情况下生成答案 a^\hat{a}a^ 的概率和假装微调模型 θ′\theta'θ,给定问题qqq,“生成” a^\hat{a}a^ 的概率的KL。(不是真生成,只是算logits)

  • 调整:根据这个KL,用梯度下降更新模型的初始参数θ\thetaθ

但以上理念性方案之外,作者对训练的描述非常缺乏细节。除了,使用了LORA,超参 lr=1E-3和训了1个epoch以外,其他的细节就没啥了(比如,作者说对梯度进行了clip,那你clip的参数是多少呢?再比如,训练的时候,学习知识的单步gradient怎么放训练图上?再比如,通过后面实验可以看到,作者主实验里的的内圈是每次一个知识的,但是外圈的batch_size是16个, 这是不是得固定好对应篇章的问题?种种,心累)

效果怎么样

一定程度逼近了ICL,但差距还比较明显

这个图上横轴对应的是训练配置,柱子的颜色对应的是测试配置,横轴上,BM是BASE Model,LC是作者的方法,LG是把BASE模型通过ICL生成的答案a^\hat{a}a^ 换成ground truth aaa,其他没变。
注意图上的字,中文是我写的,主实验你放张表怎么啦,能画得这么不清楚,作者真的是……需要调整 _(¦3」∠)_

效果上看,BASE模型+ICL在SQuAD上能达到87%(caption里写是Accuracy……),BASE模型+纯FT(就是普通的拿训练集Finetune)就只能达到47.3%。而作者的方法LC(橙色柱子中间LC对应的哪个柱子)能达到58.6%,简单说还是有所逼近但不够看

内外圈的配置很关键,但作者没说清楚

你就说,实验配置有没有必要写到caption里去吧……

这个实验表,其实就是比是不是用LORA就够了。如果说纯BASE模型+ICL是天花板的话:↓

※一个结果是:内外圈都用全参数微调外圈用了Rank=1的LORA(内圈还是全参数微调)的结果差不多,因为内圈实际上只参与外圈模型更新的gradient计算,但不参与更新,所以其实意思是这些知识和问题回答只要Rank=1就够了?(我其实希望作者能展示更多实验数据集上的结果)

※ 另一个结果是,内圈用随机初始的LORA来更新,和内圈用训练过的LORA来更新,后者效果好巨多。注意这里没说Rank,正文里也没有明说Inner的Rank是不是等于1(虽然按作者的实验节奏是有可能是1 的,毕竟你这个LORA adapter从哪儿来的嘛),吊诡的是表的这一列(最后一列)上效果Gap最大,SQuAD 上能打到72% 但wiki只能达到38,即和Full差不多。而wiki 数据上的question其实是作者楞构造的,就是把一句话随机楞拆成 三部分,比如 ↓

这样其实真的挺楞的。无非打磨是续写能力,跟背诵原知识差距不大。
这个SQuAD和wiki的Gap,往好了解释,可以说是我参考的一篇论文观点的印证 Instruction-tuned Language Models are Better Knowledge Learners 即 先训QA后训QA+Document对模型回答问题的能力有帮助。

往不好了解释:这个Inner拿来的Adapter训练得多深啊,不是上一个epoch训完,已经见过一遍知识和QA的adapter吧?那训练epoch数就不一样了啊,算不算过拟合呢?

可能是难知识编辑的一种方案


上表中的表头被我改了,当前arxiv版本中的表头根本看不出是写啥(作者你快改吧,加油干💪🏻)简单来说,就是↓
※ 其一、作者发现有些Case(表的第一行)在普通FT前后,模型都答不对问题。在作者推荐的LC方法的内圈(我猜的)跑完之后,也是回答不正确的,但是LC外圈跑完之后就能回答对了。

※ 其二、有些Case就是普通FT训练前后都回答不正确,但LC内圈跑完已经能回答了。
这里其实我有个疑问,普通FT的lr是多少啊,LC1e-3的lr模型其实啥都背的下来了,就只是对这个Q敏感不敏感的问题。

评价与感想

  1. 作者这篇工作特别像是把第0.5稿给丢到arxiv上了。实验的setting,结果的描述等等都非常欠整理,代码也没有放,导致很多细节无法确定,应该后面会有更好的版本放出来的,对吧ヾ(◍°∇°◍)ノ゙。
  2. 刨去论文写作没完工带来的问题,这篇的setting和思路我都非常喜欢。前面说过了场景的价值,这里说思路。在LLM的学习过程中引入MAML的尝试其实不止这篇论文一个,但是着眼于新知识学习的工作,我最近好像只看到这一个。而且就作者现在的setting而言,也应该可以扩展到Reasoning(虽然看ICLR25也有一个引入MAML做推理的,但是着眼点不太一样,不在这里比较了)。
  3. 论文的机制分析非常非常不够。就之前对Induction Head的研究而言,一些工作会认定模型的ICL能力和知识记忆能力来自于Transformer不同的Head。比如Cutting Off the Head Ends the Conflict: A Mechanism for Interpreting and Mitigating Knowledge Conflicts in Language Models 这篇文章提到模型上下文理解的头和知识记忆的头分别在不同的层,而且这两者的作用强弱会影响“知识冲突”这一现象。

而今天我们讨论的这篇文章的作者可以说是【把ICL头当做Teacher,把记忆头当做Student,做模型内的知识蒸馏】,那训练完了之后,这些头有什么变化?
另外,作者在LC方法能独占优化的Case上也没有分析,到底在外圈模型的什么变了导致模型能答对问题了?这些都需要解释。
不过,往好处说,至少还可以再出两篇续作,一篇讲机制,一篇讲训练加速,是不是?

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

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

相关文章

从“直觉抢答”到“深度思考”:大模型的“慢思考”革命,思维链、树、图如何让AI越来越像人?

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 GPT多模态大模型与AI Agent智能体书籍本章配套视频课程【陈敬雷】 文…

Android系统的问题分析笔记 - Android上的调试方式 debuggerd

debuggerd 是 Android 系统中的一个重要调试工具,主要用于生成进程崩溃时的核心转储(core dump)和调试信息(如堆栈跟踪)。以下是关于 debuggerd 的详细说明: 1. 基本功能 崩溃分析:当 Native 进…

python 双下划线开头函数

在 Python 里,双下划线开头的函数(准确地说是方法)有着特殊的用途和意义。下面为你详细介绍相关内容: 1. 类的特殊方法(魔术方法) 以双下划线开头和结尾的方法,被称为特殊方法或者魔术方法&…

VyOS起步指南:用Docker快速搭建网络实验环境

文章目录1. VyOS是什么?为什么选择它?2. 五分钟快速部署:Docker方案3. 进入容器:初探VyOS世界4. 核心操作:像开发者一样思考5. 踩坑提醒:新手常见问题6. 结语:网络即代码的未来1. VyOS是什么&am…

动态规划理论基础,LeetCode 509. 斐波那契数 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯

动态规划理论基础动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心&#xff…

暑期自学嵌入式——Day02(C语言阶段)

点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页: 一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm1000.2115.3001.5343 目录 Day02→数据类型&#xf…

如何单独安装设置包域名

前言 在 npm 中,直接通过 package-lock.json 无法单独设置包的安装地址,因为该文件是自动生成的依赖关系锁定文件。但你可以通过以下方法间接实现: 一、在 package.json 中指定包来源(推荐) 在 package.json 的 depend…

存储过程探秘:数据库编程的艺术

文章目录存储过程语法格式BEGIN...END语句块DECLARE(声明局部变量)流控制语句if函数批处理操作测试2测试3存储过程与函数的关系存储过程 MYSQL的存储过程是一组预处理的SQL语句,可以像函数一样在数据库中进行存储和调用。 它们允许在数据库…

非阻塞写入核心:asyncio.StreamWriter 的流量控制与数据推送之道

在 asyncio 的异步编程框架中,如果说 asyncio.StreamReader 是你异步应用的数据输入管道,那么 asyncio.StreamWriter 就是你异步应用的数据输出管道。它是一个至关重要的组件,让你能够方便、高效且非阻塞地向连接的另一端(如 TCP …

控制台打开mysql服务报错解决办法

控制台打开mysql服务报错解决办法这个MySQL错误表示访问被拒绝,通常是因为没有提供正确的用户名和密码。以下是几种解决方法: 方法1:指定用户名和密码连接 mysql -u root -p然后输入root用户的密码。 方法2:如果忘记了root密码&am…

Unsloth 实战:DeepSeek-R1 模型高效微调指南(下篇)

食用指南 本系列因篇幅原因拆分为上下两篇: 上篇以基础环境搭建为主,介绍了 Unsloth 框架、基座模型下载、导入基座模型、数据集下载/加载/清洗、SwanLab 平台账号注册。 下篇(本文)以实战微调为主,介绍预训练、全量…

Ubuntu安装Jenkins

Ubuntu安装Jenkins方法1:使用官方的Jenkins仓库1. 添加Jenkins仓库2. 更新软件包列表3. 安装Jenkins4. 启动Jenkins服务5. 设置Jenkins开机启动6. 查找初始管理员密码7. 访问Jenkins方法2:使用Snap包(适用于较新的Ubuntu版本)1. 安…

ubuntu22.04下配置qt5.15.17开发环境

自从qt5.15版本开始,不再提供免费的离线安装包,只能通过源码自行编译。刚好最近需要在ubuntu22.04下配置qt开发环境,于是写篇文章记录配置的过程。 其实一开始是想配置qt5.15.2的,但是在编译配置参数这一步骤中出现如下报错 em…

S7-1200 与 S7-300 CPS7-400 CP UDP 通信 Step7 项目编程

S7-1200 CPU 与S7-300 CP STEP7 UDP通信S7-1200 与 S7-300 CP 之间的以太网通信可以通过 UDP 协议来实现,使用的通信指令是在S7-1200 CPU 侧调用通信-开放式用户通信TSEND_C,TRCV_C指令或TCON,TDISCON,TUSEND,TURCV 指…

基于YOLOv11的无人机目标检测实战(Windows环境)

1. 环境搭建 1.1 硬件与操作系统 操作系统:Windows 11 CPU:Intel i7-9700 GPU:NVIDIA RTX 2080(8GB显存) 1.2 安装CUDA和cuDNN 由于YOLOv11依赖PyTorch的GPU加速,需要安装CUDA和cuDNN: 安…

Spring Cloud分布式配置中心:架构设计与技术实践

从单体到微服务:Spring Cloud 开篇与微服务设计 Spring Cloud服务注册与发现:架构设计与技术实践深度分析 在以往分享中,码友们已经掌握了微服务的设计和注册中心的设计,部分聪明的码友已经察觉了,已经到了需要设计一个…

15.2 Common Criteria合规

目录1. Common Criteria简介1.1 CC评估要素1.2 CC与TF-A的关系2. TF-A的CC合规要求2.1 安全功能需求2.2 开发过程要求3. TF-A的CC合规实现3.1 关键安全机制3.2 开发流程控制4. CC认证实践指南4.1 认证准备步骤4.2 典型挑战与解决方案4.3 已认证案例参考5. 持续合规建议1. Commo…

【前端:Typst】--let关键字的用法

在 Typst 中,#let 命令是用于定义变量和函数的核心指令,其用法非常灵活。以下是详细的用法说明和示例。 目录 1.基础变量定义 2.函数定义 3.默认参数 4.内容块参数(Content Blocks) 5.递归函数 1.基础变量定义 // 定义简单…

Qt轮廓分析设计+算法+避坑

轮廓分析拟合方面我现在只考虑矩形拟合和圆形拟合细分的话,椭圆拟合,矩形拟合,最小外接矩形,最小外接圆。对于一张图像可能有不同的图形,不同的圆,不同的矩形,我需要对其进行筛选,也…

C++中STL六大组件List的简单介绍

一、前言C非常重视效率&#xff0c;对效率有损失的代码常常是能省则省。使用list要包含的头文件是<list>&#xff0c;要包含头文件就是#iinclude <list>&#xff0c;List肯定是一种链表&#xff0c;我们不妨回忆一下那种链表插入删除效率最快也就是最简单&#xff…