Agent 速成笔记 · 第 3 章 大语言模型基础

Agent 速成笔记 · 第 3 章 大语言模型基础

源:Datawhale《Hello-Agents》第 3 章 | 定位:概念与原理 | 一句话:讲清 Agent 的「大脑」——LLM 的架构原理、交互方式、能力来源与固有边界


0. 一章速览(30 秒)

  • 一句话:LLM 的本质是「给定前文,预测下一个最可能的词元」的自回归模型;Transformer 的自注意力让它摆脱循环、可并行,直接建立任意两词元间的依赖;Agent 的一次「思考」就是一次 token 序列进、token 序列出的调用。
  • 本章解决什么问题:Agent 的「大脑」怎么工作——知识与推理能力从哪来、为什么会有幻觉,以及开发者能拧动哪些旋钮(提示、采样参数、模型选型)。
  • 必须记住的 5 个点:
    • 自注意力公式 \(\text{Attention}(Q,K,V)=\text{softmax}(QK^{T}/\sqrt{d_k})V\):Q 是「提问」、K 是「索引」、V 是「内容」,本质是按内容做加权检索,而非按位置。
    • 自注意力不含顺序信息,必须额外注入位置编码;Decoder-Only 靠因果掩码保证训练时不「偷看」未来。
    • 采样参数决定输出的确定/发散:温度改变分布形状,Top-k / Top-p 改变候选集大小,同设时优先级为 温度 → Top-k → Top-p。
    • 上下文窗口与 API 计费都以 Token 计;分词粒度还会制造「2+2 算错」这类怪现象。
    • LLM 有幻觉、知识截止、偏见三大固有缺陷;缩放法则说明能力随规模平滑提升并「涌现」,复杂 Agent 必须选足够大的模型。

1. 从 N-gram 到 Transformer(3.1.1)

1.1 语言模型要算什么

语言模型(Language Model, LM)的根本任务是计算一个词序列(句子)出现的概率——概率越高,句子越「通顺自然」。它是智能体理解人类指令、生成回应的基础。句子 \(S=w_1,\dots,w_m\) 的概率按链式法则拆成条件概率连乘:

\[P(S)=P(w_1)\cdot P(w_2\mid w_1)\cdot P(w_3\mid w_1,w_2)\cdots P(w_m\mid w_1,\dots,w_{m-1}) \]

\(w_i\) 是第 \(i\) 个词,\(P(w_i\mid w_1,\dots,w_{i-1})\) 表示「已知前 \(i-1\) 个词时第 \(i\) 个词出现的概率」。该式无法直接计算——长词序列可能从未在语料库中出现过。

1.2 N-gram 与马尔可夫假设

马尔可夫假设(Markov Assumption):不必回溯一个词的全部历史,一个词的出现概率只与它前面有限的 \(n-1\) 个词有关。基于此的模型就是 N-gram 模型,N 代表上下文窗口大小。条件概率由此大幅简化:

\[P(w_i\mid w_1,\dots,w_{i-1})\approx P(w_i\mid w_{i-1})\ (\text{Bigram});\quad P(w_i\mid w_1,\dots,w_{i-1})\approx P(w_i\mid w_{i-2},w_{i-1})\ (\text{Trigram}) \]

概率用最大似然估计(Maximum Likelihood Estimation, MLE) 估——最可能出现的,就是数据里出现次数最多的:

\[P(w_i\mid w_{i-1})=\frac{Count(w_{i-1},w_i)}{Count(w_{i-1})} \]

\(Count(w_{i-1},w_i)\) 是词对连续出现次数,\(Count(w_{i-1})\) 是单词出现总次数。以语料 datawhale agent learns、datawhale agent works(共 6 词)为例,句子 datawhale agent learns 的概率为 \(2/6\times 2/2\times 1/2\approx0.167\)。

N-gram 有两个致命缺陷(高频考点):一是数据稀疏性(Sparsity),从未出现的词序列概率直接为 0,平滑(Smoothing)只能缓解无法根除;二是泛化能力差,模型把词当作孤立离散的符号,理解不了语义相似性——见过很多次 agent learns,却算不出 robot learns。

1.3 神经网络语言模型与词嵌入

