📋 摘要
  • 大模型(LLM)基础原理详细讲解,覆盖 Transformer 到生成策略的核心概念
  • 对应面试问答速查见 大模型基础(面试版)
  • 相关主题:大模型训练与微调、大模型推理与部署、RAG、AI Agent、LangChain 与 LangGraph
  • 当前覆盖:Transformer、self-attention、多头注意力、位置编码、FFN、归一化、残差、分词器、token、上下文窗口、生成策略、MoE/Dense、注意力变体、幻觉、三种架构、causal mask、稀疏/线性注意力、RoPE/ALiBi、外推内插、Pre-Norm/RMSNorm、GELU/SiLU/SwiGLU、BPE/OOV/词表、temperature/top-p/repetition penalty、beam search、attention sink、perplexity、in-context learning

Transformer 的整体结构是什么?为什么它能取代 RNN/LSTM?

整体结构

Transformer 是 2017 年《Attention Is All You Need》提出的纯注意力架构,由 Encoder(编码器) 和 Decoder(解码器) 两大部分堆叠而成。每层由多头自注意力(Multi-Head Self-Attention) + 前馈网络(FFN) + 残差连接 + LayerNorm 组成。

  • Encoder:N 层,每层含 self-attention + FFN,负责把输入序列编码成上下文表示。
  • Decoder:N 层,含 masked self-attention + cross-attention + FFN,自回归生成下一个 token。
  • 现代大模型(GPT 系)是 Decoder-only,即只保留 Decoder 的 masked self-attention 部分,做「预测下一个词」。

为什么能取代 RNN/LSTM

维度RNN/LSTMTransformer
并行性顺序计算,无法并行注意力矩阵可全并行计算
长程依赖梯度易消失/爆炸,信息被压缩任意两位置直接交互,路径长度 O(1)
表达能力逐时刻隐藏状态多头注意力从多子空间建模
训练效率慢快,可堆叠超大模型

一句话:注意力让任意 token 对直接建立联系,摆脱了 RNN 的顺序依赖,因此可并行、可扩展。

💡 面试加分项

先答「纯注意力架构 + Encoder/Decoder 结构」,再补三点:① 注意力全并行、路径长度 O(1) 解决长程依赖;② RNN 顺序计算无法并行训练;③ 现代 GPT 是 Decoder-only 的自回归结构。


self-attention(自注意力)的原理是什么?Q/K/V 分别是什么?

原理

自注意力的本质:让序列中每个 token 根据与其它 token 的相关性,加权聚合所有 token 的信息,得到融入上下文的新表示。

计算过程:

Text
Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V
  1. 每个输入 token 经三个线性变换得到 Q(Query 查询)、K(Key 键)、V(Value 值)。
  2. 用 Q 与所有 K 做点积得到注意力分数,除以 √d_k 防止分数过大导致 softmax 梯度消失。
  3. softmax 归一化成权重分布。
  4. 权重加权求和 V,得到该 token 的输出。

Q/K/V 的含义

  • Q(Query):当前 token「我想关注什么」。
  • K(Key):其它 token「我是什么」。
  • V(Value):其它 token「我携带的实际信息」。

Q·K 算「相关性打分」,V 提供「被聚合的内容」。

复杂度

序列长度 n、维度 d:注意力矩阵 n × n,复杂度 O(n²·d)。长序列是瓶颈,由此催生 FlashAttention、稀疏注意力、MQA/GQA 等优化。

💡 面试加分项

把公式写出来(含 √d_k 缩放),说清 Q/K/V 语义,并主动提 O(n²) 复杂度与优化方向。


为什么用多头注意力(Multi-Head Attention)?单头和多头有什么区别?

多头注意力的动机

单头注意力只用一个注意力空间,难以同时捕捉多种关系。多头注意力把 Q/K/V 拆成 h 个子空间,各自独立做注意力再拼接,让模型在不同子空间关注不同信息(如语法、指代、语义)。

Text
MultiHead(Q,K,V) = Concat(head_1, ..., head_h) · W^O
head_i = Attention(Q·W_i^Q, K·W_i^K, V·W_i^V)

单头 vs 多头

维度单头多头
子空间1 个h 个并行子空间
关系建模单一平均后的注意力捕捉多种关系
参数量少多(但总维度不变,h 份均分)
  • 多头不是「更多参数堆叠」,而是把维度切分并行,总计算量与单头同量级,但表达更丰富。
  • 典型配置:h = 8(原论文)、32、64(大模型),每头维度 d_k = d_model / h。
💡 面试加分项

强调「多个子空间并行关注不同特征」,并说明维度均分后总计算量不显著增加,还能自然适配后续 MQA/GQA 的工程优化。


位置编码的作用是什么?绝对位置编码、相对位置编码和 RoPE 有什么区别?

作用

注意力本身是对 token 集合的无序加权(并行计算不感知顺序),位置编码把「位置信息」注入模型,使其知道「我前面的词是谁」。

三类位置编码

  • 绝对位置编码:给每个位置一个固定向量(如正弦位置编码 sin/cos,或可学习 embedding),直接加到输入上。缺点:训练外推长序列困难。
  • 相对位置编码:建模 token 之间的相对距离而非绝对位置(如 T5 的 relative bias、ALiBi 按距离线性衰减注意力分数)。
  • RoPE(旋转位置编码):把位置信息编码为对 Q/K 的旋转变换,使点积只依赖相对位置。LLaMA/Qwen/DeepSeek 等主流模型都采用。
Text
RoPE: Q' = Q · R(θ·pos),点积结果只含 (pos_i - pos_j),即相对位置

对比

类型代表外推能力特点
绝对正弦、可学习弱简单,位置为绝对
相对T5 bias、ALiBi较好直接建模相对距离
RoPELLaMA 系好(可插值外推)旋转嵌入,兼顾绝对与相对
💡 面试加分项

讲清「注意力无序、位置编码补顺序」,再点出 RoPE 是当前主流、天然支持长上下文外推(可配合 NTK、YaRN 等插值扩展)。


Transformer 中前馈网络(FFN)的作用是什么?常用的激活函数有哪些?

作用

注意力层负责 token 间的信息交互(通信),FFN 层负责对每个 token 做独立的非线性变换(计算),提升表达能力。两者交替:注意力聚合上下文 → FFN 非线性加工 → 层归一化。

