Gemma3技术总结

简介

Gemma 是一个源自 Google 的轻量级模型系列,该系列依托于先进的 Gemini 技术进行构建。2025 年 3 月 12 日,Google 正式发布了 Gemma 系列的最新一代产品——Gemma 3。这款新一代的 Gemma 模型具有多模态处理能力,不仅能够理解和生成文本内容,还能对图像数据进行分析和处理。Gemma 3 拥有一个宽广的上下文窗口,大小达到 128K tokens,这意味着它可以在单次处理过程中考虑更多的信息。此外,Gemma 3 支持超过 140 种不同的语言,极大地扩展了其应用范围。

Gemma 3 提供了四种不同规模的版本以满足各种需求:从相对较小的 10 亿参数(1B)版本到更强大的 270 亿参数(27B)版本不等。这些不同规模的模型在多种自然语言处理任务中展现出了卓越的能力,包括但不限于问答、文档摘要生成以及复杂的逻辑推理等应用场景。特别值得一提的是,尽管拥有强大的功能,但通过优化设计,即使是较大规模的 Gemma 3 版本也能够在硬件资源较为有限的情况下高效运行,这使得它成为了一款非常适合部署于边缘计算设备或移动平台上的解决方案。
对于那些希望深入了解 Gemma 3 背后技术细节的研究者来说,可以参考以下论文获取更多信息:

Gemma 架构

整体架构

GemmaForCausalLM(
  (model): GemmaModel(
    (embed_tokens): Embedding(256000, 3072, padding_idx=0)
    (layers): ModuleList(
      (0-27): 28 x GemmaDecoderLayer(
        (self_attn): GemmaSdpaAttention(
          (q_proj): Linear(in_features=3072, out_features=4096, bias=False)
          (k_proj): Linear(in_features=3072, out_features=4096, bias=False)
          (v_proj): Linear(in_features=3072, out_features=4096, bias=False)
          (o_proj): Linear(in_features=4096, out_features=3072, bias=False)
          (rotary_emb): GemmaRotaryEmbedding()
        )
        (mlp): GemmaMLP(
          (gate_proj): Linear(in_features=3072, out_features=24576, bias=False)
          (up_proj): Linear(in_features=3072, out_features=24576, bias=False)
          (down_proj): Linear(in_features=24576, out_features=3072, bias=False)
          (act_fn): PytorchGELUTanh()
        )
        (input_layernorm): GemmaRMSNorm()
        (post_attention_layernorm): GemmaRMSNorm()
      )
    )
    (norm): GemmaRMSNorm()
  )
  (lm_head): Linear(in_features=3072, out_features=256000, bias=False)
)

embed_tokens(嵌入层)

该层将输入令牌(单词或子单词)转换为模型可以处理的密集型数字表征(嵌入)。其词汇量为 256,000,并可创建维度为 3,072 的嵌入。

layers

这是模型的核心部分,由 28 个堆叠的 GemmaDecoderLayer 组件构成。每一层都优化了令牌嵌入,以捕捉单词及其上下文之间的复杂关系。

self_attn

在自注意力 (self-attention) 机制中,模型在生成下一个单词时为输入中的单词分配不同的权重。该模型利用缩放的点积注意机制,并使用线性投影(q_proj、k_proj、v_proj 和 o_proj)来生成查询、键、值和输出表征。

q_proj、k_proj 和 v_proj 的所有 out_features 值都是相同的 4,096,因为该模型使用了多头注意力 (MHA)。该机制有 16 个并行的头,每个头的尺寸是 256,总共为 4,096 (256 x 16)。

此外,该模型通过使用 rotary_emb (GemmaRotaryEmbedding) 进行位置编码(又名 RoPE),来更有效地利用位置信息。

最后,o_proj 层将注意力输出投影回原始维度 (3072)。

请注意,Gemma 2B 模型使用多查询注意力 (MQA)。

k_proj 和 v_proj 共享相同的头,大小为 256,因此 out_features 为 256。相比之下,q_proj 和 o_proj 有 8 个并行的头 (256 x 8 = 2048)。

(self_attn): GemmaSdpaAttention(
          (q_proj): Linear(in_features=2048, out_features=2048, bias=False)
          (k_proj): Linear(in_features=2048, out_features=256, bias=False)
          (v_proj): Linear(in_features=2048, out_features=256, bias=False)
          (o_proj): Linear(in_features=2048, out_features=2048, bias=False)
          (rotary_emb): GemmaRotaryEmbedding()
        )

mlp

此参数利用 gate_proj 和 up_proj 作为门控机制,然后通过 down_proj 将维度降回到 3,072。

