想象一座繁忙的快递分拣中心。传送带上源源不断地送来包裹,分拣员需要判断每个包裹该去哪个片区。老式分拣中心有三大致命伤:第一,传送带上的包裹长得一模一样,分拣员看不出谁先来谁后到——完全没有“先后顺序”的概念;第二,每个包裹都要和所有其他包裹逐一比对面单,工作量爆炸;第三,传送带闸门只会“要么全放行、要么全卡死”,不懂轻重缓急。后来,工程师们给分拣中心做了一次彻底升级:给每个包裹盖上“旋转印章”,印章指针的角度记录了进场顺序(RoPE 旋转位置编码);分拣员不再人人抱着一大本通讯录,而是小组共阅一份关键档案(GQA 分组注意力);传送带装上智能闸门,先探测包裹重要性再决定放行多少(SwiGLU 激活函数);自动衡器简化校准流程,只调重量不再反复去皮(RMSNorm 归一化)。这四项改造,让今天的大模型(如 LLaMA 系列)既能读懂更长的段落,又能跑得更快更省。本文就带你拆解这四把钥匙。
理解 RoPE / GQA / SwiGLU / RMSNorm,你就能看懂 LLaMA 类现代大模型的架构选型,也能在推理优化、长文本部署时做出正确的工程决策。
目录
可视化演示
动态演示Transformer架构改的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Transformer架构改:RoPE RoPE旋转位置编码的数学原理 GQA分组查询注意力的效率与质 核心机制可视化 Transformer架构改整体架构与关键组件
原版痛点:老分拣中心的三大瓶颈
想象老式分拣中心:传送带上的包裹没有任何标记,分拣员完全不知道包裹进场的先后顺序。在自然语言里,“我爱你”和“你爱我”字一模一样,顺序却天差地别。原版 Transformer 一开始也分不清先后,只能靠往词向量里“硬塞”一个位置向量来补救,这个补救方案(正弦/余弦位置编码)表达位置关系的能力有限。
更麻烦的是,原版多头注意力(MHA)里,每个注意力头都有一份独立的“键(K)”和“值(V)”档案。48 个头就是 48 份完整的通讯录,分拣员每人都抱着一大本,翻起来又慢又占地方。与此同时,分拣闸门只会做“非黑即白”判断(ReLU 激活函数),要么全放行要么全卡死,不够细腻。自动衡器(LayerNorm)每次还要先算均值再算方差,校准一次要量两次,耗时耗力。
这些痛点汇集在注意力核心公式里——它让每个 token 与所有 token 两两比较,却没有天然的位置感知:
所以,老分拣中心的问题很明确:位置信息模糊、通讯录太多、闸门太粗、衡器太慢。接下来四节,就是针对这四个痛点的四把升级钥匙。
- 查询与键点积$QK^T$ 逐对计算“这个包裹和那个包裹的匹配程度”,得到的是所有 token 两两之间的分数矩阵。
- 缩放因子$\frac{1}{\sqrt{d_k}}$ 除以键向量维度的平方根,防止分数过大导致 softmax 梯度消失。
- softmax 归一化$\text{softmax}(\cdot)$ 把每行分数压成总和为 1 的概率权重,谁的分数高谁的权重就大。
- 加权求和最后乘上 $V$,把每个 token 的输出变成“所有 token 价值的加权混合”。
RoPE原理:旋转印章编码顺序
工程师想到一个聪明的办法:在传送带入口装一台“旋转印章机”。每个包裹进场时,印章按进场顺序把指针旋转一个固定角度——第 1 个包裹指针指向 30°,第 2 个指向 60°,第 3 个指向 90°……等到分拣时,分拣员只要看两个包裹指针的夹角,就知道它们相差几个身位。这个把“位置”变成“旋转角度”的巧思,就是 RoPE(旋转位置编码)。
RoPE 不修改词向量本身,而是把每个位置映射成一个“旋转角度”,然后让词向量按这个角度旋转。实际操作中,把向量的维度两两配对,看成平面上的一组坐标,每个坐标对按位置角度旋转一次。这样做有一个妙不可言的性质:两个旋转过的向量做内积(打分)时,结果只和它们的角度差有关——也就是只和相对位置差有关,和绝对位置无关。
旋转操作本身由旋转矩阵完成:
RoPE 的精髓在于:第 m 个包裹和第 n 个包裹的指针夹角是 (m−n)θ,直接等于位置差乘以固定角速度。分拣员不用管包裹从哪一段进来,只看夹角就知道相对距离——这就是它比老式“硬塞位置向量”强的原因。
- 坐标对拆分$x_0, x_1$ 是词向量的第 0 维和第 1 维,两两搭配组成平面坐标;后面还有 (x₂, x₃)、(x₄, x₅) 等更多坐标对。
- 位置编号$m$ 是 token 在序列中的绝对位置,第 0 个词 m=0,第 1 个词 m=1,以此类推。
- 旋转矩阵作用$\begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix}$ 把坐标对逆时针旋转 mθ 度,位置越靠后转得越多,角度差就成了位置差。
RoPE外推:让印章多转几圈
印章机虽然巧妙,可训练时它只见过 8 个包裹——指针最多转到 240°。有一天传送带突然送来 100 个包裹,指针得转好多圈,分拣员看着那些“超纲角度”完全懵了:模型崩坏,注意力分数乱飞。这种情况叫“外推失败”:模型只在训练长度内可靠,一旦序列变长就失去泛化能力。
怎么解决?最简单粗暴的办法叫“线性内插”:把 100 个包裹的位置坐标整体除以 12.5,压缩回 0 到 8 的训练区间。相当于把本来要转很多圈的大角度,硬掰成训练时见过的小角度。这个办法一定程度有效,但会把角度差也压缩,导致模型分不清相邻位置的细节。
更进一步,NTK 感知缩放对不同的维度区别对待:高频维度(负责细微位置差异)保持原有旋转速度不变,低频维度(负责远距离关系)才做缩放。这样就像调整钟表——秒针保持原速,时针调慢,让表盘既能显示大范围时间又不丢失每一秒的精度:
有了内插和 NTK 这些“续命术”,旋转印章终于能罩住更长的传送带。今天很多大模型靠它们把上下文从 4K 扩展到了 32K、128K,让 AI 能一口气读完一整本小说。
- 缩放倍数$s$ 是目标序列长度与训练长度的比值,告诉模型“这次要多看几倍长的文本”。
- 维度下标$i$ 从 0 到 $\frac{d}{2}-1$,是不同坐标对的序号,决定这一维是高频还是低频。
- 指数缩放$s^{-2i/(d-2)}$ 让 i 小时约等于 1(不缩放),i 大时远小于 1(缩得很厉害),实现“高频不动、低频放宽”。
GQA分组:组长共享档案夹
回到分拣中心。老系统里 48 个分拣员每人抱一本一模一样的通讯录(MHA),翻起来累、存放也占地方。有工程师提议:干脆只留一本通讯录,48 个人排队看(MQA)——显存是省了一大截,但所有人的“关注点”都被迫一样了,好比全组只有一个大脑,灵活性大打折扣。能不能折中?
GQA(分组查询注意力)的办法是:把 48 个分拣员分成 8 个小组,每组 6 人,小组共阅一本档案夹,每组的内容可以不同。这样既保留了不同小组“各关注各的”(个性),又比每人一本少了很多份档案(效率)。实际效果接近 MHA,速度却向 MQA 靠拢。数学上,原本每个头 i 都有自己的键值对,现在变成了按组共享:
GQA 就是管理学里的“共享资源池”:既不让每个人都背全量通讯录,也不让全公司共用一个大脑。实验证明,分组数 G 取 4 到 8 时,质量几乎不输 MHA,而 KV 缓存和计算开销大幅下降。
- 查询保留个性$Q_i$ 是第 i 个头自己的查询,每个头用它从不同角度寻找要关注的内容。
- 归属分组$g(i)$ 把第 i 个头映射到它所在的组号,组号相同的头共享同一份键值档案。
- 共享键值$K_{g(i)}, V_{g(i)}$ 是整个组共用的键和值,由组内所有头一起复用,档案数量从“一人一本”变成“一组一本”。
SwiGLU门控:智能闸门放行
老分拣中心的闸门只会做简单判断(ReLU):负数一律拦下,正数全放行。这种“一刀切”太粗暴——同样是正数,有的很重要该多放行一些,有的无关紧要该少放行。2019 年后研究者发现,与其用一次性闸门,不如装一道“两级联动闸门”:第一级先探测包裹的重要性(输出 0 到 1 之间的放行比例),第二级按比例放行内容。
这个结构叫门控线性单元(GLU),SwiGLU 就是“用 SiLU 做探测器的 GLU”。SiLU 函数像一道平滑的推拉门:输入很大时完全打开(趋近 1),输入很小时完全关闭(趋近 0),中间地带缓缓过渡,不会像 ReLU 那样突然卡顿。这样模型每次只让“有用的信息”流到下一层:
SwiGLU 的代价是前馈网络参数量变为原来的约 1.5 倍(多了一路投影矩阵),但换来的是实实在在的困惑度下降——就像多雇一个“探测员”看门,虽然多开一份工资,但传送带整体效率提升一大截,LLaMA 等模型纷纷弃用旧闸门,换上了这套智能门。
- 线性投影$xW_1$ 把输入 x 升维到高维空间,为判断“重要性”做准备。
- 门控比例$\sigma(xW_1)$ 用 sigmoid 把投影值压到 (0,1),越接近 1 表示闸门开得越大。
- 内容投影$xW_2$ 是另一路变换,承载实际要传递的信息内容。
- 逐元素相乘$\otimes$ 把“放行比例”和“内容”对齐相乘,实现按需放行。
RMSNorm校准:只称重量不去皮
老分拣中心的自动衡器(LayerNorm)每次称重都要两步:先测平均皮重(均值),再算波动幅度(方差),最后才校准。但工程师观察发现,这台机器其实对“减去均值”没那么敏感——重量分布本身已经比较对称,真正重要的是把整体量级压到稳定范围。于是他们做了一台简化版衡器:RMSNorm,去掉“去均值”那一步,只按均方根做一次性缩放。
千万别小看这一删。LayerNorm 里减均值涉及全局均值计算和逐元素加减,删掉后在每个 token 上省下了不少算子。大模型有几十层,每层都省一点,累积起来就是约 10% 的加速。RMSNorm 的数学形式非常干净:
RMSNorm 就像一台“只称重量不去皮”的秤:少了一道算均值的手续,称出来的稳定性却足够用。尤其在几百层的大模型里,省下的计算量和内存带宽相当可观,这也是 LLaMA、Mistral 等现代架构普遍采用它的原因。
- 均方根分母$\sqrt{\frac{1}{n}\sum_{i=1}^{n} x_i^2 + \epsilon}$ 计算一组数值的“平均能量大小”,ε 是防止除零的小常数。
- 归一化$\frac{x}{\text{分母}}$ 把每个数值按能量大小统一缩放,让输出的整体量级落在稳定区间。
- 可学习缩放$\gamma$ 是逐维权重,让模型在归一化后还能自由调整每一维的“音量”。
组合实战:LLaMA的四件套
分拣中心的四把钥匙——旋转印章(RoPE)、组内共享档案(GQA)、智能闸门(SwiGLU)、简化衡器(RMSNorm)——单独用各有奇效,组合起来才是真正的质变。Meta 开源的 LLaMA 系列把所有改进集成到一套架构里:RMSNorm 放在每个子层之前(Pre-Norm),RoPE 作用在 Q 和 K 上,SwiGLU 替换了原来的 ReLU 前馈网络,70B 以上模型用 GQA 控制 KV 缓存。
这种组合不是简单堆料。RMSNorm 前置 + 残差连接让深层网络训练更稳定,梯度不会爆炸或消失;RoPE 让位置信息在每一层都能被注意力利用;SwiGLU 在每一层“精挑细选”信息;GQA 在超大模型上省显存。四者互补:RoPE 管“顺序”,GQA 管“资源”,SwiGLU 管“质量”,RMSNorm 管“稳定”。
Pre-Norm 残差结构是所有子层组合的骨架:
LLaMA 用这套组合证明了开源模型可以挑战闭源巨头。后来 Mistral、Qwen 等一大批模型跟进,四件套成为现代 Transformer 的事实标准,也反过来证明了“单点改进必须放在整体架构里看效果”。
- 归一化输入$\text{RMSNorm}(x_\ell)$ 先把当前层输入的能量校准到稳定范围。
- 子层处理$\text{Block}(\cdot)$ 代表注意力子层或前馈子层,完成对应的加工处理。
- 残差相加$x_\ell +$ 把加工结果和原始输入相加,深层训练时梯度有一条“高速通道”回流,避免梯度消失。
收益落地:同样的场地更多产出
改造结束后,让我们盘点分拣中心的成绩单。上下文加长:RoPE 配合外推技术,模型能处理数千到十余万 token 的长文本,一个分拣员就能读完整个长段落而不丢上下文。吞吐提升:RMSNorm 少了一次均值计算,叠加 SwiGLU 的精准放行,训练和推理每一步都更轻快。显存节省:GQA 让 KV 缓存从“一头一份”变成“一组一份”,大口径模型的显存压力骤降。
KV 缓存是推理时最占显存的“记忆暂存区”,它的体积直接决定能同时服务多少用户:
同样的显存,GQA 能让分拣中心多服务一批客户请求;同样的算力,RMSNorm 和 SwiGLU 能降低每步延迟。这四把钥匙从不同角度撬开了大模型的成本墙——今天的 AI 应用能在普通显卡甚至手机上跑起来,正是这些“不起眼”的架构细节堆积出的奇迹。
- K 和 V 两份$2$ 表示每个 token 都要缓存键 K 和值 V 两路向量。
- 层数累乘$L$ 是 Transformer 层数,每一层都有独立的 KV 缓存。
- KV 头数$G_{\text{heads}}$ 是实际存了多少份 KV,MHA 的 H 变成 GQA 的 G,直接缩小 G/H 倍。
- 序列与维度$S \times d_k$ 是所有位置的头维度总大小,序列越长缓存越大。
AI 应用场景
长文本推理服务
阶段:推理部署与性能优化
解决的问题:传统 MHA 架构在长上下文场景下,KV 缓存随序列长度线性膨胀,8K 以上对话时显存迅速告急,响应延迟飙升。GQA 让 KV 头数按分组比例缩减,配合 RoPE+NTK 外推,单卡即可承载 32K 上下文。
具体案例:某 AI 文档助手在 4090 单卡上部署了基于 LLaMA-3 的 8B 模型,启用 GQA 后 KV 缓存占用下降约 75%,同时用 RoPE 线性内插把上下文从 8K 扩到 32K,用户上传长合同、论文时不再“聊到一半失忆”。
LLM 大规模预训练
阶段:模型预训练与调优
解决的问题:训练千亿参数模型时,LayerNorm 的全局均值计算拉低多卡通信效率,且深层网络容易梯度不稳。RMSNorm 简化了归一化算子,Pre-Norm 残差结构保证深网络稳定收敛;SwiGLU 在前馈层提升模型质量,用更少训练步数达到相同困惑度。
具体案例:某研究团队从零预训练 13B 模型,对比旧架构,采用 RMSNorm+SwiGLU 后训练每步耗时降低约 8%,在 100B token 预算下困惑度下降 0.3,相当于白赚了数百小时 GPU 时间。
边缘设备端侧部署
阶段:端侧推理与模型压缩
解决的问题:手机、机器人等端侧设备显存极小,MHA 的 KV 缓存根本放不下长对话。GQA 把 KV 头数压缩到组数级别,是让大模型“住进”端侧的杀手锏;RMSNorm 的算子也更适合移动端加速库。
具体案例:某智能眼镜厂商把 3B 模型部署在骁龙芯片上,GQA 将 KV 缓存从 512MB 压到 128MB,RMSNorm 让单 token 解码延迟降低 15ms,实现了流畅的实时语音对话,用户摘下眼镜再看手机内容也能无缝续聊。
Python 演示
import mathimport numpy as np def rope_embed(q, k, seq_len, dim, base=10000.0): """RoPE: 把位置信息编码为每对维度的旋转角度。""" # 每对维度的旋转频率, 从高频到低频 theta = 1.0 / (base ** (np.arange(0, dim, 2) / dim)) # 位置向量: [seq_len, 1] m = np.arange(seq_len).reshape(-1, 1) # 角度: 位置 x 频率, [seq_len, dim/2] angles = m * theta cos_cached = np.cos(angles) sin_cached = np.sin(angles) # 按奇偶拆成两半, 当作旋转坐标系的两轴 q1, q2 = q[..., 0::2], q[..., 1::2] k1, k2 = k[..., 0::2], k[..., 1::2] # 旋转公式: 新x = x*cos - y*sin, 新y = x*sin + y*cos q_rot = np.concatenate( [q1 * cos_cached - q2 * sin_cached, q1 * sin_cached + q2 * cos_cached], axis=-1 ) k_rot = np.concatenate( [k1 * cos_cached - k2 * sin_cached, k1 * sin_cached + k2 * cos_cached], axis=-1 ) return q_rot, k_rot def attention(q, k, v): """缩放点积注意力。""" d_k = q.shape[-1] scores = np.matmul(q, k.transpose(0, 1, 3, 2)) / math.sqrt(d_k) # 手动 softmax, 减最大值防止指数溢出 weights = np.exp(scores - scores.max(axis=-1, keepdims=True)) weights = weights / weights.sum(axis=-1, keepdims=True) return np.matmul(weights, v) if __name__ == "__main__": batch, heads, seq, dim = 1, 2, 8, 16 rng = np.random.default_rng(42) q = rng.normal(size=(batch, heads, seq, dim)) k = rng.normal(size=(batch, heads, seq, dim)) v = rng.normal(size=(batch, heads, seq, dim)) q, k = rope_embed(q, k, seq, dim) out = attention(q, k, v) print("RoPE 注意力输出形状:", out.shape)
theta = 1.0 / (base ** (np.arange(0, dim, 2) / dim))生成从高频到低频的旋转频率,对应“齿轮转得快的维度管近处、转得慢的维度管远处”。m = np.arange(seq_len).reshape(-1, 1)位置索引列向量,是每个包裹进场的顺序编号。q1, q2 = q[..., 0::2], q[..., 1::2]把最后两维按奇偶拆为两半,模拟旋转坐标系的上 x 轴和 y 轴。q_rot = np.concatenate([q1 * cos_cached - q2 * sin_cached, ...])核心的旋转公式,代入旋转矩阵变换。scores = np.matmul(q, k.transpose(0, 1, 3, 2)) / math.sqrt(d_k)对旋转后的 q、k 做缩放点积打分,角度差固定的近邻会获得更高的分数。weights = weights / weights.sum(axis=-1, keepdims=True)softmax 归一化,让分数变成总和为 1 的关注权重。
常见误区
误区我以为 RoPE 用旋转角度标记每个 token 的绝对位置,所以它本质上还是绝对位置编码,跟原版正弦位置编码区别不大。
正解RoPE 虽然用绝对位置 m 生成旋转角度,但它的设计目标是让两个向量的内积只取决于角度差 (m−n),也就是相对位置。就像两个钟表指针的夹角只取决于时间差,而不取决于它们从几点开始转。实际上 RoPE 在注意力分数中天然表达“谁离谁近”,这是原版正弦编码做不到的。
为何常见:看到公式里出现 m 和 n 这样的绝对位置下标,就误以为它是绝对位置编码,忽略了内积之后绝对位置被约掉这一关键步骤。
误区我觉得 GQA 把键值共享了,每个头的“视野”肯定变窄,模型质量应该明显下降吧?
正解实验表明,分组数在 4 到 8 时,GQA 与 MHA 的困惑度差距小于 0.1%,几乎无损。原因是多头注意力的大部分头学到的模式高度重合,共享键值只是去掉了冗余副本;而 MQA(全共享)确实有明显的质量损失,GQA 恰好卡在质量和效率的甜点上。
为何常见:把“共享”直接等同于“信息丢失”,忽略了大模型注意力头大量冗余这一经验事实。
误区既然 LLaMA 用了 SwiGLU,那它肯定在所有场景碾压 GeLU,我换掉就对了。
正解SwiGLU 在困惑度上有优势,但它的参数量约为标准 FFN 的 1.5 倍,计算量大一截。小模型、显存紧张或推理延迟敏感的场景,换 SwiGLU 未必划算。它是“用参数换质量”的权衡选择,而非无脑升级。
为何常见:只盯着论文里 accuracy/bpc 的提升数字,忽略了模型规模和算力成本的前提约束。
误区RMSNorm 不就是 LayerNorm 少了个均值嘛,训练效果应该差不多,谈不上什么关键改进。
正解RMSNorm 去掉了均值中心化,确实在数值结果上接近,但省略均值计算省下了全局归约通信和逐元素操作,在几百层的大模型上能累积出约 10% 的加速。更重要的是,Pre-Norm 残差结构下即使不去均值,训练稳定性也完全够用,这正是它能取代 LayerNorm 的原因。
为何常见:从纯数学上看两者形式相似,就容易忽略工程实现中算子成本和通信开销的差别。
误区RoPE 支持外推,所以训练完 8K 长度后,直接把 32K 的文本喂进去,模型也能表现正常。
正解直接超长外推会导致注意力分数混乱、困惑度暴涨。真正工程上要用线性内插把位置压缩回训练区间,或用 NTK 感知缩放让高频维度保持敏感、低频维度放宽,甚至要配合少量长文本继续微调才能恢复质量。
为何常见:把“具有外推能力”理解为“无限长度免训练可用”,忽略了位置编码频率与训练数据分布之间的强绑定关系。
面试题
Q1. RoPE 通过什么机制编码 token 之间的位置关系?
- A.旋转矩阵产生角度差← 正确答案
- B.直接叠加位置向量
- C.修改词嵌入维度
- D.增加全局位置偏置
答案:A。RoPE 把每个 token 的位置编码成旋转角度,两个 token 的指针夹角就是位置差乘以固定角速度。注意力内积后绝对位置被约掉,只留下相对位置信息。叠加位置向量是原版正弦编码的方式,修改维度或加偏置都不是 RoPE 的做法。
Q2. GQA 与 MHA 相比,核心区别是什么?
- A.分组共享键值对← 正确答案
- B.查询头数量翻倍
- C.移除全部注意力
- D.增加更多隐层维度
答案:A。MHA 中每个注意力头持有独立的 K/V,GQA 把注意力头分成若干组,组内共享 K/V,只有 Q 保持各自独立。这样既保留了多角度的查询能力,又大幅减少了 KV 缓存和计算量。
Q3. 在 SwiGLU 中,充当“闸门”的激活函数是哪一个?
- A.SiLU 激活函数← 正确答案
- B.ReLU 激活函数
- C.GeLU 激活函数
- D.Tanh 激活函数
答案:A。SwiGLU 的“门”是 SiLU(也叫 Swish),形式为 x·σ(x),输出平滑地从 0 过渡到 x,比 ReLU 的硬截断更适合做放行比例。ReLU 是它要替代的旧闸门,GeLU 是另一类平滑激活,Tanh 不在 SwiGLU 的定义中。
Q4. RMSNorm 相比 LayerNorm 具体省去了哪一步?
- A.减去均值中心化← 正确答案
- B.除以方差的平方
- C.学习缩放因子
- D.加常数防除零
答案:A。LayerNorm 要先算均值减去(中心化),再算方差缩放;RMSNorm 只按均方根缩放,完全不减均值。缩放因子 gamma 和防除零常数 epsilon 两者都有,不是 RMSNorm 省略的部分。
Q5. 若注意力头数 H=32,GQA 分组数 G=4,KV Cache 约为 MHA 的多少?
- A.四分之一倍
- B.八分之一倍← 正确答案
- C.四倍大小
- D.完全不变
答案:B。KV Cache 大小正比于 KV 头数。MHA 中每头一份 KV,共 32 份;GQA 中每组共享一份,共 4 份。4/32 = 1/8,选八分之一倍。分组共享的粒度越粗,省显存越多,但不是四分之一。
Q6. 关于 RoPE 长度外推,下列说法正确的有哪些?
- A.直接外推会导致精度下降← 正确答案
- B.线性内插压缩位置坐标← 正确答案
- C.NTK 缩放按维度区别处理← 正确答案
- D.外推不需要任何额外处理
答案:ABC。直接用超长文本外推会因角度超出训练分布而崩坏;线性内插把位置除以缩放因子压回训练区间;NTK 缩放让高频维度几乎不变、低频维度放宽,都比直接外推更稳。无需任何处理是误区。
Q7. RoPE 中基础频率 base=10000 的主要作用是什么?
- A.控制旋转频率的尺度← 正确答案
- B.决定嵌入维度大小
- C.设定注意力头数量
- D.调整归一化系数
答案:A。base 决定了频率公式 θᵢ = base^(-2i/d) 的整体尺度。base 越大,各维度的角度增长速度越慢,能容纳更长的位置范围;它不参与嵌入维度、头数量或归一化的设定,只负责“转得多快”。
Q8. 以下哪些属于 LLaMA 系列采用的关键架构改进?
- A.旋转位置编码 RoPE← 正确答案
- B.分组注意力 GQA← 正确答案
- C.SwiGLU 激活函数← 正确答案
- D.RMSNorm 归一化← 正确答案
答案:ABCD。LLaMA 系列集齐了全部四项:RoPE 编码位置、SwiGLU 替换旧激活、RMSNorm 前置归一化,70B 以上版本及 LLaMA 3 全系列采用 GQA。这是现代大模型架构选型的重要标志。
Q9. RMSNorm 中的可学习参数 gamma 负责什么?
- A.按维度缩放归一化输出← 正确答案
- B.旋转输入特征向量
- C.压缩键值缓存的长度
- D.替换注意力打分函数
答案:A。gamma 是一个逐维度的可学习向量,归一化后与输入逐元素相乘,让模型能自由调整每一维的输出幅度。旋转向量是 RoPE 的职责,压缩 KV 缓存是 GQA 的效果,gamma 不参与注意力打分。
Q10. GQA 相比 MHA 能带来哪些实际收益?
- A.降低推理时 KV 缓存显存← 正确答案
- B.减少重复计算的键值矩阵← 正确答案
- C.提高长序列解码吞吐← 正确答案
- D.所有任务保证零损失
答案:ABC。GQA 把 KV 头数从 H 降到 G,显存按 G/H 比例缩减;组内共享免去每头重复算 K/V;缓存变小后访存压力降低,长序列解码吞吐提升。但少数任务会有极微小质量损失,不能说零损失。