第 3 章  ·  Context Learning

第3章 第7节 Context Learning


第3章 第7节 Context Learning

Tip

阅读指南

上一节,我带你看了“涌现能力”——当模型规模足够大时,会突然展现出从未被明确训练过的能力。但在所有涌现出来的能力中,有一个能力尤其特殊,特殊到它几乎改变了我们使用AI的方式。
这个能力叫做In-Context Learning(情境学习,或称上下文学习)。
简单来说:
不需要重新训练模型,只需要在提示词中给几个例子,模型就能学会一个新任务。
第一次听到这个能力时,可能会觉得:“这有什么特别的?”
但这是一个革命性的突破。一起来看看。

7.1 从一个具体的例子开始

情感分类任务示例

我用一个非常直观的例子,展示情境学习是什么。

任务:情感分类
假设要让ChatGPT判断电影评论是“正面”还是“负面”。

传统机器学习方法

  1. 收集数据

需要标注几千到几万条评论:

“这部电影太棒了!” → 正面
“浪费时间” → 负面
……

  1. 训练模型

用这些数据训练一个分类器。

时间:几小时到几天。
成本:数千到数万元。

  1. 部署使用

模型学会了这个任务。

情境学习

方法很简单——直接告诉ChatGPT:

输入:
“请判断以下电影评论的情感(正面/负面):

例子1:
评论:‘这部电影太棒了!’
情感:正面

例子2:
评论:‘浪费时间’
情感:负面

例子3:
评论:‘演员表演很自然’
情感:正面

现在请判断:
评论:‘剧情拖沓,让人昏昏欲睡’
情感:

ChatGPT的回答:
“负面”

只是给了3个例子,ChatGPT就“学会”了这个任务,不需要任何训练。

这就是情境学习。

7.2 什么是情境学习

核心定义

模型在推理时(不改变预训练参数的情况下),通过提示词中的示例,学会执行一个新任务的能力。

这个定义有几个关键点:

不改变参数

通过示例学习

不是通过明确的指令,而是通过几个具体的例子,让模型自己总结规律。

推理时学习

不是在训练阶段学习,而是在使用模型的时候实时学习。

7.3 情境学习的三种形式

研究者们发现,情境学习有三种主要形式,能力依次递增:

Tip

关于Shot这个词

在英语中,“shot”原意是“射击”、“尝试”。在机器学习领域,它被借用来指“示例”或“样本”。

这个词来源于体育比赛中的“射门”(shot)概念——就像篮球运动员投篮,每投一次算一次“shot”。在AI领域,每给一个示例,就算给模型一次“尝试的机会”。

零样本学习

不给任何例子,只给任务描述。

输入:
“请将以下句子翻译成英文:
今天天气真好”

ChatGPT:
“The weather is really nice today”

这是最直观的。为什么没有给样本也能给出答案?

因为在预训练阶段,模型已经见过无数翻译相关的文本:

"The weather is nice (天气很好)"
"How are you? (你好吗?)"
...

它在预训练中已经学会了中英文之间的对应关系。当收到“请翻译成英文”的指令时,模型能理解意图,并调用这个能力。

这就像Zero-Shot——不需要示例,只需要任务描述,就能激活模型预训练时学到的知识。

少样本学习

给几个例子(通常1-10个),然后执行新任务。

这是情境学习最经典的形式,也是最常用的。

输入:
“请识别以下编程语言:

print('Hello, World!') → Python

console.log('Hello, World!'); → JavaScript

System.out.println("Hello, World!"); → Java

现在请识别:
echo "Hello, World!" →

ChatGPT:
“PHP”

模型从这三个例子中学到了:

这些都没有明说,但模型从例子中"悟"出来了。

更好玩的例子:

输入:
"将以下句子改为更正式的表达:

原句:这东西挺好的
正式:此物品质量上乘

原句:他跑得飞快
正式:其奔跑速度极快