归一化

这些归一化层稳定了训练过程,并提高了模型的有效学习能力。

术语位置主要目的
norm (通常指 LayerNorm)Transformer 模型各处 (输入、注意力后、FFN后等)稳定训练,加速收敛,改善梯度流动,提高性能
input_layer norm输入层 (Embedding 后, Positional Encoding 后)稳定输入表示,加速训练
post_attention layernorm自注意力机制之后 (残差连接之后)稳定注意力机制的输出,改善梯度流动,提高模型性能 (Transformer 中非常重要)

lm_head

此最后一层将经优化的嵌入 (3,072) 映射回整个词汇空间 (256,000) 的概率分布上,以预测下一个令牌。

Gemma3 新功能

功能点

特性详情
构建全球最佳单GPU模型Gemma 3 在 LMArena 排行榜的初步人类偏好评估中,表现优于 Llama - 405B、DeepSeek - V3 和 o3 - mini。帮助用户创建适合单 GPU 或 TPU 主机的引人入胜的用户体验。
支持 140 种语言构建能够使用客户语言的应用。Gemma 3 提供超过 35 种语言的开箱即用支持,并对 140 多种语言提供预训练支持。
创建具备高级文本和视觉推理能力的 AI轻松构建能够分析图像、文本和短视频的应用程序,为交互式和智能化应用开辟新的可能性。
通过扩展的上下文窗口处理复杂任务Gemma 3 提供 128k token 的上下文窗口(相比之下, Gemma 2 的上下文窗口只有 80K),让应用程序能够处理和理解大量信息。
使用函数调用创建 AI 驱动的工作流Gemma 3 支持函数调用和结构化输出,帮助用户自动化任务并构建代理式体验。
通过量化模型实现更快的高性能Gemma 3 引入了官方量化版本,在保持高精度的同时减少模型大小和计算需求。

Chatbot Arena Elo 分数

该图表根据 Chatbot Arena Elo 分数对 AI 模型进行排名;分数越高(顶部数字)表示用户偏好越高。圆点表示预估的 NVIDIA H100 GPU 需求。Gemma 3 27B 排名靠前,尽管其他模型需要多达 32 个 GPU,但它仅需单个 GPU 即可运行。

Gemma 3 和 Qwen 2.5 对比

Gemma3 主要特性

架构创新

本地:全局注意力层

gemma 2 模型使用的是 1:1,而 Gemma 3 使用的是 5:1。我们观察到更改此比例对困惑度的影响几乎没有。

滑动窗口大小

SLIDING_WINDOW = 1024

def sliding_window_causal(b, h, q_idx, kv_idx):
    causal_mask = q_idx >= kv_idx
    window_mask = q_idx - kv_idx <= SLIDING_WINDOW 
    return causal_mask & window_mask

# If you want to be cute...
from torch.nn.attention import and_masks

def sliding_window(b, h, q_idx, kv_idx)
    return q_idx - kv_idx <= SLIDING_WINDOW

sliding_window_causal = and_masks(causal_mask, sliding_window)

KV 缓存内存的影响

Gemma 2 中使用的是"1:1, sw=4096"配置。我们观察到,"仅全局"配置导致内存开销为 60%,而使用 1:3 和滑动窗口为 1024(“sw=1024”)时,这可以减少到不到 15%。

在图 6 中,我们计算了 KV 缓存使用的内存作为上下文长度的函数,使用我们的 2B 架构(L:G=5:1, sw=1024)与"仅全局"的 2B 模型进行比较。

训练细节

  • 硬件与框架
    • 使用TPU训练
    • 结合Zero-3类算法与JAX
  • 训练规模
    • 27B版本:14万亿tokens
    • 12B版本:12T tokens
    • 4B版本:4T tokens
    • 1B版本:2T tokens
  • 后训练优化
    • 采用蒸馏技术
    • 每个token采样256个logits
    • 使用BOND、WARM和WARP算法进行强化学习

对话模板更新

  • 强制包含BOS(Begin of Sentence)起始标记
  • 采用格式:
    • <start_of_turn>user
    • <start_of_turn>model

长文本与视觉能力

  • 上下文处理
    • 训练过程从32K扩展到128K
    • RoPE缩放因子:8
  • 视觉处理
    • 采用"Pan & Scan"算法
    • 固定分辨率:896×896
    • 使用窗口化支持其他尺寸

1. RoPE基础频率的基本概念

RoPE基础频率是用来控制位置编码的一个重要参数:

  • 较低的基础频率(如10,000)会使位置编码变化更缓慢
  • 较高的基础频率(如1,000,000)会使位置编码变化更快速

