大模型是怎么被训练出来的?    

随着DeepSeek的爆火,人们对LLM(Large Language Model,大语言模型)兴趣与日激增,很多人觉得LLM常常显得近乎魔法般神奇。接下来我们就来揭开LLM的神秘面纱。拆解一下LLM的基本原理——深入探讨这些模型是如何构建、训练和微调,最终成为我们今天所使用的AI大模型的。


一、概念准备


1. 预训练(Pre-training)

预训练是大模型训练的基础阶段,通过海量无标注数据(如互联网文本、图像等)让模型学习通用知识(如语言语法、图像纹理等)。例如,GPT-3通过千亿级参数的预训练掌握语言生成能力。

作用:建立模型对世界的通用理解,是后续所有优化阶段的基石。


2. 微调(Fine-tuning)

在预训练模型基础上,针对特定任务(如医疗问答、法律文本分类)使用少量标注数据进行参数调整。例如,用LoRA方法冻结大部分参数,仅训练低秩矩阵适配新任务。

与预训练关系:微调是预训练的延伸,将通用知识迁移到垂直领域。


3. 强化学习(RL)

RL是一种独立于微调的学习范式,通过环境反馈(奖励信号)优化策略。例如,训练游戏AI时,模型根据得分调整动作选择。


与微调的区别:RL不依赖标注数据,而是通过试错学习,这个能力也是为什么AI大模型有创新的关键,因为RL会让大模型发现人类难以发现的数据之间的规律,实现创新;微调依赖静态标注数据集。


4. 基于人类反馈的强化学习(RLHF)

RLHF是RL的子类引入人类标注的偏好数据(如对答案质量的排序)作为奖励信号。例如,ChatGPT通过RLHF对齐人类价值观,减少有害输出。后文有专门对RLHF的详解。


强化学习(RL)和人类反馈强化学习(RLHF)是大模型实现动态自适应能力的核心技术,它们使大模型从"知识复读机"进化为"具备自主决策能力的认知体",使得大模型真正具有了“自学习”的能力。



二、大模型训练的步骤概述

从整体上看,训练LLM主要包括两个关键阶段:预训练(Pre-training)后训练(Post-training):微调、RL和RLHF。

image.png

上述流程整合了预训练、微调、RLHF等核心阶段,适用于自然语言处理和多模态大模型:


1.数据准备

数据收集:根据目标领域收集海量无标注数据(预训练)或少量标注数据(微调)。

清洗与增强:去除噪声、重复项,进行分词/标准化(文本)或裁剪/旋转(图像)。

划分数据集:预训练无需标注;微调需划分训练集/验证集/测试集(比例通常为8:1:1)。


2.预训练(Pre-training)

模型架构选择:如Transformer(文本)、ViT(图像)或混合架构(多模态)。

训练策略

? 无监督学习:掩码语言建模(BERT)、自回归生成(GPT)。

? 分布式训练:使用GPU/TPU集群加速,如Megatron-LM框架。


3.任务适配:微调(Fine-tuning)

方法选择

全量微调:调整所有参数,适合数据充足场景(如金融风控)。

参数高效微调(PEFT)

LoRA:低秩矩阵分解,减少90%训练参数。

Adapter:插入小型网络模块,保持原模型权重。

优化目标:最小化任务损失函数(如交叉熵损失)。


4.强化学习优化(RL/RLHF)

奖励模型训练:用人类标注的偏好数据(如答案质量排序)训练奖励模型(Reward Model)。

策略优化

RL:通过环境反馈(如游戏得分)调整策略,无需人类干预。

RLHF:结合奖励模型和PPO算法优化模型输出,例如提升对话流畅度。

关键步骤:KL散度惩罚防止模型偏离原始分布。


5.评估与调优

指标选择:准确率、BLEU(文本生成)、ROUGE(摘要)或人工评估(复杂任务)。

过拟合处理

? 正则化:Dropout、权重衰减。

? 早停法(Early Stopping)。


6.部署与监控

模型压缩:量化(INT8/INT4)、剪枝,降低推理成本。

持续学习:根据用户反馈(如日志分析)进行在线微调。


关键步骤区别与适用场景

image.png

接下来我们详细的介绍下每一个步骤的详细内容。



三、预训练(Pre-training)


为什么需要预训练?

预训练是为了让模型在见到特定任务数据(比如生成文本)之前,先通过学习大量通用数据来捕获广泛有用的特征,熟悉语言的工作方式,从而提升模型在目标任务上的表现和泛化能力,而这一过程就是预训练——一个极其计算密集的任务。


预训练技术通过从大规模未标记数据中学习通用特征和先验知识,减少对标记数据的依赖,加速并优化在有限数据集上的模型训练。

image.png

为什么要用大量未标记的数据做预训练呢?


