文献精读1:SpikTransformer
Spikformer
code source(pku):
GitHub - ZK-Zhou/spikformer: ICLR 2023, Spikformer: When Spiking Neural Network Meets Transformer
摘要
本文结合了两种生物学上的合理结构(biologically plausible structures
),尖峰神经网络(spiking neural network,snn
)和自注意力机制(self-attention mechanism
)。
SNN:
提供节能和事件驱动(event-driven
)的范式AT:
捕获特征依赖关系,实现更好的性能
基于两种特性的结合,提出了尖峰自注意力(Spiking Self Attention,SSA
)为基础的框架即尖峰神经网络(Spiking Transformer,Spikformer
),通过使用spike-form
查询/键/值(代替softmax)来对稀疏视觉特征进行建模。由于计算系数,避免了乘法,SSA
是高效的,具有低计算能耗。
实验结果表明,Spikformer
在神经形态和静态数据集上的图像分类由于先进的SNNs-like
框架。
名词解释
SOPs:
突触运算(synaptic operations
)

原始自注意力机制和尖峰注意力机制
介绍
尖峰自注意力(Spiking Self Attention,SSA
)机制通过引入尖峰序列建模相互依赖性(interdependence
)。
在SSA
中,尖峰自注意力机制主要有以下特点:
- 输入和值均为二值化形式,仅包含0和1(二进制)。与
VSA
的浮点输入和值相比包含较少的细粒度特征,浮点QKV
对尖峰序列的建模是冗余的。 - 非负特性。解耦了
SOFTMAX
的影响。【softmax
的作用可能仅仅是保证非负的意义,先前的TRM
变体如Performer
采用随机正特征来逼近softmax
,cosformer
使用RELU
和cos-func
代替了softmax
。】
基于上述特性,可以使用与门(AND
)和加法器来实现乘法。Spikformer
的架构如下图所示,其提高了在静态数据集和神经形态数据集上训练的性能。这是首次探索SNN
中的自注意力机制和直接训练的TRM
,本文的贡献体现如下方面:
- 我们设计了一个新的尖峰形式的自我注意命名为尖峰自我注意(
SSA
)的SNNs的属性。使用稀疏尖峰形式的QKV
而不使用softmax
,SSA
的计算避免了乘法运算,效率很高。 - 基于
SSA
,提出了尖峰TRANSFORMER
,并且使用直接训练的SNN
模型在ImageNet
上以4个时间步长实现了超过74%的准确率。所提出的架构优于静态和神经形态数据集上最先进的SNN
。

