跳转至

第12讲 认知与计算(一)

大语言模型基础

大语言模型(Large Language Model,LLM)是利用海量数据训练、学习语言的结构、规则和语义,从而生成自然语言风格文本或回答自然语言问题的模型。常见例子包括 ChatGPT、DeepSeek、Qwen、Gemini、文心一言和 Kimi。

语言模型的目标始终是对人类语言的内在规律建模,其发展大致经历四个阶段。20 世纪 90 年代的统计语言模型以 N-Gram 为代表,具备一定生成能力并能辅助解决部分任务,但受数据稀疏影响严重;2013 年前后的神经语言模型以 RNN-LM、word2vec 为代表,缓解了稀疏问题并通过无监督学习获得语义特征,但知识不足、迁移性较差;2018 年前后的预训练语言模型以 ELMo、BERT、GPT-1/2 为代表,能捕捉上下文语义,任务迁移能力显著提高,但仍需要监督数据微调;2022 年前后进入大语言模型阶段,GPT-3/4、ChatGPT、Claude 等通过规模扩展显著提升性能,形成通用任务求解路径,不过学习成本高、适配灵活性仍有不足。

课件把通用人工智能(Artificial General Intelligence,AGI)定义为:具有高效学习和泛化能力,能根据复杂动态环境自主产生并完成任务的通用智能体;它具备自主感知、认知、决策、学习、执行和社会协作能力,并符合人类情感、伦理与道德观念。LLM 相比传统机器学习模型已有质的飞跃:能用统一形式解决多种下游任务,拥有较丰富的世界知识、较强的通用任务求解和复杂推理能力,也更能遵循人类指令。

这种变化影响了多个领域:在自然语言处理中,同一 LLM 可借助不同提示解决多类任务并取得领先效果;在信息检索中,形成了 LLM 增强的搜索引擎;在计算机视觉中,视觉—语言联合对话模型支持图文多模态输入;在科学研究中,LLM 已用于数学、化学、物理和生物等领域。

LLM 通常基于 Transformer,参数规模可达千亿以上,构建过程包括大规模预训练、指令微调和人类对齐。预训练使用与下游任务无关的海量无标注文本,为参数找到较好的“初值点”;模型能力基础主要来自预训练数据,所以数据收集和清洗十分关键。指令微调使用任务输入—输出配对数据,让模型掌握以问答形式求解任务的能力。它主要激发已有能力,很难教会模型在预训练阶段没有学到的知识与能力,所需数据规模也远小于预训练。

LLM 成功的关键之一是规模扩展。其网络结构和预训练方法与小型预训练语言模型相似,仍以基于注意力的 Transformer 为主,但通过同时扩展参数量、数据量和算力,性能提升往往显著超过单独改进架构或算法。模型达到一定规模后,一些任务性能会突然跃升并远超随机水平,这称为涌现能力。

从零研发或复现 LLM 会同时面对算力、数据和技术挑战,因此社区持续开放数据集、模型和 API。预训练数据按内容可分为网页、书籍、维基百科、代码和混合数据;适应性微调又分指令微调与对齐微调,前者可使用 NLP 任务、日常对话和合成数据,后者围绕有用、诚实、无害三项目标。常用代码资源包括 Hugging Face 开源社区、微软用于大规模分布式训练加速的 DeepSpeed,以及 NVIDIA 面向显存限制、计算效率和多种并行策略开发的 Megatron-LM。

预训练:数据、架构与任务

预训练是研发 LLM 的第一个阶段,也是最重要的阶段。数据按来源可分为网页、书籍、对话等通用文本,以及多语文本、科学文本、代码等专用文本。为了保证质量和效用,需要依次进行质量过滤、敏感内容过滤、去重和词元化:去掉低质量语料,过滤有毒内容与隐私信息,删除重复模式以避免过度学习,再把原始文本切分成模型能够识别和建模的词元序列。

常见词元化方法有三类:

  • BPE 从字母等基本符号出发,反复寻找共现频率最高的相邻词元对并合并,直到词表达到预定大小。
  • WordPiece 与 BPE 相似,但先训练语言模型,为候选词元对打分,每次选择使训练数据似然增加最多的合并。
  • Unigram 从足够大的初始词元集合出发,反复删除词元,依据删除后训练语料似然的变化选择,直到得到目标词表大小。

Transformer 的输入编码把词元 \(u_t\) 映射为可学习的 \(H\) 维词向量 \(v_t\),再叠加位置编码 \(p_t\)