1)数据稀缺性在现实世界的应用中,收集并标注大量数据往往是一项既耗时又昂贵的任务。特别是在某些专业领域,如医学图像识别或特定领域的文本分类,标记数据的获取更是困难重重。


预训练技术使得模型能够从未标记的大规模数据中学习通用特征,从而减少对标记数据的依赖。这使得在有限的数据集上也能训练出性能良好的模型。


2)先验知识问题:在深度学习中,模型通常从随机初始化的参数开始学习。然而,对于许多任务来说,具备一些基本的先验知识或常识会更有帮助。


预训练模型通过在大规模数据集上进行训练,已经学习到了许多有用的先验知识,如语言的语法规则、视觉的底层特征等。这些先验知识为模型在新任务上的学习提供了有力的支撑。


image.png

预训练是语言模型学习的初始阶段。在预训练期间,模型会接触大量未标记的文本数据,例如书籍、文章和网站。目标是捕获文本语料库中存在的底层模式、结构和语义知识。


本阶段大模型主要学习的方式是:


无监督学习:预训练通常是一个无监督学习过程,模型在没有明确指导或标签的情况下从未标记的文本数据中学习。

屏蔽语言建模:模型经过训练可以预测句子中缺失或屏蔽的单词、学习上下文关系并捕获语言模式。


具体的执行步骤如下:




步骤1:数据收集与预处理



训练LLM的第一步是收集尽可能多的高质量文本数据。目标是创建一个庞大且多样化的数据集,涵盖广泛的人类知识。


一个常见的数据来源是Common Crawl,这是一个免费的、开放的网页爬取数据存储库,包含过去18年间约2500亿个网页的数据。然而,原始网页数据往往比较嘈杂——其中包含垃圾信息、重复内容和低质量文本,因此数据预处理至关重要。

https://commoncrawl.org/


如果你对经过预处理的数据集感兴趣,FineWeb提供了一个整理后的Common Crawl版本,并已在Hugging Face上公开可用。


(Hugging Face 是一家以 开源社区为核心 的人工智能公司,专注于自然语言处理(NLP)技术的开发与应用。其前身是2016年成立的聊天机器人公司,后转型为全球最大的AI开源平台,提供模型库、数据集托管、工具链和社区协作服务,被誉为“AI领域的GitHub)。目前你能够看到的开源AI大模型都可以从该网站下载。


https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1


一旦文本语料库经过清理,就可以进行分词(Tokenization)处理。




步骤2:分词(Tokenization)



在神经网络处理文本之前,文本必须先转换为数值形式。这一过程就是分词,它将单词、子词或字符映射为唯一的数值token。


可以把token想象成构建语言模型的基本单元——所有语言模型的核心组件。在GPT-4中,可能的token数量为100277个。


一个常见的分词工具是Tiktokenizer,它允许你进行分词实验,并查看文本是如何被拆解为token的。

https://tiktokenizer.vercel.app/


你可以尝试输入一句话,看看每个单词或子词是如何被分配一系列数值ID的。

image.png

步骤3:神经网络训练(Neural Network Training)



一旦文本被分词处理,神经网络就会学习根据上下文预测下一个token。模型会接收一串输入token(例如“我正在烹饪”),然后通过一个庞大的数学表达式——即模型的架构(如:Transformer)——进行处理,以预测下一个token。

image.png

一个神经网络主要由两个关键部分组成:

1)参数(参数权重,Weights):通过训练学习得到的数值,用于表达每一个Token的具体语义,比如是否是动词/名称、是动物/植物等。在GTP-3中这个参数是12288个维度,即一个Token用12288个维度来描述它,维度越多越能够精准的描述一个token,但是参数都增多算量会指数级增长,所以需要在准确率和算量之间找到平衡。


2)架构(数学表达式,Architecture):定义输入token如何被处理以生成输出的结构。比如现在最常用的架构就是Transformer架构。


最初,模型的预测是随机的,但随着训练的进行,它逐渐学会为可能的下一个token分配概率。


当正确的token(例如“食”)被识别后,模型会通过反向传播(Backpropagation)来调整数十亿个参数(权重)。这是一个优化过程,通过提高正确预测的概率、降低错误预测的概率来强化模型的学习。


这个过程会在海量数据集上重复数十亿次。

预训练通常采用基于 Transformer 的架构,该架构擅长捕获远程依赖关系和上下文信息。

image.png

基础模型(Base Model):预训练的产物



在这一阶段,基础模型已经学会了:

? 单词、短语和句子之间的关联

?  训练数据中的统计模式


然而,基础模型并未针对真实世界任务进行优化。你可以将其类比为一个高级自动补全系统——它能够基于概率预测下一个token,但缺乏良好的指令跟随能力。


基础模型有时会逐字复述训练数据,并且可以通过上下文学习(In-Context Learning)进行特定应用,即在提示(Prompt)中提供示例来引导模型的响应。但为了让模型真正有用且可靠,它还需要进一步训练。



