模型基础
模型基础
结构、注意力、位置编码、分词、缩放和 MoE。
001 · 中 · 请详细解释一下 Transformer 模型中的自注意力机制是如何工作的?它为什么比 RNN 更适合处理长序列?
来源:Hello-Agents Extra01
自注意力(Self-Attention)机制是Transformer模型的核心,它使得模型能够动态地衡量输入序列中不同单词之间的重要性,并据此生成每个单词的上下文感知表示。
工作原理如下:
- 生成Q, K, V向量: 对于输入序列中的每一个词元(token)的嵌入向量,我们通过乘以三个可学习的权重矩阵 $W^Q, W^K, W^V$ ,分别生成三个向量:查询向量(Query, Q)、键向量(Key, K)和值向量(Value, V)。
- Query (Q): 代表当前词元为了更好地理解自己,需要去“查询”序列中其他词元的信息。
- Key (K): 代表序列中每个词元所“携带”的,可以被查询的信息标签。
- Value (V): 代表序列中每个词元实际包含的深层含义。
计算注意力分数: 为了确定当前词元(由Q代表)应该对其他所有词元(由K代表)投入多少关注,我们计算当前词元的Q与其他所有词元的K的点积。这个分数衡量了两者之间的相关性。
$$\text{Score}(Q_i, K_j) = Q_i \cdot K_j$$缩放(Scaling): 将计算出的分数除以一个缩放因子 $\sqrt{d_k}$( $d_k$ 是K向量的维度)。这一步是为了在反向传播时获得更稳定的梯度,防止点积结果过大导致Softmax函数进入饱和区。
$$\frac{Q \cdot K^T}{\sqrt{d_k}}$$Softmax归一化: 将缩放后的分数通过一个Softmax函数,使其转换为一组总和为1的概率分布。这些概率就是“注意力权重”,表示在当前位置,每个输入词元所占的重要性。
$$\text{AttentionWeights} = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)$$加权求和: 最后,将得到的注意力权重与每个词元对应的V向量相乘并求和,得到最终的自注意力层输出。这个输出向量融合了整个序列的上下文信息,且权重由模型动态学习得到。
$$\text{Output} = \text{AttentionWeights} \cdot V$$
为什么比RNN更适合处理长序列?
- 并行计算能力: 自注意力机制在计算时,可以一次性处理整个序列,计算所有位置之间的关联,是高度并行的。而RNN(包括LSTM、GRU)必须按照时间顺序依次处理每个词元,无法并行化,导致处理长序列时速度非常慢。
- 解决长距离依赖问题: 在自注意力中,任意两个位置之间的交互路径长度都是O(1),因为可以直接计算它们的注意力分数。而在RNN中,序列首尾两个词元的信息传递需要经过整个序列的长度,路径为O(N),这极易导致梯度消失或梯度爆炸,使得模型难以捕捉长距离的依赖关系。
002 · 中 · 什么是位置编码?在 Transformer 中,为什么它是必需的?请列举至少两种实现方式。
来源:Hello-Agents Extra01
什么是位置编码?
位置编码(Positional Encoding, PE)是一个与词嵌入维度相同的向量,其目的是向模型注入关于词元在输入序列中绝对或相对位置的信息。它会与词元的词嵌入(Token Embedding)相加,然后一同输入到Transformer的底层。
为什么它是必需的?
Transformer的核心机制——自注意力,在计算时处理的是一个集合(Set)而非序列(Sequence)。它本身不包含任何关于词元顺序的信息,是 置换不变(Permutation-invariant) 的。这意味着,如果打乱输入序列中词元的顺序,自注意力层的输出也会相应地被打乱,但每个词元自身的输出向量(在不考虑softmax归一化的情况下)是相同的。这显然不符合自然语言的特性,因为语序至关重要(例如“我打你”和“你打我”含义完全相反)。因此,必须通过一种外部机制,将位置信息显式地提供给模型,这就是位置编码的作用。
至少两种实现方式:
- 正弦/余弦位置编码(Sinusoidal Positional Encoding):
这是原始Transformer论文《Attention Is All You Need》中使用的方法。它使用不同频率的正弦和余弦函数来生成位置编码,其公式如下:
$$PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{\text{model}}})$$
$$PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{\text{model}}})$$
其中, $pos$ 是词元在序列中的位置, $i$ 是编码向量中的维度索引, $d_{\text{model}}$ 是嵌入维度。
- 优点:
- 可外推性: 能够处理比训练中最长序列还要长的序列。
- 相对位置信息: 模型可以轻易地学习到相对位置关系,因为对于任何固定的偏移量 $k$ , $PE_{pos+k}$ 都可以表示为 $PE_{pos}$ 的一个线性函数,这使得模型更容易捕捉相对位置的依赖。
- 可学习的绝对位置编码(Learned Absolute Positional Encoding):
这种方法将位置编码视为模型参数的一部分,通过训练学习得到。具体来说,会创建一个形状为(max_sequence_length, embedding_dimension)的位置编码矩阵。在处理序列时,根据每个词元的位置索引,从这个矩阵中查找对应的编码向量,并加到词嵌入上。BERT和GPT-2等模型采用了这种方式。
- 优点: 模式更加灵活,可以让模型自己学习出最适合数据的位置表示。
- 缺点: 无法泛化到超过预设
max_sequence_length的长度。如果需要处理更长的序列,就需要对位置编码进行微调或采用其他策略。
003 · 中 · 请你详细介绍ROPE,对比绝对位置编码它的优劣势分别是什么?
来源:Hello-Agents Extra01
RoPE (Rotary Position Embedding) 介绍
RoPE,全称旋转位置编码,是目前大语言模型(如Llama系列、Qwen等)中最主流的位置编码方案之一。它是一种将位置信息融入自注意力机制的创新方法。
其核心思想是:通过向量旋转的方式,将绝对位置信息编码到Query和Key向量中,从而使得模型在计算注意力分数时,能够自然地利用相对位置信息。
工作原理:
RoPE不再像传统位置编码那样直接将位置向量加到词嵌入上。它的操作发生在生成Q和K向量之后、计算注意力分数之前:
- 维度分组: 将Q和K向量的 $d$ 维特征两两一组,视为 $d/2$ 个二维向量。
- 构造旋转矩阵: 对于序列中的位置 $m$,构造一个与位置相关的旋转矩阵 $R_m$。这个矩阵在二维空间中表示一个旋转操作。
- 旋转Q和K: 将每个二维向量组通过对应的旋转矩阵 $R_m$ 进行旋转。
数学上,这个过程等价于将每个二维向量 $(x_m, x_{m+1})$ 看作一个复数,然后乘以一个复数 $e^{im\theta}$,其中 $m$ 是位置, $\theta$ 是一个预设的、与维度相关的常数。这个操作只会改变向量的相位(方向),而不改变其模(长度)。
关键特性:
RoPE的巧妙之处在于,经过旋转后的两个位置 $m$ 和 $n$ 的Query向量 $q_m$ 和Key向量 $k_n$ 进行点积运算时,其结果只与它们的相对位置 $(m-n)$ 有关,而与它们的绝对位置 $m$ 和 $n$ 无关。这使得自注意力机制天然地具备了对相对位置的感知能力。
对比绝对位置编码的优劣势:
RoPE的优势:
- 内置相对位置建模: 这是其最大的优势。RoPE使得注意力分数直接依赖于词元间的相对距离,这更符合自然语言中语法和语义依赖通常是相对的这一特性。
- 良好的外推能力: 由于其数学性质,RoPE在处理比训练时更长的序列时表现出色,具有很强的长度泛化能力,这也是长序列LLM偏爱它的重要原因。
- 不引入额外可训练参数: RoPE是一种函数式的、固定的编码方式,不需要像可学习位置编码那样占用模型参数。
- 随着距离增加,依赖性衰减: 旋转的性质使得距离越远的词元,其内积关系会呈现周期性的衰减,符合语言中距离越远相关性越弱的直觉。
RoPE的劣势:
- 理论理解相对复杂: 其背后的数学原理(复数、欧拉公式、旋转矩阵)比直接相加的绝对位置编码更抽象。
- 对绝对位置信息的表征可能较弱: 虽然RoPE从绝对位置导出,但其在注意力机制中的核心作用是体现相对位置。对于那些强依赖绝对位置信息的特定任务(例如,判断一个词是否在句子开头),它的效果可能不如直接使用绝对位置编码直观。
004 · 中 · 你知道MHA,MQA,GQA的区别吗?详细解释一下。
来源:Hello-Agents Extra01
MHA、MQA和GQA是Transformer模型中三种不同的注意力机制变体,它们的主要区别在于如何组织和共享Query、Key和Value的“头”(Head),核心目标是在模型效果和推理效率(特别是显存占用)之间做出不同的权衡。
1. MHA (Multi-Head Attention)
这是原始Transformer论文中提出的标准注意力机制。
- 工作原理:
- 将输入的Q、K、V向量分别通过 $N$ 个独立的线性变换,得到 $N$ 组不同的 $Q_i, K_i, V_i$ 头( $i=1, ..., N$ )。
- 这 $N$ 组头在各自的子空间中并行地计算注意力(Scaled Dot-Product Attention)。
- 将 $N$ 个头计算得到的输出向量拼接(Concatenate)起来。
- 最后通过一个线性变换将拼接后的向量映射回原始维度。
- 结构: $N$ 个Query头, $N$ 个Key头, $N$ 个Value头。
- 优点: 效果最好,模型能力最强。每个头可以在不同的表示子空间中学习到不同的信息。
- 缺点: 推理成本高。在自回归生成任务中,需要缓存每一层的Key和Value(即KV Cache),MHA的KV Cache大小与头的数量$N$成正比,显存占用非常大,限制了长序列的生成。
2. MQA (Multi-Query Attention)
为了解决MHA在推理时的显存瓶颈而被提出。
- 工作原理:
- 与MHA一样,有 $N$ 个独立的Query头。
- 核心区别: 所有的 $N$ 个Query头共享同一个Key头和同一个Value头。
- 结构: $N$ 个Query头,1个Key头,1个Value头。
- 优点: 极大地降低了推理成本。KV Cache的大小不再依赖于头的数量 $N$ ,相比MHA减小了 $N$ 倍,显著降低了显存占用,并加快了推理速度。
- 缺点: 可能会导致模型性能的下降。因为所有Query头被迫从同样的一组Key和Value中提取信息,模型的表达能力受到了一定的限制。
3. GQA (Grouped-Query Attention)
GQA是MHA和MQA之间的一个折中方案,旨在平衡性能和效率。
- 工作原理:
- 将 $N$ 个Query头分成 $G$ 组。
- 核心区别: 每组内的Query头共享一个Key头和一个Value头。总共有 $G$ 个Key头和 $G$ 个Value头。
- 结构: $N$ 个Query头,G个Key头,G个Value头。(通常 $1 < G < N$ )。
- 说明: 当 $G=N$ 时,GQA 等价于 MHA;当 $G=1$ 时,GQA 等价于 MQA。
- 优点: 在推理效率上远超MHA,同时在模型性能上优于MQA。它提供了一个灵活的旋钮,可以根据具体需求在效率和效果之间进行调整。Llama 2等模型就采用了GQA。
总结:
| 特性 | MHA (Multi-Head Attention) | MQA (Multi-Query Attention) | GQA (Grouped-Query Attention) |
|---|---|---|---|
| 结构 | N个Q头, N个K头, N个V头 | N个Q头, 1个K头, 1个V头 | N个Q头, G个K头, G个V头 |
| 模型质量 | 最高 | 可能下降 | 接近MHA,优于MQA |
| 推理效率 | 最低 (KV Cache大) | 最高 (KV Cache小) | 居中,远好于MHA |
| 应用 | BERT, GPT-3 | PaLM | Llama 2, Mixtral |
005 · 中 · 请比较一下几种常见的 LLM 架构,例如 Encoder-Only, Decoder-Only, 和 Encoder-Decoder,并说明它们各自最擅长的任务类型。
来源:Hello-Agents Extra01
LLM的架构主要可以分为三类,它们的核心区别在于使用了Transformer的哪些部分以及注意力机制的类型,这直接决定了它们各自擅长的任务。
1. Encoder-Only 架构 (例如 BERT, RoBERTa)
- 结构: 由多个Transformer Encoder层堆叠而成。
- 核心机制: 双向自注意力机制。在处理序列中的任何一个词元时,模型都可以同时关注到它左边和右边的所有词元。这使得模型能够获得非常丰富的上下文表示。
- 最擅长的任务类型:自然语言理解 (NLU)。
- 具体任务:
- 分类任务: 情感分析、文本分类。
- 序列标注: 命名实体识别 (NER)。
- 句子关系判断: 自然语言推断 (NLI)。
- 完形填空: 像BERT的Masked Language Model (MLM) 预训练任务本身。
- 原因: 这些任务的核心是理解输入文本的深层含义,而双向上下文对于准确理解至关重要。这类模型的输出通常是固定的标签或类别,而非自由生成的长文本。
2. Decoder-Only 架构 (例如 GPT系列, Llama, Qwen)
- 结构: 由多个Transformer Decoder层堆叠而成,但移除了其中的Encoder-Decoder交叉注意力部分。
- 核心机制: 单向(因果)自注意力机制 (Causal Self-Attention)。在预测第
t个词元时,模型只能关注到位置1到t-1的词元,不能看到未来的信息。这种自回归的特性天然适合生成任务。 - 最擅长的任务类型:自然语言生成 (NLG)。
- 具体任务:
- 开放式文本生成: 写文章、故事、诗歌。
- 对话系统/聊天机器人: 如ChatGPT。
- 代码生成: 如Copilot。
- 上下文续写 (In-context Learning)。
- 原因: 语言的生成过程是顺序的、从左到右的,Decoder-Only架构的单向注意力完美地模拟了这一过程。目前绝大多数的通用大语言模型都采用此架构。
3. Encoder-Decoder 架构 (例如 T5, BART, 原始Transformer)
- 结构: 包含一个完整的Encoder栈和一个完整的Decoder栈。
- 核心机制: Encoder部分使用双向注意力来编码整个输入序列,形成一个全面的上下文表示。Decoder部分在生成输出时,一方面使用单向注意力处理已生成的序列,另一方面通过交叉注意力 (Cross-Attention)机制来关注Encoder的输出,确保生成内容与输入相关。
- 最擅长的任务类型:序列到序列 (Seq2Seq)。
- 具体任务:
- 机器翻译: 将一种语言(输入序列)翻译成另一种语言(输出序列)。
- 文本摘要: 将一篇长文章(输入序列)概括成几句话(输出序列)。
- 问答: 将问题(输入序列)转换为答案(输出序列)。
- 原因: 这类任务需要首先对源序列有一个完整的、全局的理解(由Encoder完成),然后基于这个理解有条件地生成一个目标序列(由Decoder完成)。
006 · 中 · 什么是Scaling Laws?它揭示了模型性能、计算量和数据量之间的什么关系?这对LLM的研发有什么指导意义?
来源:Hello-Agents Extra01
什么是Scaling Laws?
Scaling Laws(尺度定律)是由OpenAI、DeepMind等机构通过大量实验发现的一系列经验性规律。它揭示了大型语言模型的性能(通常以交叉熵损失函数Loss来衡量)与三个关键资源要素——模型参数规模(N)、训练数据集大小(D)和训练所用的计算量(C)——之间存在着可预测的幂律关系(Power-Law Relationship)。
揭示了什么关系?
- 性能的可预测性: Scaling Laws表明,模型的性能损失会随着N、D、C的增加而平滑地、可预测地下降。这种关系可以用一个幂律公式来描述,例如,当数据和计算量足够时,模型损失 L 与模型参数量 N 的关系大致为: $L(N) \propto N^{-\alpha}$ ,其中 $\alpha$ 是一个小的正指数。这意味着我们可以通过在小规模模型上的实验结果,来外推(predict)更大规模模型可能达到的性能。
- 瓶颈效应: 模型的最终性能会被N、D、C中最受限的那个因素所制约。如果仅仅增加模型大小而不增加数据量,性能提升会很快达到瓶颈;反之亦然。为了有效提升模型性能,必须协同扩展这三个要素。
- 资源的最优分配: 对于一个给定的计算预算(FLOPs),存在一个最优的模型大小(N)和数据量(D)的组合。DeepMind的Chinchilla论文是一个里程碑式的发现,它修正了早期认为应该优先扩大模型规模的观点,指出为了达到计算最优,模型参数量和训练数据量应该近似1:20的比例进行扩展。例如,训练一个70B参数的模型,大约需要1.4万亿个token的数据。
对LLM研发的指导意义:
- 科学指导项目规划: 在投入数百万甚至数千万美元进行一次大规模训练之前,研究机构可以先通过小规模实验拟合出自己数据集和模型架构下的Scaling Law。这使得他们能够科学地预测最终模型的性能,评估项目的投资回报率,并合理申请计算资源。
- 优化资源配置,避免浪费: Scaling Laws,特别是Chinchilla定律,为如何高效使用计算预算提供了明确的指导。它告诉我们,与其训练一个参数巨大但数据不足的模型(over-trained),不如用同样的算力去训练一个参数稍小但数据更充分的模型(under-trained),后者效果可能更好。这促使业界从单纯追求“大参数”转向“大参数与大数据的平衡”。
- 强调数据的重要性: Scaling Laws的发现,让学术界和工业界都更加深刻地认识到,高质量、大规模的训练数据和模型参数规模同等重要,甚至在某些阶段更为关键。这推动了数据工程、数据清洗和高质量合成数据生成等领域的发展。
007 · 中 · 什么是词元化?请比较一下 BPE 和 WordPiece 这两种主流的子词切分算法。
来源:Hello-Agents Extra01
什么是词元化(Tokenization)?
词元化是将原始的文本字符串分解成一个个独立的单元(称为“词元”或“token”),并将这些词元映射到唯一的整数ID的过程。这是自然语言处理模型处理文本的第一步,因为模型只能处理数字输入。
现代大型语言模型普遍采用 子词(Subword) 词元化算法,它介于按词切分和按字符切分之间。这样做的好处是:
- 有效处理未登录词(OOV): 任何罕见词或新词都可以被拆解成已知的子词组合,避免了“未知”标记。
- 平衡词表大小与序列长度: 相比于词级别,词表规模大大减小;相比于字符级别,生成的序列长度又不会过长,兼顾了效率。
- 保留形态信息: 像 "running", "runner" 这样的词可以共享 "run" 这个子词,使得模型能够理解词根和词缀的关系。
BPE vs. WordPiece
BPE和WordPiece是两种最主流的子词切分算法,它们构建词表的过程相似,但在合并子词的决策标准上有所不同。
BPE (Byte Pair Encoding)
- 工作原理:
- 初始化: 词汇表由语料库中出现的所有基本字符组成。
- 迭代合并: 重复以下步骤直到达到预设的词表大小:
a. 在整个语料库中,统计所有相邻词元对的出现频率。
b. 找出频率最高的那个词元对(例如('e', 's'))。
c. 将这个词元对合并成一个新的、更长的词元('es'),并将其加入词汇表。
d. 在语料库中,用新词元替换所有出现的该词元对。
- 应用模型: GPT系列、Llama等。
- 特点: 算法思想简单直观,完全基于数据中符号对的出现频率。
WordPiece
- 工作原理:
- 初始化: 与BPE一样,词汇表也从所有基本字符开始。
- 迭代合并(核心区别): WordPiece在选择合并哪两个子词时,不是基于频率,而是基于语言模型的似然(Likelihood)。它会尝试所有可能的合并,并选择那个能够最大程度提升训练数据似然值的合并操作。
- 可以通俗地理解为:如果把语料库看作一个语言模型,每次合并都应该让这个语言模型产生当前语料库的概率变得最大。它倾向于合并那些内部凝聚力更强的字符组合。
- 应用模型: BERT, DistilBERT, Electra。
- 特点: WordPiece在切分时,通常会在单词的非起始部分子词前加上特殊符号(如
##),例如 "tokenization" 可能会被切分为("token", "##ization")。
主要区别总结:
| 特性 | BPE (Byte Pair Encoding) | WordPiece |
|---|---|---|
| 合并决策标准 | 频率驱动:合并出现次数最多的相邻子词对。 | 似然驱动:合并能最大化提升语料库语言模型似然的子词对。 |
| 理论基础 | 数据压缩算法,简单高效。 | 概率语言模型,理论上更优。 |
| 应用代表 | GPT, Llama, RoBERTa | BERT, T5 |
008 · 易 · 你觉得NLP和LLM最大的区别是什么?两者有何共同和不同之处?
来源:Hello-Agents Extra01
NLP(自然语言处理)和LLM(大型语言模型)之间是领域与技术、一般与具体的关系。LLM是NLP发展至今最前沿、最具影响力的一项技术范式,它在很大程度上重塑了NLP领域。
共同之处:
- 最终目标一致: 两者的根本目标都是实现人工智能对人类语言的理解、生成、和运用,即所谓的“人工智能皇冠上的明珠”。
- 技术根基相通: 现代NLP和LLM都建立在深度学习,特别是神经网络的基础上。Transformer架构是连接两者的关键桥梁,从BERT到GPT,都是其思想的延伸和发展。
最大的区别与不同之处:
最大的区别在于研究和应用范式的根本性转变,从“为每个任务训练一个模型”转向“用一个模型解决所有任务”。
具体可以从以下几个维度来看:
- 任务处理范式 (Task-Handling Paradigm):
- 传统NLP: 奉行“分而治之”的策略。研究者会针对每一个具体的NLP任务(如机器翻译、情感分析、命名实体识别)设计特定的模型架构、损失函数和训练数据集,遵循
Pre-train -> Fine-tune的流程。每个模型都是一个“专家”。 - LLM: 追求“大一统”的通用模型。通过在海量数据上进行大规模预训练,一个LLM基础模型就具备了解决多种任务的潜力。用户通过设计不同的 提示(Prompt) 或提供 上下文示例(In-context Learning) 来引导模型完成任务,大大简化了开发流程,甚至实现了 零样本(Zero-shot) 和 少样本(Few-shot) 学习。
- 模型能力与“涌现” (Model Capabilities & Emergence):
- 传统NLP: 模型的能
力是明确且有限的,通常与其训练目标直接相关。 - LLM: 当模型规模(参数、数据、算力)跨越某个阈值后,会表现出小模型上不存在的 “涌现能力” (Emergent Abilities) 。例如,复杂的逻辑推理(思维链, Chain-of-Thought)、代码生成、遵循复杂指令等。这些能力不是被直接训练的,而是从海量数据中自发学习到的。
- 规模 (Scale):
- 传统NLP: 模型参数量通常在百万级到几亿级(例如,BERT-base约1.1亿)。
- LLM: 参数量从百亿(Billion)起步,发展到千亿甚至万亿级别。训练数据和所需计算资源也比传统NLP模型高出几个数量级。
- 交互与应用方式 (Interaction & Application):
- 传统NLP: 通常以API形式被集成到软件中,输入输出格式相对固定。
- LLM: 催生了以对话和指令为核心的全新交互方式(如ChatGPT),使得AI更加平易近人。应用也从后端工具演变为可以直接面向用户的产品。
总结: 如果说传统NLP是在打造一支由各种“工具专家”组成的工具箱,那么LLM则是在努力打造一个“瑞士军刀”式的通用智能工具,它可能在某些特定任务上不如专用工具精细,但其通用性、灵活性和强大的涌现能力是前所未有的。
009 · 易 · L1和L2正则化分别是什么,什么场景适合使用呢?
来源:Hello-Agents Extra01
L1和L2正则化都是在机器学习和深度学习中用于防止模型过拟合的常用技术。它们通过在模型的损失函数(Loss Function)中添加一个代表模型复杂度的惩罚项来实现这一目标。
L1 正则化 (L1 Regularization / Lasso)
定义: L1正则化添加的惩罚项是模型所有权重参数 $w_i$ 的绝对值之和,乘以一个正则化系数 $\lambda$。
$$\text{Loss}{L1} = \text{Original Loss} + \lambda \sum |w_i|$$核心作用:产生稀疏性 (Sparsity)。
在梯度下降优化过程中,L1惩罚项会驱使那些对模型贡献不大的特征的权重最终变为精确的0。这相当于从模型中完全移除了这些特征。适用场景:特征选择 (Feature Selection)。
当你的数据集中包含大量特征,但你怀疑其中许多特征是冗余或无用的时,L1正则化非常有用。它能够自动地“筛选”出最重要的特征,简化模型,提高解释性。
L2 正则化 (L2 Regularization / Ridge / Weight Decay)
定义: L2正则化添加的惩罚项是模型所有权重参数 $w_i$ 的平方和,乘以一个正则化系数 $\lambda$。
$$\text{Loss}{L2} = \text{Original Loss} + \lambda \sum w_i^2$$核心作用:权重衰减 (Weight Decay)。
L2正则化会惩罚大的权重值,它会促使模型的权重参数尽可能小,趋近于0但通常不会等于0。这使得模型的权重分布更加平滑和分散,避免模型过度依赖少数几个高权重的特征。适用场景:通用性的过拟合防治。
L2是更常用、更通用的正则化方法。当特征之间可能存在相关性(共线性),或者你认为绝大多数特征都对预测有或多或少的贡献时,L2是首选。它能有效地提高模型的泛化能力,使其在未见过的数据上表现更好。在深度学习中,“权重衰减”通常就是指L2正则化。
总结对比:
| 对比项 | L1 正则化 | L2 正则化 |
|---|---|---|
| 惩罚项 | 权重的绝对值之和 (L1范数) | 权重的平方和 (L2范数) |
| 效果 | 权重稀疏化,部分权重为0 | 权重平滑化,权重趋近于0 |
| 主要用途 | 特征选择,简化模型 | 防止过拟合,提升泛化能力 |
| 解的特性 | 不稳定,数据微小变动可能导致特征集变化 | 稳定,解是唯一的 |
010 · 中 · “涌现能力”是大型模型中一个备受关注的现象,请问你如何理解这个概念?它通常在模型规模达到什么程度时出现?
来源:Hello-Agents Extra01
对“涌现能力”的理解:
“涌现能力”(Emergent Abilities)是指那些在小型模型中不存在或表现不佳,但当模型规模(包括参数量、训练数据和计算量)达到某个临界点后,突然出现并显著超越随机水平的能力。
它的核心特征是非线性和不可预测性:
- 非线性增长: 这种能力的性能表现并不随着模型规模的增加而平滑、线性地提升。相反,它会在某个规模区间内发生“相变”式的跃迁,性能从接近随机猜测的水平迅速提升到非常高的水平。
- 非直接训练: 这些高级能力通常不是通过特定的监督学习目标直接训练出来的。例如,我们没有直接教模型如何“一步一步思考”,但当模型足够大时,它通过学习海量文本中的逻辑关系,自发地获得了这种能力。
典型的涌现能力例子包括:
- 思维链(Chain-of-Thought, CoT): 在面对需要多步推理的数学或逻辑问题时,通过提示模型“一步一步地思考”,大模型可以生成一个连贯的推理过程并得出正确答案。小模型则无法利用这种提示。
- 上下文学习(In-context Learning): 无需更新模型权重,仅在Prompt中提供几个任务示例(Few-shot),大模型就能“学会”并执行这个新任务。
- 执行复杂指令: 理解并遵循包含多个步骤、约束和否定逻辑的复杂人类指令。
出现的模型规模:
涌现能力出现的具体规模没有一个固定的数值,它取决于能力本身、模型架构、数据质量和评估任务的复杂性。
然而,根据Google等机构的标志性研究,许多引人注目的涌现能力,例如思维链推理,通常是在模型参数规模达到百亿(tens of billions)到千亿(a hundred billion) 级别时开始出现的。
- 例如,在Google PaLM模型的实验中,思维链推理能力在62B参数的模型上开始显现,而在8B和16B的模型上则完全无效。这种能力随着模型增长到540B时变得更加强大和稳定。
总而言之,“涌现能力”是“量变引起质变”在大型模型领域的生动体现,它表明单纯地扩大规模可以解锁全新的、更高级的认知能力,这也是当前LLM研究持续推动模型规模增长的核心驱动力之一。
011 · 易 · 激活函数有了解吗,你知道哪些LLM常用的激活函数?为什么选用它?
来源:Hello-Agents Extra01
是的,我了解激活函数。激活函数是神经网络中至关重要的一环,它的主要作用是为网络引入非线性(non-linearity)。如果没有激活函数,多层神经网络本质上等同于一个单层的线性模型,无法学习和拟合复杂的数据模式。
在现代大型语言模型(Transformer架构)中,最常用的激活函数主要有两个:GeLU 和 SwiGLU。
- GeLU (Gaussian Error Linear Unit):
- 简介: GeLU曾是Transformer模型中的主流激活函数,被BERT、GPT-2等经典模型采用。它的数学形式是 $x \cdot \Phi(x)$,其中 $\Phi(x)$ 是高斯分布的累积分布函数。
- 为什么选用它?
- 平滑性: GeLU是ReLU的一个平滑近似。相比于ReLU在0点的突变,GeLU的平滑特性使其在优化过程中梯度更稳定,更有利于模型收敛。
- 随机正则化思想: GeLU可以看作是综合了Dropout和ReLU的思想。它根据输入的数值大小,对其进行随机的“归零”或“保留”,但这个过程是确定性的。输入越小,其输出被“归零”的概率越高。
- SwiGLU (Swish-Gated Linear Unit):
- 简介: SwiGLU是目前最先进、最主流的选择,被Llama、PaLM、Mixtral、Gemma等一系列现代LLM广泛采用。它属于门控线性单元(Gated Linear Unit, GLU) 家族的变体。
- 工作原理: 它将前馈网络(FFN)的第一个线性层的输出 $X$ 分成两部分, $A$ 和 $B$ 。然后通过公式 $Swish(A) \otimes B$ 计算输出,其中 $Swish(x) = x \cdot \sigma(x)$ , $\sigma$ 是Sigmoid函数, $\otimes$ 是逐元素相乘。
- 为什么选用它?
- 门控机制(Gating Mechanism): SwiGLU的核心优势在于其“门控”设计。 $B$ 部分可以被看作一个动态的“门”,它可以根据输入内容,控制 $Swish(A)$ 中的信息哪些可以通过、哪些需要被抑制。这种机制显著增强了模型的表达能力,使得FFN层可以更灵活地处理信息。
- 实证效果优越: Google在PaLM论文中的实验发现,使用SwiGLU替换标准的GeLU或ReLU,可以显著提升模型的性能(降低困惑度)。尽管SwiGLU会增加FFN层的参数量(因为需要两个矩阵而不是一个),但其带来的性能增益被证明是值得的。
012 · 中 · 混合专家模型(MoE)是如何在不显著增加推理成本的情况下,有效扩大模型参数规模的?请简述其工作原理。
来源:Hello-Agents Extra01
混合专家模型(Mixture of Experts, MoE)是一种模型架构,它的核心思想是通过 “稀疏激活”(Sparse Activation) 的策略,来解决模型规模与计算成本之间的矛盾。它允许模型拥有巨大的总参数量,但在处理任何一个输入时,只动用其中一小部分参数,从而在不显著增加推理成本(FLOPs)的情况下,大幅提升模型容量。
工作原理如下:
- 用“专家”替换FFN层:
- 在标准的Transformer架构中,计算量最大的部分之一是前馈网络(Feed-Forward Network, FFN)层。
- MoE架构将模型中的部分或全部FFN层替换为MoE层。一个MoE层由两部分组成:
- N个“专家”(Experts): 每个专家本身就是一个独立的、规模较小的FFN。
- 1个“门控网络”或“路由器”(Gating Network / Router): 这是一个小型的神经网络,通常是一个简单的线性层。
- 动态路由决策:
- 当一个词元(token)的向量表示来到MoE层时,它首先被送入路由器。
- 路由器的作用是 “决策” ,判断这个token应该由哪些专家来处理最合适。它会输出一个包含N个分数的向量,代表该token与N个专家的“匹配度”。
- Top-K稀疏激活:
- 路由器输出的分数经过Softmax归一化后,系统并不会激活所有的专家。相反,它只选择分数最高的Top-K个专家(K通常很小,比如1或2)。
- 这就是“稀疏激活”的关键:对于每一个token,只有极少数(K个)专家被激活并进行计算,其余的(N-K个)专家则完全不参与,不产生任何计算成本。
- 加权输出:
- 被选中的K个专家分别对输入的token向量进行处理,得到K个输出向量。
- 最终的输出是这K个输出向量的加权和,权重同样由路由器的输出分数决定。
如何实现“参数大但成本低”?
- 假设一个模型有8个专家(N=8),并且每次只激活2个(K=2),如Mixtral-8x7B模型。
- 总参数量: 模型的总参数量是所有共享部分(如注意力层)的参数量,加上所有8个专家的参数量之和。这使得模型的总参数规模可以非常大(例如达到47B)。
- 推理成本: 但在进行一次前向传播(推理)时,对于任意一个token,实际参与计算的只有共享部分和被激活的2个专家。因此,其计算量(FLOPs)约等于一个规模小得多的“稠密”模型(例如一个13B的模型)。
- 结论: MoE成功地将总参数量(代表模型的知识容量)和单次推理的计算量(代表模型的速度和成本)解耦,从而实现了“用小模型的成本,获得大模型的知识”。
013 · 难 · 你认为 Transformer 架构会长久地统治这个领域吗?还是你看到了像状态空间模型(SSM, 如 Mamba)等新架构的潜力?
来源:Hello-Agents Extra01
这道题原资料没有参考答案。
014 · 易 · 什么是大语言模型?和传统 NLP 模型有什么区别?
来源:小林 coding
大语言模型是用海量语料预训练、参数到百亿千亿规模、自回归生成文本的统一模型。本质训练目标是 CLM(因果语言模型):预测下一个 token。GPT、Claude、Qwen、DeepSeek 都是这条路。
和传统 NLP 的差别要分三层说,不要停在「参数多、能聊天」。
| 维度 | 传统 NLP | LLM |
|---|---|---|
| 任务方式 | 一任务一模型,流水线串联 | 一个模型,用 Prompt 换任务 |
| 输出 | 判别式:标签或概率 | 生成式:续写文本 |
| 能力从哪来 | 显式监督,喂什么学什么 | 大规模预训练,外加规模上来之后才出现的能力 |
传统流水线把客服拆成分词、词性、实体、意图、知识库匹配。前面错了后面全错,换领域几乎要重训。中文分词还有 OOV:训练没见过的新词直接丢语义。
BERT 只走了一半。它用无标注文本做 MLM(遮住约 15% 的词来填空)和 NSP,证明预训练有用,输出的是向量表示,下游还得接分类头、序列标注头。它不擅长连续生成。
LLM 把翻译、分类、摘要、写代码都收成「Prompt + 续写」。数据不需要逐条人工标注,互联网文本天然是样本。GPT-3 约 3000 亿 token,Llama 3 约 15 万亿 token。参数从 BERT 的约 0.3B 堆到 GPT-3 的 175B。闭源模型的具体参数量官方往往不公开,面试里不要把「万亿级」说成确定事实。
规模够了会出现训练目标里没显式教过的能力,常被叫作涌现:多步推理、上下文学习、跨语言迁移。PaLM 做 5 步应用题,8B 几乎是 0,62B 约 5%,540B 跳到约 60%。上下文学习在大约 100B 附近才稳定。这里要留一句:exact match 这类非黑即白的指标会把连续提升看成突变,涌现是不是测量假象,学术上还有争议。
工程上,着力点从「先标数据、再选 BERT、再调参」变成「先写 Prompt,再决定要不要 RAG,最后才考虑 LoRA」。预训练定天花板,Prompt 和检索决定能不能用起来。
015 · 易 · 讲讲 Transformer 架构基本原理?Encoder 和 Decoder 是什么?
来源:小林 coding
Transformer 用 Self-Attention 换掉 RNN。RNN 有两个致命问题:必须从左到右算,GPU 并行不起来;序列一长,梯度指数衰减,第 1 个词到第 800 个词基本传不到。LSTM 的门只是缓解,没去掉这个结构。
Self-Attention 让每个 token 直接和序列里任意位置算相关程度,再按权重聚合。计算对所有位置并行,位置之间是直连,没有「传过 N 步才到」的衰减。
Q、K、V 不是凭空来的。同一个输入 X 过三个独立线性投影:
Q = X @ W_Q
K = X @ W_K
V = X @ W_V
Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V「自」的意思是 Q、K、V 都来自 X。Cross-Attention 才是 Q 来自一边、K/V 来自另一边。三个矩阵必须分开学,否则模型学不会「从什么角度问、用什么标签匹配、返回什么内容」。多头时每头维度通常是 d_model / H,例如 512 维、8 头,每头 64,总参数量和单头大体对齐。
除以 √d_k 是为了把点积方差压回 1。d_k 大时,均值 0、方差 1 的向量点积标准差大约是 √d_k,softmax 会被推成 one-hot,梯度里的 p(1-p) 接近 0,层训不动。主流实现都用这个固定缩放,不改成可学习标量。
多头把关联拆进不同子空间:主谓、动宾、指代不必挤在同一组 Q/K/V 里,最后拼接。
Attention 对顺序不敏感,「我打你」和「你打我」可能算出同一套权重,所以要另加位置编码。每块里还有 FFN:两层全连接加激活,对每个位置做非线性。注意力本质是加权求和,FFN 补非线性,也存了大量事实,可以当成记忆仓库。
三种架构:
| 架构 | 看见什么 | 预训练目标 | 适合什么 |
|---|---|---|---|
| Encoder-only(BERT) | 双向 | MLM | 分类、抽取、相似度 |
| Decoder-only(GPT、Claude、Qwen) | 因果掩码,只看左边 | 预测下一个 token | 通用生成 |
| Encoder-Decoder(T5、BART) | Encoder 双向,Decoder 用 Cross-Attention 读它 | 输入输出可以是不同文本 | 翻译、摘要 |
Decoder-only 赢在目标统一。问答、写作、代码、翻译都能写成续写,直接吃无标注文本,规模上去之后能力跟着出来。Encoder 路线没有消失,检索、分类、嵌入仍然用它。目标如果是通用对话,Decoder-only 更容易放大。
016 · 中 · 多头注意力(MHA)有哪些局限?MQA、GQA、Flash Attention 怎么解决?
来源:小林 coding
先把训练和推理拆开。训练时每层要算 N×N 的注意力矩阵,既占显存也是 O(N²),但算完可以丢掉。推理是自回归,每个新 token 都要看前面所有 token。不缓存的话总成本往 O(N³) 走。KV Cache 把已经算过的 K、V 留下,新 token 只算自己的 Q,再和缓存做注意力。
缓存本身是显存大户:
2 × batch × 序列长 × 层数 × 头数 × d_k × 2 字节(FP16)7B、32 层、32 头、d_k=128、batch=1、32K 上下文,大约 17GB,再加上约 14GB 权重,24GB 卡放不下。
第二个瓶颈是带宽。softmax 要把 N×N 矩阵在 HBM 上来回搬,GPU 算力在等数据,这是 memory-bound。算力翻倍,Attention 未必快一倍。第三个才是 N²:序列翻倍,计算量翻四倍。
三类优化打的不是同一个点。
| 方案 | 改什么 | 打哪个痛点 | 效果 |
|---|---|---|---|
| MQA | 所有头共享一份 K/V,Q 仍按头独立 | KV Cache 降到约 1/H | 表达力掉一截,推理类任务更明显,常见说法是掉 2%–5% |
| GQA | H 个头分成 G 组,组内共享 K/V | 显存按 G/H | G=8 时接近 MHA,差距常小于 0.5%,显存约 1/4 |
| Flash Attention | 不改公式,分块加在线 softmax | 中间矩阵不写回 HBM,显存从 O(N²) 到 O(N) | 数学上等价,速度大约 2–4 倍 |
GQA 是光谱:G=H 就是 MHA,G=1 就是 MQA。Llama 2 70B 用 H=64、G=8,Llama 3 和 Qwen 2/3 的主力模型也走 GQA。DeepSeek V2/V3 用的是 MLA:把 K/V 压进低秩潜空间再参与注意力,目标同样是省缓存,机制不是「GQA 升级版」。
Flash Attention 利用 SRAM 比 HBM 快一个数量级、但只有百 KB 级。Q、K、V 切成小块在片上算,用在线 softmax 维护当前最大值和累积和,结果和一次算完整行相同。浮点顺序会让末几位有差别,不会像稀疏近似那样改模型。
结构层和实现层是叠加关系。现在的常见组合是 GQA + Flash Attention。面试里如果被要求「三选一」,应该说它们打的瓶颈不同,工程上一起用。
再往外:滑动窗口只看近邻,Mistral 用过,远距离要靠和全局注意力混用;线性注意力把复杂度降到 O(N),效果还没成为主流;Mamba 一类状态空间模型丢掉 Attention,仍是研究热点。
017 · 中 · 大模型的位置编码是干什么用的?sin/cos、RoPE、ALiBi 有什么区别?
来源:小林 coding
Self-Attention 的 softmax(QK^T/√d)·V 不看顺序。三个字的 embedding 不变,只把「我打你」换成「你打我」,注意力几乎一样,主语宾语就反了。
不能直接加 1、2、3。embedding 通常是小数,位置 1000 会把数值撑爆;训练见过 2048,推理来了 4096,这个整数从没出现过。位置编码要同时满足:数值范围合理、每个位置指纹不同、最好能外推到没训练过的长度。
模型真正想要的是相对距离。主语和动词隔两个词,比「主语在第 3 位」稳定。绝对编码把「从两张身份证推出距离是 2」丢给模型自己学。
| sin/cos | ALiBi | RoPE | |
|---|---|---|---|
| 类型 | 绝对位置 | 相对,距离惩罚 | 相对,旋转 |
| 怎么注入 | 加到 token embedding | 加到注意力分数 | 旋转 Q 和 K |
| 可学习参数 | 无 | 无 | 无 |
| 长上下文 | 训练长度外容易断崖 | 线性惩罚,外推好 | 强,但要配合频率调整和继续训练 |
| 表达力 | 中等 | 偏弱,局部偏置重 | 强 |
| 谁在用 | 原始 Transformer | MPT、部分 BLOOM | Llama、Qwen、DeepSeek、Mistral |
sin/cos 用不同频率的正余弦做指纹,高频区分近处,低频区分远处,加到 embedding 上,不加维度。公式能算任意位置,模型却只在训练长度里学过相对关系,一超出就乱。
RoPE 不把位置加进 embedding。位置 m 的 Q/K 旋转 mθ,两个旋转向量的点积只依赖角度差 m−n。模长不变,只改方向,和 KV Cache、Flash Attention、MQA/GQA 都能叠。外推不是免费的:NTK、YaRN、位置插值是在改频率,把没见过的大角度映射回训练范围。推得越远,越要做长文检索和多跳推理的评测,很多模型还要继续训练。
ALiBi 不动 Q、K、V,在 softmax 前加 -m·|i−j|,头与头的斜率不同,有的看近处,有的看远处。实现极简,外推天然,但对语序的精细建模不如旋转,也容易过度偏爱邻居。
RoPE 赢在三件事一起成立:相对位置写进点积、长上下文有一套可调的扩展、不破坏现有推理优化。
018 · 易 · 什么是大模型项目的分词器?原理是什么?
来源:小林 coding
模型只吃整数、吐下一个整数的概率。Tokenizer 做两件事:文本编成 token id,id 再查表变回文本。
粒度有三个坑:
- 字符级:词表小,序列极长。「hello」就是 5 个 token,Attention 的 N² 跟着胀,语义也得从字母重新学。
- 词级:英文变形会把词表撑到几十万,没见过的词变成未知标记,语义整段丢失。中文还得先分词,分错了下游全错。
- 子词:词表控制在几万到十几万,新词能拆开,又比单字保留更多信息。
主流实现不止 BPE。SentencePiece / Unigram、WordPiece 也常见。
BPE 从字节或字符出发,反复把语料里频率最高的相邻 pair 合并成新 token,直到词表到预设大小。GPT-2 是 50257,Llama 3 是 128000。「lowest」可能是 low+est;「lowest123」拆成 low、est 和三个数字,不会 OOV。
中文里高频汉字往往自己就是一个 token,词是否合并取决于语料频率。经验上 1000 个汉字大约 1000–1500 个 token,英文 1000 个词大约 1300 个 token,代码更碎,因为标点和缩进会单独成 token。这只是粗估。Qwen、Llama、OpenAI、Claude 的词表不同,中英和代码混在一起时比例会变,算成本和窗口必须用目标模型的 tokenizer 跑一遍。
特殊 token 传递结构,不来自正文:BOS、EOS(生成到这里停)、PAD(把 batch 补齐)、SEP,以及 ChatML 里的 <|im_start|>、<|im_end|>。它们的 embedding 在训练里被单独优化,模型靠它们分清轮次和角色。
工程上三件事直接受它影响。API 按 token 计费,不按字数。窗口是 token 上限,5 万字的中文加代码可能已经 8 万 token。截断可能把一个词从中间切开,边界要留 buffer,不要卡着上限切。
019 · 中 · 什么是 Scaling Law?大模型的「涌现能力」是怎么回事?
来源:小林 coding
Scaling Law 说的是损失随参数 N、数据 D、算力 C 按幂律下降,而且在当时能训到的范围内看不到饱和。OpenAI 在 2020 年把它做成可预测的投入产出,公司才敢按曲线烧钱。它没回答参数和数据怎么配。
Chinchilla(DeepMind,2022)在固定训练算力下拟合出大约 1 token 参数配 20 个 token。这是实验条件下的 compute-optimal 点,不是物理常数。
| 模型 | 参数 | 数据 | 结果 |
|---|---|---|---|
| Gopher | 280B | 300B token | 基线 |
| GPT-3 | 175B | 300B token,约 1:1.7 | 比 Gopher 略弱,相对 1:20 大约欠了 12 倍数据 |
| Chinchilla | 70B | 1.4T token | 同样量级算力下超过上面两个 |
Llama 3 8B 用了约 15T token,配比大约 1:1875,多项基准超过 GPT-3 175B。Chinchilla 的 1:20 不是数据上限。继续喂高质量 token,损失还能降,只是边际变小。小参数加大数据,优化的是推理成本:8B 一张消费卡能跑,175B 要多张 H100。Qwen3-0.6B 用到约 36T token,把这条线推得更远。
涌现的工程定义是:某项能力在小模型上几乎没有,过了临界规模突然能做。多步算术、上下文学习、跨语言迁移常被放在 50B–100B 这个区间讨论。GPT-3 训练数据大约 92% 是英文,规模够了之后也能处理没专门教过的语言。
2023 年斯坦福的 Are Emergent Abilities a Mirage 指出,exact match 把「错一步就 0 分」的连续进步画成阶跃;换成部分得分,曲线会平滑。更稳的说法是:能力跃迁在工程上看得见,但「魔法临界规模」被说得过满,不同任务的拐点不一样。
选型不要只看参数。问三件事:训练是否充分,数据质量如何,这个模型是为训练算力最优还是为部署便宜。依赖多步推理和上下文学习时,太小的模型往往不够;分类、抽取、摘要,7B–13B 经常够用。
再往后有两堵墙。公开高质量文本估计在 10T–50T token 量级,应对是合成数据、多模态和强化学习交互。算力增长也在变贵,能堆十万张卡的玩家很少。
020 · 中 · MoE 混合专家模型是什么?DeepSeek V3、Qwen 为什么用 MoE?
来源:小林 coding
Dense 模型每个 token 都要走过全部参数。能力要靠加参数,推理成本和显存一起涨,70B 往往已经是单机推理的边界。
MoE 把每层 FFN 换成 N 个结构相同、参数独立的专家,加一个路由。路由是线性层打分再 softmax,取 Top-K。每个 token 只激活 K 个专家。总参数决定学过多少,激活参数决定这一下算多少。专家擅长什么不是事先指定的,训练后会自己分成代码、数学、常用词、稀有词。
DeepSeek V3 总参数 671B,每个 token 激活约 37B。一层里 256 个路由专家加 1 个共享专家,每个 token 走 Top-8 加那个共享专家。Mixtral 8x7B 大约 47B 总参数、13B 激活,每层 8 个专家取 2 个。Qwen 的 MoE 也有「总参数大、激活小」的配置,例如 30B 总参数、3B 激活。趋势是专家变多、激活比例变低,共享专家用来接住大家都需要的知识。
显存按总参数走,速度按激活参数走。671B 的 FP16 权重大约 1.3TB,INT4 仍要大约 350GB,因为没加载的专家被路由到就没法算。延迟却接近 37B 的 Dense,而不是 671B。
训练有三个坑。路由早期会偏爱少数专家,其余专家不再更新,所以要负载均衡;DeepSeek V3 用无辅助损失的做法,动态调专家偏置,少干扰主损失。Top-K 不可导,路由不稳,常见办法是训练时加噪声、限制 logit 范数。专家分到不同卡上之后,token 要 all-to-all 送过去再送回来,通信是大头。
部署时批量请求会选中不同专家,吞吐不一定打得过同等激活量的 Dense。热门专家所在的卡会过载。所以 MoE 适合把容量做大、把单 token 成本压低;中小规模、延迟稳、工程要简单,Dense 仍然常见。
它不是 2024 年的新结构。2017 年的 GShard 已经用过。真正铺开,是训练经验、推理框架的专家并行,再加上 DeepSeek V3 把成本和效果同时打出来。
021 · 中 · Transformer 的 Self-Attention 怎么计算?
来源:ai-agent-interview-guide
输入 X 是 n × d_model。三个线性层得到 Query、Key、Value:Q = X W_Q,K、V 同样。
Attention(Q, K, V) = softmax(Q K^T / √d_k) V。Q K^T 是每个位置对其他位置的分,形状 n × n。除以 √d_k 是为了点积不至于大到 softmax 饱和、梯度消失。d_k 一般是 d_model / 头数。softmax 之后按行变成权重,再对 V 加权。
多头是把 Q、K、V 切到不同子空间各算一次,拼起来再乘 W_O。复杂度 O(n² · d),序列一长这就是瓶颈。
相对 RNN,任意两个位置直接相关,而且整段可以并行。多头是为了同时看不同关系,不是为了把计算做慢。
022 · 中 · 大模型的上下文窗口限制怎么突破?
来源:ai-agent-interview-guide
窗口数字不等于可用长度。模型对中间位置不敏感,这是 Lost in the Middle。注意力成本还随长度平方涨。GPT-4o 大约 128K,Claude 3.5 大约 200K,Gemini 1.5 Pro 到大约 2M,Qwen2.5 大约 128K。这些是上限,不是推荐把资料填满。
实际突破靠少放,不靠换一个更大的窗口。RAG 只放最相关的大约 5 块。整篇总结用 Map-Reduce。多轮对话用滑动窗口加摘要。关键约束放在上下文的头和尾,利用近因和首因。
长窗口适合必须同时看见的材料。能检索到的事实,放进长窗口只是更贵、更容易被中间位置忽略。
023 · 中 · 什么是 Mixture of Experts?为什么重要?
来源:ai-agent-interview-guide
MoE 把前馈层换成多组专家,另加一个很小的路由层。每个 token 只激活 top-k 个专家,输出按路由权重合并。Mixtral 8×7B 是 8 个专家里选 2 个:总参数大约 47B,单次激活大约 13B,速度接近 13B,效果靠近更大的稠密模型。Switch Transformer 是更早的稀疏路由代表。
重要的是容量和算力拆开了。稠密模型要效果就得每次把所有参数算一遍。MoE 把不相关的专家留在显存里但不算。
代价在路由。专家负载不均,有的过热有的没训到。专家分在不同 GPU 上时,通信会吃掉稀疏带来的收益。路由本身也不稳定。
这和系统外的模型路由不是一层。系统路由是一次请求选一个模型。MoE 是一个模型内部、每个 token 选专家。面试里把两层说成一件事,就说明边界没分开。