2003 年 Bengio 等人提出的前馈神经网络语言模型(Feedforward Neural Network Language Model) 改用连续向量表示词:把每个词映射为高维连续向量空间中的一个点,该向量称词嵌入(Word Embedding),语义相近的词向量位置也相近(agent 近 robot、远 apple);再用神经网络学习「前 \(n-1\) 个词的词向量 → 下一个词的概率分布」这一映射。关键性质是词嵌入并非人工标注,而是训练中自动学出来的。度量相似度常用余弦相似度(Cosine Similarity):

\[\text{similarity}(\vec a,\vec b)=\cos\theta=\frac{\vec a\cdot\vec b}{|\vec a|\,|\vec b|} \]

\(\vec a\cdot\vec b\) 是点积,\(|\vec a|,|\vec b|\) 是模长,结果落在 \([-1,1]\):夹角 0° 为 1(完全相关),90° 为 0(无关),180° 为 -1(完全负相关)。经典证据是 vector('King') - vector('Man') + vector('Woman') 与 vector('Queen') 极为接近,说明向量空间学到了「性别」「皇室」这类抽象概念。遗留限制:上下文窗口仍固定,只能看前 \(n-1\) 个词。

1.4 RNN 与 LSTM:给网络加「记忆」

循环神经网络(Recurrent Neural Network, RNN) 引入隐藏状态(hidden state) 向量,可理解为短期记忆:每步读入当前词,结合上一时间步的隐藏状态,生成新的隐藏状态传给下一刻。其病灶是长期依赖问题(Long-term Dependency Problem)——序列长度等于网络深度,序列一长,梯度反向传播经过多次连乘会迅速趋向零(梯度消失)或变得极大(梯度爆炸)。长短时记忆网络(Long Short-Term Memory, LSTM) 是为解决该问题设计的特殊 RNN,核心创新是细胞状态(Cell State) 加门控机制(Gating Mechanism):细胞状态是独立于隐藏状态的信息通路;门控由小型神经网络构成,学习性地决定信息是否通过——遗忘门丢弃上一时刻细胞状态中的部分信息,输入门把当前输入的新信息存入细胞状态,输出门决定从细胞状态输出哪些信息到隐藏状态。但瓶颈仍在:RNN/LSTM 必须按顺序处理,第 \(t\) 步要等第 \(t-1\) 步算完,无法大规模并行,直接限制了模型规模与训练速度。


2. Transformer 架构解析(3.1.2)

Transformer 于 2017 年由谷歌团队在《Attention is all you need》中提出,它完全抛弃循环结构,只依赖注意力(Attention) 机制捕捉序列内依赖,从而实现真正意义上的并行计算。

2.1 Encoder-Decoder 整体结构

最初的 Transformer 为端到端机器翻译设计,遵循编码器-解码器(Encoder-Decoder) 架构:编码器(Encoder) 负责「理解」输入句子,为每个词元生成富含上下文信息的向量表示;解码器(Decoder) 负责「生成」目标句子,参考已生成的前文并「咨询」编码器的理解结果。编码器层 = 多头自注意力 + 前馈网络,各配一次 Add & Norm;解码器层多一个交叉注意力(Cross-Attention) 子层——Q 来自解码器自身,K、V 来自编码器输出,这正是「向编码器提问」的实现方式,且解码器自注意力必须带掩码。

2.2 自注意力:核心机制与公式

读句子「The agent learns because it is intelligent.」时,读到 it 的人脑会自动把注意力放到前面的 agent 上。自注意力(Self-Attention) 就是对这种现象的数学建模:处理每个词时兼顾句中所有其他词,并分配不同的「注意力权重」;权重越高,该词信息在当前词表示中占比越大。实现上为每个词元引入三个可学习角色:

  • 查询(Query, Q):当前词元,正在主动「查询」其他词元以获取信息。
  • 键(Key, K):句中可被查询的词元的「标签」或「索引」。
  • 值(Value, V):词元本身携带的「内容」或「信息」。

三者由同一个词嵌入向量分别乘以三个可学习权重矩阵 \(W^Q,W^K,W^V\) 得到。计算分四步,可想象成一次高效的开卷考试:每个词生成自己的 \(Q,K,V\);用当前词的 \(Q\) 与句中所有词(含自己) 的 \(K\) 做点积,得分反映其他词对该词的重要程度;所有得分除以缩放因子 \(\sqrt{d_k}\),再用 Softmax 转成总和为 1 的权重;权重分别乘以各词的 \(V\) 后相加,得到该词融合全局上下文后的新表示。一个公式概括:

\[\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^{T}}{\sqrt{d_k}}\right)V \]

  • \(QK^{T}\):一次矩阵乘法同时算出所有词两两之间的相关性得分,这就是并行化的来源——无需按时间步循环。
  • \(d_k\) 是 K 向量维度,除以 \(\sqrt{d_k}\) 是为了缩放,避免维度变大时点积过大、Softmax 饱和导致梯度趋近于零;\(\text{softmax}(\cdot)\) 把一行得分压成和为 1 的注意力权重,末尾乘 \(V\) 即按权重对内容加权求和。

掩码(Mask) 在 Softmax 之前使用:把不该被看到的位置得分置为极大负数(代码写 -1e9),Softmax 后权重趋近 0,数学上杜绝信息泄漏。代价方面,注意力要把每个词与所有词配对计算,复杂度随序列长度平方增长——这是「上下文窗口不是越大越好」的根源。

2.3 多头注意力

只做一次注意力,模型可能只学会关注一种关联,但指代、时态、从属关系需要同时被捕捉。多头注意力(Multi-Head Attention) 把 Q、K、V 在维度上切成 \(h\) 份(\(h\) 即「头」数),每份独立做一次单头注意力,相当于让 \(h\) 个专家从不同角度审视同一句话;最后把 \(h\) 份输出拼接起来,再经一次线性变换 \(W^O\) 整合。收益是让模型同时关注来自不同位置、不同表示子空间的信息。

工程约束:\(d_{model}\) 必须能被头数整除,每头维度 \(d_k=d_{model}/h\);实现的关键动作是 split_heads((batch, seq, d_model) → (batch, heads, seq, d_k))与 combine_heads(还原回去)。

2.4 位置编码

自注意力只关心词元间关系,对顺序完全不敏感——在它眼里 agent learns 与 learns agent 等价,而顺序恰恰是语义的一部分。位置编码(Positional Encoding) 为每个词元的嵌入向量额外加上一个表示位置的「位置向量」,且该向量不是学出来的,而是用固定数学公式算出来的:即使两个词元自身嵌入完全相同,位置不同、加上不同位置编码后,输入向量也变得独一无二。原论文用正弦/余弦:

\[PE_{(pos,2i)}=\sin\!\left(\frac{pos}{10000^{2i/d_{model}}}\right),\qquad PE_{(pos,2i+1)}=\cos\!\left(\frac{pos}{10000^{2i/d_{model}}}\right) \]

其中 \(pos\) 是词元位置,\(i\) 是位置向量的维度索引(0 到 \(d_{model}/2\)),\(d_{model}\) 是词嵌入维度;偶数维用 sin、奇数维用 cos。不同维度对应不同频率的周期函数,等价于为每个位置生成一组多尺度「坐标指纹」,能同时表达绝对与相对位置。

2.5 前馈网络、残差连接与层归一化

逐位置前馈网络(Position-wise Feed-Forward Network, FFN) 紧跟多头注意力之后:若注意力层的职责是从整个序列中动态聚合信息,FFN 的职责就是从聚合结果中提取更高阶特征。

\[\text{FFN}(x)=\max(0,\,xW_1+b_1)W_2+b_2 \]

\(x\) 是注意力子层的输出,\(W_1,b_1,W_2,b_2\) 是可学习参数,\(\max(0,\cdot)\) 即 ReLU。「逐位置」指它对序列中每个词元向量独立作用——长度为 seq_len 的序列,FFN 被调用 seq_len 次,但所有位置共享同一组权重。中间层维度 d_ff 远大于 d_model(典型 d_ff = 4 * d_model),经 ReLU 后映射回 d_model,这种「先扩大再缩小」有助于学到更丰富的特征。

所有子模块都被 Add & Norm 包裹,两部分各解决一个独立问题:

  • 残差连接(Add):把子模块输入直接加到输出上,\(\text{Output}=x+\text{Sublayer}(x)\)。反向传播时梯度可绕过子模块直接向前传,解决了深层网络的梯度消失问题。
  • 层归一化(Norm):对单个样本的所有特征做归一化(均值 0、方差 1),解决内部协变量偏移(Internal Covariate Shift) 问题,让每层输入分布稳定,加速收敛并提升训练稳定性。