二、后训练(Post-Training)/ 微调(Fine-tuning):让模型更实用


基础模型是未经打磨的。为了让它更加实用、可靠、安全,需要进行后训练(Post-Training),即在更小、更专业的数据集上进行微调(Fine-tuning)


为什么需要微调?

尽管预训练模型已经在大规模数据集上学到了丰富的通用特征和先验知识,但这些特征和知识可能并不完全适用于特定的目标任务。

微调通过在新任务的少量标注数据上进一步训练预训练模型,使模型能够学习到与目标任务相关的特定特征和规律,从而更好地适应新任务。

image.png

1)模型微调可以更好地利用预训练模型的知识,加速和优化新任务的训练过程,同时减少对新数据的需求和降低训练成本。


2)减少对新数据的需求:从头开始训练一个大型神经网络通常需要大量的数据和计算资源,而在实际应用中,我们可能只有有限的数据集。通过微调预训练模型,我们可以利用预训练模型已经学到的知识,减少对新数据的需求,从而在小数据集上获得更好的性能。


3)降低训练成本:由于我们只需要调整预训练模型的部分参数,而不是从头开始训练整个模型,因此可以大大减少训练时间和所需的计算资源。这使得微调成为一种高效且经济的解决方案,尤其适用于资源有限的环境。

image.png

4)由于神经网络无法像传统软件那样被显式编程,我们只能通过训练它来“编程”它,即让它学习有结构的、带标注的数据集,这些数据代表了理想的交互示例


微调的技术原理是什么?

在预训练模型的基础上,针对特定任务或数据领域,通过在新任务的小规模标注数据集上进一步训练和调整模型的部分或全部参数,使模型能够更好地适应新任务,提高在新任务上的性能。

image.png

微调发方式:问题回答、语言生成、命名实体识别、释义识别、摘要、情绪分析、其他

微调如何分类?

微调分为在新任务数据集上全面或基于人类反馈的监督训练(SFT与RLHF),以及调整模型全部或部分参数以高效适应新任务(Full Fine-tuning与PEFT)




1.在新任务的小规模标注数据集上

进一步训练



这种方式通常使用预训练模型作为基础,并在新任务的小规模标注数据集上进行进一步的训练。


这种训练过程可以根据具体的训练方法和目标细分为不同的策略,如监督微调(Supervised Fine-tuning, SFT)和基于人类反馈的强化学习微调(Reinforcement Learning with Human Feedback, RLHF)。


)监督微调(Supervised Fine-tuning, SFT)


定义:在新任务的小规模标注数据集上,使用有监督学习的方法对预训练模型进行微调,以使其适应新任务。


步骤:加载预训练模型 → 准备新任务的数据集 → 调整模型输出层 → 在新任务数据集上训练模型。


应用:适用于那些有明确标注数据集的任务,如文本分类、命名实体识别等。

我们先说监督微调(Supervised Fine-tuning, SFT)


具体执行方法:

后训练阶段会创建专门的数据集,这些数据集包含结构化的示例,指导模型在不同情况下的回应方式。


1.指令/对话微调(Instruction/Conversation Fine-Tuning)


本质:准备好相关问题,并准备好标准答案,让模型进行学习。


目标:让模型学会遵循指令、执行任务、进行多轮对话、遵守安全规范、拒绝恶意请求等。


训练使用的数据主要来源于两个方面:一是人工进行标注,二是通过类似ChatGPT这样的模型自动生成训练数据。 后者减少了人工构建数据集的成本,也能够更快地生成大量的训练样例。


具体来说,可以给定一些基本的指令样例,让模型生成类似的新的指令和答案对,从而形成一个自动化的训练数据生成过程。例如,斯坦福大学的Alpaca项目通过ChatGPT自动生成了5200条指令 - 答案样例,极大地提升了训练的效。


例如,InstructGPT(2022),OpenAI聘请了约40名合同工来创建这些标注数据集。这些人工标注者编写提示(Prompts)并提供基于安全指南的理想响应。如今,许多数据集由AI自动生成,再由人工审核和编辑以确保质量。


2.领域特定微调(Domain-Specific Fine-Tuning)


目标:使模型适应特定领域,如医学、法律、编程等。


此外,后训练还会引入特殊token——这些token在预训练阶段并未使用,它们有助于模型理解交互的结构。这些token可以标记用户输入的起始与结束,以及AI响应的起始位置,确保模型能够正确区分提示(Prompt)和回答(Reply)。




RL(Reinforcement Learning)

强化学习


之前,我们讨论了训练LLM的前两个主要阶段:

1)预训练从大量数据集中学习,形成基础模型。

2)SFT(Supervised Fine-Tuning,监督微调)用精心挑选的示例来优化模型,使其更加实用。