\[ u_t\mapsto v_t\in\mathbb R^H,\qquad x_t=v_t+p_t,\qquad X=[x_1,\ldots,x_T]. \]

编码后的序列经过多头自注意力模块与前馈网络层。标准 Transformer 的计算和存储复杂度随序列长度平方增长,长文本代价较高;基于状态空间模型(State Space Model,SSM)的改进在保持序列建模能力的同时,可显著提高长文本建模效率。

大规模预训练需要自监督目标。课件列出语言建模(LM)、去噪自编码(DAE)和混合去噪器(MoD)三类任务。LM 给定词元序列 \(u=(u_1,\ldots,u_T)\),根据当前位置之前的 \(u_{<t}\) 自回归预测当前或下一词元;DAE 对输入作随机替换或删除,再要求模型恢复被破坏的词元片段。MoD 把语言建模和去噪自编码统一成不同类型的去噪任务,并用句首特殊词元选择目标:S 去噪器等价于前缀语言建模;R 去噪器随机屏蔽约 15% 的词元,每个遮挡片段含 3–5 个词元;X 去噪器使用至少 12 个词元的长片段,或把损坏比例提高到约 50%,要求模型更强地还原原始信息;输入分别以 [S]、[R]、[X] 开头。

指令微调与参数高效微调

指令微调是用自然语言格式的数据微调预训练后的 LLM。一个格式化实例包含任务描述(指令)、任务输入、任务输出和可选示例,数据可由现有 NLP 数据集转换、人工构建日常对话,或由模型合成。它能改善整体任务性能、增强任务求解能力,并使模型适配专业领域。

全参数微调算力开销很大,参数高效微调只训练少量参数,同时力求达到与全量微调相近的效果。低秩适配(Low-Rank Adaptation,LoRA)的出发点是:模型适配特定任务时,参数更新往往存在较低的内在秩。给定原始矩阵 \(W_0\),用两个低秩矩阵近似更新量:

\[ W=W_0+\Delta W,\qquad \Delta W=AB^T,\qquad A,B\in\mathbb R^{H\times R},\quad R\ll H. \]

微调期间冻结 \(W_0\),只训练 \(A,B\),前向计算改为

\[ h=W_0x+AB^Tx. \]

训练后可把低秩更新合并回 \(W=W_0+AB^T\),因此解码阶段不增加额外开销。原始 LoRA 给各矩阵使用固定且相同的秩;AdaLoRA 在微调中按参数矩阵的重要性动态分配秩,重要矩阵获得更高的秩;QLoRA 把原始矩阵量化为 4 bit,而低秩参数仍用 16 bit 训练,以节省内存。LoRA 已广泛用于 LLaMA、BLOOM 等开源模型。

Adapter Tuning 在 Transformer 每层插入小型适配器,先把 \(H\) 维特征压缩到 \(R\) 维,作非线性变换后恢复到 \(H\) 维,原模型参数保持不变:

\[ h\leftarrow h+\sigma(hW_d)W_u,\qquad W_d\in\mathbb R^{H\times R},\quad W_u\in\mathbb R^{R\times H},\quad R\ll H. \]

前缀微调在每个多头注意力层加入一组可训练前缀参数,可看成虚拟词元的嵌入;提示微调只在输入嵌入层加入可训练提示向量,这是二者的主要区别。

人类对齐、RLHF 与 PPO

预训练和有监督指令微调使模型具备通用能力与指令遵循能力,但模型仍可能生成偏见、冒犯或事实错误的内容。人类对齐要求模型行为与人类价值观、真实意图和社会伦理一致,通常从三方面衡量:有用性要求提供有用信息并简洁、高效地协助任务;诚实性要求真实、客观,并适当表达不确定性;无害性要求避免潜在危害并拒绝危险行为。这些标准难以直接形式化,于是产生了基于人类反馈的强化学习(RLHF)。

RLHF 包含三个阶段:先作指令微调;再让语言模型为指令生成多个候选,由标注员给出偏好,用偏好数据训练奖励模型;最后把语言模型对齐转化为强化学习问题进行微调。在强化学习中,智能体依据环境状态选择动作并获得奖励,目标是最大化累积奖励。对语言模型而言,策略模型接收提示并返回文本,动作空间是词表中的全部词元,状态是当前已经生成的词元序列,奖励模型根据当前输出给出分数。