结构演变

  • 原始 Transformer:FFN(x) = W2 · ReLU(W1 · x),中间维度通常 4×d_model。
  • 现代大模型多用 SwiGLU:FFN(x) = W2 · (SwiGLU(W1 · x)),其中 SwiGLU(x) = Swish(x) ⊙ (x·V),提升收敛与效果(LLaMA、Qwen 等)。

常用激活函数

激活函数特点
ReLU简单,负半轴为 0
GELU平滑近似,BERT 使用
Swish/SiLUx·sigmoid(x),LLaMA 系使用
SwiGLUSwish 的门控变体,主流首选
💡 面试加分项

记住「注意力做通信、FFN 做计算」这个分工,并提到现代模型普遍用 SwiGLU 替代 ReLU 提升效果。


LayerNorm 和 BatchNorm 有什么区别?为什么 Transformer 用 LayerNorm?

区别

维度BatchNormLayerNorm
归一化维度对每个特征跨 batch 归一化对每个样本跨特征维度归一化
依赖 batch依赖,batch 小不稳定不依赖,逐样本独立
适用场景CNNRNN/Transformer
推理需记录移动统计量直接算,无需 batch 统计

为什么 Transformer 用 LayerNorm

  1. 序列长度可变、batch 内 token 数不定,BatchNorm 难以在变长序列上稳定统计。
  2. 逐样本独立,与 batch 无关,训练/推理行为一致。
  3. 归一化放在每个 token 自身的特征维度上,天然适合「token 级」的并行计算。

Pre-Norm 与 Post-Norm、RMSNorm

  • Post-Norm(原论文):x + Sublayer(LN(x)),深网络梯度不稳。
  • Pre-Norm(现代主流):x + Sublayer(x) 再 LN,训练更稳定。
  • RMSNorm:只用均方根缩放、去掉均值平移,省算力,LLaMA 系采用。
💡 面试加分项

核心是「LayerNorm 对每个样本独立归一化、不依赖 batch」,并能说出 Pre-Norm 更稳定、RMSNorm 更省算力这两个现代改进。


残差连接在 Transformer 中的作用是什么?

作用

残差连接 x + Sublayer(x)(He 的 ResNet 思想)解决深度网络的梯度消失/退化问题:

  1. 梯度直通:反向传播时梯度可沿恒等映射直接回传,避免深层梯度消失。
  2. 低层信息保留:每层输出至少保留输入信息,网络堆叠再深也不至于「学丢」原始信息。
  3. 训练稳定:配合 LayerNorm(Pre-Norm),可训练上千层的超大模型。

一句话:残差让「深层叠加」成为可能,是 Transformer 能堆到几百层的基石。

💡 面试加分项

类比 ResNet,答「恒等映射保证梯度与信息直通」,再补一句「配合 Pre-Norm 才能稳定训练千亿参数模型」。


分词器(Tokenizer)的原理是什么?BPE、WordPiece、SentencePiece 有什么区别?

原理

分词器把原始文本切成 token 序列,是「文本 → 模型可处理的数字 ID」的入口。目标是在词表大小与OOV(未登录词)覆盖之间平衡:词表太大则 embedding 巨、太小则切太碎。

三种主流算法

算法核心特点
BPE统计最高频相邻字符对,迭代合并成子词GPT 系,基于字符级字节合并
WordPiece合并使语言模型似然增益最大的对BERT 系,用 ## 标记词内续段
SentencePiece直接在原始字节/空白上做 BPE 或 unigram不依赖预分词,语言无关,T5/LLaMA 系
  • 三者都是子词(subword)级:把罕见词切成多个子词(如 unbelievable → un + believ + able),兼顾词表大小与覆盖。
  • 现代模型多采用 BPE(Byte-level BPE):以字节为单位合并,天然覆盖所有字符(含 emoji、多语言)。
💡 面试加分项

说清「子词级在词表大小与 OOV 间折中」,BPE 按频率合并、WordPiece 按似然合并、SentencePiece 语言无关,并能举 un + believ + able 的例子。


什么是 token?token 和字/词的关系?中英文 token 有什么差异?

概念

token 是大模型处理文本的最小单位,输入先被分词器切成 token 序列,再映射为 ID。模型按 token 计费、按 token 计量上下文长度。

token 与字/词的关系

  • 一个 token 可能是半个词、一个词、一个字、一个标点,取决于分词器与词表。
  • 高频词通常独立成 token,罕见词被拆成多个子词 token。

中英文差异

维度英文中文
切分难度空格天然分词无空格,需分词
token/字比约 1 token ≈ 0.75 词1 个汉字常需 1~2 token
影响成本低同样语义 token 更多、成本更高
  • 实践中「1 个中文字符 ≈ 1 个 token,1 个英文单词 ≈ 1.3 token」是常见估算。
  • token 数直接决定成本与上下文占用,是工程上要关心的指标。
💡 面试加分项

强调「token 是计费与上下文的基本单位」,并指出中文比英文更「费 token」(无空格、多字节),这是中文场景成本高的原因之一。


什么是上下文窗口(context window)?如何扩展长上下文?

概念

上下文窗口是模型单次能处理的 token 上限(输入 + 输出的总 token 数)。超过则被截断或报错。它是注意力 O(n²) 复杂度和 KV cache 显存的直接体现。

扩展长上下文的方法

  • 训练期:直接用长序列训练(成本高)、位置编码外推。
  • 位置编码插值:
    • Position Interpolation:把长序列的位置按比例压缩到训练长度内。
    • NTK-aware 插值:对 RoPE 的旋转基做非线性缩放,外推更平滑。
    • YaRN:结合 NTK 与插值,进一步稳定长文效果。
  • 注意力优化:滑动窗口(window attention)、稀疏注意力、FlashAttention 降低显存与计算。
  • 工程侧:LongRoPE、ring attention(序列并行)、KV cache 压缩(如 MLA、GQA)等。
💡 面试加分项

答「窗口是 token 上限,受 O(n²) 注意力与 KV cache 限制」,并举例 NTK/YaRN 插值和滑动窗口、GQA/MLA 等主流扩展手段。


大模型的生成策略有哪些?greedy、beam search、sampling、top-k、top-p 有什么区别?

生成策略

模型输出的是词表上的概率分布,生成策略决定「如何从分布里挑下一个 token」。

