问题 1:为什么 Self-Attention 比 RNN 更适合处理长距离依赖?
Self-Attention 在三个方面比 RNN 更强:
① 计算方式:直接建立任意词之间的联系
Self-Attention 通过:
- Query(Q)
- Key(K)
- Value(V)
计算每个词与所有词的相似度:
\\text{Attention}(Q,K,V)=\\text{softmax}(QK\^T)V
➡ 不需要像 RNN 一样逐层传递信息,也不会因为距离变长而梯度消失。
② 并行能力:一次性处理整段序列
RNN 必须按顺序处理 t=1 → t=2 → t=3
Attention 不需要顺序依赖,可全部词元并行计算。
➡ GPU 矩阵计算可完全利用。
③ 上下文捕获:可以看全局,长距离依赖不衰减
Self-Attention 本质是:
"对整个序列的所有词做相关性计算"
因此:
- 即使两个词距离很远
- 也能通过一次 Q·K 建立直接联系
问题 2:为什么 LLM 使用子词分词(BPE),而不是按字或按词?
① 词表大小与计算成本最优平衡
- 按"字":词表太小,表达能力弱
- 按"词":词表太大(十万级),embedding 和 softmax 太贵
- 子词分词:词表约 30k〜60k,最有效率
② 处理 OOV(未见词)能力强
"抗磷脂综合征" 不在词表中也能拆为:
- 抗|磷|脂|综合|征
➡ 所有新词都能被编码。
③ 泛化能力强(学习构词规律)
子词能让模型学习:
- 前缀、后缀(re-, pre-, -tion)
- 不同变形之间的关系(walk, walking)
- 词根语义(predict, prediction, predictable)
➡ 远比按字或按词更具泛化力。
问题 3:为什么 Transformer 需要多头注意力(Multi-Head Attention)?
① 不同头在不同子空间中工作
每个头有独立的:
- Wᵠ
- Wᵏ
- Wᵛ
所以会看到不同维度的特征。
② 能同时学习不同的语言关系
不同注意力头会自动学习:
- 句法关系(主谓)
- 指代关系(他 → 指的是谁)
- 实体关系
- 长距离依赖
➡ 单头无法同时学习这么多语言结构。
③ 稳定训练(避免注意力塌缩)
多头分散学习任务,减少梯度爆炸,训练更平滑、收敛更快。
问题 4:KV Cache 如何加速自回归生成?
① 减少重复计算
生成 token 时:
- 历史的 K/V 向量一次算好并缓存
- 后续每步只计算新的 Q、K、V
- 历史 K/V 直接从 cache 读取
➡ 避免重复计算整个序列的 attention。
② 每步复杂度从 O(n²) 降到 O(n)
无缓存:
- 每步计算 Q × Kᵀ(K 会越来越长)
- 代价 O(n²)
有缓存:
- 只对新增 token 做一次 attention
- 每步约 O(n)
③ 整体推理速度提升 3~20 倍
尤其对长 context 的生成效果明显。
问题 5:为什么"嵌入向量 + 逻辑回归"在有标注数据时比零样本分类更准确?
① 有监督学习能建立任务特化的分类边界
逻辑回归根据标签学习哪些向量属于同一类。
零样本是"推理",不是"训练",无法形成精确边界。
② 嵌入空间天然具有语义结构
例如:
- 积极评论向量聚在一起
- 消极评论聚在另一侧
逻辑回归只需要画一条线(决策边界),准确度更高。
③ 零样本分类依赖语言理解,不够稳定
由于没有监督信号:
- 它靠提示词理解类别含义
- 容易受 prompt、语义歧义、模型偏差影响
➡ 性能普遍弱于简单的监督分类器。
问题 6:为什么生成模型(GPT/T5)也能用于分类?
① 分类可以被表达成"生成一个标签词语"
例如:
"这个评论的情感是 positive 还是 negative?"
模型只需生成一个词:
- "positive"
- "negative"
➡ 分类 = 生成。
② 生成模型擅长自然语言理解与生成
它知道:
- positive 的含义
- negative 的语义
- 文本的潜在情绪
所以能"读懂 → 生成标签"。
③ Prompt(提示词)让模型自动适应新任务
不用训练,只需告诉它:
- 分类标准
- 输出格式
- 示例(few-shot)
即可完成分类。
问题 7:请描述 LLM 的前向传播完整流程(从输入到输出)。
① 文本输入
用户输入一句话。
② 分词(Tokenizer)
文本 → 子词 → token IDs。
③ 词嵌入 + 位置编码
token IDs → Embedding → token 向量
再加入 Position Embedding / RoPE。
④ Transformer 多层处理
每层包括:
- 多头自注意力(Self-Attention)
学上下文关系 - 残差 + LayerNorm
- 前馈神经网络(FFN)
增强特征表达 - 残差 + LayerNorm
堆叠 N 层。
⑤ LM Head(语言建模头)
把最后的隐藏状态映射到词表维度 → logits → softmax。
⑥ 解码策略(生成下一个 token)
如:
- greedy
- top-k
- top-p
- temperature
选出概率最高或采样得到的 token。
⑦ 自回归生成 + KV Cache 加速
- 把新 token 拼到序列末尾
- 再次前向
- K/V 缓存复用历史,避免重复计算
- 直到生成结束