<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Long Context on Jiang Yi(姜祎)'s Homepage</title><link>https://jiangyigithub.github.io/ai.github.io/tags/long-context/</link><description>Recent content in Long Context on Jiang Yi(姜祎)'s Homepage</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 08 Apr 2026 21:44:44 +0800</lastBuildDate><atom:link href="https://jiangyigithub.github.io/ai.github.io/tags/long-context/index.xml" rel="self" type="application/rss+xml"/><item><title>Base of RoPE Bounds Context Length</title><link>https://jiangyigithub.github.io/ai.github.io/p/base-of-rope-bounds-context-length/</link><pubDate>Mon, 22 Dec 2025 11:34:42 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/base-of-rope-bounds-context-length/</guid><description>&lt;h2 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://maosong.website/p/notes-on-position-encoding/" target="_blank" rel="noopener"
&gt;RoPE&lt;/a&gt; 已经成为了大多数 LLM 使用的 position encoding 范式，但是，RoPE 与 LLM long context 之间的关系还没有被探索清楚。在本文中，作者就探究了 base frequency 与 LLM context capability 之间的关系，并给出了一个达到指定上下文长度所需要的 base frequency 的 lower bound.&lt;/p&gt;
&lt;h2 id="method"&gt;&lt;a href="#method" class="header-anchor"&gt;&lt;/a&gt;Method
&lt;/h2&gt;&lt;p&gt;首先作者回顾了 attention 与 &lt;a class="link" href="https://maosong.website/p/notes-on-position-encoding/" target="_blank" rel="noopener"
&gt;RoPE&lt;/a&gt; 的定义， 关键就是 RoPE 这部分，如下所示&lt;/p&gt;
$$
A_{ij} = (R_{i,\theta}q_i)^T(R_{j,\theta}k_j) = q_i^TR_{i-j,\theta}k_j
$$&lt;p&gt;这里 $\theta$ 就是 base frequency, 作者总结不同模型的 base frequency 配置如下表所示&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Llama-7B&lt;/th&gt;
&lt;th&gt;Llama2-7B&lt;/th&gt;
&lt;th&gt;Llama3-8B&lt;/th&gt;
&lt;th&gt;Mistral-7B&lt;/th&gt;
&lt;th&gt;Baichuan2-7B&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base frequency&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context length&lt;/td&gt;
&lt;td&gt;2048&lt;/td&gt;
&lt;td&gt;4096&lt;/td&gt;
&lt;td&gt;8192&lt;/td&gt;
&lt;td&gt;32,768&lt;/td&gt;
&lt;td&gt;4,096&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下来，作者回顾了 &lt;a class="link" href="https://maosong.website/p/notes-on-yarn/" target="_blank" rel="noopener"
&gt;YARN&lt;/a&gt;. 其核心思想在于，预训练阶段所有可能的 $\cos(t-s)\theta_i$ 都见过，才能保证模型的 OOD 表现&lt;/p&gt;
&lt;p&gt;作者认为 base frequency 的设置应该满足两个条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The closer token gets more attention&lt;/strong&gt;: 当前的 token 应该给邻近的 token 更高的注意力&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The similar token gets more attention&lt;/strong&gt;: 当前的 token 应该给相似的 token 更高的注意力&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 &lt;a class="link" href="https://maosong.website/p/notes-on-position-encoding/" target="_blank" rel="noopener"
&gt;RoPE&lt;/a&gt; 中，作者已经给出了 $A_{ij}$ 与相对距离 $|i-j|$ 之间的关系。因此第一个性质已经满足了。&lt;/p&gt;
&lt;p&gt;接下来，作者分析了相似 token 的性质，作者定义 token 的相似性如下：&lt;/p&gt;
$$
\mathbb{E}_{q,k^*}[q^TR_{m,\theta}k^*] - \mathbb{E}_{q,k}[q^TR_{m,\theta}k]
$$&lt;p&gt;这里 $k^*=q+\epsilon$ 代表了相似的 token, 而 $k$ 是一个随机 token. 作者给出的结论如下&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem&lt;/strong&gt;
假设 $q,k\in\mathbb{R}^d$ 独立同分布，它们的标准差为 $\sigma\in\mathbb{R}$, 则对于 $k^*=q+\epsilon$, $\epsilon$ 是一个随机变量满足 $\mathbb{E}[\epsilon]=0$, 则我们有&lt;/p&gt;
$$
\mathbb{E}_{q,k^*}[q^TR_{m,\theta}k^*] - \mathbb{E}_{q,k}[q^TR_{m,\theta}k] = 2\sigma^2\sum_{i=0}^{d/2-1}\cos(m\theta_i)
$$&lt;p&gt;作者定义 $B_{m,\theta}=\sum_{i=0}^{d/2-1}\cos(m\theta_i)$, 作者认为给定 $\theta$, 模型的上下文长度 $L_\theta$ 满足&lt;/p&gt;
$$
L_\theta = \sup\{L\mid B_{m,\theta}\geq 0, \forall m\in[L]\}
$$&lt;p&gt;也就是说，base frequency 决定了 LLM 的上下文长度。作者给出了不同的上下文长度对应的 base frequency 如下表所示&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context Len.&lt;/th&gt;
&lt;th&gt;1k&lt;/th&gt;
&lt;th&gt;2k&lt;/th&gt;
&lt;th&gt;4k&lt;/th&gt;
&lt;th&gt;8k&lt;/th&gt;
&lt;th&gt;16k&lt;/th&gt;
&lt;th&gt;32k&lt;/th&gt;
&lt;th&gt;64k&lt;/th&gt;
&lt;th&gt;128k&lt;/th&gt;
&lt;th&gt;256k&lt;/th&gt;
&lt;th&gt;512k&lt;/th&gt;
&lt;th&gt;1M&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lower Bound&lt;/td&gt;
&lt;td&gt;4.3e3&lt;/td&gt;
&lt;td&gt;1.6e4&lt;/td&gt;
&lt;td&gt;2.7e4&lt;/td&gt;
&lt;td&gt;8.4e4&lt;/td&gt;
&lt;td&gt;3.1e5&lt;/td&gt;
&lt;td&gt;6.4e5&lt;/td&gt;
&lt;td&gt;2.1e6&lt;/td&gt;
&lt;td&gt;7.8e6&lt;/td&gt;
&lt;td&gt;3.6e7&lt;/td&gt;
&lt;td&gt;6.4e7&lt;/td&gt;
&lt;td&gt;5.1e8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;总的来说，远距离衰减性保证了模型会更关注邻近的 token, 而相似 token 保证了模型能够区分出真正有意义的 token.&lt;/p&gt;
&lt;h2 id="experiments"&gt;&lt;a href="#experiments" class="header-anchor"&gt;&lt;/a&gt;Experiments
&lt;/h2&gt;&lt;p&gt;作者首先分析了 base frequency 在 fine-tuning 阶段对模型上下文能力的影响，实验结果如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/base-of-rope-bounds-context-length/base-frequency-fine-tuning-impact.png"
width="1072"
height="465"
loading="lazy"
alt="impact of base frequency on fine-tuning stage"
class="gallery-image"
data-flex-grow="230"
data-flex-basis="553px"
&gt;&lt;/p&gt;
&lt;p&gt;从实验结果可以看到，当 base frequency 低于阈值时，模型的表现急剧下降。&lt;/p&gt;
&lt;p&gt;作者进一步探讨了 base frequency 对于模型 pre-training 阶段的影响，结果也是一样的，即非常小的 base frequency 会限制模型的 context 能力，结果下图所示 （三行分别代表了 base frequency 为 1e2, 1e4 和 1e6 的情况）&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/base-of-rope-bounds-context-length/base-frequency-pre-training-stage.png"
width="1044"
height="725"
loading="lazy"
alt="impact of base frequency on pre-training stage"
class="gallery-image"
data-flex-grow="144"
data-flex-basis="345px"
&gt;&lt;/p&gt;
&lt;p&gt;可以看到，尽管 perplexity 都差不多，但是使用更大的 base frequency 其长上下文能力明显更好。&lt;/p&gt;
&lt;p&gt;作者进一步分析了为什么较小的 base frequency 会影响模型的长上下文能力。作者认为较小的 base frequency 会导致 $B_{m,\theta}$ 接近于 0， 从而模型难以区分随机 token 和相似 token, 这样模型只能依赖于邻近 token 进行学习，这样就限制了模型的长上下文能力&lt;/p&gt;
&lt;p&gt;作者还进一步对比了提高 base frequency 与 Interpolation 两种做法，实验结果如下表所示&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/base-of-rope-bounds-context-length/base-frequency-comparison-interpolation.png"
width="865"
height="180"
loading="lazy"
alt="comparison with interpolation"
class="gallery-image"
data-flex-grow="480"
data-flex-basis="1153px"
&gt;&lt;/p&gt;
&lt;p&gt;实验结果说明，Interpolation 在上下文超过 30K 之后，其 $B_{m,\theta}\leq0$ 的 次数显著增加，表明了其和上下文能力之间的关系。&lt;/p&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;作者在本文中，探究了 RoPE 中 base frequency 与 LLM 上下文能力之间的关系，发现了提高模型的上下文能力需要关注 RoPE 的 base frequency 超参数，并给出了对应的 lower bound. 作者通过实验验证了这个观点。&lt;/p&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://arxiv.org/abs/2405.14591" target="_blank" rel="noopener"
&gt;arxiv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Notes on RNoPE-SWA</title><link>https://jiangyigithub.github.io/ai.github.io/p/notes-on-rnope-swa/</link><pubDate>Tue, 02 Sep 2025 11:24:10 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/notes-on-rnope-swa/</guid><description>&lt;p&gt;作者系统性分析了已有的 attention 机制，然后作者提出了混合的 attention 机制，来提高模型在长上下文的表现以及维持模型在短上下文场景下的表现。&lt;/p&gt;
&lt;h2 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h2&gt;&lt;p&gt;作者首先强调了提升 LLM 上下文长度面临的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如何有效处理长上下文输入&lt;/li&gt;
&lt;li&gt;如何训练长上下文 LLM&lt;/li&gt;
&lt;li&gt;如何降低长上下文 LLM 在 inference 时的 latency 以及 memory usage&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于建模长上下文输入，我们可以从 attention 机制或者位置编码来入手。前者类似的工作有 Landmark Attention 和 Focused Transformer, 但是这些方法的问题在于训练不稳定。 &lt;a class="link" href="https://maosong.website/p/notes-on-qk-norm/" target="_blank" rel="noopener"
&gt;QK norm&lt;/a&gt; 可以比较好解决 softmax 分布过于极端的问题，但是其问题在于训练时的数值不稳定性，并且可能会影响模型的长上下文能力。&lt;/p&gt;
&lt;p&gt;另一方面，对于位置编码，已有的工作如 APE, AliBi, &lt;a class="link" href="https://maosong.website/p/notes-on-position-encoding/" target="_blank" rel="noopener"
&gt;RoPE&lt;/a&gt; 等都可以提供位置信息。但是，这些方法很有可能回影响模型最终的 attention score 分布。另外，&lt;a class="link" href="https://maosong.website/p/notes-on-nope/" target="_blank" rel="noopener"
&gt;NoPE&lt;/a&gt; 探究了移除 position encoding 的可能性。&lt;/p&gt;
&lt;p&gt;还有一些工作目的是降低 softmax attention 的时间复杂度和空间复杂度。比如 sliding window attention, sparse attention, &lt;a class="link" href="https://maosong.website/p/notes-on-streamingllm/" target="_blank" rel="noopener"
&gt;attention sink&lt;/a&gt; 等都可以降低整体的时间/空间复杂度。但是这些方法最终的表现都有所下降。&lt;/p&gt;
&lt;h2 id="observation"&gt;&lt;a href="#observation" class="header-anchor"&gt;&lt;/a&gt;Observation
&lt;/h2&gt;&lt;p&gt;作者首先对比了以下不同方法对模型长上下文能力的影响。&lt;/p&gt;
&lt;p&gt;作者训练了一个 8B 的模型，然后分别对比了三种方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RoPE: base frequency 设置为 10,000, SFT 阶段扩展到 2M&lt;/li&gt;
&lt;li&gt;QK-Norm: 在 RoPE 的基础上，对 query 和 key 先进行 normalization 再进行 RoPE&lt;/li&gt;
&lt;li&gt;NoPE: 移除 attention 中的位置编码信息&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作者分别评估了三种方法的表现，实验结果如下表&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Val Loss&lt;/th&gt;
&lt;th&gt;MMLU&lt;/th&gt;
&lt;th&gt;HellaSwag&lt;/th&gt;
&lt;th&gt;CommonsenseQA&lt;/th&gt;
&lt;th&gt;ARC-E&lt;/th&gt;
&lt;th&gt;ARC-C&lt;/th&gt;
&lt;th&gt;Needles 65k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;1.52&lt;/td&gt;
&lt;td&gt;48.55&lt;/td&gt;
&lt;td&gt;73.74&lt;/td&gt;
&lt;td&gt;68.30&lt;/td&gt;
&lt;td&gt;81.05&lt;/td&gt;
&lt;td&gt;39.13&lt;/td&gt;
&lt;td&gt;9.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QK-Norm&lt;/td&gt;
&lt;td&gt;1.53&lt;/td&gt;
&lt;td&gt;48.21&lt;/td&gt;
&lt;td&gt;73.68&lt;/td&gt;
&lt;td&gt;68.23&lt;/td&gt;
&lt;td&gt;80.54&lt;/td&gt;
&lt;td&gt;38.98&lt;/td&gt;
&lt;td&gt;7.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoPE&lt;/td&gt;
&lt;td&gt;1.58&lt;/td&gt;
&lt;td&gt;47.61&lt;/td&gt;
&lt;td&gt;72.16&lt;/td&gt;
&lt;td&gt;66.42&lt;/td&gt;
&lt;td&gt;76.94&lt;/td&gt;
&lt;td&gt;37.12&lt;/td&gt;
&lt;td&gt;9.03&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实验结果显示，对于通用任务，RoPE 和 QK-Norm 的表现差不多，而 NoPE 的表现较差。对于长上下文任务，QK-Norm 的表现最差。&lt;/p&gt;
&lt;p&gt;接下来，作者分析了三种方法的 attention 分布情况。作者将上下文分为四个 segments：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;begin: 开始的 10 个 token&lt;/li&gt;
&lt;li&gt;needle: 与 needle 相关的 tokens&lt;/li&gt;
&lt;li&gt;context: 通用的上下文 token&lt;/li&gt;
&lt;li&gt;qc: question/completion token, 语文题答案相关的 token&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作者将 needle 放置在 50% 深度的位置。评测的实验结果如下&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context Length&lt;/th&gt;
&lt;th&gt;Model Variants&lt;/th&gt;
&lt;th&gt;begin&lt;/th&gt;
&lt;th&gt;needle&lt;/th&gt;
&lt;th&gt;context&lt;/th&gt;
&lt;th&gt;qc&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8k&lt;/td&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;0.3863&lt;/td&gt;
&lt;td&gt;0.0328&lt;/td&gt;
&lt;td&gt;0.3809&lt;/td&gt;
&lt;td&gt;0.2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;QK-Norm&lt;/td&gt;
&lt;td&gt;0.0242&lt;/td&gt;
&lt;td&gt;0.0173&lt;/td&gt;
&lt;td&gt;0.8020&lt;/td&gt;
&lt;td&gt;0.1565&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;NoPE&lt;/td&gt;
&lt;td&gt;0.3058&lt;/td&gt;
&lt;td&gt;0.0454&lt;/td&gt;
&lt;td&gt;0.4501&lt;/td&gt;
&lt;td&gt;0.1987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32k&lt;/td&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;0.3541&lt;/td&gt;
&lt;td&gt;0.0201&lt;/td&gt;
&lt;td&gt;0.4343&lt;/td&gt;
&lt;td&gt;0.1915&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;QK-Norm&lt;/td&gt;
&lt;td&gt;0.0064&lt;/td&gt;
&lt;td&gt;0.0056&lt;/td&gt;
&lt;td&gt;0.8517&lt;/td&gt;
&lt;td&gt;0.1364&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;NoPE&lt;/td&gt;
&lt;td&gt;0.2807&lt;/td&gt;
&lt;td&gt;0.0325&lt;/td&gt;
&lt;td&gt;0.4981&lt;/td&gt;
&lt;td&gt;0.1886&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128k&lt;/td&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;0.3463&lt;/td&gt;
&lt;td&gt;0.0010&lt;/td&gt;
&lt;td&gt;0.4751&lt;/td&gt;
&lt;td&gt;0.1776&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;QK-Norm&lt;/td&gt;
&lt;td&gt;0.0010&lt;/td&gt;
&lt;td&gt;0.0004&lt;/td&gt;
&lt;td&gt;0.8993&lt;/td&gt;
&lt;td&gt;0.0994&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;NoPE&lt;/td&gt;
&lt;td&gt;0.0846&lt;/td&gt;
&lt;td&gt;0.0073&lt;/td&gt;
&lt;td&gt;0.8156&lt;/td&gt;
&lt;td&gt;0.0925&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实验结果显示：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NoPE 是最关注 needle token 信息的，RoPE 次之，QK-Norm 最差&lt;/li&gt;
&lt;li&gt;QK-Norm 更关注上下文信息，对其他的信息关注度较少&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作者发现 QK-Norm 对初始的 token 信息关注度较少，作者认为这是因为 normalization 会让模型更关注邻近的 token 信息。为了验证这个观点，作者在不同的上下文长度下，分别计算了不同方法的 attention 分布情况，为了避免噪声，作者将开始的 10 个 token 以及最后的 $3\%$ token 排除在外，实验结果如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-rnope-swa/RNoPE-SWA-8k-attention.png"
width="700"
height="496"
loading="lazy"
alt="Attention distribution on 8K context length"
class="gallery-image"
data-flex-grow="141"
data-flex-basis="338px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-rnope-swa/RNoPE-SWA-32k-attention.png"
width="692"
height="482"
loading="lazy"
alt="Attention distribution on 32K context length"
class="gallery-image"
data-flex-grow="143"
data-flex-basis="344px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-rnope-swa/RNoPE-SWA-128k-attention.png"
width="693"
height="564"
loading="lazy"
alt="Attention distribution on 128K context length"
class="gallery-image"
data-flex-grow="122"
data-flex-basis="294px"
&gt;&lt;/p&gt;
&lt;p&gt;实验结果说明，相比于 softmax attention, QK-Norm 的 attention score 分布更平滑，其对于 need token 的注意力不如 RoPE, 这也说明了为什么 QK-Norm 的长上下文能力比较差。并且，QK-Norm 的 recency bias 更严重。&lt;/p&gt;
&lt;p&gt;作者通过计算 RoPE 和 QK-Norm 的 attention distribution 的 entropy 来进一步说明这一点，结果如下表所示&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;8k&lt;/th&gt;
&lt;th&gt;32k&lt;/th&gt;
&lt;th&gt;128k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;6.02&lt;/td&gt;
&lt;td&gt;6.95&lt;/td&gt;
&lt;td&gt;7.62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QK-Norm&lt;/td&gt;
&lt;td&gt;10.71&lt;/td&gt;
&lt;td&gt;12.46&lt;/td&gt;
&lt;td&gt;14.14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;结果显示 QK-Norm 的熵更高，这意味着 QK-Norm 的 attention score 分布更分散，也就证明了 Qk-Norm retrieval 能力比较差。&lt;/p&gt;
&lt;h2 id="method"&gt;&lt;a href="#method" class="header-anchor"&gt;&lt;/a&gt;Method
&lt;/h2&gt;&lt;p&gt;考虑到 &lt;a class="link" href="https://maosong.website/p/notes-on-nope/" target="_blank" rel="noopener"
&gt;NoPE&lt;/a&gt; 和 RopE 各自的优点，作者提出了一个混合架构，来结合 NoPE 与 RoPE. 具体做法就是 NoPE layer 和 RoPE layer 交替进行。作者将这个模型架构记为 RNoPE.&lt;/p&gt;
&lt;p&gt;RNoPE 不同 layer 与不同 base frequency 产生的 attention score 分布如下&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;NoPE Layers - begin&lt;/th&gt;
&lt;th&gt;NoPE Layers - needle&lt;/th&gt;
&lt;th&gt;NoPE Layers - context&lt;/th&gt;
&lt;th&gt;NoPE Layers - qc&lt;/th&gt;
&lt;th&gt;RoPE Layers - begin&lt;/th&gt;
&lt;th&gt;RoPE Layers - needle&lt;/th&gt;
&lt;th&gt;RoPE Layers - context&lt;/th&gt;
&lt;th&gt;RoPE Layers - qc&lt;/th&gt;
&lt;th&gt;needles-128k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RoPE&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;0.3541&lt;/td&gt;
&lt;td&gt;0.0201&lt;/td&gt;
&lt;td&gt;0.4343&lt;/td&gt;
&lt;td&gt;0.1915&lt;/td&gt;
&lt;td&gt;7.395&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNoPE-10k&lt;/td&gt;
&lt;td&gt;0.3275&lt;/td&gt;
&lt;td&gt;0.0765&lt;/td&gt;
&lt;td&gt;0.5672&lt;/td&gt;
&lt;td&gt;0.0287&lt;/td&gt;
&lt;td&gt;0.0049&lt;/td&gt;
&lt;td&gt;0.0004&lt;/td&gt;
&lt;td&gt;0.6805&lt;/td&gt;
&lt;td&gt;0.3142&lt;/td&gt;
&lt;td&gt;8.036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNoPE-100k&lt;/td&gt;
&lt;td&gt;0.3263&lt;/td&gt;
&lt;td&gt;0.0778&lt;/td&gt;
&lt;td&gt;0.5633&lt;/td&gt;
&lt;td&gt;0.0327&lt;/td&gt;
&lt;td&gt;0.0241&lt;/td&gt;
&lt;td&gt;0.0005&lt;/td&gt;
&lt;td&gt;0.6782&lt;/td&gt;
&lt;td&gt;0.2972&lt;/td&gt;
&lt;td&gt;7.461&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNoPE-2M&lt;/td&gt;
&lt;td&gt;0.3250&lt;/td&gt;
&lt;td&gt;0.0712&lt;/td&gt;
&lt;td&gt;0.5735&lt;/td&gt;
&lt;td&gt;0.0303&lt;/td&gt;
&lt;td&gt;0.1111&lt;/td&gt;
&lt;td&gt;0.0046&lt;/td&gt;
&lt;td&gt;0.6233&lt;/td&gt;
&lt;td&gt;0.2611&lt;/td&gt;
&lt;td&gt;7.022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNoPE-4M&lt;/td&gt;
&lt;td&gt;0.3486&lt;/td&gt;
&lt;td&gt;0.0369&lt;/td&gt;
&lt;td&gt;0.5981&lt;/td&gt;
&lt;td&gt;0.0165&lt;/td&gt;
&lt;td&gt;0.0960&lt;/td&gt;
&lt;td&gt;0.0039&lt;/td&gt;
&lt;td&gt;0.6774&lt;/td&gt;
&lt;td&gt;0.2227&lt;/td&gt;
&lt;td&gt;6.203&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNoPE-10k-swa&lt;/td&gt;
&lt;td&gt;0.3303&lt;/td&gt;
&lt;td&gt;0.0742&lt;/td&gt;
&lt;td&gt;0.5634&lt;/td&gt;
&lt;td&gt;0.0321&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;9.562&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实验结果显示，在 RNoPE 架构中，&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;提升 base frequency 带来的增益逐渐递减&lt;/li&gt;
&lt;li&gt;NoPE layer 的 retrieval 能力比较强，表现在 attention sink 现象以及对于 needle token 的 spike. 但是其 recency bias 比较弱&lt;/li&gt;
&lt;li&gt;RoPE 的 retrieval 能力比较弱，但是其 attention sink 现象比较小&lt;/li&gt;
&lt;li&gt;当 base frequency 增加止呕，RoPE 的 recency bias 会降低，表现在 qc token 的权重降低&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作者发现，RoPE 的 receptive field 会影响 NoPE layer 的 retrieval 能力。作者总结得到两个 insight&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NoPE layer 对于 retrieval 任务比较擅长，而 RoPE layer 对于处理 local Information 比较擅长&lt;/li&gt;
&lt;li&gt;限制 RoPE 的 receptive field 可以保证 NoPE layer 的 retrieval 能力&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;基于这两个 insight, 作者构建了 RNoPE-SWA 架构，RNoPE-SWA 相比于 RNoPE, 将 full attention 变成了 sliding window attention, 来避免 RoPE layer 对下游的 NoPE layer 产生影响。&lt;/p&gt;
&lt;p&gt;最终，作者基于 Command R+ 构建了模型，作者去除了 QK-Norm, 对于 NoPE layer, 作者使用了 full attention, 对于 RoPE layer, 作者使用了 window size 为 4096 的 sliding window attention. 作者通过实验验证了 NoPE layer 和 RoPElayer 的比例，实验结果发现 $1:3$ 的比例是最优的。最终每 4 个 layer 为一组，前三组为 SWA, 最后一层为 full attention.&lt;/p&gt;
&lt;p&gt;最终，在通用任务上评测的结果如下&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;MMLU&lt;/th&gt;
&lt;th&gt;HellaSwag&lt;/th&gt;
&lt;th&gt;ARC-E&lt;/th&gt;
&lt;th&gt;ARC-C&lt;/th&gt;
&lt;th&gt;SATEn&lt;/th&gt;
&lt;th&gt;SATMath&lt;/th&gt;
&lt;th&gt;GSM8K&lt;/th&gt;
&lt;th&gt;Winogrande&lt;/th&gt;
&lt;th&gt;MBPP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;57.5&lt;/td&gt;
&lt;td&gt;75.8&lt;/td&gt;
&lt;td&gt;84.6&lt;/td&gt;
&lt;td&gt;48.5&lt;/td&gt;
&lt;td&gt;70.0&lt;/td&gt;
&lt;td&gt;30.9&lt;/td&gt;
&lt;td&gt;40.9&lt;/td&gt;
&lt;td&gt;68.5&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNope-SWA&lt;/td&gt;
&lt;td&gt;59.5&lt;/td&gt;
&lt;td&gt;76.2&lt;/td&gt;
&lt;td&gt;82.5&lt;/td&gt;
&lt;td&gt;48.8&lt;/td&gt;
&lt;td&gt;71.9&lt;/td&gt;
&lt;td&gt;30.5&lt;/td&gt;
&lt;td&gt;42.7&lt;/td&gt;
&lt;td&gt;69.5&lt;/td&gt;
&lt;td&gt;39.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;在 Ruler retrieval 上评测的结果如下&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;8k&lt;/th&gt;
&lt;th&gt;16k&lt;/th&gt;
&lt;th&gt;32k&lt;/th&gt;
&lt;th&gt;64k&lt;/th&gt;
&lt;th&gt;128k&lt;/th&gt;
&lt;th&gt;256k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;96.6&lt;/td&gt;
&lt;td&gt;94.4&lt;/td&gt;
&lt;td&gt;95.1&lt;/td&gt;
&lt;td&gt;89.1&lt;/td&gt;
&lt;td&gt;83.0&lt;/td&gt;
&lt;td&gt;57.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNope-SWA&lt;/td&gt;
&lt;td&gt;96.1&lt;/td&gt;
&lt;td&gt;96.1&lt;/td&gt;
&lt;td&gt;94.9&lt;/td&gt;
&lt;td&gt;92.0&lt;/td&gt;
&lt;td&gt;90.0&lt;/td&gt;
&lt;td&gt;74.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;在 Ruler QA 上评测的结果如下&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;8k&lt;/th&gt;
&lt;th&gt;16k&lt;/th&gt;
&lt;th&gt;32k&lt;/th&gt;
&lt;th&gt;64k&lt;/th&gt;
&lt;th&gt;128k&lt;/th&gt;
&lt;th&gt;256k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;53.5&lt;/td&gt;
&lt;td&gt;50.0&lt;/td&gt;
&lt;td&gt;52.5&lt;/td&gt;
&lt;td&gt;45.5&lt;/td&gt;
&lt;td&gt;36.0&lt;/td&gt;
&lt;td&gt;30.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RNope-SWA&lt;/td&gt;
&lt;td&gt;55.5&lt;/td&gt;
&lt;td&gt;52.5&lt;/td&gt;
&lt;td&gt;55.5&lt;/td&gt;
&lt;td&gt;49.0&lt;/td&gt;
&lt;td&gt;46.0&lt;/td&gt;
&lt;td&gt;42.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实验结果说明，模型在通用任务任务上与 baseline 模型表现差不多，且长上下文能力更强&lt;/p&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;作者提出了 RNope-SWA, 一个混合 NoPE, RoPE position embedding 和 sliding window attention 的 attention 机制。RNope-SWA 可以在保持模型表现的同时提高计算效率和降低 KV cache 占用。&lt;/p&gt;
&lt;p&gt;尽管本文和已有的工作如 YoCo, Jamba-1.5 和 &lt;a class="link" href="https://maosong.website/p/notes-on-minimax-01/" target="_blank" rel="noopener"
&gt;MiniMax-01&lt;/a&gt; 均证明了混合 attention 架构的有效性。但是，目前对于其工作机制尚缺乏一个比较系统性的理解。作者认为这是一个需要探究的方向。另外，作者还认为如何更好的汇总上下文信息与位置信息也是一个可以探究的方向。&lt;/p&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/pdf/2501.18795" target="_blank" rel="noopener"
&gt;arxiv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Notes on Gemma3</title><link>https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/</link><pubDate>Sat, 15 Mar 2025 11:15:29 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/</guid><description>&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/cover.png" alt="Featured image of post Notes on Gemma3" /&gt;&lt;p&gt;作者提出了Gemma3系列大模型，包括1B, 4B, 12B, 27B四个size。4B, 12B, 27B三个size均支持多模态，128K的上下文长度以及140种语言。&lt;/p&gt;
&lt;h1 id="方法"&gt;&lt;a href="#%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;方法
&lt;/h1&gt;&lt;h2 id="数据处理"&gt;&lt;a href="#%e6%95%b0%e6%8d%ae%e5%a4%84%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;数据处理
&lt;/h2&gt;&lt;h3 id="数据格式"&gt;&lt;a href="#%e6%95%b0%e6%8d%ae%e6%a0%bc%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;数据格式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[BOS]&amp;lt;start_of_turn&amp;gt;user
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Who are you?&amp;lt;end_of_turn&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;start_of_turn&amp;gt;model
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;My name is Gemma!&amp;lt;end_of_turn&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;start_of_turn&amp;gt;user
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What is 2+2?&amp;lt;end_of_turn&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;start_of_turn&amp;gt;model
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2+2=4.&amp;lt;end_of_turn&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;pretrain和SFT的区别在于,pretrain时模型输出以&lt;code&gt;&amp;lt;eos&amp;gt;&lt;/code&gt;结束,SFT时模型输出以&lt;code&gt;&amp;lt;end_of_turn&amp;gt;&lt;/code&gt;结束.&lt;/p&gt;
&lt;h3 id="图片处理"&gt;&lt;a href="#%e5%9b%be%e7%89%87%e5%a4%84%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;图片处理
&lt;/h3&gt;&lt;p&gt;输入的图片都会被resize到896x896，如果图片精度过大或者不是正方形，则会通过Pan &amp;amp; Scan技巧裁剪为多个子图，然后每个子图分别进行resize。核心处理代码为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;crop_size_w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;num_crops_w&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;crop_size_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;num_crops_h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Don&amp;#39;t apply PaS if crop size is too small.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;crop_size_w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;crop_size_h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;pan_and_scan_min_crop_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;crop_positions_w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;crop_size_w&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_crops_w&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;crop_positions_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;crop_size_h&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_crops_h&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;image_crops&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pos_h&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pos_h&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;crop_size_h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pos_w&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pos_w&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;crop_size_w&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pos_h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pos_w&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;itertools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;crop_positions_h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;crop_positions_w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="模型架构"&gt;&lt;a href="#%e6%a8%a1%e5%9e%8b%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;模型架构
&lt;/h2&gt;&lt;p&gt;模型包括4个size，分别是1B, 4B, 12B, 27B。1B的模型是单模态的，4B, 12B, 27B的模型是多模态的。对于多模态模型来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vision encoder: Siglip-400M&lt;/li&gt;
&lt;li&gt;Projection layer: linear layer&lt;/li&gt;
&lt;li&gt;LLM: Gemma 3&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="模型参数"&gt;&lt;a href="#%e6%a8%a1%e5%9e%8b%e5%8f%82%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;模型参数
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Vision Encoder&lt;/th&gt;
&lt;th&gt;Embedding Parameters&lt;/th&gt;
&lt;th&gt;Non-embedding Parameters&lt;/th&gt;
&lt;th&gt;context length&lt;/th&gt;
&lt;th&gt;multilingual&lt;/th&gt;
&lt;th&gt;training data&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1B&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;302M&lt;/td&gt;
&lt;td&gt;698M&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;td&gt;2T tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4B&lt;/td&gt;
&lt;td&gt;417M&lt;/td&gt;
&lt;td&gt;675M&lt;/td&gt;
&lt;td&gt;3,209M&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;140+ languages&lt;/td&gt;
&lt;td&gt;4T tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12B&lt;/td&gt;
&lt;td&gt;417M&lt;/td&gt;
&lt;td&gt;1,012M&lt;/td&gt;
&lt;td&gt;10,759M&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;140+ languages&lt;/td&gt;
&lt;td&gt;12T tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27B&lt;/td&gt;
&lt;td&gt;417M&lt;/td&gt;
&lt;td&gt;1,416M&lt;/td&gt;
&lt;td&gt;25,600M&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;140+ languages&lt;/td&gt;
&lt;td&gt;14T tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="attention-layers"&gt;&lt;a href="#attention-layers" class="header-anchor"&gt;&lt;/a&gt;Attention layers
&lt;/h2&gt;&lt;p&gt;为了提高效率，作者将部分layer的self-attention替换为sliding window attention。论文里是将6 layers为一组，替换一组中最后一层为sliding window attention，其余层为self attention。判断某layer是否为sliding window attention的代码为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# config.sliding_window_pattern = 6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_sliding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;layer_idx&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sliding_window_pattern&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="long-context"&gt;&lt;a href="#long-context" class="header-anchor"&gt;&lt;/a&gt;Long context
&lt;/h2&gt;&lt;p&gt;作者将global self-attention的RoPE的base frequency从10K提升到了1M，对于sliding window attention，RoPE的base frequency保持10k不变。&lt;/p&gt;
&lt;h2 id="预训练"&gt;&lt;a href="#%e9%a2%84%e8%ae%ad%e7%bb%83" class="header-anchor"&gt;&lt;/a&gt;预训练
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;数据在模型参数里进行了汇总&lt;/li&gt;
&lt;li&gt;tokenizer使用的是Gemini2.0的tokenizer，基于SentencePiece，vocab大小为262K&lt;/li&gt;
&lt;li&gt;使用知识蒸馏的方法进行训练，每个token按照教师模型的概率采样256个logits，然后使用cross-entropy loss进行训练&lt;/li&gt;
&lt;li&gt;4B, 12B, 27B的模型先在32K的context length上进行训练，然后在128K的context length上进行训练&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="quantization-aware-training"&gt;&lt;a href="#quantization-aware-training" class="header-anchor"&gt;&lt;/a&gt;Quantization Aware training
&lt;/h2&gt;&lt;p&gt;作者提供了quantized版本的模型，模型基于预训练好的模型使用QAT方法进行SFT 5000 steps左右。最后是各个模型的内存占用情况&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Raw (GB)&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Quantized (GB)&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;bf16&lt;/td&gt;
&lt;td&gt;Int4&lt;/td&gt;
&lt;td&gt;Int4(blocks=32)&lt;/td&gt;
&lt;td&gt;SFP8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1B&lt;/td&gt;
&lt;td&gt;2.0&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;td&gt;0.7&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+KV&lt;/td&gt;
&lt;td&gt;2.9&lt;/td&gt;
&lt;td&gt;1.4&lt;/td&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;1.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4B&lt;/td&gt;
&lt;td&gt;8.0&lt;/td&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;2.9&lt;/td&gt;
&lt;td&gt;4.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+KV&lt;/td&gt;
&lt;td&gt;12.7&lt;/td&gt;
&lt;td&gt;7.3&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;9.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12B&lt;/td&gt;
&lt;td&gt;24.0&lt;/td&gt;
&lt;td&gt;6.6&lt;/td&gt;
&lt;td&gt;7.1&lt;/td&gt;
&lt;td&gt;12.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+KV&lt;/td&gt;
&lt;td&gt;38.9&lt;/td&gt;
&lt;td&gt;21.5&lt;/td&gt;
&lt;td&gt;22.0&lt;/td&gt;
&lt;td&gt;27.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27B&lt;/td&gt;
&lt;td&gt;54.0&lt;/td&gt;
&lt;td&gt;14.1&lt;/td&gt;
&lt;td&gt;15.3&lt;/td&gt;
&lt;td&gt;27.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+KV&lt;/td&gt;
&lt;td&gt;72.7&lt;/td&gt;
&lt;td&gt;32.8&lt;/td&gt;
&lt;td&gt;34.0&lt;/td&gt;
&lt;td&gt;46.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="后训练"&gt;&lt;a href="#%e5%90%8e%e8%ae%ad%e7%bb%83" class="header-anchor"&gt;&lt;/a&gt;后训练
&lt;/h2&gt;&lt;p&gt;数据过滤：筛选掉包含PII，不安全的或者有毒的输出等。留下上下文依赖高，幻觉小的数据&lt;/p&gt;
&lt;p&gt;训练包括升级版的知识蒸馏和基于RL的finetuning，其中RL的reward来自于weight averaged reward models, code execution feedback, ground-truth rewards&lt;/p&gt;
&lt;h1 id="实验"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c" class="header-anchor"&gt;&lt;/a&gt;实验
&lt;/h1&gt;&lt;h2 id="表现"&gt;&lt;a href="#%e8%a1%a8%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;表现
&lt;/h2&gt;&lt;p&gt;Gemma3的表现如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/performance.png"
width="1762"
height="767"
loading="lazy"
alt="performance of Gemma3"
class="gallery-image"
data-flex-grow="229"
data-flex-basis="551px"
&gt;&lt;/p&gt;
&lt;p&gt;与PaliGemma 2的表现对比&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/comparison_with_pali_gemma_2.png"
width="843"
height="933"
loading="lazy"
alt="Comparison with PaliGemma 2"
class="gallery-image"
data-flex-grow="90"
data-flex-basis="216px"
&gt;&lt;/p&gt;
&lt;h2 id="消融实验"&gt;&lt;a href="#%e6%b6%88%e8%9e%8d%e5%ae%9e%e9%aa%8c" class="header-anchor"&gt;&lt;/a&gt;消融实验
&lt;/h2&gt;&lt;h3 id="local-attention-layers"&gt;&lt;a href="#local-attention-layers" class="header-anchor"&gt;&lt;/a&gt;Local attention layers
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sliding_window_pattern&lt;/code&gt;对模型的表现影响不大&lt;/li&gt;
&lt;li&gt;sliding window size对模型的表现也不是很大，如下图&lt;/li&gt;
&lt;li&gt;使用sliding window attention可以降低KV cache的内存占用&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/sliding_window_size.png"
width="865"
height="618"
loading="lazy"
alt="sliding window size"
class="gallery-image"
data-flex-grow="139"
data-flex-basis="335px"
&gt;&lt;/p&gt;
&lt;h3 id="long-context-ablation"&gt;&lt;a href="#long-context-ablation" class="header-anchor"&gt;&lt;/a&gt;Long context ablation
&lt;/h3&gt;&lt;p&gt;结论为long context会降低模型的性能&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/long_context.png"
width="864"
height="887"
loading="lazy"
alt="long context"
class="gallery-image"
data-flex-grow="97"
data-flex-basis="233px"
&gt;&lt;/p&gt;
&lt;h3 id="知识蒸馏"&gt;&lt;a href="#%e7%9f%a5%e8%af%86%e8%92%b8%e9%a6%8f" class="header-anchor"&gt;&lt;/a&gt;知识蒸馏
&lt;/h3&gt;&lt;p&gt;训练token个数比较少的时候，使用小的教师模型效果更好；训练token个数比较多的时候，使用大的教师模型效果更好。&lt;/p&gt;
&lt;h3 id="pan--scan"&gt;&lt;a href="#pan--scan" class="header-anchor"&gt;&lt;/a&gt;Pan &amp;amp; Scan
&lt;/h3&gt;&lt;p&gt;使用图片原始的aspect ratio训练的模型效果更好。&lt;/p&gt;
&lt;h3 id="memorization"&gt;&lt;a href="#memorization" class="header-anchor"&gt;&lt;/a&gt;memorization
&lt;/h3&gt;&lt;p&gt;memorization指模型输出的文本与训练数据中文本的重复率。结果发现Gemma3的memorization要更低一些。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/p/notes-on-gemma3/memorization.png"
width="865"
height="824"
loading="lazy"
alt="memorization"
class="gallery-image"
data-flex-grow="104"
data-flex-basis="251px"
&gt;&lt;/p&gt;
&lt;h1 id="结论"&gt;&lt;a href="#%e7%bb%93%e8%ae%ba" class="header-anchor"&gt;&lt;/a&gt;结论
&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;sliding window attention在Qwen2.5-VL里已经验证过有效,这里在Gemma3上同样验证了有效性.&lt;/li&gt;
&lt;li&gt;模型架构与PaliGemma系列基本一致，只是attention改变了，然后LLM从Gemma 2升级到了Gemma 3。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="参考文献"&gt;&lt;a href="#%e5%8f%82%e8%80%83%e6%96%87%e7%8c%ae" class="header-anchor"&gt;&lt;/a&gt;参考文献
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://storage.googleapis.com/deepmind-media/gemma/Gemma3Report.pdf" target="_blank" rel="noopener"
&gt;Gemma3 Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/huggingface/transformers/tree/main/src/transformers/models/gemma3" target="_blank" rel="noopener"
&gt;transformers-Gemma3 code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>