大模型的一些应知知识点。
10. 如果 GPT 做生成前也需要把输入语句转为嵌入向量序列,那么 Encoder + Decoder 模型和 GPT 的区别是什么?
首先,需要明白两个东西
- 虽然嵌入模型很像一个 Encoder (实现了 token 序号序列到 d 维向量的映射),但是实际上它并不是 Encoder!
- 我们通常把 Embedding 层之后的向量空间叫做嵌入空间 (Emebdding Space),而把 Encoder、Decoder 通常操作的向量空间叫做表征空间 (Representation Space)
在文本领域,Embedding 模型通常只是薄薄的一层 Embedding 层,没有多余的线性层或注意力层。GPT 在生成文本时,使用的是 Masked Self Attention (没有 Cross Attention),就是把输入的 Context + Prompt 作为 K、Q、V 序列使用,然后预测新的 token;把新预测的 token 替换最前面的一个 添加到前面的输入序列的末尾后,再重复上面的操作,直至达到目标长度或者遇到 [EOS]。
而 Encoder + Decoder 模型则不同了。它的范式是先将输入的文本经过 Embedding 后得到嵌入向量序列,然后把该嵌入向量经过 Encoder 处理后,将得到的上下文中间表示向量序列作为 Cross Attention K、V 传给 Decoder 使用;Decoder 的 Cross Attention 的 Q 则是嵌入向量经过 Self Attention 后得到的上下文中间表示。Decoder 最终也是做 next token prediction,只不过新的 token 只会加入到 Q 序列中,K、V 序列则保持不变。
二者的架构不同(有无 Encoder, 用不用 Cross Attention),自回归中新的 token 加到哪里(K, Q, V 都加入或者只加入 Q 中)这便是全部的差异。
需要指出的是,在多模态视觉部分,ViT patch projection / CNN stem 相对应于 Embedding 模型,是先把像素映射成了 patch tokens, ViT backbone / CNN feature extractor 是直接把原始图像映射到了表征空间中,是 Encoder 模型。
11. 为什么要有位置编码?什么是正弦型位置编码?
Transformer 本身是基于自注意力(Self-Attention)的,它没有循环结构(不像 RNN)也没有卷积结构(不像 CNN)。这意味着它看到的序列输入(词嵌入向量)本身是“无序”的。如果没有位置编码,模型就分不清 “I love you” 和 “You love I”。所以我们要给每个 token 附加上位置信息。
在 Vaswani 的文章中,正弦型位置编码被首次提出。
其中 是位置, 是维度索引, 是总维度。这样每个位置会映射成一组不同频率的正弦/余弦波。
例如,我们有一个输入 embedding ,形状为 ,现在计算位置编码
组合成位置编码矩阵
然后广播相加
12. 为什么选用正弦型位置编码?
正弦型位置编码有几个性质
- 频率唯一且单调变化: 特征维度下标 越大,频率越低,位置嵌入变化越慢;反之,频率越高,位置嵌入变化越快。这种设计使得模型更倾向于在 较小的维度上捕捉局部信息,在 较大的维度上捕捉全局信息(含有频率分析中低频对应于全局信息, 高频对应于局部信息的思想)。仿佛每一个维度上都有一个在序列长度上振荡的波。
- 相对位置关系: ,这意味着位移 处的编码其实是位置 处编码的线性组合,模型只要习得 和 的值,就能推断出相对位置关系。
- 初等函数性质: 正弦和余弦函数是连续可微、对称光滑的,且可以在 上都有定义。
13. RoPE (Rotary Position Embedding) 是什么?
二维示例
RoPE 初见论文 ReFormer: Enhanced Transformer with Rotary Position Embedding.传统的 Transformer 使用绝对位置编码(如正弦编码)或学习式的位置编码,这种位置编码方式在处理长序列时的外推性较差。模型只在训练时见过的序列长度 (如2048) 上表现良好,对于灭见过的更长的序列 (如4096),性能就会显著下降。
RoPE的想法就是通过绝对编码的形式,实现相对位置编码的效果。注意力机制的核心时内积,如果能确保在计算内积时,只依赖于两个 token 之间的相对位置 ,而不是它们的绝对位置 和 ,那么模型就能更好地泛化到没见过的序列长度上。
设有一个词嵌入向量 在位置 处。用旋转矩阵将其编码为一个包含位置信息的向量 。设旋转矩阵为 ,其中 是旋转角度。在实际编码中,先预定义一个基础角度 ,并设置位置 处使用的旋转角度为 ,用旋转矩阵进行编码,得到编码后的向量为
下面验证其位置相对性,位置 和 处的编码向量的内积为
利用旋转矩阵的正交矩阵性质,可以发现最终的内积只与相对位置有关,而与绝对位置无关。
高维推广
真实的词向量都是高维向量,为了推广二维的旋转编码,可以考虑将高维向量分成 个组,每一个组对应一个二维平面,然后在每一个平面分别应用旋转。不过我们会为不同的平面分配不同的基础旋转角度 ,通常的设置是 会随着维度增加而减小,如
其中 为维度对的索引。根据矩阵分块原理,可以类似得到位置编码的相对性性质。
实际应用
在实际应用中,旋转位置编码并非作用于词嵌入向量上,而是作用于 query 向量和 key 向量上,这是因为
然后计算注意力分数
这样的设计可以保证 Value 向量中没有因为含有位置编码而引入不必要的信息,且保证了位置编码只在注意力计算时发挥重要作用。
14. 传统 Attention 存在哪些问题?Attention 优化方向有哪些?
主要问题
- 复杂度与带宽瓶颈: 全连接注意力时间/显存均为 ,prefill 峰值显存高;decode 阶段受内存带宽限制显著。
- KV Cache 膨胀: 随上下文线性增长,多头重复存储 K/V,长对话吞吐急剧下降。
- 长上下文退化: 远距信息衰减,注意力偏近邻;训练长度外推差,易出现“看不见远处”。
- 数值稳定性: QK 点积过大导致 softmax 饱和;outlier token 使梯度不稳。
- 计算冗余: 无信息 token、冗余注意力头、跨模态交叉注意力 过大。
- 工程痛点: mask/padding 浪费、内核非 IO 友好、内存碎片、批量与缓存调度复杂。
优化方向 (方法论)
- 稀疏与结构化注意力: 滑窗/扩张/块稀疏、局部+少量全局锚点、LSH/路由式注意力;在不显著掉点下将复杂度降至近线性。
- 低秩/核近似: Linformer、Performer、Nyström、CosFormer、线性注意力;以特征映射或投影逼近 QK^T。
- 递归与状态空间: RWKV、S4/SSM、Hyena、RetNet、Mamba;用可并行的隐式卷积/有状态单元建模长依赖。
- 检索与记忆: RAG/kNN-LM、Memory/Global tokens、Compressive/Streaming Transformer、滑动窗+锚点摘要;以检索代替全局全连接。
- 位置与外推: RoPE 缩放与 NTK-aware 插值、ALiBi、XPOS、YaRN、分块相对位置;提升长序列外推稳定性。
- 正交稳健化: QK 归一化/中心化、logit 裁剪、温度与缩放、pre/post-norm、熵正则/DropAttention 减少塌缩。
优化方向 (系统与内核)
- FlashAttention 系列与内存高效注意力: tile 化计算+在线 softmax,消除 O(L^2) 中间显存,显著提高带宽利用。
- KV Cache 工程: MQA/GQA 共享 K/V、Paged KV/块化缓存、滑动裁剪或淘汰、分段重计算、RoPE 融合旋转、按通道 8/4/2-bit 量化。
- 推理加速:连续批处理、前缀复用、prefill/decode 分离、推测/多 token 解码、块并行调度、遮罩缓存。
- 计算图与布局: 融合 QKV+RoPE+softmax、避免 padding、head/seq 友好布局、CUDA Graph、张量/流水并行。
- 跨模态: 下采样/聚合视觉或语音 token、瓶颈潜变量(如 Perceiver IO)、分层交叉注意力。
实践建议
- 训练: 混合长度课程+FlashAttention,启用 NTK-aware RoPE/ALiBi,监控长距离对齐指标。
- 推理: GQA+Paged KV+KV 4bit 量化,滑窗注意力+少量全局 token,启用 FlashAttention2/3 与连续批处理。
- 超长上下文(): 优先检索/分块摘要,其次再做 RoPE 缩放或位置插值扩窗。
15. 解释 PPO, DPO, 和 KTO
(i) PPO (近端策略优化)
PPO 是 OpenAI 在 2017 年提出的一种强化学习算法,它成为了之后多年训练大语言模型(如 ChatGPT 的早期版本)的核心算法之一。PPO 属于策略梯度方法。其核心思想是
- 智能体有一个策略,这个策略根据当前状态(对话上下文)输出一个动作(下一个词)。
- 智能体与环境(用户)交互,生成一段完整的对话(或回答)。
- 根据一个奖励模型对生成的回答进行打分,得到奖励信号。
- 算法根据这个奖励信号来更新策略,使得策略未来更倾向于生成能获得高奖励的动作(词序列)。
PPO 的关键创新在于解决了传统策略梯度方法(如 TRPO)中训练不稳定和步长难以选择的问题。它通过引入一个“近端”约束,确保新策略不会偏离旧策略太远,从而避免因一次激进的更新而导致策略崩溃。
PPO 的核心是它的目标函数。最流行的形式是 PPO-Clip
- :策略网络的参数。
- :概率比,。表示新策略选择某个动作的概率与旧策略概率的比值。
- :优势函数,表示在状态 下选择动作 比平均情况好多少。它由奖励模型计算得出。
- :一个超参数(如 0.2),用于限制 clipping 的范围。
公式内涵
- 核心思想:如果某个动作的优势 是正的(好动作),我们就希望增加选择这个动作的概率,即让 。反之,如果 是负的(坏动作),我们就希望减小其概率,即让 。
- Clip 函数的作用:它防止 变得过大或过小。例如,如果一个动作的优势很大,没有 clip 的话, 可能会变得极大,导致更新步长过大。Clip 函数将其限制在 范围内,从而确保更新是稳定、小幅度的。
在 LLM 中的应用流程(RLHF 阶段 3):
- 有一个初始模型(经过 SFT 微调)。
- 有一个训练好的奖励模型。
- 使用 PPO 算法,以初始模型为起点,用奖励模型作为奖励信号来优化策略(LLM),同时加入 KL 散度惩罚项,防止模型偏离初始模型太远而生成无意义的乱码。
优缺点:
- 优点:稳定、通用、效果好。
- 缺点:流程复杂,需要同时维护四个模型(待优化的策略模型、参考模型、奖励模型、价值模型),计算成本高且难以调试。
(ii) DPO (直接偏好优化)
DPO 是 2024 年提出的一种更直接的方法,它完全绕过了奖励模型的训练和复杂的 PPO 循环,直接将偏好数据用于优化语言模型。DPO 的核心洞察是一个巧妙的数学变换
与其先训练一个奖励模型,再用强化学习算法去优化策略以最大化奖励,不如直接定义一个在偏好数据上最优的策略应该满足的数学关系(基于 Bradley-Terry 模型),然后将这个关系作为目标函数来直接优化策略本身。
简单来说,DPO 将强化学习问题转化为了一个简单的监督学习问题。
偏好概率模型(Bradley-Terry): 假设我们有一对回答,一个是被偏好的 ,一个是被拒绝的 。奖励模型 给出奖励的概率为:
其中 是 sigmoid 函数。
DPO 的关键变换: 在最优策略 和最优奖励函数 之间存在一个明确的关系(通过 RL 的目标函数推导得出):。将这个关系代入上面的 Bradley-Terry 模型,可以发现奖励函数 被消去了。
DPO 目标函数: 经过推导,可以得到一个只依赖于策略 和参考模型 的目标函数
- :我们要优化的策略(LLM)。
- :参考模型(通常是 SFT 后的模型,在 DPO 中固定不变)。
- :控制偏离参考模型程度的超参数。
公式内涵
- 目标是最小化 ,也就是最大化 log 里面的概率。
- 它本质上是在最大化偏好回答 和拒绝回答 的对数概率比。模型被鼓励去增大 相对于 的概率,同时减小 的概率。
- 和 共同起到了 PPO 中 KL 惩罚项的作用,防止模型过度优化而“走火入魔”。
优缺点:
- 优点:极其简单,训练稳定,不需要奖励模型,计算效率高。
- 缺点:严重依赖于高质量的偏好对数据。理论上假设偏好完全由 Bradley-Terry 模型生成,可能与现实有偏差。
(iii) KTO (Kahneman-Tversky 优化)
KTO 可以看作是 DPO 的进一步简化和发展。它认为收集严格的偏好对(A 比 B 好)成本高昂,而判断一个回答是“好”还是“坏”则容易得多。KTO 的灵感来源于行为经济学中的“前景理论”。它不再使用偏好对 ,而是使用单个样本的期望值标签。对于每个提示 和回答 ,我们只需要一个人类标注者判断这个回答是“可取的”还是“不可取的”。KTO 的目标是让模型生成的回答的期望值尽可能高,同时避免生成期望值低的结果。
KTO 定义了一个基于“价值”的目标函数。
价值函数: 首先,它定义了一个样本 的“价值”,类似于 DPO 中的奖励:
目标函数: 然后,根据样本的标签(可取/不可取)分别定义损失函数:
但更常见的表述是使用 sigmoid 函数的一个变体,使其对不可取样本的惩罚更鲁棒
其中
- 如果 是可取的,我们希望 越大越好,因此损失函数是 ,即价值低时损失大。
- 如果 是不可取的,我们希望 越小越好,因此损失函数是 ,即价值高时损失大。
- 是一个参考点,通常设为模型在一批数据上计算出的价值的均值。
- 是权重,用于平衡两类样本。
- 如果 是可取的,我们希望 越大越好,因此损失函数是 ,即价值低时损失大。
公式内涵
- 它直接拉高“好回答”的价值,压低“坏回答”的价值。
- 由于不需要严格的配对,数据收集成本大大降低,并且可以充分利用那些只有一个回答的数据。
优缺点:
- 优点:数据需求更简单、成本更低;对部分有噪声的标签更鲁棒。
- 缺点:相比 DPO,可能损失了一些严格的偏好比较信息,理论上的最优性保证不如 DPO 严格。
总结对比
| 特性 | PPO | DPO | KTO |
|---|---|---|---|
| 核心思想 | 使用RL,在奖励模型指导下稳定地更新策略。 | 直接优化策略,使其符合偏好对的概率模型。 | 直接优化策略,使“好回答”价值高,“坏回答”价值低。 |
| 数据格式 | 通过模型采样,由奖励模型打分。 | 偏好对 | 单样本标签 ,标注为“好/坏”。 |
| 数学基础 | 策略梯度理论 + 近端优化(Clip)。 | 布拉德利-特里偏好模型 + 奖励-策略的隐式映射。 | 价值函数最大化 + 前景理论启发。 |
| 流程复杂度 | 高,需要多个模型,流程复杂。 | 低,类似于带参考模型的监督微调。 | 低,与 DPO 类似,甚至更简单。 |
| 优势 | 非常通用、成熟,在复杂任务上潜力大。 | 简单、稳定、高效,已成为当前主流。 | 数据获取成本极低,更实用,性能与DPO相当。 |
| 劣势 | 复杂、难以调试、计算成本高。 | 依赖高质量的偏好对数据。 | 损失了部分偏好信息,理论新颖度最高。 |
演进趋势:PPO -> DPO -> KTO 体现了整个领域向更简单、更稳定、数据效率更高的方向发展,目标都是让语言模型更好地与人类偏好对齐。

