【转载】大语言模型架构全面对比03:Gemma 3

原文地址 第3章 Gemma 3

3. Gemma 3

谷歌推出的 Gemma 系列模型一直表现优异,在我看来,和 Llama 系列等热门模型相比,它的市场热度始终被有所低估。

Gemma 的一大鲜明特征是词表规模较大,以此更好地支持多语言;同时产品线更侧重 270 亿参数规格,而非 80 亿或 700 亿档位。不过需要说明的是,Gemma 2 也提供更小的参数版本:10 亿、40 亿和 120 亿。

270 亿这个规格刚好卡在非常理想的平衡点:能力远强于 80 亿参数模型,资源消耗又远低于 700 亿参数模型,在我的 Mac Mini 上就能顺畅本地运行。

那么 Gemma 3 还有哪些值得关注的设计?如前文所述,DeepSeek V3/R1 等模型采用混合专家(MoE)架构,在模型总规模固定的前提下降低推理时的内存占用 —— 后文要介绍的多款模型也都沿用了 MoE 方案。
而 Gemma 3 选择了另一种技术路径来压缩计算成本:滑动窗口注意力

3.1 滑动窗口注意力

滑动窗口注意力最早于 2020 年在《LongFormer》论文中提出,Gemma 2 也已采用该技术。借助滑动窗口注意力,Gemma 3 团队大幅降低了 KV 缓存的内存占用,如下图所示。

figure11

图 11:摘自 Gemma 3 论文(https://arxiv.org/abs/2503.19786)的标注图,展示滑动窗口注意力带来的 KV 缓存内存节省效果

那么什么是滑动窗口注意力?如果把常规自注意力视为全局注意力机制 —— 序列中每个 token 都能访问其他所有 token—— 那么滑动窗口注意力就属于局部注意力,它会限制当前查询位置周围的上下文范围,如下图所示。

figure12

图 12:常规注意力(左)与滑动窗口注意力(右)对比

需要说明的是,滑动窗口注意力既可搭配多头注意力,也可搭配分组查询注意力;Gemma 3 采用的是分组查询注意力。

如上文所说,滑动窗口注意力也叫局部注意力,因为窗口会围绕当前查询位置并随之移动。与之相对,常规注意力是全局的,每个 token 都能访问全部其他 token。

前文简要提到,前代 Gemma 2 的架构也已经使用了滑动窗口注意力。Gemma 3 的变化在于,调整了全局(常规)注意力与局部(滑动)注意力的比例。

比如,Gemma 2 采用混合注意力机制,滑动窗口(局部)注意力与全局注意力按 1:1 比例混合,每个 token 可访问邻近 4k token 的窗口上下文。

Gemma 2 是每隔一层使用一次滑动窗口注意力,而 Gemma 3 将比例调整为 5:1—— 即每 5 层滑动窗口(局部)注意力,才搭配 1 层全量注意力;此外,滑动窗口的大小也从 Gemma 2 的 4096 缩小到了仅 1024。这种设计让模型更偏向高效的局部计算。

根据团队的消融实验,使用滑动窗口注意力对建模性能的影响极小,如下图所示。

figure13

图 13:摘自 Gemma 3 论文(https://arxiv.org/abs/2503.19786)的标注图,展示滑动窗口注意力对大语言模型生成结果的困惑度几乎没有影响

滑动窗口注意力是 Gemma 3 最核心的架构特点,不过承接上一节 OLMo 2 的内容,我也想简单聊聊它的归一化层排布设计。

3.2 Gemma 3 的归一化层排布

有个细节很有意思:Gemma 3 在其分组查询注意力模块的前后,同时使用了前置与后置两种 RMSNorm。

这一点和 Gemma 2 一脉相承,但依然值得单独拎出来说 —— 它既不同于《Attention Is All You Need》中原生 Transformer 的后归一化,也不同于 GPT-2 带火、后续大量架构沿用的前归一化,更和我们前面看到的 OLMo 2 的后归一化变体有区别。

figure14

图 14:OLMo 2 与 Gemma 3 的架构对比;注意 Gemma 3 中额外的归一化层

我认为这种归一化层排布的思路很直观,相当于兼顾了前归一化与后归一化的优势。在我看来,多做一点归一化总归没坏处。最坏的情况无非是额外的归一化存在冗余,带来一点低效的开销。但实际上,RMSNorm 在整体计算中成本很低,基本不会造成可感知的影响。

3.3 Gemma 3 小结

Gemma 3 是一款性能优秀的开源权重大语言模型,在我看来,它在开源社区的价值有些被低估。其最核心的亮点是采用滑动窗口注意力来提升效率,未来如果能和 MoE 结合会很值得期待。

此外,Gemma 3 的归一化层排布也很有特点,在注意力与前馈网络模块的前后都设置了 RMSNorm 层。

3.4 补充:Gemma 3n

在 Gemma 3 发布数月后,谷歌推出了 Gemma 3n。这是针对小型设备效率优化的 Gemma 3 模型,目标是能够在手机端运行。

为了实现更高的效率,Gemma 3n 的一项改动是引入了 \\ 逐层嵌入(Per-Layer Embedding, PLE)\\ 参数层。核心思路是只将模型的部分参数保留在 GPU 显存中,而文本、音频、视觉等模态的、与 token 层相关的特定嵌入,则按需从 CPU 或固态硬盘中流式加载。

下图展示了 PLE 带来的显存节省效果,图中标注标准 Gemma 3 模型有 54.4 亿参数,这大概率对应的是 Gemma 3 40 亿参数版本。

figure15

图 15:摘自谷歌 Gemma 3n 官方博客的标注图,展示 PLE 的显存节省效果https://developers.googleblog.com/en/introducing-gemma-3n/

之所以会出现 54.4 亿与 40 亿参数的数值差异,是因为谷歌统计大语言模型参数量的方式比较特别:他们通常会排除嵌入层参数,让模型看起来参数更少;但像这种需要凸显优化效果的场景,又会把嵌入层算进去,让基数显得更大。这种做法并非谷歌独有,已经成了行业内的普遍操作。

另一项有意思的技术是MatFormer,即「套娃 Transformer」的缩写。举例来说,Gemma 3n 采用单一共享的大语言模型(Transformer)架构,但可以「切分」出多个更小的、可独立使用的模型。每个切片都经过独立训练,推理时我们只需要运行对应规模的部分即可,无需加载完整的大模型。

Leave a Reply

Your email address will not be published. Required fields are marked *

*