[CLS] Token 在 ViT(Vision Transformer)中的作用与实现

news2025/3/26 10:36:22

[CLS] Token 在 ViT(Vision Transformer)中的作用与实现

1. 什么是 [CLS] Token?

[CLS](classification token)是Transformer模型中一个可学习的嵌入向量,最初在 BERT(Bidirectional Encoder Representations from Transformers)中提出,用于文本分类任务。在 ViT(Vision Transformer)中,[CLS] Token 也被用来汇总图像全局特征,最终用于分类或其他任务。


2. [CLS] Token 在 ViT 中的作用

在 ViT 中,输入图像被划分为多个固定大小的 Patch(如 16×1616 \times 16 像素),然后每个 Patch 被投影到一个 DD 维的特征向量空间,形成 Token 序列。为了让模型学习到全局信息,ViT 在输入序列的最前面添加一个特殊的 [CLS] Token:

X' = [\text{CLS}; X_1; X_2; \dots; X_N]

其中:

  • CLS:一个可学习的 DD 维向量,与 Patch Tokens 具有相同的维度。

  • X_i:每个 Patch 经过线性投影后的特征向量。

在 Transformer 计算过程中,所有 Token 之间会进行自注意力计算,这样 [CLS] Token 就能聚合所有 Patch Token 的信息。最终,ViT 只使用 [CLS] Token 的最终表示来进行图像分类。


3. [CLS] Token 计算流程

ViT 处理 [CLS] Token 的主要流程如下:

  1. 输入图像划分 Patch

    • 设输入图像大小为 H \times W(如 224×224)。

    • 设 Patch 大小为P \times P(如 16×16)。

    • 图像被划分成 N = \frac{H \times W}{P^2}个 Patch。

  2. 线性投影到特征空间

    • 每个 Patch 被展平为 P2P^2 维向量,然后通过一个可训练的线性变换投影到 DD 维:

      X_i = W_p \cdot \text{Flatten}(\text{Patch}_i) + b_p, \quad X_i \in \mathbb{R}^D
    • 这里 W_p 是可训练的权重矩阵。

  3. 添加 [CLS] Token

    • 初始化一个可学习的 [CLS] 向量:

      \text{CLS} \in \mathbb{R}^D
    • 并将其拼接到 Patch Tokens 的前面,形成输入序列:

      X' = [\text{CLS}; X_1; X_2; \dots; X_N]
  4. 位置编码(Positional Encoding)

    • 由于 Transformer 不能感知位置信息,ViT 为每个 Token 添加可学习的位置编码:

      Z_0 = X' + E_{pos}
    • 其中 E_{pos}是可训练的位置编码矩阵。

  5. Transformer 计算

    • 经过多层 Transformer(注意力计算 + FFN),输出 [CLS] Token 的最终表示:

      Z_L = \text{Transformer}(Z_0)
    • 其中 LL 是 Transformer 层数。

  6. 使用 [CLS] Token 进行分类

    • 最后,[CLS] Token 的表示会输入到一个 MLP(多层感知机)分类器:

      y = \text{MLP} (Z_L^{CLS})
    • 其中 Z_L^{CLS} 是 Transformer 最后一个 Block 输出的 [CLS] Token 表示。


4. 为什么 [CLS] Token 能代表全局信息?

Transformer 通过自注意力机制(Self-Attention)让 [CLS] Token 逐步聚合所有 Patch Token 的信息:

\text{Attention}(Q, K, V) = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) V

  • 在每一层 Transformer 中,[CLS] Token 作为 Query,与所有 Token(包括自己)进行注意力计算。

  • 由于 [CLS] Token 参与了多层 Transformer 的注意力计算,它会学习到整个图像的全局信息。

  • 最终,经过多层 Transformer 计算后,[CLS] Token 变成了图像的全局表示,可用于分类任务。


5. ViT 中 [CLS] Token 的优化与变种

虽然 [CLS] Token 在 ViT 中效果不错,但有些研究提出了改进方案:

  1. GAP(Global Average Pooling)替代 [CLS] Token

    • 研究发现,直接对所有 Patch Token 做平均池化(Global Average Pooling, GAP)可以代替 [CLS] Token,减少参数并提高分类精度:

      Z_L^{GAP} = \frac{1}{N} \sum_{i=1}^{N} Z_L^i
    • 这种方法能提高模型的稳定性,同时减少 [CLS] Token 可能带来的信息损失。

  2. Distilled Token(在 DeiT 模型中)

    • 在 DeiT(Data-efficient Image Transformer)中,除了标准的 [CLS] Token,还引入了一个蒸馏 Token(Distillation Token),用于知识蒸馏:

      X' = [\text{CLS}; \text{DISTILL}; X_1; X_2; \dots; X_N]
    • 这个蒸馏 Token 用于模仿 CNN 预训练教师模型的行为,提高训练效率。

  3. Hybrid ViT(使用 CNN 提取特征)

    • 研究发现,ViT 仅靠 [CLS] Token 可能会忽略局部细节信息。因此,一些变种如 Hybrid ViT 结合了 CNN 进行特征提取,再输入 Transformer,提高了细粒度信息的捕获能力。