策略做法特点
Greedy每步取概率最高 token确定性,可能重复、局部最优
Beam Search维护 k 条候选序列,取整体概率最高用于翻译等确定性任务
Sampling按概率随机采样多样性强,用于对话/创作
temperature缩放 logits(softmax(logits/T))T 越大越随机,越小越确定
top-k只从概率前 k 个 token 采样截断长尾
top-p(nucleus)取累计概率达 p 的最小集合采样动态截断,自适应

组合实践

  • 对话/创意写作:temperature 0.7~1.0 + top-p 0.9,多样性好。
  • 代码/数学/事实问答:temperature 0~0.3 + greedy,稳定精确。
  • 翻译/摘要:beam search 提升整体连贯性。
💡 面试加分项

能说明「temperature 缩放分布、top-k 固定截断、top-p 动态截断」的区别,并给出「对话用高温度、代码用低温度」的实践结论。


主流开源大模型有哪些?MoE 和 Dense 架构有什么区别?

主流开源模型

模型特点
LLaMA(Meta)开源标杆,RoPE + SwiGLU + Pre-Norm
Qwen(阿里)中文强,多尺寸
DeepSeekMoE 架构,成本低、效果好
GLM(智谱)中文生态
Mistral欧洲开源,GQA 先行者

MoE vs Dense

维度Dense(稠密)MoE(混合专家)
结构每层一个 FFN,全参数参与每层多个专家 FFN,路由只激活部分
计算量全量每次只算 top-k 专家,激活参数少
总参数相对少大(千亿级),但推理成本低
训练简单需负载均衡(aux loss 防专家塌缩)
  • MoE 核心:「大参数量 + 小激活量」——用路由(gate)每个 token 只走 top-2/8 专家,显存存全量、计算只花一小部分,是 DeepSeek/Mixtral 低成本高性能的关键。
💡 面试加分项

用一句话「MoE 大总参、小激活,省算力」点出本质,再补「路由 + 负载均衡 aux loss 防止专家不均衡」这个落地难点。


MHA、MQA、GQA 有什么区别?FlashAttention 解决什么问题?

MHA / MQA / GQA

多头注意力的三种工程变体,核心是压缩 KV 头数以省显存(KV cache 是推理显存大头):

类型Q 头数KV 头数特点
MHAhh标准多头,效果最好、KV cache 最大
MQAh1所有头共享一组 KV,最省但可能掉点
GQAhg(1<g<h)折中,分组共享 KV,主流(LLaMA2-70B、Qwen)
  • 量化指标:MQA 把 KV cache 降为 MHA 的 1/h,GQA 降为 g/h。
  • 现代大模型普遍用 GQA 平衡效果与显存。

FlashAttention

解决「注意力 O(n²) 显存」的 IO 优化:

  • 传统实现把 n×n 注意力矩阵写回 HBM(显存带宽瓶颈)。
  • FlashAttention 用 tiling(分块)+ softmax 在线计算,让中间矩阵留在 SRAM,减少 HBM 读写,显存从 O(n²) 降到 O(n),速度大幅提升且数学等价。
  • FlashDecoding 是其对**长序列解码(batch 小、query 少)**的扩展优化。
💡 面试加分项

讲清「GQA 是 MHA 与 MQA 的折中、省 KV cache」;FlashAttention 强调「数学等价 + 减少 HBM 读写」,不改变结果只优化 IO。


大模型为什么会出现幻觉?有哪些成因?

什么是幻觉

模型生成看似合理但与事实不符的内容(编造事实、张冠李戴、无中生有)。它是概率生成 + 缺乏可靠知识约束的自然结果。

成因

  1. 训练目标:自回归「预测下一个 token」只优化语言流畅性,不优化事实正确性。
  2. 知识边界:训练数据有时效与覆盖缺口,模型把「不确定」也自信地「编」出来。
  3. 概率采样:生成策略的随机性放大偏差。
  4. 缺乏检索/校验:无外部知识锚点时,模型只能靠参数记忆「脑补」。
  5. 对齐不足:RLHF/DPO 更偏「讨好用户」而非「承认不知道」。

缓解方向

RAG(外接知识)、约束解码、事实核查/自一致性(Self-Consistency)、降低温度、让模型「不确定时说不知道」、工具调用校验。

💡 面试加分项

先归因到「预测下一个 token 的训练目标不保证事实性」,再分「知识缺口、概率采样、无外部锚点」展开,最后落到 RAG/约束解码等缓解手段,与 RAG 主题衔接。


Encoder-only、Decoder-only、Encoder-Decoder 三种架构有什么区别?各适合什么任务?

三种架构

Transformer 可拆成 Encoder(双向注意力)与 Decoder(因果注意力)两部分,主流模型按「用哪部分」分成三类:

架构注意力方式代表模型适合任务
Encoder-only双向(能看到前后文)BERT、RoBERTa分类、NER、检索等理解型
Decoder-only单向因果(只看左侧)GPT、LLaMA、Qwen自回归生成、对话、通用
Encoder-DecoderEncoder 双向 + Decoder 因果T5、BART翻译、摘要等序列到序列

核心区别

  • Encoder-only:每个 token 能看到完整上下文,适合「看懂整句」的下游任务,但不能自回归生成文本。
  • Decoder-only:用 causal mask 屏蔽未来 token,训练目标统一为「预测下一个词」,是当前通用大模型的绝对主流。
  • Encoder-Decoder:编码器读入源序列、解码器生成目标序列,天然适配长度不对等的映射任务。
💡 面试加分项

用「注意力方向」一句话区分:Encoder 双向、Decoder 单向因果、Encoder-Decoder 两者拼接;再落到任务适配:理解用 Encoder、生成用 Decoder、翻译/摘要用 Encoder-Decoder,并点出 GPT 系全是 Decoder-only。


GPT 系列(GPT-1 到 GPT-4)的架构是如何演变的?

演变脉络

版本年份参数量关键变化
GPT-120181.17 亿12 层 Decoder-only,预训练 + 微调范式
GPT-2201915 亿更大数据/模型,验证 zero-shot 能力
GPT-320201750 亿稀疏多任务,in-context learning 涌现
GPT-42023未公开多模态、更强对齐(RLHF)、推测为 MoE

核心不变与进化

  • 架构基本不变:GPT-1 到 GPT-3 都是 Decoder-only Transformer,靠「堆层数、加数据、加参数」实现 scaling。
  • 范式演进:从「预训练 + 微调」→「zero-shot」→「few-shot/上下文学习」,再到 GPT-4 的多模态与安全对齐。
  • GPT-4 传闻采用 MoE(多个专家子网络),以更小的推理算力撑起更大总参数量。