设参数为 \(\theta\) 的策略产生轨迹 \(\tau\) 的概率为 \(P_\theta(\tau)\),最终累计奖励为 \(R(\tau)\),课件将优化目标写为

\[ \mathcal J(\theta)=\mathbb E_{\tau\sim P_\theta}[R(\tau)]=\sum_\tau R(\tau)P_\theta(\tau),\qquad \theta^*=\arg\max_\theta\mathcal J(\theta). \]

课件把 \(\mathcal J(\theta)\) 本身写成了 \(\arg\max\) 的结果,混淆了目标函数与最优参数;上式把二者分开。

策略梯度利用对数导数技巧,并用采样轨迹均值近似全体轨迹的期望:

\[ \begin{aligned} \nabla\mathcal J(\theta)&=\sum_\tau R(\tau)\nabla P_\theta(\tau)\\ &=\sum_\tau P_\theta(\tau)R(\tau)\nabla\log P_\theta(\tau)\\ &\approx\frac1N\sum_{\tau\sim\mathcal T}R(\tau)\nabla\log P_\theta(\tau),\\ \theta&\leftarrow\theta+\eta\nabla\mathcal J(\theta). \end{aligned} \]

普通策略梯度每次更新参数后都要重新采样,数据利用率和鲁棒性较低。优势函数用状态价值作平均水平基线:

\[ \hat A_t=Q(s_t,a_t)-V(s_t). \]

\(Q(s_t,a_t)\) 是在状态 \(s_t\) 选择动作 \(a_t\) 的奖励,\(V(s_t)\) 是从 \(s_t\) 出发所有决策奖励的期望。课件举例说明:若三个动作都得到正奖励但采中的动作低于平均水平,直接用正奖励会错误地提高该动作概率;减去 \(V(s_t)\) 后,优势为负,才能给出正确方向。

近端策略优化(Proximal Policy Optimization,PPO)在一次更新周期内固定负责采样的旧策略,同一批轨迹可供学习策略做若干轮更新,从而提高数据利用率。课件把这一点称为“离线策略”,但标准 PPO 通常仍归为 on-policy 算法;重复利用当前 rollout 不等于可以长期使用任意旧策略数据。重要性采样用分布 \(p\) 的样本估计分布 \(q\) 下的期望:

\[ \mathbb E_{x\sim q}[f(x)]=\mathbb E_{x\sim p}\left[\frac{q(x)}{p(x)}f(x)\right]. \]

令旧策略采样,策略比率为

\[ r_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t\mid s_t)}, \]

则替代目标是 \(\mathcal J(\theta)=\hat{\mathbb E}_t[r_t(\theta)\hat A_t]\)。为限制更新幅度,PPO 可使用梯度裁剪目标

