跳转到内容
English

Gemma 4:视觉编码器、池化与 encoder-free 分支

交互教程

比较五种型号,同时保留 12B 在架构上的关键差异。

前置阅读:多模态模型中的视觉 tokenizer 总览

E2B 与 E4B 使用约 150M 的视觉编码器,16 层、宽 768;31B 与 26B-A4B 使用约 550M 编码器,27 层、宽 1152;12B 则去掉独立视觉 Transformer。把五种型号概括成一个视觉 tokenizer,会隐藏主要架构差异。

文字词表约有 262K 项,这是文字 tokenizer 的属性,不是视觉码字数量。同样,为紧凑权重进行量化感知训练,不意味着图像表示采用离散 VQ 码本。

阅读顺序从左到右。点击模块,将它与计算和代码对应。代码为教学伪代码;来源链接提供论文方法或已核查的实现。

先编码小 patch,再做空间平均

编码器分支采用 16×16 RGB patches。可学习投影与二维绝对位置送入带 axial 2D rotary 的双向视觉 Transformer blocks。完成图像范围内的处理后,对 3×3 空间特征分组平均,再归一化/缩放并投影到语言宽度。

z = vision_transformer(patches16, positions_xy)
z = spatial_average_pool(z, kernel=3)
valid_z = remove_padding(z, valid_mask)
visual = language_projection(valid_z)

训练状态:静态实现审计;训练状态见下文。

zˉa,b=19∑i=02∑j=02z3a+i,3b+j,V=Project⁡(Normalize⁡(Zˉ))\bar z_{a,b}=\frac{1}{9}\sum_{i=0}^{2}\sum_{j=0}^{2}z_{3a+i,3b+j},\qquad V=\operatorname{Project}(\operatorname{Normalize}(\bar Z))

逐步讲解:先编码小 patch,再做空间平均

Token 预算是上限,不是精确输出数

支持的图像预算为 70、140、280、560、1120 个 soft tokens。设池化后空间单位 m=16×3=48 像素,理想目标面积为预算×48²。两边同时乘以“目标面积除以原面积”的平方根,再分别向下取 48 的倍数。