💡 面试加分项

强调「架构没大变、靠 scaling 与范式演进」,按「预训练微调 → 上下文学习 → 多模态/对齐」这条线讲,GPT-4 的 MoE 传闻可作为加分细节。


LLaMA 相对原始 Transformer 做了哪些改进?

四项核心改进

LLaMA(Meta,2023)在原始 Transformer 上做了四处「现代化」改造,成为后续开源模型(Qwen、Mistral 等)的模板:

改进点原始 TransformerLLaMA
归一化Post-Norm + LayerNormPre-Norm + RMSNorm
激活函数ReLUSwiGLU
位置编码正弦绝对位置RoPE
规模d=512、6 层更深更宽(7B: 32 层 d=4096)

训练策略

  • 提出「小模型 + 大算力 + 大量数据」:用更多高质量 token 训练小模型,推理时反而更强(Chinchilla 缩放定律思想)。
  • 这些改进分别解决:训练稳定性(Pre-Norm)、表达力(SwiGLU)、长上下文(RoPE)、算力(RMSNorm)。
💡 面试加分项

按「RMSNorm + SwiGLU + RoPE + Pre-Norm」四件套背诵,并说明每项解决什么问题,再补一句「小模型大算力」的训练理念。


什么是 causal mask(因果掩码)?为什么 Decoder 需要它?

概念

causal mask 是注意力矩阵上的上三角掩码:把「当前位置之后」的位置分数置为 -inf,softmax 后概率为 0,从而禁止每个 token 看到未来信息。

Text
mask[i][j] = 0     (j <= i)   保留
mask[i][j] = -inf  (j > i)    屏蔽未来

为什么需要

  1. 自回归本质:生成第 t 个 token 时只能依赖 t 之前的 token,否则「看到答案」就是信息泄露。
  2. 训练并行化:训练时已知完整序列,用 teacher forcing + causal mask 一次性算出所有位置的预测,却保证每个位置的预测只用了左侧信息。
  3. 推理一致:推理逐个 token 生成,与训练时「只看左侧」保持一致。
💡 面试加分项

讲清「上三角 -inf 屏蔽未来」与「训练可并行、推理自回归」这个关键,把 teacher forcing 和并行训练点出来。


self-attention 和 cross-attention 有什么区别?分别用在哪里?

区别

维度self-attentioncross-attention
输入来源Q/K/V 来自同一序列Q 来自一个序列,K/V 来自另一个序列
作用序列内部建模关系两个序列间对齐与融合
位置Encoder、Decoder 各层Encoder-Decoder 的 Decoder 层

用在哪里

  • self-attention:Encoder 内建模源句上下文,Decoder 内建模已生成部分(带 causal mask)。
  • cross-attention:Decoder 的 Q 来自目标序列、K/V 来自 Encoder 输出,让「生成」关注「输入」,是翻译、摘要等 Encoder-Decoder 模型的核心。
  • Decoder-only 模型(GPT)没有 cross-attention,只有 masked self-attention。
💡 面试加分项

一句话「Q/K/V 同源是 self、异源是 cross」,再举例翻译中「解码器 query 去查编码器 key/value」就是 cross-attention,并说明 GPT 系没有它。


为什么主流大模型都选择 Decoder-only 架构?

原因

  1. 统一训练目标:全部任务都化为「预测下一个 token」,无需为不同任务设计不同目标。
  2. 因果注意力限制最小:双向注意力在长序列上的计算/显存更大;Decoder 用 KV cache 自回归推理更自然高效。
  3. 上下文学习能力:Decoder-only 的 next-token 目标让 few-shot/in-context learning 涌现得最好(GPT-3 验证)。
  4. scaling 友好:结构与目标简单,易于堆叠到千亿参数,符合 scaling law。

代价

失去双向信息,对「理解型」任务不如 Encoder,但可用更多数据与参数弥补,通用性更强。

💡 面试加分项

核心是「统一自回归目标 + 涌现上下文学习 + scaling 友好」三条,再补一句「代价是单向注意力,但可用参数与数据换回」的辩证。


缩放点积注意力为什么要除以 √d_k?

原因

点积 Q·K^T 的每个元素是 d_k 个随机变量之和,方差随 d_k 线性增大。d_k 大时点积值落入 softmax 的饱和区(梯度接近 0),导致训练缓慢甚至不收敛。

数学

假设 Q、K 各分量独立、均值 0 方差 1,则点积方差为 d_k。除以 √d_k 使方差回到 1,softmax 输入落在非饱和区间,梯度稳定。

Text
Attention(Q,K,V) = softmax(Q·K^T / √d_k) · V
💡 面试加分项

直接答「防止点积方差过大、softmax 进入饱和区导致梯度消失」,能提到「方差正比于 d_k、除以 √d_k 拉回单位方差」是满分级别。


稀疏注意力有哪些做法?滑动窗口、全局+局部、Longformer 分别是什么?

动机

标准注意力 O(n²),长序列无法承受。稀疏注意力只让每个 token 关注部分位置,把复杂度降到 O(n·k) 或 O(n)。

三类做法

做法每个 token 关注复杂度代表
滑动窗口前后各 w/2 个邻居O(n·w)Longformer、Mistral
全局+局部少数全局 token + 窗口内邻居O(n·(w+g))Longformer、BigBird
随机/分块随机或分块选 tokenO(n·k)BigBird、Reformer
  • Longformer:结合滑动窗口 + 全局注意力(CLS 等特殊 token 关注全局)+ 扩张窗口,覆盖长文档。
  • BigBird:随机 + 窗口 + 全局三种注意力组合,理论上近似全注意力。
💡 面试加分项

讲「稀疏注意力的本质是牺牲全局、保留局部 + 少量全局 token」,把复杂度从 O(n²) 降到 O(n·w),并举例 Longformer 的「窗口 + 全局 + 扩张」三件套。


线性注意力(Linear Attention)的原理是什么?有什么优缺点?

原理

标准注意力 softmax(QK^T)V 是 O(n²)。线性注意力把 softmax 换成可分解的核函数 φ,利用矩阵结合律改变计算顺序:

Text
Attention = φ(Q) · (φ(K)^T · V)   先算 φ(K)^T V(d×d),再乘 φ(Q)(n×d)