现在,我们将深入探讨下一个主要阶段:RL(Reinforcement Learning,强化学习),本质上来说RL也属于微调(Fine tunning)阶段。尽管预训练和SFT已经是成熟的方法,但RL仍在不断发展,并且已成为训练流程中的关键环节。


RL的目的是什么?


人类和LLM处理信息的方式不同。对于我们来说——像基本的算术——是直观的,但LLM只将文本看作一串token序列,这对LLM来说并不直观。相反,LLM能够在复杂的主题上生成专家级的回答,仅仅因为它在训练过程中见过足够多的示例。


这种认知差异使得人类注释者很难提供一组“完美”的标签,能够持续地引导LLM找到正确的答案。


RL弥补了这一差距,它允许模型从自身的经验中学习。


模型不仅仅依赖显式的标签,而是探索不同的token序列,并根据哪些输出最有用来获得反馈——奖励信号(奖励信号是由人为提前设定好的)。随着时间的推移,模型学会了更好地与人类意图对齐。


RL的本质


LLM是随机的——意味着它们的回答并不是固定的。即使是相同的提示,输出也会有所不同,因为它是从一个概率分布中采样的。


我们可以利用这种随机性,通过并行生成成千上万,甚至数百万个可能的响应。可以把它看作是模型在探索不同的路径——有些是好的,有些是差的。我们的目标是鼓励它更多地选择较好的路径。


为了做到这一点,我们让模型训练在那些导致更好结果的token序列上。与监督微调(SFT)不同,在监督微调中,人类专家提供标签数据,强化学习则允许模型从自身的学习中获得进步


模型发现哪些响应最有效,并在每个训练步骤后更新它的参数。随着时间的推移,这使得模型在未来收到相似提示时,更有可能生成高质量的答案。


但是,如何确定哪些响应是最好的?我们应该进行多少RL训练?这些细节是很复杂的,要做到精准并不简单。


RL并不是“新”的——它能超越人类专业水平(AlphaGo,2016)


RL的强大力量的一个很好的例子是DeepMind的AlphaGo,它是第一个击败职业围棋选手的AI,并最终超越了人类水平。


在2016年的《自然》杂志论文中表示,当一个模型纯粹通过SFT训练(给模型大量好的例子让其模仿)时,模型能够达到人类水平的表现,但永远无法超越它。


这是因为SFT关注的是复制,而非创新——它不能让模型发现超越人类知识的新策略。然而,RL使AlphaGo能够与自己对弈,改进策略,并最终超越人类的专业水平。


RL代表了AI的一个令人兴奋的前沿——在我们将模型训练在一个多样且具有挑战性的问题池中时,模型能够探索超越人类想象的策略,从而优化其思维策略。


RL基础回顾


让我们快速回顾一下典型RL设置的关键组成部分:

image.png

1)Agent(智能体) 学习者或决策者。它观察当前的状态(state),选择一个动作(action),然后根据结果(reward)更新其行为。

2)Environment(环境)智能体所操作的外部系统。

3)State(状态)在给定时间步t的环境快照。


在每个时间戳,agent在环境中执行一个动作,该动作将环境的状态改变为新的状态。智能体还会收到反馈,表明该动作的好坏。这个反馈称为奖励(reward),并以数字形式表示。正奖励鼓励该行为,负奖励则不鼓励该行为。


通过使用来自不同状态和动作的反馈,智能体逐渐学习出最佳策略,以便在时间上最大化总奖励。


策略


策略是Agent的决策规则。如果Agent遵循一个好的策略,它将始终做出正确的决策,从而在多个步骤中获得更高的奖励。


用数学术语来说,策略是一个函数,它确定给定状态下不同输出的概率。


价值函数


估计处于某个状态下的好坏程度,考虑长期期望奖励。对于LLM(大语言模型)而言,奖励可能来自人类反馈或奖励模型。


Actor-Critic架构


这是一个流行的强化学习设置,结合了两个组件:

Actor(演员)学习并更新策略(πθ),决定在每个状态下应该采取哪个动作。

Critic(评论者)评估价值函数(V(s)),为演员提供反馈,告知其选择的动作是否导致了好的结果。


工作原理:

演员基于当前策略选择一个动作。

评论者评估结果(奖励 + 下一个状态)并更新其价值估计。

评论者的反馈帮助演员优化策略,使未来的动作能够获得更高的奖励。


将其与LLM结合


状态可以是当前的文本(提示或对话),而动作则是生成的下一个token(词或子词)。奖励模型(例如人类反馈)告诉模型它生成的文本是好是坏。


策略是模型选择下一个token的策略,而价值函数则估计当前文本上下文在最终生成高质量响应方面的有益程度。




RLHF(基于人工反馈的强化学习)


