小样本学习(Few-Shot Learning) 旨在让模型在只看到少量标注样本的情况下学习新概念。上下文学习(In-Context Learning,ICL) 是大语言模型时代特有的小样本学习方式,通过在prompt中提供少量示例让模型学习任务,不需要微调参数。
| 方法 | 定义 | 适用场景 |
|---|---|---|
| Zero-shot | 不提供任何示例,直接让模型完成任务 | 模型已经具备相关能力,任务简单明确 |
| One-shot | 只提供一个示例 | 任务相对简单,示例就能说明怎么做 |
| Few-shot | 提供几个(通常2-10个)示例 | 需要更多引导的复杂任务 |
Zero-shot 不给模型任何示例,直接描述任务提问,依赖模型本身的泛化能力。
例子:
翻译下面这句话到法语:
我喜欢机器学习。Few-shot 在提问前提供几个输入输出示例,让模型学习任务格式和做法,然后解决新问题。
示例格式通常是:
Q: [问题1]
A: [答案1]
Q: [问题2]
A: [答案2]
Q: [新问题]
A:最佳实践:不同问答之间换行,用Q/A标记区分问题和答案,清晰易读。
定义:在问题末尾附加"Let's think step by step",引导模型自动生成思维链分步推理。
使用方法:
优点:不需要标注任何示例,使用极其简单,就能提升推理能力
缺点:效果通常不如Few-shot-CoT
例子:
我去市场买了10个苹果。给了邻居2个,给了修理工2个,然后又买了5个,吃了1个。我还剩几个苹果?
Let's think step by step.定义:在few-shot示例中不仅给出问题和答案,还给出完整的中间推理步骤,让模型学习分步推理。
核心思想:通过示例教模型推理方法,而不仅仅是输入输出映射。模型能学到如何推导,而不只是记住答案。
使用要点:示例中必须包含完整推理过程,不能只给问题答案。
优缺点:
也叫Minimum to Maximum(最少到最多)策略,适用于特别复杂的问题。
两个阶段:
优点:让模型逐步解决复杂问题,难度逐步增加,比直接给整个问题更容易解决。
对同一个问题采样多个不同的推理路径,然后投票选出最一致的答案。不改变提示策略,只是后处理提升效果。
上下文学习(In-Context Learning,ICL)是指大语言模型通过prompt中的示例学习任务,不需要更新模型参数,只利用模型本身的知识就能泛化到新任务。
这是大语言模型一种神奇的涌现能力:只在上下文中看到几个示例,就能学会做这个任务。
目前有几种解释:
隐式权重推理说:大模型在预训练过程中学习到了任务的分布,上下文示例引导模型激活对应的参数完成任务,相当于在模型权重中做"隐式梯度下降"找到对应解。
分布匹配说:模型学习到了文本的联合概率分布,上下文示例建立了任务的分布,模型按照这个分布生成输出。
类比推理说:模型通过类比上下文的示例,将输入输出对应关系类比到新问题上。
| 对比项 | In-Context Learning | 微调 |
|---|---|---|
| 参数更新 | 不更新参数 | 更新参数 |
| 数据需求 | 几个示例 | 更多数据 |
| 成本 | 低,不需要训练 | 高,需要训练 |
| 模型规模 | 需要大模型 | 小模型也能用 |
| 遗忘问题 | 不会遗忘旧任务 | 有灾难性遗忘风险 |
上下文学习的效果对示例选择非常敏感,选不好示例效果会很差。
最简单的方法:从候选示例中随机选几个放到prompt中。但效果不稳定,方差大。
选择和测试问题最相似的示例放到prompt中。通常用句子嵌入的余弦相似度找相似样本。
优点:相似示例更有参考价值,效果通常比随机好。
对每个测试问题,用k近邻找k个最相似的标注样本作为示例。
不仅选相似的,还要保证示例多样性,覆盖不同情况,避免选一堆相似的示例。
示例的排列顺序会影响ICL效果,不同排序得到不同准确率,有时候差异很大。
上下文窗口大小决定了你能放多少示例,这是ICL的一个瓶颈。
选择最有信息量的少数示例:不要放太多示例,通常4-8个示例效果就很好了,更多示例不一定更好。
检索选择示例:只选和当前问题最相关的几个示例,不是放所有训练样本。
示例压缩:对示例进行压缩,保留关键信息,去掉冗余。
分级提示:先选最相关的示例,不够再加,减少平均长度。
分层ICL:先检索候选,再 rerank,最后选top-k放入上下文。
chunk级ICL:将长文档分块,只处理相关块。
**什么是In-Context Learning(上下文学习)?和微调有什么区别? 上下文学习是大语言模型的一种能力,通过在prompt中提供几个任务示例,让模型不更新参数就能学会新任务。区别:ICL不更新参数,只需要少量示例,成本低,但是需要大模型;微调更新参数,需要更多数据,成本高,但小模型也能用,效果通常更好。
**Zero-shot、One-shot、Few-shot的区别是什么?
**什么是Zero-shot-CoT?它的优势是什么? Zero-shot-CoT只需要在问题末尾加上"Let's think step by step",不需要任何标注好的推理示例,就能引导模型生成思维链,提升推理能力。优势:使用极其简单,不需要标注成本,就能取得不错的效果。
**Few-shot-CoT和标准Few-shot有什么区别? 标准Few-shot只在示例中给出问题和答案,Few-shot-CoT在示例中同时给出问题、完整推理步骤、答案,让模型学习推理过程而不仅仅是输入输出映射,在推理任务上准确率高很多。
**为什么示例排序会影响In-Context Learning的效果? 模型对不同位置的tokens注意力不同,存在近因效应,最近的示例影响更大。不同排序会导致模型关注不同示例,从而影响输出结果,准确率可能波动几个百分点。
**In-Context Learning中怎么选择示例? 常用方法:
**上下文窗口不够放太多示例怎么办? 应对方法:
**什么是Minimum-to-Maximum(LtM)策略? LtM也叫Few-shot-LtM,是一种处理复杂问题的策略:先把复杂问题分解成若干简单子问题,然后按照难度从小到大依次解决,前一个的输出作为后一个的输入,逐步得到最终答案。让模型逐步适应,比直接解决整个复杂问题更容易。
**小样本学习为什么难? 少量样本很难覆盖任务的全部分布,模型容易过拟合到这几个样本,泛化到新样本差。In-Context Learning利用大模型预训练学到的知识,只需要很少示例就能泛化,解决了这个问题。
**Self-Consistency怎么提升效果? Self-Consistency对同一个问题多次采样得到不同的推理路径和答案,然后投票选出最频繁的答案。利用多个推理结果的一致性提升准确率,不需要改提示也不需要训练,只需要多次采样,简单有效。
**In-Context Learning真的是学习吗?还是只是类比? 目前研究还没有定论。一方面,模型确实能在上下文中学到新的输入输出映射,某种意义上是学习;另一方面,更像是模型根据示例的模式,类比生成对应输出,利用预训练中已经学到的知识,不是权重更新那种学习。
**大模型的In-Context Learning能力是怎么来的? 这是一种涌现能力,只有模型规模达到一定程度才会出现。预训练过程中,模型学习到了大量语言模式和知识,以及任务结构,在上下文中给出示例后,模型能匹配对应模式,生成正确输出。