self- attention
自注意力机制的核心思想是让序列中的每个元素都与其他元素进行比较,以确定它们之间的关联程度,从而能够捕捉到长距离依赖关系。具体实现过程包括输入表示;计算Q,K,V;计算注意力权重;加权求和。
Query、Key 和 Value 是核心的概念,它们在计算注意力权重和生成输出向量时起着关键作用。以下是它们各自的作用:
- Query (查询向量):
• Query 是用来查询信息的向量,它代表当前正在处理的输入序列中的一个词或者一个位置。每一个 Query 向量对应一个输入向量,它会用于计算当前词或位置与其他所有词或位置的相关性。
• 在自注意力机制中,每个输入都产生一个 Query 向量,这些向量会与所有 Key 向量进行匹配。
- Key (键向量):
• Key 是用来表示信息的向量,它对应于输入序列中的每一个词或位置,表示这个词或位置在序列中的特征。
• Query 与 Key 之间的点积(或其他相似性度量)用来衡量查询和键之间的相关性。这个相关性决定了某个位置的词在计算注意力时的权重。
- Value (值向量):
• Value 是包含实际信息的向量,它也对应于输入序列中的每一个词或位置。
• 根据 Query 和 Key 之间的匹配结果(即注意力权重),每个 Value 向量会被加权并组合起来,最终生成自注意力机制的输出。
🌰:
假设我们有一个简单的句子:
“The cat sat on the mat.”
每个单词被表示为一个 3 维向量。这些向量将分别通过线性变换生成 Query、Key 和 Value 向量。
• The 被表示为一个向量 [1, 0, 0]
• cat 被表示为一个向量 [0, 1, 0]
• sat 被表示为一个向量 [0, 0, 1]
• on 被表示为一个向量 [1, 1, 0]
• the 被表示为一个向量 [0, 1, 1]
• mat 被表示为一个向量 [1, 0, 1]
每个词的 Query、Key 和 Value 向量是通过各自的线性变换生成的。比如:
假设 Query、Key 和 Value 的线性变换矩阵为:
然后我们通过这些矩阵来计算每个单词的 Query、Key 和 Value 向量。例如:
• 对于单词 The,Query 向量为 Q_The = W_Q * [1, 0, 0] = [1, 0, 0]
• Key 向量为 K_The = W_K * [1, 0, 0] = [0, 1, 0]
• Value 向量为 V_The = W_V * [1, 0, 0] = [1, 0, 1]
注意力权重
对于 The 这个词的 Query 向量 [1, 0, 0],我们计算它与句子中每个单词的 Key 向量的点积,得到注意力分数:
• The 对 The 的注意力分数:[1, 0, 0] * [0, 1, 0] = 0
• The 对 cat 的注意力分数:[1, 0, 0] * [1, 0, 0] = 1
• The 对 sat 的注意力分数:[1, 0, 0] * [0, 0, 1] = 0
• The 对 on 的注意力分数:[1, 0, 0] * [1, 1, 0] = 1
• The 对 the 的注意力分数:[1, 0, 0] * [0, 1, 1] = 0
• The 对 mat 的注意力分数:[1, 0, 0] * [1, 0, 1] = 1
归一化
softmax 归一化后的权重为:
• The 对 cat 的权重:0.3
• The 对 on 的权重:0.3
• The 对 mat 的权重:0.3
• 其他单词的权重:0.0
输出向量 = 0.3 * [0, 1, 0] + 0.3 * [1, 1, 0] + 0.3 * [1, 0, 1] 计算后得到的输出向量为 [0.6, 0.6, 0.3]
输出向量用来表示该词在句中和其他词之间的关系,便于理解其在句中意思,在不同句中一个词通常代表不同的翻译,通过输出向量可以定位出该词在维度中的意思
SSA类比于self-attention为每个补丁计算出输出向量,在使用MLP进行更高维的理解。
Spikformer的架构包括以下几个关键组件:
- Spiking Patch Splitting (SPS):将图像序列线性投影到脉冲形状特征向量,并将其分割为多个脉冲形状补丁。(脉冲形状特征向量(Spiking Shape Feature Vector)是Spikformer架构中使用的一个概念,它指的是将输入的图像数据转换为一种适合脉冲神经网络(SNN)处理的格式。)
- 条件位置嵌入生成器:生成脉冲形式的相对位置嵌入(RPE),并将其添加到补丁序列。
- Spikformer编码器:由Spiking Self Attention(SSA)和多层感知器(MLP)块组成,采用残差连接。
3.2 脉冲贴片分割 (Spiking Patch Splitting)
SPS模块使用2D卷积层和最大池化层将图像序列转换为脉冲形状的补丁序列。
3.3 脉冲自注意力机制 (Spiking Self Attention Mechanism)
SSA是Spikformer的核心,它使用脉冲形式的Query、Key和Value来建模稀疏视觉特征,避免了乘法运算,从而提高了计算效率和能耗。
4. 实验 (Experiments)
作者在静态数据集(如CIFAR和ImageNet)和神经形态数据集上进行了实验,评估了Spikformer的性能。实验结果表明,Spikformer在图像分类任务上优于现有的SNN模型。
**脉冲形状补丁(Spiking Shape Patch)**是Spikformer架构中使用的一个概念,它是图像数据在经过Spiking Patch Splitting(SPS)模块处理后得到的一种数据表示形式。脉冲形状补丁具有以下特点:
- 线性投影:原始图像数据首先被线性投影到一个高维空间,这个空间的维度通常由模型的设计参数决定。
- 脉冲化:投影后的特征被转换为脉冲形式,即特征向量的每个元素只包含0和1,这种表示方式模仿了生物神经元的发放行为。
- 分割:高维脉冲特征被进一步分割成较小的单元,这些单元称为“补丁”。每个补丁包含图像的一部分信息,并且以脉冲序列的形式表示。
- 固定大小:每个脉冲形状补丁具有固定的大小,这意味着无论原始图像的大小如何,最终都会被分割成相同大小的补丁。
- 序列化:每个脉冲形状补丁可以被视为一个序列,其中包含了该补丁区域的脉冲信息。这些序列随后可以被用于SNN的进一步处理。
- 适应SNN特性:脉冲形状补丁的设计适应了SNN的特性,即神经元通过发放脉冲来处理和传递信息。这种表示方式允许SNN以一种生物学上合理的方式处理视觉数据。
相对位置嵌入(Relative Position Embedding,简称RPE)是一种在处理序列数据时引入位置信息的方法,它在许多序列模型中被用来帮助模型理解序列中各个元素之间的相对位置关系。这种嵌入特别适用于那些不依赖于固定序列长度或无法直接利用绝对位置信息的模型。
在Spikformer架构中,相对位置嵌入被用来增强脉冲形状补丁(Spiking Shape Patch)的表示,使其包含空间位置信息。以下是相对位置嵌入的一些关键特点:
- 相对性:与传统的绝对位置嵌入(每个位置有一个固定的嵌入向量)不同,相对位置嵌入考虑的是序列中元素之间的相对距离或偏移。
- 动态性:相对位置嵌入可以根据序列中元素之间的实际相对位置动态生成,这使得模型能够适应不同长度的序列。
- 计算效率:由于相对位置嵌入不需要为每个可能的位置维护一个单独的嵌入向量,因此在计算上可能更加高效。
- 适应性:在Spikformer中,相对位置嵌入使得模型能够更好地理解图像中不同区域之间的关系,这对于图像分类和其他视觉任务非常重要。
- 生物学合理性:在脉冲神经网络(SNN)的背景下,相对位置嵌入可能还具有生物学上的合理性,因为它模仿了生物神经系统中神经元如何根据相对位置处理信息的方式。
- 整合到模型中:在Spikformer中,相对位置嵌入通常通过特定的生成器模块生成,并与脉冲形状补丁的序列结合,为模型提供关于图像中不同补丁之间空间关系的额外信息。
对于变长信息引入的位置信息,用来帮助理解元素间位置关