3. Decoder-Only 与自回归生成(3.1.3)

3.1 为什么要砍掉编码器

Transformer 的设计哲学是「先理解,再生成」;但 OpenAI 开发 GPT(Generative Pre-trained Transformer) 时提出一个更简单的思想——语言的核心任务,不就是预测下一个最有可能出现的词吗? 无论回答问题、写故事还是生成代码,本质上都是在已有文本后面一个词一个词地添加最合理的内容。于是 GPT 完全抛弃编码器,只保留解码器,这就是 Decoder-Only 架构的由来。

其工作模式叫自回归(Autoregressive),过程极为朴素:起始文本(如 Datawhale Agent is)→ 预测下一个最可能的词(如 a)→ 把该词追加到输入末尾形成新输入 → 再预测下一个词(如 powerful)→ 重复,直到生成完整句子或触发停止条件。

3.2 掩码自注意力:训练时不许偷看答案

训练时模型一次性拿到完整文本并行送入,怎么保证预测第 \(t+1\) 个词时不偷看答案?答案是掩码自注意力(Masked Self-Attention),也叫因果掩码:在注意力分数算出后、Softmax 归一化前,把位于当前位置之后的词元对应分数替换为极大负数,Softmax 后这些位置概率变为 0,模型在数学上被阻止关注后面的信息。生成阶段则更直接:未来的词还没生成出来,模型只能以已生成内容为上下文逐步预测。最关键的是,掩码自注意力保证了训练方式与生成时的自回归使用方式一致,模型始终只依赖当前位置之前的信息。

3.3 三个优势

优势 说明
训练目标统一 唯一任务就是「预测下一个词」,非常适合在海量无标注文本上预训练
结构简单、易扩展 组件更少,更易规模化;GPT-4、Llama 等数千亿至万亿参数模型都基于此架构
天然适合生成任务 与对话、写作、代码生成完美契合,是它成为通用 Agent 基础的核心原因

4. 提示工程(3.2.1)

提示(Prompt)是我们与大模型这个「大脑」沟通的语言;提示工程就是设计精准提示、引导模型产生期望输出的技术。对 Agent 而言,好的提示直接决定多智能体协作分工的效率。

4.1 采样参数:模型输出的三个旋钮

采样参数的本质,是在原始 Softmax 分布基础上按不同策略「重新调整」或「截断」分布,从而改变下一个 token 的选择。原始分布 \(p_i=\dfrac{e^{z_i}}{\sum_{j=1}^{k}e^{z_j}}\),其中 \(z_i\) 是模型对第 \(i\) 个 token 给出的原始分数(logits),\(k\) 是候选 token 总数。

温度(Temperature) 引入温度系数 \(T>0\),把 Softmax 改写为:

\[p_i^{(T)}=\frac{e^{z_i/T}}{\sum_{j=1}^{k}e^{z_j/T}} \]

\(T\) 变小时分布更陡峭,高概率项被放大,输出更「保守」、重复率更高;\(T\) 变大时分布更平坦,低概率项权重提升,输出更「多样」但可能不连贯。

Top-k 把 token 按概率降序取前 \(k\) 个组成「候选集」,再在候选集内归一化:\(\hat p_i=\dfrac{p_i}{\sum_{j\in\text{候选集}}p_j}\)。\(k=1\) 时输出完全确定,退化为贪心采样(greedy)。

Top-p(核采样) 按概率降序累加,直到累积和首次达到或超过阈值 \(p\)(\(\sum_{i\in S}p_{(i)}\geq p\)),累加途中的 token 组成「核集合」并归一化。相比固定截断大小的 Top-k,Top-p 能动态适应概率分布的长尾特性。

三者如何协同(易错点):同设时按分层过滤工作,优先级为 温度调整 → Top-k → Top-p——Top-k 保留概率最高的 k 个后,Top-p 再从中选取累积概率 ≥ p 的最小集合,最终候选集是两者交集;实践中 Top-k 与 Top-p 二选一即可。退化情形常考:温度设 0 时 Top-k 与 Top-p 无关紧要;Top-k 设 1 时温度与 Top-p 也无关紧要。

