Files
myWiki/concepts/sink-token.md

55 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "汇 Token (Sink Token)"
created: 2026-05-14
updated: 2026-05-14
type: concept
tags: [llm, pre-training, attention, streaming]
sources: ["https://arxiv.org/abs/2309.17453"]
---
# 汇 Token (Sink Token)
## 定义
汇 TokenSink Token是 Xiao et al. (2024) 在 [[streaming-llm|StreamingLLM]] 论文中提出的预训练改进:**在所有训练样本开头添加一个可学习的专用 Token使其成为唯一的注意力汇。**
## 动机
Vanilla LLM如 Llama-2在预训练时没有统一的起始 Token`<s>` 位置因文本分块而随机),因此模型被迫使用**多个**初始 Token 作为 [[attention-sinks|注意力汇]]。StreamingLLM 推理时需要保留 4 个初始 Token 的 KV 才能恢复性能。
→ 如果有一个专用 Token 从一开始就被训练为"注意力垃圾桶",推理时只需保留这一个 Token。
## 预训练实验
Xiao et al. 从头预训练了三个 1.6 亿参数模型,使用相同设置对比:
| 模型 | 方法 | 仅 Sink Token 时 PPL | 结论 |
|------|------|---------------------|------|
| Vanilla | 标准 SoftMax | 27.87 | 需多个初始 Token |
| Zero Sink | SoftMax₁ (off-by-one) | 29,214 | 部分改善,仍需其他 Token |
| **Learnable Sink** | 前置可学习 Token | **18.01** | 仅需 1 个 Sink Token |
- Zero Sink = SoftMax₁(x)_i = e^{x_i} / (1 + Σ_j e^{x_j}),等价于前置一个全零 Key/Value 的虚拟 Token
- Learnable Sink Token 在所有训练样本前添加,成为稳定且唯一的注意力汇
### 效果
- 推理时仅需 **Sink Token + 最近 Token** 即可稳定
- 性能甚至**略优于** Vanilla 模型配合 4 个初始 Token
- 注意力可视化显示,预训练后的 Sink Token 模型不再依赖初始 Token
## 实践建议
论文建议未来的 LLM 预训练应统一在所有训练样本前添加一个可学习的 Sink Token以优化流式部署。
## 与 SoftMax-off-by-One 的关系
[[softmax-off-by-one|SoftMax-off-by-One]] 是另一种消除注意力汇依赖的方案——修改 SoftMax 函数使其不强制求和为 1。但实验表明它不够充分Learnable Sink Token 更有效。
## 相关概念
- [[attention-sinks|注意力汇]] — Sink Token 替代的对象
- [[streaming-llm|StreamingLLM]] — 应用场景
- [[softmax-off-by-one|SoftMax-off-by-One]] — 替代方案
- [[rolling-kv-cache|滚动 KV 缓存]] — 推理时的配合机制