H2, W2 = aspect_ratio_resize(H, W, max_soft_tokens=B)
patch_count = (H2 // 16) * (W2 // 16)
valid_soft_tokens = patch_count // 9

训练状态:静态实现审计;训练状态见下文。

f=B(48)2HW,H′=48⌊fH48⌋,W′=48⌊fW48⌋,N=H′W′482≤Bf=\sqrt{\frac{B(48)^2}{HW}},\quad H^\prime=48\left\lfloor\frac{fH}{48}\right\rfloor,\quad W^\prime=48\left\lfloor\frac{fW}{48}\right\rfloor,\quad N=\frac{H^\prime W^\prime}{48^2}\le B

逐步讲解:Token 预算是上限,不是精确输出数

12B 直接投影大像素块,不经过独立视觉塔

12B 模型每个像素块接收 48×48×3=6912 个值,并使用轻量嵌入路径。配置仍写有 processor patch_size=16、pooling_kernel_size=3,但 model_patch_size=48。Processor 把 3×3 小像素块重新排列为大块;重排像素不等于平均编码后的特征。

raw48 = repack_pixel_patches(raw16, group_side=3)
z = ln2(dense(ln1(raw48)))
z = ln3(z + position_x + position_y)
visual = multimodal_projection(rms_norm(z))

训练状态:静态实现审计;训练状态见下文。

ei=LN⁡ ⁣(LN⁡(WLN⁡(xi)+b)+Ex[xipos]+Ey[yipos])e_i=\operatorname{LN}\!\left(\operatorname{LN}(W\operatorname{LN}(x_i)+b)+E_x[x_i^{\rm pos}]+E_y[y_i^{\rm pos}]\right)

逐步讲解:12B 直接投影大像素块,不经过独立视觉塔

查看固定版本来源

Nsoft=H′W′482N_{\rm soft}=\frac{H^\prime W^\prime}{48^2}
两种编码器均在语言投影前,把九个编码后空间位置减为一个。
教学重绘 · 先编码小 patch,再做空间平均 每条有名称的路径从左向右阅读。不同行表示独立路径或比较方案。 · 方法来源点击图片查看全尺寸。

编码器分支采用 16×16 RGB patches。可学习投影与二维绝对位置送入带 axial 2D rotary 的双向视觉 Transformer blocks。完成图像范围内的处理后,对 3×3 空间特征分组平均,再归一化/缩放并投影到语言宽度。

池化发生在视觉塔已交换信息之后,把九个特征位置减为一个;这不等同于在编码器前平均原始像素。LLM 宽度依型号不同:E2B 为 1536,E4B 为 2560,31B 为 5376,26B-A4B 为 2816。

zˉa,b=19∑i=02∑j=02z3a+i,3b+j,V=Project⁡(Normalize⁡(Zˉ))\bar z_{a,b}=\frac{1}{9}\sum_{i=0}^{2}\sum_{j=0}^{2}z_{3a+i,3b+j},\qquad V=\operatorname{Project}(\operatorname{Normalize}(\bar Z))
z = vision_transformer(patches16, positions_xy)
z = spatial_average_pool(z, kernel=3)
valid_z = remove_padding(z, valid_mask)
visual = language_projection(valid_z)

12B 直接投影大像素块,不经过独立视觉塔

Section titled “12B 直接投影大像素块,不经过独立视觉塔”
Encoder-free 路径投影像素块;另一条路径在视觉 Transformer 后池化特征。
教学重绘 · 12B 直接投影大像素块,不经过独立视觉塔 每条有名称的路径从左向右阅读。不同行表示独立路径或比较方案。 · 方法来源点击图片查看全尺寸。

12B 模型每个像素块接收 48×48×3=6912 个值,并使用轻量嵌入路径。配置仍写有 processor patch_size=16、pooling_kernel_size=3,但 model_patch_size=48。Processor 把 3×3 小像素块重新排列为大块;重排像素不等于平均编码后的特征。

所检查实现依次执行 LayerNorm、dense 投影、LayerNorm、分解式 x/y 位置嵌入、另一层 LayerNorm,再经过 RMSNorm 和多模态投影,输出宽 3840。报告中的“single large matmul”概括主要视觉投影,完整接口还包含这些操作。

ei=LN⁡ ⁣(LN⁡(WLN⁡(xi)+b)+Ex[xipos]+Ey[yipos])e_i=\operatorname{LN}\!\left(\operatorname{LN}(W\operatorname{LN}(x_i)+b)+E_x[x_i^{\rm pos}]+E_y[y_i^{\rm pos}]\right)
raw48 = repack_pixel_patches(raw16, group_side=3)
z = ln2(dense(ln1(raw48)))
z = ln3(z + position_x + position_y)
visual = multimodal_projection(rms_norm(z))

Token 预算是上限,不是精确输出数

Section titled “Token 预算是上限,不是精确输出数”

支持的图像预算为 70、140、280、560、1120 个 soft tokens。设池化后空间单位 m=16×3=48 像素,理想目标面积为预算×48²。两边同时乘以“目标面积除以原面积”的平方根,再分别向下取 48 的倍数。

整数网格会略微改变长宽比,也可能用不满预算。报告 Figure 2 中,572×1024(宽×高)图像以说明用预算 10 调整为 96×192,得到 72 个小 patches 和八个 soft tokens。10 用来说明算法,不是公开 processor 接受的预算。代码还处理极窄图向下取整后某边为零的情形。

f=B(48)2HW,H′=48⌊fH48⌋,W′=48⌊fW48⌋,N=H′W′482≤Bf=\sqrt{\frac{B(48)^2}{HW}},\quad H^\prime=48\left\lfloor\frac{fH}{48}\right\rfloor,\quad W^\prime=48\left\lfloor\frac{fW}{48}\right\rfloor,\quad N=\frac{H^\prime W^\prime}{48^2}\le B
H2, W2 = aspect_ratio_resize(H, W, max_soft_tokens=B)
patch_count = (H2 // 16) * (W2 // 16)
valid_soft_tokens = patch_count // 9
竖向图像调整为八个池化区域,共包含 72 个小 patches。
原论文 Figure 2 · Gemma 4 宽×高为 572×1024 → 96×192。预算 10 为说明示例,并非 processor 选项。 · Gemma Team 等 · CC BY 4.0 · PDF 渲染并转换为 WebP · CC BY 4.0点击图片查看全尺寸。

图中用预算 10 说明取整,交互模型预设只使用公开支持的图像预算。

从像素尺寸追踪到视觉 token

形状计算,不运行模型。图像模式复现固定版本的尺寸取整规则;Qwen 的预算在此指定为最大视觉 token 对应的像素面积,不是服务商计费值。

阶段/计算项结果
调整后高度768
调整后宽度768
时间组数1
补齐/复制帧数0
模型 patch 网格行数48
模型 patch 网格列数48
预处理空间单位 × 时间组2304
模型 patch 位置数2304
有效视觉 token256
LLM 视觉特征形状[256, 5376]
连续标量数1376256

16×16 patches → ViT → 3×3 average pool → LLM

27 vision blocks · width 1152 → 5376

输入:视觉 embedding 写入图像位置,文字 embedding 保留。

当前型号的固定配置

有效 token 不包括 padding 槽、图片边界、换行、时间戳文字或其他文本。视频模式不执行抽帧和视频预算分配:输入边长必须是 Qwen 的 32 或 Gemma 的 48 的倍数。单图的帧复制是时空 patch 接口操作,不意味着有运动信息。

已核对的具体配置

核对日期:2026-11-03. 每行链接到固定版本。参数相同不表示权重相同;12B 的 patch 列表示模型接收的像素块。

型号模型 patch视觉层/宽空间操作LLM 宽DeepStack 零基层
gemma-4-E2B-it16×1616 / 7683×3 average1536—
gemma-4-E4B-it16×1616 / 7683×3 average2560—
gemma-4-12B-it48×480 / 3840Pixel projection3840—
gemma-4-31B-it16×1627 / 11523×3 average5376—
gemma-4-26B-A4B-it16×1627 / 11523×3 average2816—

“—”表示本轮检查的路径没有 DeepStack 注入,不表示没有视觉信息。所有分支传递连续向量;本表没有把文字词表大小当作视觉码本。

报告说明独立视觉编码器在预训练中冻结,而 encoder-free 12B 从头训练。公开推理类本身不保证历史 optimizer 调度,复现需要明确参数组及对应训练配方。

两条路线都出现 48 像素输出单位:一条先让小 patches 在预训练视觉塔中交互再池化,另一条让语言主干处理直接投影的大像素块。相同输出数不等于相同视觉计算或细节保留。

哪些信息仍未知或不在本次比较内

Section titled “哪些信息仍未知或不在本次比较内”

已检查报告不足以为所有编码器分支指定某个精确 SigLIP 初始化 checkpoint,因此保留未知。比较涉及视觉输入与文字输出,不是图像解码器;音频与多 token 预测不在本页审计范围内。

用于重建研究时,应区分池化前 patch 特征、池化后特征和 encoder-free 投影块。它们的训练历史与空间接口不同,基于其中任意一种训练像素 decoder 都是独立实验。

Processor 的 patch_size=16 能证明 Gemma 4 12B 有 patch-16 视觉 Transformer 吗?

不能。Processor 将像素重排为 48×48 块,模型使用无独立视觉塔的投影路径。

返回学习地图

自绘图和伪代码用于教学;原论文图片单独标注来源。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。