2. 两种注意力层的频率设置

局部自注意力层(Local Attention)
  • 基础频率:10,000
  • 特点:
    • 只关注局部窗口内的信息(如前面提到的1024个token)
    • 较低的频率有助于在局部范围内更精确地捕捉位置关系
    • 因为处理范围有限,不需要很高的基础频率
全局自注意力层(Global Attention)
  • 基础频率:1,000,000
  • 特点:
    • 需要处理整个序列的信息
    • 更高的频率让模型能够更好地区分远距离位置
    • 有助于处理长距离依赖关系

为什么要这样设计?


用一个比喻来解释:想象你在看一本书:

  • 局部自注意力层(频率10,000)就像是在仔细阅读当前这一页的内容,需要精确理解每个词之间的关系。
  • 全局自注意力层(频率1,000,000)则像是在理解整本书的结构,需要能够快速定位和关联不同章节的内容。

通过这种设计:

  1. 局部层保持较低频率,确保近距离的词之间关系被准确建模
  2. 全局层使用高频率,帮助模型更好地处理长距离的关系

这种差异化设计有助于:

  • 提高模型处理长文本的能力
  • 在保持局部精确性的同时,提升全局理解能力
  • 平衡计算效率和模型性能

简而言之,这是一种"分工合作"的设计:局部层专注于精细处理,全局层负责长距离关联,两者互补来提升整体性能。

记忆率

记忆率被定义为模型生成内容中与其训练数据匹配的比例,相对于使用以下设置的所有模型生成内容。

我们遵循 Gemma Team (2024b) 中描述的方法来测量它。具体来说,我们从不同语料库中均匀分布地抽取大量训练数据,并使用长度为 50 的前缀和长度为 50 的后缀来测试可发现的提取 (Nasr et al., 2023)。我们将文本标记为“完全记忆”,如果续接部分的所有标记与源后缀完全匹配,或者标记为“大致记忆”,如果它们在编辑距离 10%以内匹配。

附录

gemma2 和 gemma3 能力对比图

FlexAttention

论文地址:https://arxiv.org/html/2412.05496?_immersive_translate_auto_translate=1

关于注意力变体的几个例子,我们有因果关系 、 相对位置嵌入 、Alibi、 滑动窗口注意力 、 前缀语言模型 、 文档掩码/样本打包/锯齿张量 、 双曲正切软上限 、PagedAttention 等。更糟糕的是,人们常常想要这些的组合!滑动窗口注意力+文档掩码+因果关系+上下文并行?还是 PagedAttention+滑动窗口+双曲正切软上限?

下图左侧展示了当今世界的状态——某些掩码+偏置+设置的组合已经有了现成的内核实现。但各种选项导致设置数量呈指数级增长,因此总体上我们得到的支持相当零散。更糟糕的是,研究人员提出的新注意力变体将得到零支持。

这是经典的注意力方程:

以代码形式:

Q, K, V: Tensor[batch_size, num_heads, sequence_length, head_dim]
score: Tensor[batch_size, num_heads, sequence_length, sequence_length] = (Q @ K) / sqrt(head_dim)
probabilities = softmax(score, dim=-1)
output: Tensor[batch_size, num_heads, sequence_length, head_dim] = probabilities @ V

FlexAttention 允许用户定义函数 score_mod:

以代码形式:

Q, K, V: Tensor[batch_size, num_heads, sequence_length, head_dim]
score: Tensor[batch_size, num_heads, sequence_length, sequence_length] = (Q @ K) / sqrt(head_dim)
modified_scores: Tensor[batch_size, num_heads, sequence_length, sequence_length] = score_mod(score)
probabilities = softmax(modified_scores, dim=-1)
output: Tensor[batch_size, num_heads, sequence_length, head_dim] = probabilities @ V

此函数允许您在 softmax 之前修改注意力得分。令人惊讶的是,这对于绝大多数注意力变体的需求已经足够(见下面的示例)!

具体来说,score_mod 的预期签名有些独特。

def score_mod(score: f32[], b: i32[], h: i32[], q_idx: i32[], kv_idx: i32[])
    return score # noop - standard attention

Soft-capping

Soft-capping是 Gemma2 和 Grok-1 中使用的技术,用于防止 logits 过度增长。在 FlexAttention 中,它看起来像这样:

softcap = 20
def soft_cap(score, b, h, q_idx, kv_idx):
    score = score / softcap
    score = torch.tanh(score)
    score = score * softcap
    return score

Mistral Small 3

LLaMA4

型号
  • Llama-4-2T-Behemoth (期货)