Spiformer架构图
【架构中包括了Spiking patchspliting(SPS)
模块,Spikformer
编码器和线性分类头(Linear classification head
)组成。LayerNorm(LN)
不适合用于SNN
,采用了BN
代替】
方法
相关工作
SNN:
区别于传统使用连续十进制数据(continuous decimal values
)传递信息的深度学习模型,SNN
使用离散尖峰序列来计算和传输信息。尖峰神经网络可以接收连续值(continuous values
),并将其转换为尖峰序列(spike sequences
)。【相关工作有Leaky Integrate-and-Fire,LIF neuron
和PLIF
】
有两种方法可以获得深度SNN
模型:ANN-TO-SNN
转换和直接训练(direct training
)。
ANN-TO-SNN
:可以通过使用尖峰神经元(sping neurous
)替换RELU
激活层,将高性能预训练的ANN
转换为SNN
。转换后的SNN
需要很大的时间步来准确近似RELU
激活,这会造成很大的延迟。- 直接训练:
SNN
在仿真时间步长上展开(unfold
),并以时间反向传播的方式训练?【尖峰神经元的事件触发机制是不可微的,代理梯度(surrogate gradient
)可用于反向传播、并采用隐式微分的平衡状态(implicit differentiation on the equailibrium state
)来训练SNN
】
目前人工神经网络的各类模型已被移植到SNN
上,但现前自注意力在SNN
上的研究仍为空白。有以下尝试性工作:
- 使用时间注意力(
temporal
)来减少冗余的时间步长。 - 使用
ANN-TRM
来处理尖峰数据(spike data
),尽管方法标题中提到了spiking trm
。 ANN-SNN
转换TRM
,仍然保持了原始的自注意力)—未证实SNN
的特性。
SNN
基本单元,即尖峰神经元(spike neuron
)会接收所得到的电流并累计模电位(membrane potential
),该膜电位用于和阈值比较以确定是否生成尖峰。本文使用了LIF
尖峰神经元,描述如下:
&H[t]=V[t-1]+\frac{1}{\tau}\left(X[t]-\left(V[t-1]-V_{r e s e t}\right)\right), \\
&S[t]=\Theta(H[t]-V_{t h}), \\
&V[t]=H[t](1-S[t])+V_{r e s e t}S[t],
\end{aligned}
\]
其中,\(\tau\)是膜时间常数(membrane time constant
),\(X[t]\)为时间步\(t\)的输入电流。当膜电位\(H(t)\)超过激发阈值(firing threshold
,\(V_{th}\)),尖峰神经元将触发尖峰\(S[t]\)。\(\Theta(v)\)是Heaviside
阶跃函数(\(v\ge0\)时为1,否则为0);\(V[t]\)表示触发事件之后的膜电位,如果不产生尖峰,则其等于\(H[t]\),否则会等于复位电位\(V_{reset}\)。
架构解释
总体框架
给定二维图像序列\(I\in \mathbb R^{T\times C\times H\times W}\),Spiking Patch Spliting(SPS)
模块将其线性投影到一个D
维尖峰状特征向量上,并将其分割为\(N\)个展开的尖峰形状块(flattened spike-form patches
)\(x\)。
浮点形式的位置嵌入(position embedding
)不可用于SNN
中,我们采用了条件位置嵌入生成器(conditional position embedding generator
)来生成尖峰形式的相对位置嵌入(relative position embedding,RPE
),并将RPE
添加到块序列\(x\)来得到\(X_0\)。条件位置编码生成器包含内核大小为\(3\)的二维卷积层(Conv2D
)、批归一化层(BN
)和尖峰神经元层(SN
)。
将\(X_0\)传递到\(L\)块Spikformer
编码器中,该编码器由尖峰自注意力(SSA
)和MLP
块组成,在SSA
和MLP
中应用了残差连接。
作为Spikformer
编码器块中的主要组件,SSA
提供了一种有效的方法来使用Spike-form
的QKV
,对图像的局部-全局信息进行建模,而无需softmax
。全局平均池化(global average pooling
)被用于从Spikformer
编码器处理的特征中输出D
维特征,该D
维特征会被送入全连接层分类头(classification head,CH
)来输出预测值Y
。
&x=\mathrm{SPS}\left(I\right),&& I\in\mathbb{R}^{T\times C\times H\times W},x\in\mathbb{R}^{T\times N\times D}, \\
&\mathrm{RPE}={\mathcal{S N}}(\mathrm{BN}((\mathrm{Conv2d}(x)))),&& \mathrm{RPE}\in\mathbb{R}^{T\times N\times D} \\
&X_{0}=x+\mathrm{RPE},&& X_0 \in \mathbb{R}^{T \times N \times D} \\
& \\
&X_l'=\mathrm{SSA}(X_{l-1}) + X_{l-1},&& X_l^{\prime}\in\mathbb{R}^{T\times N\times D},l=1...L \\
&X_{l}=\mathrm{MLP}(X_{l}^{\prime}) + X_{l}^{\prime},&& X_l\in\mathbb{R}^{T\times N\times D},l=1...L \\
&Y=\mathrm{CH}(\mathrm{GAP}(X_{L}))
\end{aligned}
\]
SPS
尖峰块分离模块(SPS
)用于将图像线性投影到\(D\)维度的尖峰形式特征(spike-form feature
),并将特征拆分为固定大小的块(patches
)。与Vision TRM
中的卷积骨干(convolution stem
)类似,本文在每个SPS
块中应用了卷积层来引入归纳偏置到Spikformer
中。给定图像序列\(I\in \mathbb R ^{T\times C\times H\times W}\):
\]
其中,Conv2D
和MP
表示步长1、核大小3的二维卷积层和最大池化,SPS
的数目可以大于1。当使用多个SPS
块时,卷积层的输出通道数目增加,并最终匹配块的嵌入维度(embedding dimension
)。给定嵌入维度D
和四块SPS
模块,四个卷积层中的输出通道数目为\(D/8,D/4,D/2,D\)。二维最大池化层被应用于在具有固定大小的SPS
块后对特征大小进行下采样。在SPS
处理后,I
被分割为图像块序列\(x\in \mathbb R^{T\times N \times D}\)。
尖峰自注意力机制
Vanllia Self-attention
难以应用于SNNs
中,主要存在以下两个原因:浮点矩阵乘法\(Q_F,K_F\)和softmax
函数(包含指数计算和除法运算,不符合SNN
的计算规则);VSA
序列长度的二次空间复杂度和时间复杂度不满足SNN
的高效计算要求。
首先通过可学习矩阵计算查询、键和值,然后通过不同的尖峰神经元层来成为尖峰序列(spikin sequences
):
\]
其中,\(Q,K,V\in \mathbb R^{T\times N \times D}\),本文认为注意力矩阵的计算过程应使用纯尖峰形式的Q
和K
(只包含0和1)。受原始自注意力启发,我们加入了缩放因子\(s\)来控制矩阵乘法结果的大值,\(s\)不影响SSA
的属性。spike-friendly SSA
定义如下:
&\mathrm{SSA}^{'}(Q,K,V)=\mathcal{S N}\left(QK^{\mathrm{T}}V*s\right) \\
&\mathrm{SSA}(Q,K,V)={\mathcal{S N}}(\mathrm{BN}(\mathrm{Linear}(\mathrm{SSA}^{'}(Q,K,V)))).
\end{aligned}
\]
在上式由尖峰神经元输出的\(Q,K,V\)为非负的,因此会生成非负注意力图。SSA
只聚合这些相关的特征,而忽略不相干的信息。因此,SSA
不需要通过softmax
来保证注意力图的非负性。此外,SSN
中输入\(X\)和自注意力值\(V\)为尖峰形式,包含有限信息;浮点形式的\(QK\)和注意力softmax
对于建模尖峰形式的\(X,V\)时冗余的,不能从\(X,V\)中获得更多信息,即SSA
比VSA
更适合于SNN
。
实验
实验数据集:使用静态数据集CIFAR
,ImageNet
和神经形态数据集(neuromorphic datasets
)如CIFAR10-DVS
,DVS128 Gesture
来评估Spikformer
。
静态数据集
ImageNet:使用130万张1000类的图像用于训练,5万张图像用于验证。我们在ImageNet上的模型的输入大小被设置为默认的224×224。优化器是AdamW,在310个训练阶段中,批量大小设置为128或256,余弦衰减学习率的初始值为0.0005。在ImageNet和CIFAR上训练时,缩放因子为0.125。四块SPS将图像分割为196个16×16的块。【训练实验中使用了标准数据增广方法,如随机增强,混合和剪切混合等。
CIFAR:提供50,000张训练图像和10,000张测试图像,分辨率为32×32。批量大小设置为128。四块SPS
(前两个块不包含最大池化层)将图像分割为64个4 × 4块。
文献精读1:SpikTransformer的更多相关文章
- 文献阅读方法 & 如何阅读英文文献 - 施一公(转)
附: 如何看懂英文文献?(好) 看需求,分层次 如何总结和整理学术文献? Mendeley & Everything 如何在pdf文献上做笔记?福晰阅读器 自己感悟: 一篇专业文献通常会有几页 ...
- 文献导读 | Single-Cell Sequencing of iPSC-Dopamine Neurons Reconstructs Disease Progression and Identifies HDAC4 as a Regulator of Parkinson Cell Phenotypes
文献编号:19Mar - 11 2019年04月23日三读,会其精髓: 相信这种方法的话,那么它的精髓是什么,如何整合出这个core gene set. 首先要考虑样本的选择,样本里是否存在明显的分层 ...
- 文献导读 | A Pan-Cancer Analysis of Enhancer Expression in Nearly 9000 Patient Samples
Chen, H., Li, C., Peng, X., Zhou, Z., Weinstein, J.N., Liang, H. and Cancer Genome Atlas Research Ne ...
- 自定义citationstyles(cls)文献引用模板
最近需要用国内某期刊的模板来写东西.所以需要自定义模板.国内的期刊主要遵循GB7714-2005的文献格式.对于经常使用Zotero.mendeley等免费的知识管理工具的同学,可以从这里获取cls模 ...
- javascripts学习笔记(五):用js来实现缩略语列表、文献来源链接和快捷键列表。
1 缩略语列表问题出发点:一段包含大量缩略语的文本,例如: <p> The <abbr title="World Wide Web Consortium"> ...
- JabRef 文献管理软件
JabRef 文献管理软件简明教程 大多只有使用LaTeX撰写科技论文的研究人员才能完全领略到JabRef的妙不可言,但随着对Word写作平台上BibTeX4Word插件的开发和便利应用,使用Word ...
- endnote设置文献第二行悬挂缩进办法
参考:http://blog.sina.com.cn/s/blog_62b13cf201014lfr.html 使用[endnote]插入文献后,如果文献稍长些,有第二行,第二行会顶格开始.并且这个 ...
- 空间插值文献阅读(Geostatistical approaches for incorporating elevation into the spatial interpolation of rainfall)
空间插值技术应用必读论文---P. Goovaerts, Geostatistical approaches for incorporating elevation into the spatial ...
- PayPal 高级工程总监:读完这 100 篇文献,就能成大数据高手
原文地址 开源(Open Source)对大数据影响,有二:一方面,在大数据技术变革之路上,开源在众人之力和众人之智推动下,摧枯拉朽,吐故纳新,扮演着非常重要的推动作用:另一方面,开源也给大数据技术构 ...
- 用户Word写毕业论文时的文献引用方法
经过网上搜索和自己实践,找到了一种不用第三方工具的文献管理方法 通过将文献定义的成书签的形式,插入到文献中,当文献编号发生变化时,只需进行更新域操作,就可实现文献编号的理新,下面介绍具体方法: 1.首 ...
随机推荐
- 随机服务系统模拟—R实现(三)
M/M/c随机服务系统的模拟 M/M/1服务系统:(1)队列长度没有限制:(2)顾客到达的时间间隔和服务时间均服从指数分布:(3)服务台数量为c. 一.M/M/c随机服务系统的模拟 在M/M/c排队系 ...
- Spring注解系列——@PropertySource
在Spring框架中@PropertySource注解是非常常用的一个注解,其主要作用是将外部化配置解析成key-value键值对"存入"Spring容器的Environment环 ...
- [Python]【Form Data vs Request Payload】之 python 爬虫如何实现 POST request payload 形式的请求
1 问题描述 欲使用Python的requests库(requests.session().request(...))实现对此Ajax的POST请求进行模拟实现. 但在chrome发现其请求的形式不一 ...
- 【JSOI2008】最大值
[JSOI2008]最大值 线段树裸题!动态RMQ. 这道题的操作是直接在序列末尾添加数值,所以连\(push_{down}\),以及建树什么的都不用了.. 这真是写过的最简短的一道\(seg_{tr ...
- 数组练习 fill sort
package day05; import java.util.Arrays; //fill sort equals public class testArrays { public static v ...
- DBA面试小结
问题描述:一个DBA在面试过程中,面试官最喜欢提问哪些问题,经过这些天的面试经历,总结了一些面试经验. 普通的外包可能只有一轮技术面试再加一轮人资面试,外包项目一般急需用人,所以面试流程基本简化,合适 ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...
- 帝国cms随机sql语句,mysql高效的随机查询
select * from AppleStorewhere rand()<0.015limit 100;
- 2022-07-27:小红拿到了一个长度为N的数组arr,她准备只进行一次修改, 可以将数组中任意一个数arr[i],修改为不大于P的正数(修改后的数必须和原数不同), 并使得所有数之和为X的倍数。
2022-07-27:小红拿到了一个长度为N的数组arr,她准备只进行一次修改, 可以将数组中任意一个数arr[i],修改为不大于P的正数(修改后的数必须和原数不同), 并使得所有数之和为X的倍数. ...
- 2021-06-03:布尔运算。给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。
2021-06-03:布尔运算.给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false).1 (true).& (AND). | (OR) 和 ^ (XOR) 符 ...