温度区间 输出特征 适用场景
\(0\leq T<0.3\) 精准、确定 事实问答、数据计算、代码生成、法律条文解读、技术文档
\(0.3\leq T<0.7\) 平衡、自然 客服交互、聊天机器人、邮件撰写、产品文案
\(0.7\leq T<2\) 创新、发散 诗歌创作、科幻构思、广告 slogan、艺术灵感

4.2 零样本、单样本与少样本提示

按提供给模型的示例(Exemplar)数量划分,以情感分类为例:

类型 做法 特点
零样本(Zero-shot) 不给示例,直接下指令 依赖预训练后获得的强大泛化能力
单样本(One-shot) 给 1 个完整「问题-答案」对 展示任务的格式与期望输出风格,模型模仿补全
少样本(Few-shot) 给多个示例,覆盖不同情况 让模型更准确理解任务的细节、边界与细微差别,性能更好

少样本示例的设计要点是覆盖不同类别:同时给出「负面」「中性」的例子,模型才能更可靠地把新样本判为「正面」,而不是简单复制示例标签。

4.3 从预训练到后训练:指令调优改变了什么

预训练在海量无标注文本上训练,唯一目标是预测下一个词,得到的是「文本补全」模型(如早期 GPT-3)——擅长续写,但不一定理解并执行人类指令。指令调优(Instruction Tuning) 则是用大量「指令-回答」格式数据对预训练模型再做微调,使其更好地理解并遵循指令。结论:ChatGPT、DeepSeek、Qwen 都是各自家族中经过指令调优的版本。人类反馈强化学习(RLHF) 是让模型与人类意图对齐的关键技术——ChatGPT 相比 GPT-3 的跃迁正是靠它,它同时被列为从数据源头减少幻觉的手段之一。

这对写提示有直接影响。对「文本补全」模型,必须用少样本提示「教会」它做什么:

这是一段将英文翻译成中文的程序。
英文:Hello
中文:你好
英文:How are you?
中文:

对「指令调优」模型,可以直接下达指令:

请将下面的英文翻译成中文:
How are you?

发现「模型不听话」时,先确认用的是补全模型还是指令调优模型;若是前者,写指令是徒劳的,应改用少样本示例。

4.4 基础提示技巧

  • 上下文示例(In-context Example):与少样本提示同源,在提示中给出清晰的输入输出示例来「教会」模型处理请求,在复杂格式或特定风格的任务上尤其有效,典型用法是约束 JSON 输出(亦可配合角色扮演,用「你现在是一位资深 Python 专家」等设定引导回答风格与知识范围):
评论:这款"星尘"笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}

这对 Agent 尤其重要:Agent 需要可程序化解析的模型输出,格式约束提示是把 LLM 输出接入代码流水线的最基本手段。

4.5 思维链(Chain-of-Thought, CoT)

对于需要逻辑推理、计算或多步骤思考的复杂问题,直接让模型给出答案往往容易出错。思维链(CoT) 的做法是在提示中加一句简单引导语,如「请逐步思考」或「Let's think step by step」,引导模型显式地一步步展开推理,从而提升复杂任务准确率。以总胜率问题为例(80 场赢 60%,新赛季 15 场赢 12 场):直接问容易算错,加上引导语后模型会输出:第一步 \(80\times60\%=48\) 场;第二步 总场数 \(80+15=95\)、总胜场 \(48+12=60\);第三步 \(60/95\approx63.16\%\)。

两个附带收益:显式推理使回答更可信、更易检查与纠正——可检查即可干预、可纠错,这对 Agent 至关重要;此外 CoT 是「能力涌现」的产物,规模足够大时才显著有效。


5. 文本分词(3.2.2)

5.1 为什么需要分词

计算机只能理解数字。把文本序列转换为数字序列的过程叫分词(Tokenization);分词器(Tokenizer) 定义规则,把原始文本切成最小单元——词元(Token)。两种朴素策略各有硬伤:

粒度 优点 致命缺陷
按词(Word-based) 直观、语义单元完整 词表爆炸;未登录词(Out-Of-Vocabulary, OOV) 无法处理;look/looks/looking 被当作三个无关词
按字符(Character-based) 词表极小、无 OOV 单字符大多不具独立语义,模型需花大量精力学「字符如何拼成词」,效率低