6. 总结
  • [CLS] Token 是 ViT 中用于分类的全局表征向量,其通过 Transformer 自注意力机制聚合整个图像的信息。

  • 计算流程

    1. 输入图像划分 Patch 并投影到高维特征空间。

    2. 在序列开头添加 [CLS] Token,作为全局特征的代理。

    3. 添加位置编码 以维持位置信息。

    4. Transformer 计算,[CLS] Token 逐步聚合全局信息。

    5. 最终 [CLS] Token 通过 MLP 进行分类

  • 优化方法

    • 使用 GAP 代替 [CLS] Token 提高稳定性。

    • 采用 Distilled Token 进行知识蒸馏(如 DeiT)。

    • 结合 CNN 提取局部特征(Hybrid ViT)。

[CLS] Token 在 ViT 中是关键组件,决定了模型的分类性能,但研究也表明它并非唯一的最佳选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于网启PXE服务器的批量定制系统平台

项目概述 1.需求 公司新购了一批服务器和台式机,需要为台式机和服务器安装系统,一部分需要安装国产OpenEuler,一部分要求安装CentOS 7.9,同时也要满足定制化需求,即按要求分区安装相应软件。 2.使用开源软件 &…

在本地Windows机器加载大模型并生成内容

本篇演示在本地机器下载和加载大模型并获取AI产生的内容。简单起见,使用的大模型是Qwen2.5-0.5B-Instruct,整个模型的所有文件不到1G。 Qwen2.5-0.5B-Instruct 是阿里巴巴云 QWen 团队基于 Transformer 架构开发的轻量级指令调优语言模型,专…

热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二

找树左下角的值 本题递归偏难,反而迭代简单属于模板题, 两种方法掌握一下 题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 我们来分析一下题目&#…

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构(800字) 1. OSI参考模型 七层结构:物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能: 物理层:比特流传输(如RJ45、光纤接口) 数据链路层&…

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

文章目录 一、Batch normalization 理论与应用1. 理论解释2. 数值例子 二、Layer normalization 理论与应用1. 理论解释2. 数值例子 三、Layer Normalization 和 Batch Normalization 的区别四、《Transformers without Normalization》笔记 一、Batch normalization 理论与应用…

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…

c++进阶--哈希表的实现

大家好,今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数:1.5.1 除法散列法/除留余数法 1.…

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道,托管基于云的应用程序的成本会随着用户量的增加而降低,因此必须专注于订阅者的快速增长,以保持竞争力并降低成本。 许多 CMO…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪,和常见的“小巧玲珑”的行车记录仪不同,一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…

数据库中不存在该字段

mybatisplus 定义的类中某些字段是数据库里面没有的,我们可用tablefield(existfalse)来注解,演示如下:

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中,文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式,还是硬盘中混乱的音频、视频、文档等资源,都急需一种高效的整理方法。文件分类助手应运而生,它是一款文件管理工具,能够快速、智…

关于瑞芯微开发工具(RKDevTool)刷机下载Boot失败原因的研究

昨天发了文章《网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试》,其中有关于刷机各种问题的一些解决方法。 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试-CSDN博客文章浏览阅…

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程) 一、获取网页数据请求流程 二、目标网址、cookie生成(逐步分析) 1、目标网址:aHR0cHM6Ly9zdWdoLnN6dS5lZHUuY24vSHRtbC9OZXdzL0NvbHVtbnMvNy9JbmRleC5odG1s 2、快速定位入口方法 1、通过脚本监听、hook_cookie等操作可…

Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)

1 主要目的 在Excel中,经常会遇到需要制作多级联动下拉菜单的情况,要求单元格内填写的内容只能从指定的多个选项中进行选择,并且需要设置多级目录,其中下级目录的选项内容要根据上级目录的填写内容确定,如下图所示&am…

excalidraw画图工具——背景画布有无格子设置

服啦找了大半天,愣是没找到 toggle grid : 切换格子… Excalidraw的背景格子 只要右键,将这个勾取消就好了?

计算机组成原理———I\O系统精讲<1>

本篇文章主要介绍输入输出系统的发展概况 一.输入输出系统的发展概况 1.早期阶段 该阶段的特点是I/O设备与主存交换信息都必须通过CPU 当时的I/O设备有如下几个特点: (1)每个I\O设备都必须配有一套独立的逻辑电路与CPU相连,用来…

ENSP学习day9

ACL访问控制列表实验 ACL(Access Control List,访问控制列表)是一种用于控制用户或系统对资源(如文件、文件夹、网络等)访问权限的机制。通过ACL,系统管理员可以定义哪些用户或系统可以访问特定资源&#x…

【C++动态规划 数学】1039. 多边形三角剖分的最低得分|2130

本文涉及知识点 C动态规划 数学 LeetCode1039. 多边形三角剖分的最低得分 你有一个凸的 n 边形,其每个顶点都有一个整数值。给定一个整数数组 values ,其中 values[i] 是第 i 个顶点的值(即 顺时针顺序 )。 假设将多边形 剖分 …

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的,可以追加元素,在追加时可能会使切片的容量增大,所以可以将切片理解成 "动态数组",但是,它不是数组,而是构建在数组基础上的更高级的数据结构。…

【Linux网络-多路转接select】

代码:https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的程序会停在select这里等待,直到被…