Skip to content

上下文学习机制论文解读

上下文学习(In-Context Learning, ICL)是大语言模型最令人惊讶的能力之一——无需参数更新,仅通过在输入中提供示例就能学习新任务。本文梳理 ICL 的理论解释和实证研究进展。

上下文学习机制

ICL 的发现

GPT-3 首次展示了大规模语言模型的上下文学习能力:

  • 零样本:直接给出任务描述
  • 单样本:提供一个示例
  • 少样本:提供 2-64 个示例

仅通过在提示中加入示例,模型就能显著提升任务性能,无需梯度更新。

理论解释

隐式梯度下降

Akyürek et al. (2022) 提出 Transformers 可以在前向传播中实现隐式的梯度下降:

python
# ICL 作为隐式梯度下降的概念性说明
def icl_as_gradient_descent(pretrained_model, demonstrations, query):
    """
    ICL 可以被视为在预训练模型的参数空间中
    进行一步隐式梯度更新
    """
    # 预训练模型的注意力机制实现了:
    # 1. 从 demonstrations 中提取模式(类似于计算梯度)
    # 2. 将模式应用到 query(类似于参数更新)

    # 等价于:
    # theta_new = theta_pretrained + lr * gradient(demonstrations)
    # output = model(query, theta_new)

    # 实际上这一切在前向传播中完成
    return pretrained_model(demonstrations + query)

线性注意力视角

Von Oswald et al. (2023) 证明了在简化假设下,线性自注意力层执行的 ICL 等价于线性回归的最小二乘解:

$$W_{ICL} = X_{demo}^T (X_{demo} X_{demo}^T + \lambda I)^{-1} Y_{demo}$$

任务识别 vs 任务学习

两种竞争假说:

  • 任务识别:预训练时已见过类似任务,ICL 仅帮助识别任务类型
  • 任务学习:模型从示例中学习新函数映射,超越预训练分布

实验证据

Raventos et al. (2023) 的实验表明,ICL 同时包含任务识别和任务学习两种机制。对于预训练中常见的任务,主要是任务识别;对于新颖任务,任务学习的成分更大。

影响 ICL 性能的因素

示例选择

  • 相关性:与查询相似的示例更有效
  • 多样性:覆盖任务的不同方面
  • 格式一致性:示例格式与查询格式一致

示例顺序

即使示例内容相同,不同顺序的 ICL 性能差异可达 10%+:

python
import random

def order_sensitive_icl(model, examples, query, num_trials=10):
    """ICL 性能对示例顺序敏感"""
    results = []
    for _ in range(num_trials):
        shuffled = random.sample(examples, len(examples))
        # 不同顺序可能导致显著不同的结果
        output = model.generate(shuffled + [query])
        results.append(output)
    # 方差反映了顺序敏感度
    return results

模型规模

ICL 能力随模型规模增长:

  • 小模型(<1B):ICL 能力有限
  • 中等模型(7B-13B):基本的少样本学习能力
  • 大模型(70B+):强大的 ICL 能力,可学习复杂模式

ICL 的局限

  • 上下文窗口限制:示例占用上下文空间
  • 顺序敏感性:结果不稳定
  • 长程依赖:远离查询的示例影响较小
  • 负迁移:错误示例可能误导模型

相关资源

最近更新