现代方案是子词分词(Subword Tokenization),核心是折中:常见的词(如 agent)保留为完整词元,不常见的词(如 Tokenization)拆成多个有意义的子词片段(如 Token + ization),既控制词表大小,又让模型通过组合子词理解和生成新词。

5.2 字节对编码(BPE)

字节对编码(Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一,GPT 系列模型即采用它。核心是一个「贪心」的合并过程:

  1. 初始化:把词表初始化为所有在语料库中出现过的基本字符。
  2. 迭代合并:统计所有相邻词元对的出现频率,找到频率最高的一对,合并为新词元并加入词表。
  3. 重复:重复第 2 步,直到词表大小达到预设阈值。

以迷你语料库 {"hug":1, "pug":1, "pun":1, "bun":1} 为例,目标词表大小 10,四次合并依次为 ('u','g')→ug、('ug','</w>')→ug</w>、('u','n')→un、('un','</w>')→un</w>(</w> 表示词尾)。分词时对新词 bug,先查 bug(不在词表)→查 bu(不在)→查 b 与 ug(都在),于是切为 ['b','ug']——这就是 BPE 从长到短的贪心回退逻辑。

5.3 BPE 的两个重要衍生

算法 出处 / 使用者 与 BPE 的关键差异
WordPiece Google BERT 采用 合并标准是「最大化提升语料库的语言模型概率」,而非最高频率
SentencePiece Google 开源的分词工具,Llama 采用 把空格视作普通字符(_),分词与解码完全可逆且不依赖特定语言

易混点:BPE 与 WordPiece 是算法,SentencePiece 是工具。

5.4 分词器对开发者的三个实际意义

理解分词细节不是目的,但它的后果直接关系到 Agent 的性能、成本与稳定性:

  1. 上下文窗口与成本:上下文窗口(如 8K、128K)以 Token 数量计算,不是字符数或单词数;同一段话在不同语言或不同分词器下 Token 数可能相差巨大,而大多数 API 按 Token 计费。精确管理输入长度既是避免超限的基础,也是控制运行成本的关键。
  2. 模型表现的异常:模型「犯蠢」的根源有时在分词——它可能很擅长 2 + 2,但对 2+2(无空格)就出错,因为后者被当成一个独立、不常见的词元;大小写不同也可能被切成完全不同的 Token 序列。设计提示词与解析输出时考虑这些陷阱,能显著提升 Agent 的鲁棒性。

6. 模型选型:本地运行与生态全景(3.2.3 / 3.2.4)

6.1 本地运行开源模型的最小链路

API 调用快捷方便,但对处理敏感数据、离线运行或精细控制成本的场景,本地部署更关键。Hugging Face Transformers 提供加载使用数以万计预训练模型的标准化接口;本章以 Qwen/Qwen1.5-0.5B-Chat(约 5 亿参数的对话模型)为入门对象。要记住的是这条链路,而非安装步骤:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Qwen/Qwen1.5-0.5B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_id)                  # 与模型匹配的分词器
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)    # 因果语言模型

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(device)     # 文本 -> input_ids
generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
generated_ids = [out[len(inp):] for inp, out in zip(model_inputs.input_ids, generated_ids)]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]   # ids -> 文本

这段走通了模型交互的完整闭环:对话模板 → 分词成 input_ids → generate 生成新 id → 裁掉输入部分 → decode 回文本。其中 max_new_tokens 控制最多生成多少新 Token;apply_chat_template 把 {role, content} 消息列表套用模型特定的对话模板——换了模型就必须换模板,这是最容易踩的坑。

6.2 八个选型维度

选择模型不是追求「最大最强」,而是在性能、成本、速度和部署方式之间权衡。八个维度:性能与能力(最核心,可参考 LMSys Chatbot Arena Leaderboard)、成本(闭源按 Token 计费;开源为本地硬件与运维)、速度/延迟(实时交互 Agent 的关键,GPT-3.5 Turbo、Claude 3.5 Sonnet 等延迟更优)、上下文窗口(长文档与代码库分析需 128K Token 或更高)、部署方式(API 最省事但数据交给第三方;本地部署保隐私但硬件要求更高)、生态与工具链(社区支持、教程、微调工具与兼容框架如 LangChain、LlamaIndex、Transformers)、可微调性(特定领域场景关键,开源更灵活)、安全性与伦理(偏见、毒性、幻觉表现与负责任 AI 投入)。