定义:RLHF(Reinforcement learning with Human Feedback,基于人工反馈的强化学习)是在SFT的基础上,通过强化学习和人类反馈来进一步微调模型,使其输出更加符合人类的偏好或期望。


步骤:首先进行SFT → 收集人类反馈数据 → 训练奖励模型 → 使用奖励模型指导强化学习过程来微调模型。


应用:适用于那些需要高度人类判断或创造力的任务,如对话生成、文本摘要等。这一部分比较复杂。

image.png

对于具有可验证输出的任务(例如数学问题、事实问答),AI的回答可以轻松评估。但对于像总结或创意写作这样没有单一“正确”答案的领域,如何处理呢?


这就是人工反馈的作用所在——但是天真的强化学习(RL)方法是不可扩展的。


image.png

让我们用一些任意数字来看一下朴素的方法。

image.png

这需要十亿次人工评估!这太昂贵、缓慢且不可扩展。因此,一个更智能的解决方案是训练一个AI“奖励模型”来学习人类的偏好,从而大大减少人工工作量。


为什么需要奖励模型?


在指令微调(SFT)阶段,虽然模型已经被训练并具备一定的语言生成能力,但其输出结果仍然可能不符合人类的偏好,可能存在「幻觉」问题(模型生成的内容不真实或不准确)或者「有害性」问题(输出有害、不合适或令人不安的内容)。


这是因为,SFT 仅通过有限的人工标注数据来微调预训练模型,可能并未完全纠正预训练阶段中潜在的错误知识或不合适的输出。为了进一步提高模型的生成质量,解决这些问题,必须引入奖励模型,利用强化学习进行进一步优化。


奖励模型的作用是:评估大语言模型输出的文本质量,给出一个分数,指导模型在后续生成过程中更好地符合人类偏好和需求。


通过与人类标注者进行交互,奖励模型能够提供反馈信号,帮助优化模型的输出,使得生成内容更加自然、真实且符合用户的期望。


强化学习与奖励模型


强化学习的核心思想是通过奖惩机制来引导模型的学习。 在 RLHF(强化学习与人类反馈)中,奖励模型负责为模型生成的每个响应提供一个奖励分数,帮助模型学习哪些输出符合人类的期望,哪些输出不符合。


奖励模型的训练数据通常来自人工标注的排序数据,标注员会对多个生成的回答进行排名,奖励模型基于这些排名进行训练。


与传统的有监督学习不同,奖励模型并不要求直接对每个输出给出明确的分数,而是通过相对排序的方式对多个输出进行比较,告诉模型哪些输出更好,哪些输出更差。这种相对排序方式能有效减少人工评分时的主观差异,提高标注的一致性和模型的学习效率。


训练奖励模型形成过程


(1)训练数据(人工排序数据)

奖励模型的训练数据通常由人工标注人员对模型输出进行排序生成。在训练过程中,标注人员会根据多个生成回答的质量进行排序,而不是为每个答案打分。具体来说,给定一个问题,标注人员会评估并排序该问题的多个答案,并将这些排序数据作为奖励模型的训练数据。


这种相对排序的方式比直接给每个答案打分更加高效且一致,因为评分会受到标注人员个人主观看法的影响,而相对排序则减少了这种影响,使得多个标注员的标注结果能够更加统一。


数据格式:




Plain Text















//基于比较的数据格式{    "input": "用户输入的文本",    "choices": [        {"text": "候选输出 1", "rank": 1},        {"text": "候选输出 2", "rank": 2}    ]}//基于评分的数据格式{    "input": "用户输入的文本",    "output": "生成模型的输出文本",    "score": 4.5}


奖励模型的输入包括:

输入文本:用户给定的提示或问题,作为上下文。

输出文本:生成模型的候选答案,用于评估质量。


上下文和候选文本拼接:奖励模型通常会将 input(上下文)和每个 choice(候选文本)进行拼接,然后输入到模型中。这样,模型就能够理解生成文本与上下文之间的关系,并基于该关系来评估生成文本的质量。


下面是一个简单的例子:















Plain Text//原始数据{    "input": "What is the capital of France?",    "choices": [        {"text": "The capital of France is Paris.", "rank": 1},        {"text": "The capital of France is Berlin.", "rank": 3},        {"text": "Paris is the capital of France.", "rank": 2}    ]}//应输入到模型的数据[Input] What is the capital of France? [SEP] The capital of France is Paris.[Input] What is the capital of France? [SEP] The capital of France is Berlin.[Input] What is the capital of France? [SEP] Paris is the capital of France.


(2)上下文建模

奖励模型会基于 Transformer(如 BERT、RoBERTa)等架构对整个拼接后的文本进行编码处理。对于每个候选文本,模型会生成一个上下文感知的表示,其中考虑了 input 和该候选 choice 之间的语义关系。


(3)计算得分或排序


回归任务:如果任务是回归类型的(例如预测一个分数),奖励模型会为每个候选文本生成一个预测的质量分数。

