🚀 内容概要
本课程详细介绍了大型语言模型 (LLM)(如 ChatGPT 和 Gemini)的标准三阶段学习流程。我们将依次探讨预训练 (Pre-training)、监督微调 (SFT) 和基于人类反馈的强化学习 (RLHF) 这三个阶段。课程内容不仅包括每个阶段的技术目标和数据来源,还会通过生动的类比(如“学龄前、上学、进入社会”)来解释它们之间的差异与联系,并深入分析为何模型需要经历这套复杂的流程才能成为有用的人工智能助手。
🧭 目录
-
阶段二:监督微调 (SFT)——学会如何“回答”
🧠 大型语言模型学习的三大阶段
今天课程的核心是关于大型语言模型 (LLM) 的学习过程。我们将探讨那些您日常使用的人工智能工具,如 ChatGPT 和 Gemini,是如何构建的。
大型语言模型的学习过程是一个标准的三阶段流程:
-
预训练 (Pre-training)
-
监督微调 (Supervised Fine Tuning, SFT)
-
基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF)
本课程将按顺序介绍这三个阶段。在课程结束后,教学助理会布置作业,涉及实现第二和第三阶段(SFT 和 RLHF),让大家能亲身体验用小规模数据构建大型语言模型,并观察最终结果。
SFT 与 RLHF:模型的“对齐”
第一阶段的预训练是整个训练过程的起点,它让语言模型熟悉人类语言及其表现形式。
第二阶段是监督微调 (SFT),第三阶段是 RLHF。在这两个阶段,模型不仅要熟悉人类语言,更要学习如何成为一个“有用的人工智能” (Helpful AI)。它需要学会如何正确应对用户的请求,并以符合人类价值观的方式作出反应。这个过程被称为对齐 (Alignment)。
在文献中,很多人将“对齐”特指第三阶段 (RLHF)。但从“对齐”的本意——即让机器与人类需求保持一致——来看,第二和第三阶段都在做对齐的工作。因此,在本课程中,我们将 SFT 和 RLHF 均视为对齐的一部分。
三阶段的类比:从学前到社会
如果用一个类比来形容这三个阶段:
-
第一阶段(预训练):像一个学龄前儿童。它每天玩耍,学习它所看到的一切,但并不知道所学的是否有用。
-
第二阶段(SFT):好比开始上学。老师会提供教科书和标准答案,告诉它什么是对的。模型在此阶段学习教师(人类标注者)提供的标准答案。
-
第三阶段(RLHF):如同进入社会。没有老师再提供标准答案,它将面临社会的现实反馈。人们会告诉它哪里做得不对(反馈),但不会告诉它标准答案。它必须自己摸索学习。
SFT 和 RLHF 的核心区别在于:SFT 阶段,人类提供标准答案,机器据此学习;RLHF 阶段,没有标准答案,人类只提供反馈(如点赞或点踩),机器基于反馈学习。
万变不离其宗:词链学习
尽管学习过程分为三个阶段,但这三个阶段在本质上并没有不同——它们学习的都是“词链” (Word Chain),即词语接龙。
在上一课中,我们讨论过“词语接龙”本质上是一个分类问题。如果你知道如何做分类问题,你就知道如何教机器进行词序列生成。
-
图像分类:输入一张图片,模型输出一个概率分布,对应各个类别(如猫、狗)。我们的正确答案也是一个概率分布(例如“狗”的概率为 1,其余为 0)。我们通过计算模型输出与正确答案(如使用交叉熵)之间的距离,并最小化这个距离来训练模型。
-
词语接龙:这本质上是相同的。唯一的区别是,类别不再是图像类别,而是词汇表 (Vocabulary) 中的每一个标记 (Token)。
例如,我们给机器一个不完整的句子:“台湾最高为 34”,标准答案是“玉”字。语言模型会阅读这个句子,并输出一个概率分布。在这个分布中,每个标记都是一个类别。正确答案“玉”的概率被设为 1,其余标记为 0。
在图像分类中,类别可能有 1000 个;但在词语接龙中,类别数量就是词汇表的大小,这可能多达数十万个。这是一个拥有数十万类别的分类问题。
除此之外,学习过程完全相同:我们仍然计算模型输出与正确答案之间的交叉熵,并使用梯度下降来调整参数,以最小化交叉熵。
三阶段的联系:初始化与数据
这三个阶段之间有什么关系?在每个阶段,我们都使用前一阶段训练得到的参数作为当前阶段的初始化 (Initialization) 参数。
我们在上周讨论过初始化:在执行梯度下降时,需要选择一个初始位置,这个位置对结果影响显著。一种强大的初始化方法是使用预训练任务 (Pre-training Task)。我们先让机器执行一个相关但数据更容易收集的任务(预训练任务),然后将在该任务上学到的参数,用作我们真正关心的下游任务 (Downstream Task) 的初始化参数。
LLM 的三个阶段正是这样环环相扣的:
-
第一阶段(预训练)的参数,是第二阶段(SFT)的初始化。
-
第二阶段(SFT)的参数,是第三阶段(RLHF)的初始化。
三阶段改变了什么?
从机器学习的三步骤(定义数据、定义模型架构、定义优化方法)来看,这三个阶段真正改变的是第一步:数据(训练材料)。
这三个阶段的划分与第二步(模型架构)和第三步(优化方法)关系不大。例如,三个阶段都使用相同的 Transformer 架构,因为如果架构不同,就无法使用前一阶段的参数作为初始化。优化器(如梯度下降)在本质上也是一致的。
🏞️ 阶段一:预训练 (Pre-training)——奠定知识基础
接下来,我们详细介绍第一阶段:预训练,即机器的“学前教育”。
要让机器学会词语接龙,需要海量的数据。为什么?因为词语接龙从不是一件简单的事。机器必须至少具备两个领域的知识:语言知识和世界知识。
-
语言知识 (Language Knowledge): 这指的是语法和常规表达。例如,机器需要知道“A dog can...”后面可以接“run”或“fly”(虽然“fly”很少见但语法上可行),但不能接“strange”(语法错误)。 语言知识相对容易学习。根据早期的研究,当训练数据量达到约 10 亿个词时,机器的语言知识就几乎达到了上限,不太会犯语法错误。
-
世界知识 (World Knowledge): 这更难学习。例如,对于“水的沸点是多少摄氏度?”这句话,机器需要知道后面接“100”是正确的,而“50”是错误的。 有人可能会说,模型只能读取文本,无法真正“体验”世界。我同意这一点。但这里的“世界知识”指的是那些可以通过文本来理解的知识。 世界知识几乎是无穷无尽的。即使在 2020 年的实验中使用了 300 亿个词,机器仍无法学全。例如,“在低压下,水的沸点是多少?”答案就不是 100 摄氏度了。
数据来源:自监督学习
要让机器掌握如此庞大的知识,我们去哪里找到这么多数据呢?
在预训练阶段,我们可以使用任何文本数据。一种常见的方法是直接从互联网上抓取所有可用的内容(如网页、书籍、代码)。每一句话、每一行文本都成为学习材料。
例如,如果我们抓取到一句话:“人工智能确实令人惊叹 (Artificial intelligence is indeed amazing)”。机器的学习材料就变成了:
-
看到 "Artificial" 后面可以接 "intelligence"。
-
看到 "Artificial intelligence" 后面可以接 "is"。
-
...
在预训练阶段,收集数据的成本很低,人类干预极少。因此,第一阶段也被称为自监督学习 (Self-supervised Learning)——机器自己监督自己学习。
数据的规模:15T (万亿) 标记有多大?
由于数据易得,第一阶段的训练数据量是无限的。现代大型语言模型(如 Llama 3)在预训练中使用了高达 15T (15 万亿) 个标记 (Tokens)。
15T 是什么概念?
-
假设一张 A4 纸包含 1000 个标记。
-
假设 100 张 A4 纸厚度为 1 厘米。
-
将 15T 标记打印出来并堆叠起来,厚度约为 1500 公里。
这是什么概念?
-
珠穆朗玛峰:约 9 公里高。
-
国际空间站(ISS)轨道高度:约 400 公里。
-
福尔摩萨卫星三号(低轨道卫星):约 700 公里。
这堆纸的高度是珠峰的几十倍,远超商用飞机航线,甚至超过了许多低轨道卫星的高度,直通外太空。
如果一个人(不吃不喝不睡,每 10 秒读完一页 A4)来阅读这些资料,需要多长时间?答案是 4756 年。这意味着,从中国商代(约公元前 1600 年)开始阅读,读到 2025 年也读不完。
难怪人类很难在知识储备上与这些大型语言模型匹敌。
数据瓶颈与模型的“记忆”
你可能会想,去哪里找 15T 的数据?现在这毫不费力。Hugging Face 发布的 FineWeb 数据集就包含约 15T 标记,免费可用(需要约 44TB 存储空间)。
不过,在 2022 年底就有论文警告,按照 LLM 训练数据量的增长速度(几乎每年翻十倍),我们可能在 2028 年左右耗尽互联网上所有可用于训练的高质量数据。
预训练模型不是死记硬背
很多人误以为 LLM 既然阅读了所有网络数据,就应该能完美记住一切。事实并非如此。
例 1:背诵《孔乙己》 当我们让 GPT-5.1 续写“孔乙己一到店,所有喝酒的人便都看着他笑”时,它生成的后续内容(如“知乎者也”)看似准确,但与原文对比,会发现它省略了“排出九文大钱”、“温两碗酒”等关键情节,并且某些引言(如“君子固穷”)也与原文不符。
例 2:背诵《射雕英雄传》 当让它背诵《射雕英雄传》第一章时,它能正确说出第一章标题“风雪惊变”,但接下来的内容(如华山论剑、九阴真经、郭啸天杨铁心)虽然情节基本正确,却完全不是小说的原文。
这说明,模型在预训练时学的不是“死记硬背”,而是“词语接龙”。它更像是一个读过这些文章并留有模糊印象的人,将知识压缩进了它的参数中。当它“解压缩”这些知识时,自然会产生一些失真和遗漏。它只是学会了看到“射雕英雄传”时,应该接上“华山论剑”、“郭啸天”等高度相关的词汇。
⚖️ 预训练的挑战:算力、数据量与质量
在预训练中,并非数据越多越好,我们还必须考虑其他因素,尤其是算力 (Compute) 的限制。
算力、模型大小与数据量的权衡
假设计算资源有限,你就面临一个权衡:
-
大模型 + 小数据:模型天赋异禀(参数多,搜索空间大),但学习材料不足(容易“学而不思则罔”)。
-
小模型 + 大数据:模型很勤奋(数据多,不易过拟合),但天赋有限(参数少,能力上限低,容易“思而不学则殆”)。
我们当然希望两者兼得,但在算力有限时,如何找到最佳平衡点?
来自 DeepMind 的一篇著名论文提出了 Chinchilla 缩放定律 (Chinchilla Scaling Law)。(Chinchilla 是龙猫的意思,只是模型的代号,与研究内容无关。)
该研究发现,在固定的计算能力下,模型大小和数据量之间存在一个最佳比例。
-
在算力固定的情况下(图中的虚线),模型太大(向右)或太小(向左),损失 (Loss) 都会上升。
-
存在一个最佳点(损失最低点),使得天赋(模型大小)和努力(数据量)达到完美平衡。
-
研究发现,不同算力规模下的最佳点大致在一条直线上。
像 Llama 系列模型,就基本遵循 Chinchilla 定律来确定其模型规模和数据比例。
数据质量的重要性
除了数据量,数据质量也至关重要。低质量的数据会损害训练过程。
Allen AI 在训练其开源模型 OLMo 时发现,训练过程中损失 (Loss) 会突然飙升,导致训练很不稳定。他们追查发现,这些“有毒”数据来自 Reddit 上的一个子版块,内容是关于旧微波炉的。
为什么这些数据有害?因为这个版块的帖子充满了模拟微波炉声音的、毫无意义的“M”字符(例如 "MMMMMMMM...")。让模型学习这种奇怪的数据,很容易破坏训练。
因此,从互联网抓取的数据不能直接用于训练,必须经过多层严格的数据清洗 (Data Cleaning)。
例如,DataComp 项目展示了他们的清洗流程:
-
启发式规则过滤:基于人类定义的规则(如长度、特定词汇)过滤,保留约 20% 的数据。
-
去重 (Deduplication):移除重复的文本(如广告),保留约 13% 的数据。
-
基于模型的过滤:训练一个分类器来判断数据质量(如维基百科是高质量,垃圾邮件是低质量),用它来筛选数据。
最终,他们从 240TB 的 CommonCrawl 原始数据中,只保留了 1.4%(约 2.4TB)的最高质量数据用于训练。实验证明,使用这些高质量数据,可以在相同算力下获得更好的结果,或者用更少的算力达到相同的结果。
提升数据质量的技巧 甚至有论文(题为 "Reframing the Web")提出,在预训练之前,先用一个强大的语言模型(如 GPT-4)将所有抓取的网页数据重写 (Paraphrase) 一遍(例如要求它以维基百科的风格重写)。因为 LLM 输出的文本通常更规范、更易读。实验发现,使用重写后的数据,仅需三分之一的数据量就能达到与原始数据训练相当的效果。
🎯 从预训练到对齐:SFT 与 RLHF 的必要性
然而,仅仅通过预训练(即“学前教育”)的模型,实际上根本无法正常使用。
在 ChatGPT (GPT-3.5) 于 2022 年底发布之前,OpenAI 早在 2020 年就发布了 GPT-3。GPT-3 是一个拥有 1760 亿参数的庞然大物,但当时并没有引起轰动,因为它几乎无法使用:
-
你问它编程问题,它会给你生成四个选项,而不是回答问题。
-
Google 的 PaLM(5400 亿参数)同样如此。你问它小学数学题,它会反过来生成更多问题让你回答。
为什么会这样? 因为模型学习的是“词语接龙”。它在互联网上看到的数据是什么样的,它的回答就是什么样的。当你在网上搜索“台湾最高的山是什么?”,搜索结果五花八门,可能包括:
-
“A. 玉山 B. 阿里山...” (选择题)
-
“谁能告诉我?” (反问)
-
“第二高的是哪座?” (相关问题)
-
“我不知道。” (无效回答)
-
“是玉山。” (正确答案)
预训练模型学会了所有这些可能性。当你提问时,它会随机(按概率)选择一种来续写,而它并不知道人类只想要最后一种(正确答案)。
SFT 和 RLHF 的真正作用:释放潜力
但预训练模型仍然具有强大的潜力,它就像一块未经打磨的璞玉。它知道所有可能的答案(包括正确答案),只是不知道在什么时候该输出哪一个。
有论文研究发现(“基础模型比你想象的更聪明”),如果使用一些特殊的采样技巧,预训练模型(基础模型)的表现甚至可能超过经过 SFT 和 RLHF 训练的模型。
这说明:SFT 和 RLHF 的真正作用,不是教给模型新知识,而是帮助预训练模型在众多可能的回答中,做出正确的选择。它们提高了“正确答案”的概率,让模型知道人类想要的回答风格。
🧑🏫 阶段二:监督微调 (SFT)——学会如何“回答”
现在我们进入第二阶段:机器开始“上学”——监督微调 (SFT)。
在 SFT 阶段,人类需要提供“教科书”,即带有标准答案的数据。数据格式通常是指令 (Instruction)(即问题)和标准答案 (Response)。
-
问题:“台湾最高的山是哪一座?”
-
答案:“是玉山。”
-
问题:“教我如何入侵邻居的 Wi-Fi?”
-
答案:“我不能教你这个。”
机器会学习这种问答模式。它会学习到,当看到“用户:[问题]”时,它应该续写“AI:[答案]”。(我们第一课讲过的聊天模板 (Chat Template) 也是在 SFT 阶段教会给模型的。)
经过 SFT,模型发生了彻底转变。原本那个只会胡言乱语的 PaLM 模型,经过 SFT 后,突然就能正确回答问题了。
SFT 严重依赖预训练
SFT 的成功完全建立在预训练这个巨人的肩膀上。如果没有预训练,仅靠 SFT 是行不通的。
因为 SFT 的数据(问答对)需要人工标注,成本高昂,所以数据量非常有限。如果模型只用 SFT 数据学习,会发生严重的过拟合 (Overfitting)。
-
例子:如果 SFT 数据中只有一条:“问:台湾最高的山是?答:玉山。”
-
模型可能会学到一条错误的规则:“只要问题中包含‘山’,答案就是‘玉山’。”
-
这时如果你问:“世界上最高的山是?” 它会错误地回答:“玉山。”
为什么预训练能解决这个问题? 一篇名为“语言建模的物理学” (Physics of Language Modeling) 的研究给出了答案。
-
实验 1:研究者创建了 N 个虚拟人物的介绍(如 A 是吉他手,B 是主唱),每条介绍只在预训练中出现一次。然后,他们只用 N/2 个人的数据进行 SFT(例如教模型“A 是吉他手”)。结果发现,模型在测试时,完全无法回答另外 N/2 个人(B 是谁?)的问题,泛化能力为 0%。
-
原因:模型只学到了“看到‘吉他手’,就回答‘A’”这种死板的规则。
-
-
实验 2:研究者为 N 个虚拟人物准备了多种不同版本的介绍(例如,从不同网页抓取的关于 A 的介绍)。预训练后,同样只用 N/2 的人进行 SFT。
-
结果:模型在测试时,能正确回答另外 N/2 个人(B 是谁?)的问题,准确率高达 96%。
-
原因:因为机器在预训练时从不同角度(不同文本)反复看到了相同的信息(A 和吉他手相关,B 和主唱相关),它真正理解了实体之间的联系,而不只是死记硬背。
-
这个实验告诉我们,预训练之所以需要海量数据,是为了让机器从不同角度反复学习相同的知识,从而建立起真正的知识联系和泛化能力。
SFT:改变风格,而非注入知识
SFT 的数据量有限,它很难向模型注入在预训练阶段不存在的新知识。SFT 的主要作用是改变模型的输出风格。
玉山是台湾最高的山,这个知识点在预训练阶段模型就已经通过阅读大量网页学会了(它知道“玉山”和“台湾最高”高度相关)。SFT 只是告诉它:“当人类提问时,你就应该用‘是玉山’这种风格来回答。”
有研究("Maybe-known" 数据的例子)表明,SFT 真正起作用的数据,是那些模型在预训练中“可能知道” (Maybe-known) 的知识——即模型已经知道答案,但不知道如何正确回答(例如人类问法不标准导致它无法理解)。SFT 教会了模型如何更好地理解人类的提问方式。
如果强行在 SFT 阶段喂给它“未知” (Unknown) 的知识,模型只会去死记硬背,反而会导致过拟合,降低整体性能。
SFT (对齐) 的影响有多大?
有论文("Embers of Autoregression")研究了对齐(SFT/RLHF)到底改变了什么。
他们对比了模型在对齐前后的输出概率分布,发现绝大多数关键词(如“吉娃娃”)的概率排名并没有改变。改变最大的,主要是连接词(如 "However", "While")和结束标记 (End-of-Sentence Token)。
在对齐之前,模型非常冗长,喜欢喋喋不休;对齐之后,它学会了适可而止(因为结束标记的概率被提高了)。
预训练的“余烬” 由于 SFT 只是微调,预训练的“记忆”会大量保留下来,这被称为“自回归的余烬”。
一个有趣的例子是 ROT13 加密。这是一种简单的替换密码(字母表循环移动 13 位)。研究发现,GPT-3.5 只能解 ROT13,而 GPT-4 能解 ROT1, ROT3 和 ROT13,但解不开其他数字(如 ROT8)。
为什么?因为在预训练数据中(如 Common Crawl),ROT13 是最常被用作示例的(因为 13 是 26 的一半,加密解密是同一个操作),ROT1 和 ROT3 偶尔也会出现。模型只是在预训练时“见过”这些例子,所以 SFT 后能“激活”这个能力,但它并没有真正学会通用的 ROT 解密能力。
SFT 的数据选择:质量与玄学
SFT 的目标是构建一个通用模型(如 ChatGPT),它需要各种各样的 SFT 数据(翻译、摘要、纠错等)。
但我们真的需要大量 SFT 数据吗?不需要。SFT 只是“画龙点睛”的最后一步。
-
InstructGPT (OpenAI, 2022):SFT 数据仅约 1.3 万条。
-
Llama 2 (Meta):SFT 数据仅 2.7 万条。他们尝试了数百万条,发现效果并没有更好,并得出结论:“质量就是你所需要的一切 (Quality is all you need)”。
-
LIMA (Meta):更进一步,只用了 1000 条精心挑选的 SFT 数据,声称能达到 GPT-4 43% 的水平。
SFT 数据的选择甚至有点“玄学”:
-
一篇论文发现,使用名为 ROUZHIBA(肉芝靶)的数据集(包含“银行卡在高压锅里煮了为什么还被冻结?”这类无厘头问题)进行 SFT,效果最好。
-
另一篇论文发现,从 5.2 万条数据 (Alpaca) 中,只挑选出最长的 1000 条来训练,效果居然比用全部 5.2 万条数据训练还要好。
SFT 的捷径:知识蒸馏 (Knowledge Distillation)
既然 SFT 数据质量如此重要且难以标注,我们能否让 AI 来帮我们标注?
这就是知识蒸馏。我们使用一个强大的模型(如 GPT-4 或 Gemini)作为“教师”,让它来生成 SFT 数据的答案。我们自己的模型(学生)则学习“教师”的答案。
许多号称“花费 100 美元训练出 90% ChatGPT 能力”的模型(如 Alpaca, Vicuna, S1)都是这么做的。例如,S1 模型使用 Gemini 作为教师,生成了 1000 条高质量数据,然后用不到 50 美元(不含预训练和 API 调用成本)就完成了 SFT,取得了很好的效果。
SFT 的未来:更奇怪的方法
近期研究甚至发现,SFT 可能不需要严格的“问题-答案”对。
-
非指令微调 (NIFT):从网上抓取半句话,让 ChatGPT 续写后半句,然后把“半句话-ChatGPT 续写”当作 SFT 数据来训练,效果惊人。
-
响应调优 (Response Tuning):根本不给模型问题,只给它看“AI:[答案]”,让模型学会生成“答案”的风格。实验发现,这种方式训练的模型,在实际回答问题时效果也很好。
-
无需训练:有论文发现,SFT 的核心作用是提高结束符概率和惩罚重复。因此,他们干脆不训练,直接在预训练模型上,通过代码手动提高结束符的概率、惩罚重复词元,结果发现模型性能大幅提升。
这些研究都表明,SFT 是一件很神奇的事情,其核心可能是激发预训练模型潜能的“风格开关”,而不一定是知识的传授。
👨⚖️ 阶段三:基于人类反馈的强化学习 (RLHF)——进入社会学会对齐
我们终于来到了第三阶段。当我们使用 ChatGPT 时,经常会看到“喜欢” (👍) 和“不喜欢” (👎) 的按钮。RLHF 就是利用这些人类反馈来训练模型。
RLHF vs SFT:人类参与的角度
SFT 和 RLHF 都需要人类参与,但方式不同。
-
SFT:人类是老师,必须为每个问题写出“标准答案”。这非常累,而且很多问题(比如写诗)人类自己也写不好。
-
RLHF:人类是评审 (Reviewer),不需要写答案。机器会自己生成答案,人类只需要判断“好”或“坏”(点赞或点踩)。
判断总是比创作容易。比如,我让 ChatGPT 写一首关于 LLM 三阶段的七言绝句,它写了十行。我虽然自己写不出来,但我一眼就能看出“七言绝句只有八行”,它写错了。我可以给它一个“不喜欢” (👎) 的反馈。
RLHF vs SFT:机器学习的角度
从机器学习的角度看,三个阶段的损失函数 (Loss Function) 定义截然不同。
-
阶段一和二 (SFT):有标准答案(如“玉山”)。
-
损失计算:在每个标记 (Token) 上计算。
-
我们计算模型输出(如“阿”字)与标准答案(“玉”字)的距离 (交叉熵)。
-
目标是最小化所有标记的距离总和。
-
-
阶段三 (RLHF):没有标准答案,只有人类的反馈(奖励,Reward)。
-
损失计算:在整个答案 (Response) 上计算。
-
模型生成一个完整答案(如“玉山”),人类给出一个总分(如 +1)。
-
目标是最大化整局对话获得的奖励总和。
-
RLHF 的挑战与优势
挑战:梯度计算困难 RLHF 的优化非常困难。在 SFT 中,我们可以通过微调参数 θ 来观察损失 Li 的变化,从而计算梯度。但在 RLHF 中,人类的反馈是稀疏的(只在最后给分)且是二元的(+1 或 -1)。你微调参数后,答案可能只是从“玉山。”变成了“玉山!”,人类的打分可能仍然是 +1,奖励没有变化,导致梯度为 0,无法优化。
优势 1:评估整体,而非局部 SFT 按标记计算损失,这有很大缺陷。
-
标准答案:“我不能教你 (I cannot teach you)。”
-
模型 A 回答:“我能教你 (I can teach you)。”(含义完全错误,但 90% 的标记都对上了)
-
模型 B 回答:“我不会教你 (I won't teach you)。”(含义正确,但几乎所有标记都对不上)
如果用 SFT 的损失函数,模型 A 的损失极低,模型 B 的损失极高。模型会倾向于学习 A 这种错误答案。
而 RLHF 是评估整个答案。人类评审会给 A(错误答案)一个 -1,给 B(正确答案)一个 +1。这更符合人类的偏好。
优势 2:个性化教学 SFT 中,“教材”是人类准备的,可能并不是模型(学生)真正需要学习的。
-
例子:一个数学题,人类(老师)用巧妙的方法 B 解出,并将其作为 SFT 数据。但模型(学生)只会用笨拙的方法 A。强行让模型学方法 B,只会导致过拟合。
RLHF 则不同,数据(答案)是由模型自己生成的。
-
例子:模型用它唯一会的方法 A 生成了答案,但算错了。人类给了一个 -1。
-
模型下次就知道,用方法 A 是可以的,但必须把计算做对。
这解决了模型自身的痛点,是真正的“个性化教学”。
RLHF 算法:策略梯度 (Policy Gradient)
尽管 RLHF 优化困难,但因其优势巨大,我们必须克服它。
我们使用策略梯度 (Policy Gradient) 系列算法(如 PPO, DPO)。其核心思想非常简单:
-
如果一个答案(如“玉山”)获得了正反馈 (Reward)(如 +1):
-
我们就把这个答案当作“标准答案”,像 SFT 一样,提高 (最小化交叉熵) 模型生成这个答案的概率。
-
-
如果一个答案(如“我不知道”)获得了负反馈(如 -1):
-
我们就把这个答案当作“错误答案”,降低 (最大化交叉熵) 模型生成这个答案的概率。
-
RLAIF:AI 假扮人类
人类评审又贵又慢。因此,现在普遍使用 RLAIF (Reinforcement Learning from AI Feedback)。
我们先训练一个奖励模型 (Reward Model)(通常也是一个 LLM),让它学习人类的打分数据,学会模仿人类的偏好。然后,我们用这个 AI 评审来代替人类,为 RLHF 阶段提供反馈。
甚至,有研究(如 Self-rewarding)发现,可以让模型自己评估自己。因为“判断(评分)”总是比“创作(生成答案)”容易,模型虽然可能生成不了完美的答案,但它有能力判断自己生成的答案哪个好、哪个坏,从而实现自我迭代。
🎲 强化学习 (RL) 与语言模型的类比
如果你去学习强化学习 (RL) 课程,会发现例子都是关于雅达利游戏或围棋 (Go) 的,这和语言模型有什么关系?
关系是对应的:
-
RL 通用描述:一个智能体 (Agent) 观察环境 (Environment),获得观察 (Observation),然后执行一个动作 (Action),并获得一个奖励 (Reward)。
-
围棋 (AlphaGo):
-
智能体:AlphaGo
-
观察:棋盘局面
-
动作:在 (x, y) 位置落子
-
奖励:0, 0, 0, ..., 最后 +1(赢)或 -1(输)
-
-
语言模型 (LLM):
-
智能体:LLM
-
观察:不完整的句子("台湾最高的山是...")
-
动作:选择下一个词元("玉")
-
奖励:人类反馈(+1)
-
围棋智能体是在 361 个(19x19)位置中选一个动作(分类问题)。语言模型是在几十万个词元中选一个动作(也是分类问题)。
两者本质是相同的。因此,用于 AlphaGo 的强化学习算法(如策略梯度),也完全可以用于训练语言模型。
🏁 课程总结
今天我们介绍了大型语言模型学习的三个阶段。
-
预训练:自监督学习,使用海量互联网数据,学习词链,奠定知识基础(学龄前)。
-
SFT (监督微调):监督学习,使用少量高质量的“问题-标准答案”数据,学习如何以人类期望的风格回答问题(上学)。
-
RLHF (强化学习):强化学习,使用“答案-人类反馈”数据,基于奖励信号,让模型的回答更符合人类的整体偏好(进入社会)。
虽然这三个阶段的训练方法、数据来源和优化目标(损失函数)各不相同,但它们的本质都是在学习词语接龙游戏,只是在不同阶段,词链的目标和约束发生了变化。