288B活跃参数,16个专家,2T总参数

教师模型,用来蒸馏400B和109B模型

还在继续训练

对标Claude Opus,Gemini Ultra,应该暂时不会出API,以防止被同行蒸馏

  • Llama-4-400B-Maverick

17B活跃参数,128个专家,400B总参数

原生多模态,具备100万上下文长度

价格输入$0.22,输出$0.88

低于ds3-0324(输出$1.1)

参考2.5pro(输出$10),3.7sonnet(输出$15),4o-0326(输出$10)

  • Llama-4-109B-Scout

17B活跃参数,16个专家,109B总参数

对标2.0flash,4o-mini,3.5haiku

  • Llama-4-Resoning

前面三个现在应该都没推理,推理是另一个单独的模型,小扎说一个月内上线

创新点解读
  1. MoE架构****创新
    1. 首次在旗舰模型中采用专家混合(MoE)架构
    2. 包含128个路由专家和1个共享专家
    3. 相比传统稠密模型,提供更高的计算效率
    4. 能在单个H100主机上运行,降低计算成本
  2. 原生多模态能力
    1. 采用早期融合(Early Fusion)技术
    2. 使用改进版MetaCLIP视觉编码器
    3. 预训练可处理多达48张图像,实际应用支持8张
    4. 支持图像定位和视觉问答功能
  3. 超长上下文处理
    1. Scout版本支持1000万(10M)token上下文窗口
    2. Maverick版本支持1M token
    3. 采用iRoPE(交错注意力层)架构创新
    4. 结合推理时温度缩放,增强长度泛化能力
  4. 训练与优化****创新
    1. 引入MetaP训练技术优化超参数设置
    2. 采用FP8精度训练提升效率
    3. 增加中期训练阶段
    4. 实施精细化后训练流程(SFT、在线RL、DPO)
    5. 从Behemoth到Maverick的协同蒸馏
  5. 多语言支持
    1. 支持200种语言预训练
    2. 100多种语言可进行开源微调
    3. 每种语言数据量超过10亿token
    4. 多语言token数量是Llama 3的10倍

中文能力有待提升,建议等待即将发布的Qwen3。

创新还是缝合

细数一下Llama 4的创新点:

  • MoE 架构? 主流玩家早都已经换完了,Llama 4 是 首次 在旗舰模型用,但不是第一个吃螃蟹的。
  • 原生多模态? GPT-4V、Gemini 珠玉在前,大家都在做。早期融合 (Early Fusion) 算是一个实现细节上的优化,但多模态本身不是新概念。
  • 超长上下文? Llama 4 Scout 的 10M 确实是目前最长,iRoPE 架构是其实现的关键,这算是一个不错的工程创新。但追求长上下文这个 方向 本身,也是行业趋势,之前Gemini、Minimax,甚至Qwen也在这方面进行过探索,并且成果都挺显著的。
  • 训练优化? FP8 训练、RLHF/DPO 流程、模型蒸馏,这些都是当前大模型训练的常规操作或渐进式改进(让我们感谢DeepSeek)。MetaP 可能是 Meta 内部提效的法宝,但对外界来说,更多是工程细节的打磨。

Llama 4本次相当于整合了市场上最热门、最有效的技术方向,优化并且 在理论上 推向了新的规模和性能高度,尤其是在开源模型领域再次树立了标杆。

但要说开创了全新的、颠覆性的技术路线,好像还谈不上。更像是站在前人(或者说同行)的肩膀上,做了一次** 工程和整合能力的极致展现** ,把现有的 “SOTA 配方” 调得更猛、融合得更好了。

翻车1:llama4-400b Aider编程评分(250407 06:50更新)

排名第29,甚至不敌DeepSeek2.5

表现与lmarena的官方api版本差异过大

  • 最乐观的情况:模型没问题,第三方API调教不行
  • 中等的情况:开源的版本与送评版本并不是一个版本,以后会开源送评这个版本
  • 最悲观的情况:Lmarena机制有漏洞,这货本来就这水平,刷分刷上来的

翻车2:FictionBench长上下文评分(250407 07:55更新)

翻车3:Lmarena承认被Meta坑了(250408 13:00更新)

Lmarena承认Meta使用了与开源版不同的,专门刷分的版本,lmarena会上架llama4的Hugging face版本,重新评分

翻车4:LiveBench评分(250408 13:10更新)

llama-4-400b的分数,竟然不如r1-llama3-70b

Llama 4训练作弊爆出惊天丑闻!AI大佬愤而辞职,代码实测崩盘全网炸锅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江小皮不皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值