排序任务:如果任务是基于排序(例如选择哪个候选文本质量更好),奖励模型会通过对所有候选文本进行打分,计算并比较它们的得分,确保高质量文本的得分高于低质量文本。


(4)损失函数

在训练过程中,模型会通过比较候选文本的预测得分与实际的标签(排名或评分)之间的差异来计算损失,并进行反向传播优化:

回归任务使用均方误差(MSE)损失来最小化预测分数与真实评分之间的差距。

排序任务通常使用对比损失(Contrastive Loss)或者排名损失(例如 Hinge Loss),优化模型以便正确排序候选文本。


奖励模型的挑战


奖励模型的设计和训练过程中存在一定的挑战,主要体现在以下几个方面:

1)人类偏好的多样性:不同的标注员可能对同一生成结果有不同的看法,这就要求奖励模型能够容忍一定的主观性,并通过排序学习来减少偏差。

2)模型不稳定:由于奖励模型通常较小,训练过程中可能会出现不稳定的情况。为了提高训练的稳定性,奖励模型通常会采取合适的正则化技术和优化方法。

3)数据质量与多样性:为了确保奖励模型的有效性,训练数据需要足够多样化,涵盖不同类型的问题和答案。如果数据质量不高或过于单一,模型可能无法学到有效的评分规则。

与绝对评分相比,对响应进行排名也更容易且更直观。

因此,RLHF框架应运而生。


RLHF框架的核心组件

基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)是一种将强化学习与人类反馈结合的方法,旨在优化模型的行为和输出,使其更加符合人类的期望。

通过引入人类反馈作为奖励信号指导模型更好地理解和满足人类的偏好,生成更自然、更符合人类意图的输出。


就像高考生需要根据模拟考试的反馈进行调整,优化答题策略,这就像是模型在 RLHF 中根据人类反馈不断优化自身行为


RLHF框架包含几个关键元素,它们共同协作,确保模型能够根据人类反馈进行优化:


1)强化学习算法(RL Algorithm):强化学习算法负责训练模型,以优化其行为。在RLHF中,常用的强化学习算法是近端策略优化(Proximal Policy Optimization,PPO)。PPO是一种“on-policy”算法,模型通过当前策略直接学习和更新,而不依赖于过去的经验。通过PPO算法,模型能够根据奖励信号调整策略,最终生成符合期望的输出。


2)行动(Action):在RLHF框架中,行动是指模型根据给定的提示(prompt)生成的输出文本。每个输出都可以视为模型在执行任务时的选择。行动空间包括词汇表中所有可能的token及其排列组合。


3)环境(Environment):环境是模型与外界交互的场景,提供模型需要执行任务的状态、动作和对应的奖励。在RLHF中,环境是模型根据提示生成输出并根据反馈调整行为的外部世界。


4)状态空间(State Space):环境呈现给模型的所有可能状态,通常是输入给模型的提示或上下文信息。


5)动作空间(Action Space):模型可以执行的所有可能动作,即根据提示生成的所有输出文本。


6)奖励函数(Reward Function):根据模型的输出,奖励函数为其分配奖励或惩罚。通常,这些奖励由训练好的奖励模型预测,该模型依据人类反馈评估输出质量。


7)观察(Observation):观察是模型生成输出时接收到的输入提示(prompt)。这些提示作为模型决策和执行任务的基础。观察空间(Observation Space)是指可能的输入token序列,即模型处理的提示文本。


8)奖励机制(Reward):奖励机制是RLHF框架的核心组成部分,负责基于奖励模型的预测分配奖励或惩罚。奖励模型通常通过大量人类反馈数据进行训练,以确保能够准确预测人类对不同输出的偏好。反馈数据通常通过对模型输出的排序、打分集。


 RLHF实战应用:InstructGPT的训练过程


RLHF的实际应用可以通过InstructGPT(ChatGPT的前身)训练过程来说明。InstructGPT的训练过程分为三个阶段:


1)首先,从prompt数据集中采样,标注员根据要求为采样的prompt编写答案,形成描述性数据(Demonstration Data)。这些数据用于微调GPT-3模型,训练出一个监督学习模型(Supervised Fine-Tuning, SFT)。通过描述性数据对模型进行有监督微调,使模型能够生成符合基本要求的答案。


2)接着,从prompt数据库中采样,生成多个模型输出,标注员对这些输出进行打分或排序,形成比较性数据(Comparison Data),并用这些数据训练奖励模型(Reward Modeling, RM)。奖励模型预测不同输出的偏好分数,从而帮助模型生成更高质量的输出。