6.3 闭源与开源阵营速览

阵营 / 家族 关键定位与技术特点
闭源 · OpenAI GPT GPT-3 开启大模型时代;ChatGPT 引入 RLHF 实现与人类意图对齐;GPT-4 开启多模态;GPT-5 提升多模态与通用智能
闭源 · Google Gemini 原生多模态(文本、代码、音视频、图像)+ 超长上下文窗口;分 Ultra(复杂任务)/Pro(广泛任务)/Nano(设备端),2.5 系列强化推理与速度
闭源 · Anthropic Claude 以 AI 安全与长文档处理、指令遵循的可靠性著称;Claude 3 分 Opus/Sonnet/Haiku 三档,Claude 4 系列强化复杂推理与代码生成
闭源 · 国内主流 百度文心一言、腾讯混元、华为盘古-α、科大讯飞星火、月之暗面等,中文优势明显
开源 · Meta Llama 开源里程碑;Llama 4(2025 年 4 月)首批采用 MoE(混合专家) 架构以提升计算效率,Scout 支持 1000 万 token 上下文
开源 · Mistral AI 以「小尺寸、高性能」著称;Mistral Medium 3.1(2025 年 8 月)在代码、STEM 推理、跨领域问答上表现突出
开源 · 国内力量 阿里巴巴通义千问(Qwen)、清华与智谱 AI 的 ChatGLM,中文能力强、社区活跃

一句话总结:闭源「开箱即用」,开源「随心所欲」。


7. 缩放法则与固有局限(3.3)

7.1 缩放法则(Scaling Laws)

缩放法则揭示模型性能与模型参数量、训练数据量、计算资源之间存在可预测的幂律关系:在对数-对数坐标系下,性能(通常用损失 Loss 衡量)与这三者都呈平滑幂律关系。只要按比例持续增加三要素,性能就会可预测地平滑提升、不出现明显瓶颈——资源允许时应尽可能扩大规模与数据量。

Chinchilla 定律(DeepMind,2022)做了关键修正:给定计算预算下,参数量与数据量存在最优配比,最优模型比之前普遍认为的更小,但需用多得多的数据训练。典型例证:700 亿参数的 Chinchilla 模型因使用了比 GPT-3(1750 亿参数)多 4 倍的数据,性能反而超越后者。这纠正了「越大越好」的片面认知,强调数据效率,并指导了 Llama 等高效大模型的设计。

能力涌现是缩放法则最令人惊奇的产物:规模达到一定阈值后,模型会突然展现小模型中完全不存在或表现极差的全新能力。链式思考(CoT)、指令遵循(Instruction Following)、多步推理、代码生成,都在参数量达到数百亿甚至千亿级别后才显著出现。对 Agent 的直接结论:选择足够大规模的模型是实现复杂规划与自主决策的前提——小模型 Agent 规划表现不佳,往往不是提示写得不好,而是规模不够。

7.2 模型幻觉(Hallucination)

定义:模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或生成了不存在的事实、实体、事件;本质是过度自信地「编造」 信息,而非准确检索或推理。

类型 表现
事实性幻觉(Factual) 生成与现实世界事实不符的信息
忠实性幻觉(Faithfulness) 在摘要、翻译等任务中,生成内容未忠实反映源文本含义
内在幻觉(Intrinsic) 生成内容与输入信息直接矛盾

三大成因:数据侧(训练数据可能含错误或矛盾信息)、机制侧(自回归只是在预测下一个词元,没有内置事实核查模块)、推理侧(复杂推理中逻辑链出错,从而编造错误结论)。后果如:旅游规划 Agent 推荐现实中不存在的景点,或预订航班号错误的机票。

缓解手段分三层:数据层面用高质量数据清洗、引入事实性知识、RLHF;模型层面探索新架构或让模型表达对生成内容的不确定性;推理与生成层面用检索增强生成(RAG)、多步推理与自检/外部验证、引入外部工具(搜索引擎、计算器、代码解释器)。其中 RAG(Retrieval-Augmented Generation,检索增强生成) 最有效:生成前先从外部知识库检索相关信息,把结果作为上下文喂给模型,引导其基于事实回答。幻觉短期内难以完全消除,但上述策略可显著降低其频率与影响——「工具 + 检索 + 验证」正是智能体架构的核心价值。