原句:这事儿太搞笑了
正式:"

ChatGPT:
"此事颇为滑稽"

模型学会了:

这些都是从3个例子中学到的。

单样本学习

顾名思义:只给一个例子。

这比Zero-Shot简单,但比Few-Shot困难——模型要从单个例子中推断出整个任务的模式。

输入:
“按照示例格式回答:

示例:
输入:苹果
输出:Apple

现在:
输入:香蕉
输出:

ChatGPT:
“Banana”

从一个例子中,模型推断出:

情境学习甚至能学习全新的、人工设计的任务。

输入:

“按照示例转换:

示例:
输入:cat
输出:tac

现在:
输入:dog
输出:

ChatGPT:

“god”

它学会了:反转字母顺序。这是一个完全人工的、训练数据中几乎不可能出现的任务,但模型从一个例子中学会了。

7.4 能力边界

依赖预训练知识

虽然情境学习很强大,但它也有明确的局限。

模型只能学习那些与预训练知识“相关”的任务。

可以学习的:

很难学习的:

示例数量有限

受限于上下文窗口长度。

GPT-3的上下文窗口:约4000个Token。

如果一个任务需要看100个例子才能学会,但100个例子超过了4000个Token,模型就学不了。

这限制了情境学习能处理的任务复杂度。

无法学习真正新的知识

情境学习学习的是"模式",不是"知识"。

比如,给几个"中文→拼音"的例子,模型能学会转换。但这只是应用已有的语音知识,不是真正学到了新东西。

如果告诉模型一个新发明的化学元素的性质,期待它能推理这个元素的其他性质,这是做不到的。模型没有真正"学习"这个新知识,只是记住了输入的内容。

性能通常不如微调

对于重要的、固定的任务,微调仍然更好。

情境学习:

监督微调:

如何选择

如果是临时任务、快速原型,用情境学习。 如果是核心业务、长期使用,值得微调。


7.5 下节预告

情境学习让模型能从几个例子中快速学会新任务。但在复杂任务上,可能会发现一个问题:

模型直接给出答案,但不展示推理过程;关键是这个答案往往还是错误的

就像学生做数学题,直接写答案而不展示解题步骤,容易出错。

下一节,我们将学习思维链(Chain-of-Thought)——一种让AI“一步步思考”的方法。这种方法可以让AI展示他的思考过程,同时提高准确率。

这是提示工程中性价比最高的技巧。


7.6 推荐阅读

Language Models are Few-Shot Learners (GPT-3论文, 2020)

OpenAI发布的GPT-3论文,首次系统地展示In-Context Learning的惊人能力。论文详细探讨了Zero-Shot、One-Shot和Few-Shot三种形式的效果,证明了大模型能够无需重新训练就学会新任务。

7.7 ■ 学点英语

中文 English 音标 说明
情境学习 In-Context Learning /ɪn ˈkɒntekst ˈlɜːnɪŋ/ 不更新参数、仅靠提示词示例让模型执行新任务的能力
零样本 Zero-Shot /ˈzɪərəʊ ʃɒt/ 不提供任何示例只给任务描述的情境学习形式
单样本 One-Shot /wʌn ʃɒt/ 只提供一个示例的情境学习形式
少样本 Few-Shot /fjuː ʃɒt/ 提供少量示例(通常 3-10 个)的情境学习形式
示例 Demonstration /ˌdemənˈstreɪʃn/ 在 Prompt 中放置的“问题-答案”样本
梯度更新 Gradient Update /ˈɡreɪdiənt ʌpˈdeɪt/ 通过反向传播调整模型参数的训练步骤
归纳 Induction /ɪnˈdʌkʃn/ 从具体示例推断一般模式的过程
提示词 Prompt /prɒmpt/ 输入给模型的文字指令与上下文

7.8 ■ 思考帧

涌现能力(三)-涌现的边界 Thought教AI思考
本节目录