跳到正文

Few-shot 推理为何有效?

从预训练目标看少样本推理的机制与表现提升

原题:大语言模型在few-shot推理模式下为何能够提升任务表现?其背后机制与模型预训练目标之间有何关联?

模型架构 · 字节真题

回答与解析

为什么few-shot可能有效

自回归预训练学习 p(next token | context)。把任务说明和若干输入—输出示例放进上下文后,示例会改变后续token的条件分布,帮助模型识别任务、输出格式、标签映射和相关模式。因此few-shot常能比零样本提供更多任务信息,但不是必然提升;示例质量、顺序、相似度、格式和上下文预算都会影响结果。

机制仍是开放问题

  • 任务识别/潜变量推断:从示例推断当前任务或生成过程。
  • 隐式学习算法:某些构造与模型中,Transformer前向计算可实现类似回归或梯度下降的更新规则。
  • 贝叶斯式推断:将上下文看作观测,对任务假设进行后验更新。

这些是相互竞争或互补的研究解释,不应把“预训练已经学会元学习”或“attention就是在更新参数”写成定论。推理时模型权重不变,变化的是上下文相关激活与输出分布。

与预训练和微调的关系

next-token目标让模型习惯利用前缀中的结构,但ICL能力还依赖模型规模、训练数据中任务序列的结构和训练分布。微调通过梯度把适应写进参数;ICL把示例保留在上下文中,切换快但受长度、顺序和推理成本限制。

错误标签有时仍可能保留格式或标签空间带来的部分收益,但错误映射通常会损害任务表现,不能概括成“标签无需正确”。评测应和zero-shot、正确示例、随机标签及相似度检索示例做对照。

口语版讲法(约4分钟)

  • 从next-token条件分布解释
  • 说明示例提供的四类信息
  • 介绍三种机制假说
  • 区分激活变化与参数更新
  • 给出正确标签和对照实验边界

few-shot有效的第一层解释,是它和自回归预训练的接口一致。语言模型训练的是给定前缀预测下一个token。推理时把任务说明、若干输入输出示例和新输入都放进前缀,模型就能利用这些额外条件,调整后续答案的概率分布。示例可能提供任务类别、输出格式、标签含义和输入到输出的映射,所以经常比只给一句指令信息更充分。

但我不会说few-shot一定提升。示例如果和查询无关、格式冲突、顺序造成偏置,或者占用太多上下文挤掉关键输入,效果都可能下降。模型规模、预训练数据中是否出现过类似任务结构、示例数量和检索策略也会影响结果。因此few-shot是一种上下文条件化方法,不是免费且稳定的增益。

背后机制目前仍是研究问题。任务识别假说认为,模型从示例中认出一个预训练阶段已经学过或接近的任务。隐式学习算法的工作发现,在某些受控构造和模型中,Transformer前向计算可以实现类似线性回归或梯度下降的更新规则。还有贝叶斯式解释,把任务看成潜变量,根据上下文示例更新对任务的后验判断。

这些解释可能在不同模型和任务里同时发挥作用,不能直接宣布某一个已经成为定论。尤其不能把attention权重随输入变化,等同为模型参数被更新。ICL推理期间,模型权重没有通过优化器改变;改变的是当前上下文产生的激活、注意力分配和最终条件分布。把它称为“类似学习”可以,但必须保留这个边界。

正确标签也很重要。有研究发现,即使标签随机,示例仍可能通过格式、输入分布或标签空间带来部分收益,但这不等于标签无需正确。若任务要求学习一个新的输入到标签映射,错误示例通常会误导模型。不同实验得到的结论依任务、模型和提示设置而变,不能推广成通用规律。

ICL和微调的区别也在这里。微调用梯度把变化写入参数,适合持久适应,但有训练成本和遗忘风险;ICL不改参数,切换任务快,却受上下文长度、每次重复输入示例的成本和顺序敏感性限制。二者也可以组合,例如先做指令微调,再用检索到的示例做上下文适应。

实际评测时,我会至少对比zero-shot、正确few-shot、随机标签、随机顺序和相似示例检索,并按类别和输入长度分桶。只有在独立测试集上稳定提升,才说明示例真的提供了任务信息,而不是某个模板或位置巧合。

关键一句:ICL中变化的是上下文激活与条件分布,而不是模型权重。

核验来源

  1. Language Models are Few-Shot Learners
  2. An Explanation of In-context Learning as Implicit Bayesian Inference
  3. Rethinking the Role of Demonstrations
  4. What Learning Algorithm Is In-Context Learning?

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个智能客服,用户给了几个例子说“帮我处理退款”,然后它就能自动识别后续的退款请求。你觉得为什么给几个例子模型就能学会?它内部是怎么做到的,跟它平时训练的那个“猜下一个词”的任务有什么关系?

  2. 问法 2 · 层层追问

    大模型做few-shot为什么效果还不错?……你觉得它真的在学新任务,还是激活了旧知识?……那它预训练时候的next token prediction任务,跟这个能力有没有什么内在联系?

  3. 问法 3 · 直球架构

    从机制上解释大语言模型few-shot推理能力提升的原因,重点分析其与预训练目标(next token prediction)之间的关联,以及当前主流的理论假说(如任务识别、隐式梯度下降、贝叶斯推断)中你倾向哪一个,为什么?

同模块相关题目