一文读懂 CLS TokenClassification TokenCLS Token 是 Transformer尤其是BERT、ViT、CLIP 等模型里一个非常经典的设计。简单理解CLS Token 是一个“专门用来收集全局信息的可学习向量”最后它代表整个输入用于分类或其他任务。([Hugging Face][1])1. CLS 是什么CLS 全称Classification Token分类标记它最早出现在 BERT 中用于文本分类任务。BERT 会在句子开头插入一个特殊 token输入 [CLS] 我 喜欢 深度学习 [SEP] ↓ Transformer 输出 [CLS] 我 喜欢 深度学习 ↓ 用于分类其中[CLS]不是一个真实单词没有具体语义是模型训练出来的一个参数向量它类似“请把整句话的信息总结到我这里”([Hugging Face][1])2. 为什么 Transformer 需要 CLS先看 Transformer 的输出假设输入x1 x2 x3 x4经过 Transformerh1 h2 h3 h4输出还是4个token但是分类任务需要整个句子 → 一个类别例如这个电影很好看 ↓ 正面情感问题来了4个token怎么变成1个分类结果传统方法方法1平均池化(h1h2h3h4)/4 ↓ 一个向量 ↓ 分类类似 CNN 的 Global Average Pooling。方法2CLS Token人为增加一个 token输入[CLS] x1 x2 x3 x4Transformer 后hCLS h1 h2 h3 h4只取hCLS作为整个输入表示hCLS ↓ Linear ↓ 类别([普渡大学数学系][2])3. CLS Token 是怎么学习信息的关键在Self AttentionTransformer 每一层都会计算Query Key ValueCLS 也参与 Attention。例如输入[CLS] 猫 在 沙发 上第一层CLS | Attention | -------------------------------- | | | | 猫 在 沙发 上CLS 可以看到所有 tokenCLS f(猫, 在, 沙发, 上)经过几十层 TransformerCLS ↓ 越来越包含全局信息 ↓ 最后代表整个输入([abhik.ai][3])4. CLS Token 在 ViT 里面是什么Vision TransformerViT把图片切成 patch例如224×224 图片 切成 14×14 patch 196个patch每个 patch 变成一个 tokenPatch1 Patch2 ... Patch196输入 Transformer[CLS] Patch1 Patch2 ... Patch196共197 tokens经过 TransformerCLS Patch1 Patch2 ... Patch196最后CLS ↓ 分类头 ↓ 猫 / 狗 / 汽车([普渡大学数学系][2])5. CLS Token 本质是什么很多人误解CLS 是不是保存了图片/文本信息不是。更准确CLS 是一个可学习参数初始化类似[0.02, -0.13, 0.05 ...]训练过程中loss反向传播 ↓ 不断调整 ↓ 学会如何收集信息最终CLS向量 输入整体语义表示6. CLS 和普通 Token 有什么区别普通tokenCLS token来源输入数据模型参数数量很多通常1个代表局部信息整体信息是否训练embedding训练可学习参数用途提供细节分类汇总例如 ViTPatch token: 这个区域有什么 CLS token: 整张图是什么7. CLS Token 为什么放在第一个位置因为 Transformer 本身没有“第一个token特殊”的机制但是约定位置0 CLS方便output[:,0]直接取出来。例如 PyTorchxtransformer(x)cls_featurex[:,0]logitsclassifier(cls_feature)8. CLS Token 和池化有什么区别Mean Pooling例如Patch1 Patch2 Patch3 ↓ 平均 ↓ 图片表示固定规则所有patch权重一样CLSPatch1 Patch2 Patch3 ↓ Attention学习 ↓ CLS权重由模型决定例如猫图片 耳朵patch 重要 眼睛patch 重要 背景patch 不重要CLS 可以自动学习关注哪里 忽略哪里9. 现在的大模型还用 CLS 吗看任务。图像分类常用ViTDeiT使用 CLS。多模态模型例如CLIP视觉 Encoder 常见image patches ↓ CLS ↓ image embedding新模型趋势很多模型发现mean pooling ≈ CLS甚至有些任务mean pooling 更稳定所以ViT 原版CLS一些自监督视觉模型mean pooling都会出现。([AI Wiki][4])10. 面试一句话回答如果面试问什么是 CLS Token可以回答CLS Token 是 Transformer 中一个可学习的特殊 token它不对应真实输入而是在 Self-Attention 中与所有 token 交互用于聚合整个序列的全局信息。经过 Transformer 后CLS 的输出向量作为整个输入的表示通常送入分类头完成分类任务。BERT 最早引入该机制ViT 将其用于图像分类。一个直观比喻把 Transformer 想成开会员工1汇报A 员工2汇报B 员工3汇报C ↓ CLS Token 会议记录员 ↓ 听所有人的汇报 ↓ 最后总结 “这次会议主题是什么”所以CLS Token Transformer 里的“全局信息收集器”。参考···[1]: https://www.huggingface.co/transformers/v3.1.0/model_doc/bert.html?utm_sourcechatgpt.com “BERT — transformers 3.1.0 documentation”[2]: https://www.math.purdue.edu/~buzzard/notes/transformers/04_vit.html?utm_sourcechatgpt.com “Notebook 4: Vision Transformer (ViT)”[3]: https://www.abhik.ai/concepts/transformers/cls-token?utm_sourcechatgpt.com “CLS Token in Vision Transformers | Abhik Sarkar”[4]: https://aiwiki.ai/wiki/vision_transformer?utm_sourcechatgpt.com “Vision Transformer | AI Wiki”···
一文读懂 CLS Token(Classification Token)
发布时间:2026/7/10 19:30:50
一文读懂 CLS TokenClassification TokenCLS Token 是 Transformer尤其是BERT、ViT、CLIP 等模型里一个非常经典的设计。简单理解CLS Token 是一个“专门用来收集全局信息的可学习向量”最后它代表整个输入用于分类或其他任务。([Hugging Face][1])1. CLS 是什么CLS 全称Classification Token分类标记它最早出现在 BERT 中用于文本分类任务。BERT 会在句子开头插入一个特殊 token输入 [CLS] 我 喜欢 深度学习 [SEP] ↓ Transformer 输出 [CLS] 我 喜欢 深度学习 ↓ 用于分类其中[CLS]不是一个真实单词没有具体语义是模型训练出来的一个参数向量它类似“请把整句话的信息总结到我这里”([Hugging Face][1])2. 为什么 Transformer 需要 CLS先看 Transformer 的输出假设输入x1 x2 x3 x4经过 Transformerh1 h2 h3 h4输出还是4个token但是分类任务需要整个句子 → 一个类别例如这个电影很好看 ↓ 正面情感问题来了4个token怎么变成1个分类结果传统方法方法1平均池化(h1h2h3h4)/4 ↓ 一个向量 ↓ 分类类似 CNN 的 Global Average Pooling。方法2CLS Token人为增加一个 token输入[CLS] x1 x2 x3 x4Transformer 后hCLS h1 h2 h3 h4只取hCLS作为整个输入表示hCLS ↓ Linear ↓ 类别([普渡大学数学系][2])3. CLS Token 是怎么学习信息的关键在Self AttentionTransformer 每一层都会计算Query Key ValueCLS 也参与 Attention。例如输入[CLS] 猫 在 沙发 上第一层CLS | Attention | -------------------------------- | | | | 猫 在 沙发 上CLS 可以看到所有 tokenCLS f(猫, 在, 沙发, 上)经过几十层 TransformerCLS ↓ 越来越包含全局信息 ↓ 最后代表整个输入([abhik.ai][3])4. CLS Token 在 ViT 里面是什么Vision TransformerViT把图片切成 patch例如224×224 图片 切成 14×14 patch 196个patch每个 patch 变成一个 tokenPatch1 Patch2 ... Patch196输入 Transformer[CLS] Patch1 Patch2 ... Patch196共197 tokens经过 TransformerCLS Patch1 Patch2 ... Patch196最后CLS ↓ 分类头 ↓ 猫 / 狗 / 汽车([普渡大学数学系][2])5. CLS Token 本质是什么很多人误解CLS 是不是保存了图片/文本信息不是。更准确CLS 是一个可学习参数初始化类似[0.02, -0.13, 0.05 ...]训练过程中loss反向传播 ↓ 不断调整 ↓ 学会如何收集信息最终CLS向量 输入整体语义表示6. CLS 和普通 Token 有什么区别普通tokenCLS token来源输入数据模型参数数量很多通常1个代表局部信息整体信息是否训练embedding训练可学习参数用途提供细节分类汇总例如 ViTPatch token: 这个区域有什么 CLS token: 整张图是什么7. CLS Token 为什么放在第一个位置因为 Transformer 本身没有“第一个token特殊”的机制但是约定位置0 CLS方便output[:,0]直接取出来。例如 PyTorchxtransformer(x)cls_featurex[:,0]logitsclassifier(cls_feature)8. CLS Token 和池化有什么区别Mean Pooling例如Patch1 Patch2 Patch3 ↓ 平均 ↓ 图片表示固定规则所有patch权重一样CLSPatch1 Patch2 Patch3 ↓ Attention学习 ↓ CLS权重由模型决定例如猫图片 耳朵patch 重要 眼睛patch 重要 背景patch 不重要CLS 可以自动学习关注哪里 忽略哪里9. 现在的大模型还用 CLS 吗看任务。图像分类常用ViTDeiT使用 CLS。多模态模型例如CLIP视觉 Encoder 常见image patches ↓ CLS ↓ image embedding新模型趋势很多模型发现mean pooling ≈ CLS甚至有些任务mean pooling 更稳定所以ViT 原版CLS一些自监督视觉模型mean pooling都会出现。([AI Wiki][4])10. 面试一句话回答如果面试问什么是 CLS Token可以回答CLS Token 是 Transformer 中一个可学习的特殊 token它不对应真实输入而是在 Self-Attention 中与所有 token 交互用于聚合整个序列的全局信息。经过 Transformer 后CLS 的输出向量作为整个输入的表示通常送入分类头完成分类任务。BERT 最早引入该机制ViT 将其用于图像分类。一个直观比喻把 Transformer 想成开会员工1汇报A 员工2汇报B 员工3汇报C ↓ CLS Token 会议记录员 ↓ 听所有人的汇报 ↓ 最后总结 “这次会议主题是什么”所以CLS Token Transformer 里的“全局信息收集器”。参考···[1]: https://www.huggingface.co/transformers/v3.1.0/model_doc/bert.html?utm_sourcechatgpt.com “BERT — transformers 3.1.0 documentation”[2]: https://www.math.purdue.edu/~buzzard/notes/transformers/04_vit.html?utm_sourcechatgpt.com “Notebook 4: Vision Transformer (ViT)”[3]: https://www.abhik.ai/concepts/transformers/cls-token?utm_sourcechatgpt.com “CLS Token in Vision Transformers | Abhik Sarkar”[4]: https://aiwiki.ai/wiki/vision_transformer?utm_sourcechatgpt.com “Vision Transformer | AI Wiki”···