复杂度从 O(n²·d) 降到 O(n·d²),长序列时几乎线性。

优缺点

维度说明
优点长序列算力/显存几乎线性,适合超长文本
缺点去掉 softmax 后注意力无法稀疏化(softmax 指数放大近邻);建模能力弱于标准注意力
  • 代表:Performer、Linear Transformer,RWKV 也借鉴了线性注意力的思想。
💡 面试加分项

核心答「用核函数分解 softmax + 交换矩阵乘法顺序,O(n²)→O(n)」,再点出代价是「丧失 softmax 的稀疏性与表达力」,这是权衡点。


注意力计算中 softmax 的作用是什么?去掉 softmax 会怎样?

作用

softmax 把注意力分数(可为任意实数)映射为非负、和为 1 的概率分布:

  1. 归一化:保证加权求和是「凸组合」,输出量级稳定。
  2. 放大差异:指数函数让高分与低分差距拉开,注意力更聚焦(稀疏化)。
  3. 可导:配合交叉熵训练,梯度计算简单。

去掉会怎样

  • 分数无界、无归一化,加权和可能发散或量级不稳。
  • 注意力趋于「均匀关注所有位置」,失去聚焦能力,效果显著下降(这也是线性注意力的痛点)。
💡 面试加分项

三条作用「归一化、指数放大差异、可导」都答到,并强调「去掉后注意力不聚焦、量级不稳」,能自然引出与线性注意力的联系。


什么是 sliding window attention?为什么能节省显存和算力?

概念

sliding window attention 让每个 token 只关注固定窗口内的前后 token(如窗口 w=4096),窗口外的位置不参与计算。

Text
token_i 只关注 [i-w, i] 范围内的 token(Decoder 因果窗口)

为什么省资源

  1. 算力:注意力从 O(n²) 降到 O(n·w),长序列收益巨大。
  2. 显存:KV cache 只存最近 w 个 token 的 K/V,O(w) 而非 O(n),与序列长度解耦。
  3. 代表:Mistral 系列用滑动窗口 + 分层窗口设计,在长文档上低成本运行。

代价

窗口外的远距离依赖丢失;可通过堆叠多层让信息逐层传递(第 k 层能看到约 k·w 范围)弥补。

💡 面试加分项

讲清「窗口内注意力 + KV cache 固定 O(w)」这个省显存本质,并提到「多层堆叠扩大感受野」弥补全局信息丢失,Mistral 是典型代表。


ALiBi 位置编码的原理是什么?为什么它能外推?

原理

ALiBi(Attention with Linear Biases)不加位置向量,而是直接在注意力分数上按 token 距离线性衰减:

Text
score = Q·K^T / √d_k - m · |i - j|

每个注意力头用不同的斜率 m(几何递增),距离越远惩罚越大。

为什么能外推

  1. 惩罚是线性的,距离再大也只是线性衰减,不会出现「位置超出训练范围后 embedding 无意义」的问题。
  2. 训练短序列学到「按距离衰减」的规律,可直接泛化到更长的距离,无需额外插值。
  3. 论文显示 ALiBi 在训练 1k 长度下可外推到 2k、3k 甚至更长仍保持效果。
💡 面试加分项

核心「位置信息不靠 embedding、靠线性偏置」,外推源于「线性规律可平滑延伸到未见距离」,与 RoPE 插值方案形成对比。


RoPE(旋转位置编码)的数学原理是什么?为什么能编码相对位置?

原理

RoPE 把位置信息编码为对 Q/K 向量的二维旋转:对 d 维向量按维度两两配对,第 i 对旋转角度为 θ_i · pos。