3)最后,使用PPO算法(Proximal Policy Optimization)来优化奖励模型。通过从数据集中取样,模型根据监督学习阶段得到的初始化数据进行输出,奖励模型为每个输出打分,最终通过PPO算法调整模型策略,使其生成更符合人类期望的输出。通过RLHF(Reinforcement Learning from Human Feedback)方法,模型能够利用人类反馈逐步提高性能,最终训练出能够生成高质量输出的模型。


通过这三个阶段的训练,InstructGPT能够生成更符合人类需求和偏好的输出,最终形成类似ChatGPT的对话模型。


RLHF的优点:

可以应用于任何领域,包括创意写作、诗歌、总结以及其他开放性任务。

对输出进行排名比人工标签生成创意输出更容易。


RLHF的缺点:

奖励模型是近似的——它可能无法完美反映人类的偏好。

RL擅长利用奖励模型的漏洞——如果运行时间过长,模型可能会利用这些漏洞,生成荒谬的输出但仍获得高分。


需要注意的是,RLHF与传统的RL不同。


对于可以进行经验验证的领域(例如数学、编程),RL可以无限运行并发现新的策略。而RLHF则更像是一个微调步骤,用来将模型与人类的偏好对齐。


RLHF与Transformer架构是如何协同工作的


RLHF/RL微调技术与Transformer的协作可分为三个阶段,其中Transformer承担生成和特征提取任务,RLHF/RL负责策略优化与偏好对齐。具体流程如下:

image.png

第一步:预训练与监督微调(Transformer主导)

? 目标:训练一个具备基础语言能力的Transformer模型。

? 步骤:

1)无监督预训练

? 输入:大规模未标注文本(如网页、书籍等)。

? 输出:预训练模型(如GPT-3、Llama),通过预测下一个词的概率分布完成自监督学习。

? 技术分工:Transformer架构通过自注意力机制捕捉长距离依赖关系。

2)监督微调(SFT

?  输入:人工标注的<提示, 理想回答>对数据集。

? 输出:微调后的模型(SFT模型),能生成符合指令的响应。?

? 技术分工:在预训练模型基础上,通过交叉熵损失函数调整参数。

第二步:奖励模型训练(RLHF主导,基于Transformer)

? 目标:构建一个量化人类偏好的奖励模型(Reward Model, RM)。

? 步骤:  

1)数据收集

? 输入:通过SFT模型生成多个候选回答,人工对回答质量进行排序或评分。

2)模型构建

? 输入:基于SFT模型架构,替换最后一层为回归层(输出标量奖励)。

? 输出:奖励模型(RM),对任意<提示, 回答>对输出奖励分数。

3)训练目标:? 损失函数:最小化人类偏好排序的负对数似然损失,例如对比学习损失。

4)技术分工:? Transformer作为特征提取器,RM通过强化学习框架学习人类偏好模式。

第三步:RLHF强化学习优化(RL主导,结合Transformer)

? 目标:通过奖励信号优化策略模型(Policy Model),使其生成更符合人类偏好的文本。

? 步骤:

1)策略初始化

? 输入:SFT模型作为初始策略(Actor)。

2)生成响应

? 输入:用户提示(Prompt)。

? 输出:生成多个候选回答(由Transformer完成)。

3)奖励计算

? 输入:候选回答通过RM生成奖励分数。

? 输出:每个回答的标量奖励值。

3)策略优化(PPO

? 输入:奖励分数 + KL散度约束(防止偏离SFT模型太远)。

? 输出:更新后的策略模型参数。

4)技术流程: 

? Actor(策略模型):基于Transformer生成回答。

? Critic(价值函数):预测部分生成序列的预期累积奖励(基于Transformer架构)。

? 优势计算:通过GAE(Generalized Advantage Estimation)平衡偏差与方差。

? 参数更新:最大化奖励的同时约束策略变化幅度(PPO-Clip算法)。

汇总步骤如下:

image.png

技术协作示例


场景:用户提问“如何泡茶?”

  1. Transformer生成:Actor模型(基于Transformer)生成多个候选回答(如步骤列表、简答等)。

  2. 奖励评分:RM模型(基于Transformer+回归层)对每个回答打分(如安全性、有用性)。

  3. 策略优化:PPO算法根据奖励分数调整Actor模型参数,提升未来生成优质回答的概率。




2.调整模型的部分或全部参数



这种方式更加关注于模型参数层面的调整,根据是否调整全部参数,可以细分为全面微调(Full Fine-tuning)和部分/参数高效微调(Parameter-Efficient Fine-tuning, PEFT)。

image.png

Full Fine-tuning or PEFT

1.全面微调(Full Fine-tuning)

定义:在新任务上调整模型的全部参数,以使其完全适应新任务。

步骤:加载预训练模型 → 在新任务数据集上训练模型,调整所有参数。

应用:当新任务与预训练任务差异较大,或者想要充分利用新任务数据集时,可以选择全面微调。


2.部分/参数高效微调(PEFT)

