当前位置: 首页 > news >正文

微调性能赶不上提示工程怎么办?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.dtcms.com/a/272602.html

相关文章:

  • Apache Shiro 框架详解
  • 【三维生成】FlashDreamer:基于扩散模型的单目图像到3D场景
  • Express 入门指南(超详细教程)
  • 机器学习之逻辑回归和k-means算法(六)
  • 32多串300A保护板测试仪:新能源电池安全的核心守护者
  • 生成式人工智能实战 | 自注意力生成对抗网络(Self-Attention Generative Adversarial Network, SAGAN)
  • 深入理解fork():系统调用创建进程的原理与实践
  • 项目部署:nginx的安装和配置
  • 利用Pandas进行条件替换与向前填充
  • Linux中的命令连接符
  • Layui —— select
  • 图解Java数据容器(三):Queue
  • CAS登录工作流程简述
  • 【前端】【Echarts】ECharts 词云图(WordCloud)教学详解
  • Prompt提示词的主要类型和核心原则
  • 在vscode中和obsidian中使用Mermaid
  • Spring AI Alibaba(2)——通过Graph实现工作流
  • Flutter 与 Android 的互通几种方式
  • Linux 中 sed 命令
  • RedisJSON 路径语法深度解析与实战
  • Spring Boot + Javacv-platform:解锁音视频处理的多元场景
  • 【TCP/IP】12. 文件传输协议
  • MySQL索引操作全指南:创建、查看、优化
  • Debian-10编译安装Mysql-5.7.44 笔记250706
  • macOS 上安装 Miniconda + Conda-Forge
  • Jekyll + Chirpy + GitHub Pages 搭建博客
  • 如何使用Java WebSocket API实现客户端和服务器端的通信?
  • 蓝桥杯第十六届(2025)真题深度解析:思路复盘与代码实战
  • MinerU将PDF转成md文件,并分拣图片
  • Alibaba Druid主要配置