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 缓存的内存占用,如下图所示。

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

需要说明的是,滑动窗口注意力既可搭配多头注意力,也可搭配分组查询注意力;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。这种设计让模型更偏向高效的局部计算。
根据团队的消融实验,使用滑动窗口注意力对建模性能的影响极小,如下图所示。

滑动窗口注意力是 Gemma 3 最核心的架构特点,不过承接上一节 OLMo 2 的内容,我也想简单聊聊它的归一化层排布设计。
3.2 Gemma 3 的归一化层排布
有个细节很有意思:Gemma 3 在其分组查询注意力模块的前后,同时使用了前置与后置两种 RMSNorm。
这一点和 Gemma 2 一脉相承,但依然值得单独拎出来说 —— 它既不同于《Attention Is All You Need》中原生 Transformer 的后归一化,也不同于 GPT-2 带火、后续大量架构沿用的前归一化,更和我们前面看到的 OLMo 2 的后归一化变体有区别。

我认为这种归一化层排布的思路很直观,相当于兼顾了前归一化与后归一化的优势。在我看来,多做一点归一化总归没坏处。最坏的情况无非是额外的归一化存在冗余,带来一点低效的开销。但实际上,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 亿参数版本。

之所以会出现 54.4 亿与 40 亿参数的数值差异,是因为谷歌统计大语言模型参数量的方式比较特别:他们通常会排除嵌入层参数,让模型看起来参数更少;但像这种需要凸显优化效果的场景,又会把嵌入层算进去,让基数显得更大。这种做法并非谷歌独有,已经成了行业内的普遍操作。
另一项有意思的技术是MatFormer,即「套娃 Transformer」的缩写。举例来说,Gemma 3n 采用单一共享的大语言模型(Transformer)架构,但可以「切分」出多个更小的、可独立使用的模型。每个切片都经过独立训练,推理时我们只需要运行对应规模的部分即可,无需加载完整的大模型。