\[ \mathcal J_{\mathrm{CLIP}}(\theta)=\hat{\mathbb E}_t\left[\min\left(r_t(\theta)\hat A_t,\operatorname{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat A_t\right)\right], \]

也可使用 KL 散度惩罚:

\[ \mathcal J_{\mathrm{KLPEN}}(\theta)=\hat{\mathbb E}_t\left[r_t(\theta)\hat A_t-\beta\operatorname{KL}\bigl(\pi_{\theta_{\mathrm{old}}}(\cdot\mid s_t),\pi_\theta(\cdot\mid s_t)\bigr)\right]. \]

非强化学习对齐与 DPO

RLHF 需要维护、更新多个模型,内存占用大、算法复杂,PPO 的稳定性也不够理想。非强化学习方法改用高质量对齐数据和监督算法,让模型直接区分对齐与未对齐样本,关键在于构造高质量数据集和设计监督对齐目标。数据可由奖励模型给候选输出打分后筛选,也可编写符合对齐标准的指令和示例,让 LLM 自我评价、检查并迭代修正有害内容。

直接偏好优化(Direct Preference Optimization,DPO)不需要显式强化学习。它从带 KL 正则的 PPO 目标出发,把奖励函数改写为策略与参考策略的比值,从而绕开奖励模型。其目标为

\[ \max_\pi\ \mathbb E_{x\sim\mathcal D,y\sim\pi(\cdot\mid x)}[r(x,y)]-\beta\operatorname{KL}[\pi(y\mid x),\pi_{\mathrm{ref}}(y\mid x)]. \]

对固定 \(x\),归一化项与待优化策略无关,最优策略为

\[ Z(x)=\sum_y\pi_{\mathrm{ref}}(y\mid x)\exp\left(\frac{r(x,y)}{\beta}\right),\qquad \pi^*(y\mid x)=\frac{1}{Z(x)}\pi_{\mathrm{ref}}(y\mid x)\exp\left(\frac{r(x,y)}{\beta}\right). \]

因此奖励可写成

\[ r(x,y)=\beta\log\frac{\pi^*(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)}+\beta\log Z(x). \]

奖励建模使用 Bradley–Terry 形式。对偏好输出 \(y^+\) 与非偏好输出 \(y^-\),有

\[ P(y^+\succ y^-\mid x)=\frac{e^{r(x,y^+)}}{e^{r(x,y^+)}+e^{r(x,y^-)}}=\sigma(r(x,y^+)-r(x,y^-)). \]

代入策略—奖励关系后,\(Z(x)\) 抵消,得到 DPO 损失:

\[ \mathcal L_{\mathrm{DPO}}(\theta)=-\mathbb E_{(x,y^+,y^-)\sim\mathcal D}\log\sigma\left(\beta\log\frac{\pi_\theta(y^+\mid x)}{\pi_{\mathrm{ref}}(y^+\mid x)}-\beta\log\frac{\pi_\theta(y^-\mid x)}{\pi_{\mathrm{ref}}(y^-\mid x)}\right). \]

其他监督对齐算法仍以从输入 \(x\) 生成正例 \(y^+\) 的序列交叉熵为主,再加入使用正负例的辅助目标:

\[ \mathcal L_{\mathrm{total}}=-\mathbb E_{(x,y^+)\sim\mathcal D}\sum_{t=1}^{T}\log p(y_t^+\mid x,y_{<t}^+)+\mathcal L_{\mathrm{aux}}(y^+,y^-,x). \]

基于质量提示的做法给正、负例附加不同前缀,或在输出前加入“5 分奖励的回复:”“排名第二的回复:”一类奖励标记;基于质量对比的做法从同一输入的多个输出中采样多组 \((y^+,y^-,x)\),采用对比式或排序式目标教模型分辨好坏输出。

解码、压缩与低资源部署

LLM 生成本质上是概率采样。自回归解码时,模型 \(M\) 根据上下文 \(u=[u_1,\ldots,u_t]\) 给出下一词元分布,用某种策略选择 \(u'\),把它接回上下文继续生成,遇到结束词元或长度上限时停止。

贪心搜索每步都取最高概率词元,\(u_i=\arg\max_uP(u\mid u_{<i})\);概率采样则按 \(u_i\sim P(u\mid u_{<i})\) 选择,使 coffee 之外的 water、tea 等词仍有机会被取到,从而增加多样性。贪心搜索可能因局部最优错过整体概率更高的句子。束搜索每步保留概率最高的前 \(n\) 个候选,最终选整体最优;\(n=1\) 时退化为贪心搜索。由于每生成一个词都会乘一个小于 1 的概率,束搜索偏爱短句,可把句子概率除以长度的 \(\alpha\) 次幂作长度惩罚;还可施加 n 元重复惩罚,禁止连续重复的 \(n\) 个词元。

直接在整个词表中随机采样可能选到不相干词元。温度采样调整 softmax 的尖锐程度:

\[ P(u_j)=\frac{\exp(l_j/t)}{\sum_k\exp(l_k/t)}, \]

其中 \(l_j\) 是候选词元 logit,降低温度 \(t\) 会提高高概率词元被选中的机会。Top-k 只在概率最高的 \(k\) 个词元中采样;Top-p 选择累积概率达到阈值 \(p\) 的最小词元集合,再在集合内采样。课件比较了贪心、贪心加重复惩罚和 Top-p 的生成差异。

自回归逐词生成具有串行瓶颈。推测解码利用“小模型较容易预测已有部分答案后的后续词元”来并行提出候选,再由大模型验证;非自回归解码根据输入一次并行生成所有词元;早退机制在满足判断条件时提前结束后续网络层计算,直接生成词元。

大模型部署显存和计算代价高,资源受限时常用三类压缩。量化把浮点权重或激活映射为整数,常见为 8 bit;量化向量由缩放因子 \(S\) 和零点 \(Z\) 控制,逐层权重量化可最小化重构损失:

\[ \hat W=\arg\min_{\hat W}\lVert XW-X\hat W\rVert_2^2. \]

蒸馏用教师模型输出来训练更简单的学生模型,增加蒸馏损失使学生输出接近教师;剪枝在尽量不损伤性能的前提下减少参数。结构化剪枝可删除神经元、通道甚至中间层;非结构化剪枝不改变网络结构,而用 0/1 掩码与权重相乘,把被剪位置存成 0。

提示学习

提示是包含任务信息的人工输入或可学习特征向量,用来引导模型提取当前任务所需的信息。提示学习通过选择或生成合适提示,让同一模型适应不同输入和下游任务,不必为每项任务分别训练完整模型。由于 LLM 微调代价高,而提示质量会显著影响表现,Prompt Engineering 需要同时考虑四项要素:任务描述、输入数据、上下文信息和提示策略。

任务描述应清晰具体地说明目标,必要时详细规定输入、输出格式,并用关键词或特殊符号强调重要约束。输入通常可用自然语言表示;知识图谱、表格等结构化数据则可线性化成文本,也可用程序数据结构存储,以便外部执行器准确读取。上下文可加入搜索引擎检索的参考文档,并应合理格式化;上下文示例还能让模型归纳任务目标、输出格式以及输入—输出映射。提示策略可在前后添加引导语,例如“让我们一步一步地思考”激发逐步推理,“你是这项任务的专家”提高特定任务表现,也可以把复杂任务拆成多个子提示,以多轮对话逐步输入。

检索增强生成 RAG

检索增强生成(Retrieval-Augmented Generation,RAG)的流程是:接收问题,在知识库中检索相关知识,把结果作为上下文增强提示,再交给 LLM 生成答案。向量数据库与传统数据库不同:传统数据库存结构化表格,依靠精确匹配和 SQL;向量数据库存高维非结构化表示,依靠向量相似性和近似最近邻搜索。向量能捕捉语义,克服关键词匹配局限,可直接表示文本、图像、音频,并支持大规模数据的毫秒级检索,课件以十亿级向量库为例说明其扩展性。

数据向量化可从稀疏词袋表示或稠密 embedding 出发。句子级表示可采用平均词向量、TF-IDF 或 SIF 加权平均、Sentence-BERT(SBERT)和 Universal Sentence Encoder。查询和文档映射到同一嵌入空间后即可作相似性搜索。索引(Indexing)是为高维向量设计的特殊结构,用于近似最近邻(ANN),它跳过无关数据、直接定位候选,并优化排序与分组以减少开销。常见索引包括 HNSW、IVF-PQ、Flat 暴力搜索和 PQ。检索出的一个或多个片段被放进 Prompt 的 Context,原问题放进 Question,再由 LLM 生成。

RAG 针对 LLM 的四项局限:训练知识不能实时更新,静态知识会过时,缺少事实支撑时会幻觉,输入窗口不能一次容纳超长文档。它能接入实时可靠知识、减少无依据生成、检索长文档任意片段,并让回答附带 URL 或文献来源,提升可追溯性。不过,RAG 高度依赖召回质量;文档预处理、索引、检索与上下文拼接使系统更复杂;存储和查询成本增加;拼接过多片段会浪费 token 并引入干扰;有限召回不保证信息充分;查询与文档库语言不兼容时,嵌入空间差异也会降低多语检索效果。

RAG 可用于依据公司文档回答问题的智能客服、论文检索与总结、医学文献检索辅助诊断、法规检索与法律咨询。课件给出的实践资源是 rag-from-scratchrag-intro-chat-with-docsadvanced-rag-techniques

LLM 的其他应用

LLM 的通用性带来丰富场景:研究中可作代码生成与分析、信息提取和摘要,生活中可用于医疗辅助诊断、股票趋势预测等。传统 NLP 的三类经典任务是序列标注、关系抽取和文本生成:LLM 可通过上下文学习或特殊提示完成序列标注,利用推理能力作关系抽取,并通过交互提高文本生成质量。

LLM 与信息检索互补:检索从外部高效获得信息,LLM 负责语言理解、推理和生成;它还可充当标注者,为传统检索模型补充高质量训练数据;可改写查询以帮助检索模型理解需求,也可解释、扩充查询后与原查询拼接,获得更全面的结果。传统推荐系统缺少通用知识,难处理冷启动和领域迁移;LLM 可直接提供推荐,也可增强推荐数据、语义表示和用户偏好表示,还可构造推荐模拟器,仿真用户与系统的真实交互。

本讲要求了解 LLM 的预训练、微调与对齐,提示学习和 RAG;编程实践对应网络学堂的第 12 讲教程。

评论