7.3 另外两个固有局限

知识截止(时效性不足):LLM 的能力来源于训练数据,它掌握的知识止于数据收集的那一刻,此后的事件与新概念无法感知或正确回答。训练数据偏见:训练数据包含人类社会的偏见与刻板印象,模型不可避免地吸收并反映它们。二者与幻觉一样都不是「调参能修好」的 bug,而是架构与训练范式的固有属性,只能靠外部系统对冲。


8. 高频考点 & 易错点速查

  1. Q / K / V:Q 是当前词在「提问」,K 是其他词可被查询的「标签」,V 是词本身携带的「内容」。
  2. 除以 \(\sqrt{d_k}\) 的目的:防维度变大时点积过大、Softmax 饱和、梯度趋近零;不是「把概率归一化」。
  3. 位置编码为何用固定公式:自注意力对顺序无感,必须外部注入位置信息;固定 sin/cos 即可让相同词元在不同位置获得不同表示。
  4. 残差 vs 层归一化:残差解决梯度消失(梯度绕过子模块前传),层归一化解决内部协变量偏移(稳定每层输入分布)。
  5. Transformer 并行 / RNN 串行:RNN 第 \(t\) 步依赖第 \(t-1\) 步;自注意力把两两相关性算成一次 \(QK^T\),与顺序无关故可并行,代价是位置信息须靠位置编码补回。
  6. Decoder-Only 成为主流:训练目标统一、结构简单易扩展、天然契合生成任务。
  7. 掩码时机:Softmax 之前,将未来位置分数置为极大负数(如 -1e9)。
  8. 采样参数优先级:温度 → Top-k → Top-p;温度设 0 时后两者失效,Top-k = 1 时前两者失效。
  9. N-gram 两个缺陷:数据稀疏性(概率为 0,平滑只能缓解)、泛化能力差(不懂语义相似性);词嵌入解决后者,RNN/LSTM 解决固定窗口,Transformer 解决串行效率。
  10. 分词粒度的两难:按词导致词表爆炸 + OOV;按字符无 OOV 但单字符无语义、效率低;子词分词是折中。
  11. BPE / WordPiece / SentencePiece:前两者是算法(WordPiece 的合并标准是最大化语料语言模型概率,非最高频),SentencePiece 是工具,把空格当普通字符故可逆、语言无关。
  12. 分词的杀伤力:2+2 与 2 + 2 可能被切成不同 token 导致算错;大小写不同也会改变 token 序列。
  13. Chinchilla 的修正:不是「越大越好」,参数量与数据量存在最优配比——最优模型更小但需更多数据。
  14. 幻觉的缓解重点:三分类为事实性 / 忠实性 / 内在,三层缓解中 RAG 最有效;知识截止与偏见无法靠调参消除,只能靠外部系统对冲。

章末习题考点映射(一句话一条):① Bigram 概率手算 + 马尔可夫假设 + N-gram 局限 + RNN/LSTM/Transformer 如何克服;② 自注意力核心思想、并行与位置编码、Decoder-Only 与 Encoder-Decoder 之别;③ 字符/单词作输入单元的问题与 BPE 的作用;④ 本地部署调参、Zero/Few-shot/CoT 对比、闭源 vs 开源、客服 Agent 选型;⑤ 幻觉缓解手段的原理与适用场景;⑥ 论文辅助阅读 Agent 的选型、超窗口长文处理与忠于原文的设计。


9. 与前后章节的衔接

第 1 章确立了「LLM 是 Agent 的大脑」,本章把这个「大脑」拆开,回答它的知识与推理能力从哪来、边界在哪,并给出可直接用于工程的原料:提示手法、采样参数、Token 与上下文窗口的成本直觉、选型维度、幻觉应对策略。向后延伸有三条线——提示工程与格式约束是第 4 章「智能体经典范式构建」中 Thought-Action-Observation 解析器的前提;Token 与上下文窗口知识是后续「记忆」章节的基础;幻觉与 RAG 则是「工具调用」「知识检索」类章节要解决的问题。


10. 课后练习

在线试卷:https://md-quiz-online.app.workbuddy.host/

posted @ 2026-09-28 14:45  测试小罡  阅读(9)  评论(0)    收藏  举报