定义:仅调整模型的部分参数,如添加一些可训练的适配器(adapters)、前缀(prefixes)或微调少量的参数,以保持模型大部分参数不变的同时,实现对新任务的适应。


步骤:加载预训练模型 → 在模型中添加可训练的组件或选择部分参数 → 在新任务数据集上训练这些组件或参数。


应用:当计算资源有限,或者想要快速适应新任务而不影响模型在其他任务上的性能时,PEFT是一个很好的选择。


技术:仅调整少量参数或添加额外模块,显著降低计算需求。常见技术包括:

LoRA(低秩适应)
 通过低秩矩阵分解冻结原权重,仅训练小规模参数,推理时合并矩阵。例如GPT-3微调时参数量减少90%以上。

Adapter(适配器)
 在模型层间插入小型神经网络模块(如全连接层),仅优化适配器参数。适配器参数量通常为原模型的0.1%-1%。

Prefix-Tuning(前缀调优)
 在输入前添加可学习的连续向量(“虚拟Token”),引导模型生成特定输出。适用于生成任务,如文本摘要。

BitFit(偏置项微调)
 仅调整模型中的偏置参数,其余权重冻结。在中小规模数据上表现优异

image.png

三、推理(Inference)——模型如何生成新文本


推理(Inference)可以在任何阶段进行,甚至可以在预训练中途执行,以评估模型的学习效果。


当模型接收到一组输入token后,它会根据在训练过程中学到的模式,为所有可能的下一个token分配概率。


但模型并非总是选择最可能的token,而是会在概率分布中进行采样——类似于抛掷一个带偏向的硬币,其中高概率的token更有可能被选中。


这个过程会迭代进行,每个新生成的token都会成为下一次预测的输入。


由于token选择是随机的,即使相同的输入也可能产生不同的输出。随着推理的进行,模型可以生成并未直接出现在训练数据中,但符合统计模式的文本。



四、幻觉(Hallucinations)——当LLM生成错误信息


幻觉(Hallucination)是指LLM生成虚假或错误的信息。


其根本原因在于:LLM并不“知道”事实——它只是根据训练数据预测最可能的单词序列


在早期,LLM的幻觉问题十分严重。


例如,在下图的案例中,如果训练数据包含大量类似“谁是…”的问题,并且这些问题都有明确答案,那么模型会学习到:这类查询应该总是有一个自信的回答,即使它并没有相关知识。

image.png

因此,当被问到一个未知人物时,模型不会默认回答“我不知道”,因为这种模式在训练过程中并未被强化。相反,它会基于已有模式生成最可能的猜测,这往往会导致编造的信息。


如何减少幻觉?

方法一:说“我不知道”


提高事实准确性需要明确地训练模型去识别它不知道的内容——这比看起来要复杂得多。


这是通过自我询问(Self-Interrogation)来完成的,这是一个帮助定义模型知识边界的过程。


自我询问可以通过另一个AI模型来自动化,该模型生成问题以探测知识盲点。如果它生成了错误的答案,就会加入新的训练示例,其中正确的回应是:“我不确定。能否提供更多上下文?”


如果模型在训练中多次看到一个问题,它将为正确答案分配较高的概率。


如果模型以前没有遇到过这个问题,它会在多个可能的token之间更均匀地分配概率,从而使输出更加随机。没有单一token被认为是最可能的选择。


微调显式地训练模型处理低置信度的输出,并用预定义的回答来应对。例如,当我问ChatGPT-4o,“谁是 sjuehaxucwq xewdqdqw?”时,它正确地回应:“我不确定那是谁。能否提供更多上下文?”


方法二:进行网络搜索


一种更先进的方法是通过给予模型访问外部搜索工具,从而扩展模型的知识范围,超出其训练数据。


从高层来看,当模型检测到不确定性时,它可以触发一次网络搜索。然后,搜索结果会被插入到模型的上下文窗口中——本质上允许这些新数据成为模型的工作记忆的一部分。模型在生成响应时会参考这些新信息。



五、模糊记忆与工作记忆


一般来说,LLM有两种知识访问方式。

模糊记忆模型在预训练过程中存储的知识。这是基于从大量互联网数据中学到的模式,但并不精确,也不可搜索。

工作记忆模型上下文窗口中的信息,在推理过程中可以直接访问。提供的任何文本都作为短期记忆,使模型能够在生成响应时回忆细节。


在上下文窗口中加入相关事实显著提高了响应的质量。



六、自我认知


当被问到“你是谁?”或“是什么构建了你?”等问题时,LLM会根据它的训练数据生成一个统计上最合适的猜测,除非被显式地编程以准确回应。


LLM没有真正的自我意识,它们的回应依赖于训练过程中看到的模式。


为模型提供一致身份的一种方式是使用系统提示(System Prompt),通过设置预定义的指令来描述模型自身、其能力以及其局限性。


关联文档