Text
q' = q · R(θ·pos),R 是分块旋转矩阵
(q'_m)^T k'_n = q_m^T R(θ·(n-m)) k_n   ← 点积只依赖相对位置 n-m

为什么能编码相对位置

  • 旋转是正交变换,保持向量模长不变,只改变「方向」。
  • 两个旋转后的向量点积,其角度差恰好是 θ·(n-m),因此注意力分数天然只依赖相对距离。
  • 同时保留绝对位置信息(每个 token 的旋转角度与绝对 pos 绑定),兼顾绝对与相对。
💡 面试加分项

写出「旋转矩阵 + 点积只依赖 (n-m)」是核心,说明它「用正交旋转同时编码绝对位置、点积天然含相对位置」,这也是它外推好的原因。


位置编码的「外推」和「内插」有什么区别?

概念

  • 外推(Extrapolation):让模型处理超过训练长度的序列,位置编码直接沿用公式计算训练外的新位置。
  • 内插(Interpolation):把长序列的位置按比例压缩回训练长度内,避免出现「没见过的位置」。

对比

维度外推内插
做法位置按公式继续外延位置按缩放因子压缩(×L_train/L)
代表ALiBi、NTKPosition Interpolation、YaRN
风险未见位置效果不稳分辨率下降、相邻 token 混淆
  • NTK-aware:不改位置、改 RoPE 的旋转基(频率缩放),属于「隐式外推」,比直接内插更平滑。
  • YaRN:结合 NTK 与温度调节,兼顾外推与内插,效果更稳。
💡 面试加分项

一句话「外推=直接算新位置、内插=把新位置压缩回旧范围」,再举例 ALiBi 外推、PI/YaRN 内插,NTK 是两者的折中。


为什么绝对位置编码难以外推到长序列?

原因

  1. 可学习绝对位置:训练只见过 [0, L-1] 的 embedding,位置 L、L+1 的 embedding 是随机初始化,模型完全无法利用。
  2. 正弦绝对位置:虽有解析公式可算任意位置,但模型在训练中未见过长距离位置对应的注意力模式,泛化差。
  3. 绝对位置把「位置」与「绝对坐标」强绑定,序列变长后坐标分布与训练分布偏移,效果退化。

解决思路

改用相对位置编码(ALiBi、RoPE)——它们编码的是「距离」而非「绝对坐标」,规律可平滑延伸到未见长度。

💡 面试加分项

核心「绝对坐标强绑定 + 未见位置 embedding 无意义」导致分布偏移,进而引出「相对位置编码靠距离可外推」的解法。


Pre-Norm 和 Post-Norm 有什么区别?为什么现代模型用 Pre-Norm?

区别

维度Post-Norm(原论文)Pre-Norm(现代主流)
公式y = x + F(LN(x))y = LN(x + F(x))
梯度路径归一化在残差分支内,梯度易消失恒等路径通畅,梯度稳定
训练稳定性深网络需 warmup,易震荡无需精细 warmup,可直接深堆

为什么用 Pre-Norm

  • 残差恒等映射不被归一化截断,梯度直通,堆叠几百层也不发散。
  • 虽然 Pre-Norm 在浅层/同深度下可能略弱于 Post-Norm,但工程上「稳定训练千亿模型」的收益远大于这点损失。
💡 面试加分项

写出两个公式并指出「归一化放残差分支内 vs 外」,Pre-Norm 让梯度沿恒等路径直通、深网络更稳,是千亿模型能训练的关键。


RMSNorm 的原理是什么?相比 LayerNorm 省了什么?

原理

LayerNorm 对每个 token 的隐向量做「减均值 + 除标准差」两步。RMSNorm 认为「平移」对效果影响很小,只保留均方根缩放:

Text
LayerNorm: y = (x - μ) / σ · γ + β
RMSNorm:   y = x / RMS(x) · γ        RMS(x) = sqrt(mean(x²))

省了什么

  1. 少算均值:省掉 μ 的统计与减法,计算量更低。
  2. 少一个参数 β:去掉偏置,参数量微降。
  3. 在 LLaMA/Qwen 等大模型上效果与 LayerNorm 相当,但训练/推理更快。
💡 面试加分项

答「只做均方根缩放、去掉均值平移与偏置」,强调「省统计量 + 省参数 + 效果不降」,是 LLaMA 系标配。


GELU 和 SiLU(Swish)有什么区别?为什么替代 ReLU?

公式与区别

激活公式特点
ReLUmax(0, x)负半轴为 0,x=0 不可导
GELUx·Φ(x)(Φ 为标准正态 CDF)平滑,BERT/GPT-2 使用
SiLU/Swishx·sigmoid(x)平滑非单调,LLaMA 系使用
  • 三者都「负半轴被压制」,但 GELU/SiLU 是平滑、处处可导,梯度更稳定。
  • SiLU 有轻微非单调(负区间先降后升),比 GELU 计算更简单(无 erf 近似)。

为什么替代 ReLU

ReLU 的「硬零」会杀死负梯度(死神经元),平滑激活保留少量负响应,信息流更连续,深度模型收敛更好。

💡 面试加分项

写出公式并点出「平滑可导、负半轴非硬零」是替代 ReLU 的原因,SiLU 比 GELU 更省算、是 LLaMA 系选择。


什么是 GLU 门控结构?SwiGLU 为什么效果好?

GLU 结构

GLU(Gated Linear Unit)用门控相乘替代单一非线性:一个分支做激活门控、另一个分支线性投影,逐元素相乘:

Text
GLU(x) = (x·W1 + b1) ⊙ σ(x·W2 + b2)     σ 为门控激活

SwiGLU

把门控的 sigmoid 换成 Swish,得到 SwiGLU(x) = Swish(x·W1) ⊙ (x·V),FFN 变为 W2 · SwiGLU(x)。

为什么效果好

  1. 门控乘法:让部分维度被选择性「通过/抑制」,比直接加偏置更灵活。
  2. 非线性增强:两个分支相乘引入更强表达能力,同等参数下效果优于 ReLU。
  3. LLaMA/PaLM 等实验证明 SwiGLU 在相同算力下收敛更快、效果更好(中间维度通常从 4× 调成约 8/3× 以平衡参数量)。
💡 面试加分项

答「门控 = 双分支相乘、一个分支激活一个线性」,SwiGLU 用 Swish 门控 + 更强非线性,同等算力效果更好,注意「中间维度需调整平衡参数」。


BPE 的合并过程是怎样的?能否举例说明?

合并过程

BPE(Byte Pair Encoding)从字符级词表出发,反复合并出现频率最高的相邻符号对:

  1. 初始化词表为所有字符,语料按字符切分。
  2. 统计所有相邻符号对的频次,合并最高频的一对为新符号。
  3. 重复直到词表达到预设大小或合并次数。

举例

语料 low(5 次)、lower(2 次)、newest(6 次)、widest(3 次):

Text
第一轮:频次最高对是 "e"+"s"(9 次)→ 合并为 "es"
第二轮:得到 "es"+"t"(9 次)→ 合并为 "est"
第三轮:继续合并最高频对……

最终 lower → low + er、newest → new + est,罕见词被拆成高频子词组合。

💡 面试加分项

讲清「统计最高频相邻对 → 迭代合并 → 词表达上限」三步,并能现场用 low/lower/newest 这类例子演示一轮合并。


什么是 OOV(未登录词)?子词分词如何解决?

概念

OOV(Out-of-Vocabulary)指词表中不存在的词。传统词级分词(按空格切词)遇到新词、专名、拼写变体时无法映射,只能退化为 UNK,信息丢失。

子词分词的解决

  • 子词分词把词拆成更小的子词单元(如 unbelievable → un + believ + able),词表只需覆盖常见子词。
  • 任何未见词都能用「已见过的子词」拼出来,理论上零 OOV(配合 byte-level 连任意字符都能表示)。
  • BPE/WordPiece/SentencePiece 都属于子词分词,在「词表大小」与「覆盖」间折中。
💡 面试加分项

核心「词级分词遇新词退化为 UNK,子词分词用子词拼装、零 OOV」,并举例 un+believ+able。


特殊 token(BOS/EOS/PAD/UNK)分别是什么?

四种特殊 token

token全称作用
BOSBeginning of Sequence序列开头标记,<s>/`<
EOSEnd of Sequence序列结尾标记,生成到它即停止
PADPadding补齐变长序列到固定长度,mask 掉不参与计算
UNKUnknown词表外词的兜底(子词分词下基本不用)

关键点

  • EOS 决定生成停止:模型输出 EOS 即终止,是自回归解码的「刹车」。
  • PAD 需掩码:PAD 位置要在注意力中 mask 掉,否则污染其它 token 的表示。
  • 现代大模型(LLaMA 等)常用 <s> 兼作 BOS、</s> 作 EOS;PAD 在批量推理中用于对齐长度。
💡 面试加分项

说清「BOS 开头、EOS 停止、PAD 补齐需 mask、UNK 兜底」,并强调 EOS 是解码停止信号、PAD 必须屏蔽。


词表大小如何权衡?太大或太小各有什么问题?

权衡

词表大小 V 直接决定:embedding 矩阵规模(V×d)、输出层 softmax 计算量(V 类)、以及「平均每个词被切成几个 token」。

维度词表太小词表太大
序列长度词被切太碎,序列变长词多独立成 token,序列短
参数/算力embedding/softmax 小embedding/softmax 大(显存、计算)
语义粒度过碎,语义被割裂更完整,但长尾词易稀疏
风险长序列更贵、语义差大矩阵开销、长尾词训练不足
  • 现代大模型 V 通常在 3 万~25 万之间(如 LLaMA 32k、Qwen 15 万+),在「序列长度」与「softmax 开销」间取平衡。
  • 结论:词表越大 → token 越少(成本低)但矩阵越大,需按语种与算力调优。
💡 面试加分项

点出「V 决定 embedding/softmax 开销与切分粒度」,两难是「切太碎 vs 大矩阵」,举例 LLaMA 32k、Qwen 15 万这类实际数字。


什么是 byte-level BPE?为什么能覆盖所有字符?

概念

普通 BPE 以「字符」为最小单位,Byte-level BPE 以 **UTF-8 字节(0~255)**为最小合并单位。GPT-2 提出后成为 GPT 系默认。

为什么覆盖所有字符

  1. 任何 Unicode 字符都能编码成 1~4 个 UTF-8 字节,256 个字节符号可表示所有文字(中文、emoji、罕见符号)。
  2. 合并时在字节序列上做 BPE,即使遇到训练时未见过的字符,也能拆成字节级子词处理,彻底消除 OOV。
  3. 无需预分词(不依赖空格切词),语言无关,任意脚本都适用。
Text
"😀" → 4 个 UTF-8 字节 → 可能被合并为 1~2 个字节级 token

代价

字节序列更长,早期合并步数更多;但换来「零 OOV + 语言无关」,现代模型普遍接受。

💡 面试加分项

核心「以 UTF-8 字节为基本符号、256 种字节覆盖一切字符」,换来零 OOV 与语言无关,代价是序列更长。


temperature 的原理是什么?为什么缩放 logits?

原理

temperature T 在 softmax 前缩放 logits,控制概率分布的「尖锐程度」:

Text
p_i = softmax(z_i / T) = exp(z_i/T) / Σ_j exp(z_j/T)
  • T → 0:分布趋近 one-hot,几乎总选最高分 token,确定但单调。
  • T = 1:原始分布。
  • T → ∞:分布趋近均匀,随机性强、多样性高。

为什么缩放 logits

温度直接控制分布的熵:T 越大,logits 差异被「抹平」,采样更随机;T 越小,差异被「放大」,采样更确定。它是把「确定性 ↔ 多样性」的权衡交给一个标量参数,比直接改采样阈值更平滑。

💡 面试加分项

写出 softmax(z/T),用「T→0 变 one-hot、T→∞ 变均匀」说明两端行为,并点出它本质是控制分布熵、平衡确定性与多样性。


top-p 和 top-k 有什么区别?各自的优缺点?

区别

维度top-ktop-p(nucleus)
截断方式固定取概率前 k 个 token取累计概率达 p 的最小集合
候选数固定 k 个动态,随分布形状变化
参数敏感性分布平坦/尖锐都固定 k自适应分布

优缺点

  • top-k:简单直观,但分布平坦时 k 太小会漏掉合理 token、分布尖锐时 k 太大又引入垃圾 token(k 难调)。
  • top-p:动态截断,能自适应「平坦 vs 尖锐」分布,通常效果更稳;但 p 值本身也需调,极端时可能退化为只留 1 个或全留。

实践

两者常组合使用(先 top-k 后 top-p),对话生成常用 top-p=0.9。

💡 面试加分项

一句话「top-k 固定个数、top-p 动态按累计概率」,点出 top-k 对分布形状不敏感是缺陷、top-p 自适应是优点,实践常组合。


repetition penalty 是什么?如何抑制生成重复?

概念

repetition penalty 对已经出现过的 token 在采样前做对数惩罚,降低它们再次被选中的概率:

Text
z_i' = z_i - penalty       若 token i 已生成过(或 z_i / penalty,视实现)

penalty > 1(如 1.1~1.3),已出现 token 的 logits 被压低,抑制重复。

抑制重复的多种手段

  1. repetition penalty:全局惩罚已生成 token。
  2. frequency penalty:按出现次数累加惩罚,次数越多压得越狠。
  3. presence penalty:只要出现过就固定惩罚,不随次数累加。
  4. no_repeat_ngram_size:禁止连续 n-gram 重复。
💡 面试加分项

讲清「对已生成 token 的 logits 惩罚」,并区分 presence/frequency penalty(固定 vs 随次数累加)、no_repeat_ngram 这几类,能说 penalty 典型值 1.1~1.3。


beam search 的 beam size 如何影响生成质量与速度?

原理

beam search 每步保留 beam size(k) 条概率最高的候选序列,最后选整体概率最高的一条。k=1 退化为 greedy。

影响

维度k 小k 大
质量可能局部最优、错过全局更优更接近全局最优,连贯性更好
速度快,几乎与 greedy 同速慢,每步维护 k 条序列,约 O(k) 倍
多样性单一仍偏确定性,易「通用句式」
  • 翻译/摘要常取 k=4~8;k 过大会变慢且收益递减,还引入「长度偏差」(需 length penalty 校正)。
  • 对话/创意生成通常不用 beam,改用 sampling(beam 会让输出刻板)。
💡 面试加分项

答「k=1 即 greedy,k 越大越接近全局最优但越慢」,点出「收益递减 + 长度偏差需 length penalty + 生成刻板」,说明为何对话不用 beam。


为什么 greedy 解码容易产生重复?如何缓解?

原因

  1. 局部最优陷阱:每步只取最大概率,一旦进入高频「循环」就难以跳出(如一直输出重复短语)。
  2. 无随机性:确定性解码对重复 token 没有任何扰动,容易陷入自增强的循环。
  3. 训练偏差:语言模型对常见 n-gram 有高概率,greedy 会反复选中。

缓解

  • sampling/top-p/top-k:引入随机性打破循环。
  • repetition/frequency penalty:惩罚已生成 token。
  • no_repeat_ngram_size:硬禁止重复 n-gram。
  • 提高 temperature 适当增加多样性。
💡 面试加分项

归因「局部最优 + 无随机扰动」导致自增强循环,缓解手段落到「采样引入随机性 + repetition penalty + n-gram 禁止」三件套。


为什么中文比英文更费 token?这对成本有什么影响?

原因

  1. 无空格:英文以空格切词,中文需分词器切字/词,一个汉字常被切成 1 个或多个 token。
  2. UTF-8 多字节:汉字在 UTF-8 中占 3 字节,字节级 BPE 合并后,单个汉字往往就是 1~2 个 token,而英文一个单词(多个字母)可能也只 1 个 token。
  3. 词表覆盖:多数模型英文语料占比高,中文字符/词在词表中的子词粒度偏粗。

成本影响

  • 同样语义,中文 token 数通常更多(粗略:1 汉字 ≈ 0.7~1.5 token,1 英文词 ≈ 1.3 token)。
  • 影响:API 按 token 计费 → 中文更贵;上下文窗口更快占满 → 长文档处理更受限。
💡 面试加分项

归因「无空格 + 多字节 UTF-8 + 词表英文偏置」三因,落到「中文更费 token → 更贵、窗口占更快」的成本结论。


上下文窗口越大越好吗?长上下文有什么代价?

代价

维度代价
显存KV cache 随长度线性增长,长上下文显存爆
算力注意力 O(n²),长度翻倍算力翻 4 倍
效果Lost in the Middle:中间信息易被忽略
训练成本长序列训练昂贵,需插值/外推扩展
  • Lost in the Middle:模型对长文首尾信息记得牢、中间容易丢,窗口大了不等于用得好。
  • 实际应用:能短则短——窗口越大越贵越慢,且「位置编码外推」可能带来质量下降。

结论

不是越大越好,而是「按需选择」:够用即可,长上下文需配合 GQA/MLA、FlashAttention、稀疏注意力等手段控制成本。

💡 面试加分项

辩证答「不是越大越好」:KV cache 线性涨、注意力平方涨、Lost in the Middle、训练成本高,落到「按需 + 工程优化压成本」。


什么是 attention sink?为什么首 token 很重要?

概念

attention sink(注意力汇)指初始 token(尤其首个 BOS/句首 token)会吸引大量注意力分数,即使它无语义信息,模型也倾向「把多余注意力倒给它」。这是流式注意力(StreamingLLM)等工作发现的现象。

为什么首 token 重要

  1. 软掩码的归处:模型对「不重要位置」不关注时,多余注意力需要一个「垃圾桶」,首 token 常扮演此角色。
  2. 数值稳定:softmax 要求每个 query 的注意力权重和为 1,总要有 token 承接被忽略的分数,首 token 承接后计算更稳定。
  3. 流式/超长推理:StreamingLLM 通过保留首 token + 滑窗,即使 KV cache 只存开头几个 token + 最近窗口,也能保持长文推理效果。
💡 面试加分项

讲「首 token 承接多余注意力、是软掩码的垃圾桶」,并点出 StreamingLLM 利用它「保留首 token + 滑窗」做无限长流式推理。


什么是 perplexity(困惑度)?如何理解?

定义

perplexity(PPL)是语言模型的核心评估指标,衡量模型对测试语料「有多不意外」:

Text
PPL = exp( - (1/N) Σ_i log p(w_i | w_<i) ) = exp(交叉熵)

如何理解

  • 本质是交叉熵的指数,可理解为「模型对下一个词的平均候选数」:PPL=50 意味着平均每个位置模型像在 50 个词里「猜」。
  • PPL 越低越好:越低说明模型对真实文本的预测越确定、越接近真实分布。
  • 用途:比较同词表/同语料下模型的语言建模能力;但 PPL 不等同于下游任务效果,也不适合跨词表直接比较。
💡 面试加分项

写出 exp(平均负对数似然),用「平均候选数」直观解释(PPL=50 像在 50 词里猜),并点出「越低越好、但不能跨词表比、不等于下游效果」。


什么是 in-context learning(上下文学习)?

概念

in-context learning(ICL,上下文学习)指模型不更新参数,仅通过在 prompt 里给出「示例 + 问题」,就能完成新任务——模型从上下文的示例中「现学现用」。

Text
示例:北京 → 中国;巴黎 → 法国
问题:东京 → ?       模型无需训练即可答「日本」

关键点

  1. 零梯度更新:与微调(改变参数)本质不同,ICL 只是改变输入。
  2. 涌现能力:GPT-3 发现参数规模足够大时 ICL 能力涌现,小模型不明显。
  3. 机制:主流解释是 Transformer 注意力在做隐式「元学习/线性回归」,在上下文中临时构建任务映射。
💡 面试加分项

核心「不更新参数、靠 prompt 示例现学」,强调是「大模型涌现能力、与微调相对」,机制可提「注意力隐式做元学习」。


什么是 few-shot 和 zero-shot?为什么 prompt 里给示例有效?

概念

  • zero-shot:只给任务描述,不给示例,直接让模型作答。
  • few-shot:在 prompt 里给少量(如 3~5 个)输入-输出示例,再给待答问题。

为什么给示例有效

  1. 激活能力:示例唤醒模型预训练中习得的相关知识/模式,让「怎么答、输出格式」更明确。
  2. 任务对齐:示例隐式定义任务边界与输出格式,减少歧义(in-context learning)。
  3. 分布校准:示例帮助模型对齐「输入分布 → 输出分布」,few-shot 通常比 zero-shot 稳定。
💡 面试加分项

说清「zero-shot 无示例、few-shot 给少量示例」,有效源于「激活预训练能力 + 对齐任务格式 + 上下文学习」,并强调 few-shot 一般更稳但更费 token。


多语言大模型如何平衡各语言的能力?

挑战

「多语言诅咒(Curse of Multilinguality)」:固定模型容量下,语言种类越多,单语言能力可能被稀释,尤其低资源语言。

平衡手段

  1. 数据配比:按语言重要性调训练数据占比,防止高资源语言挤占(temperature sampling 上采样低资源语)。
  2. 共享词表/表示:用 byte-level 词表让多语言共享子词,复用表示能力。
  3. 多语言对齐:通过平行语料/跨语言预训练目标让表示跨语言对齐(如 XLM-R)。
  4. 指令/对齐数据多语言化:微调时覆盖多语言,保证指令遵循不只在英文上。
💡 面试加分项

点出「多语言诅咒 + 容量稀释」是核心矛盾,手段落到「数据配比、共享词表、跨语言对齐、多语言微调」四条,能举 XLM-R 更佳。