原文链接:CSDN-脉冲神经网络(SNN)论文阅读(三)-----高精度低时延的ANN转换SNN方法
Optimal ANN-SNN Conversion for High-accuracy and Ultra-low-latency Spiking Neural Networks
目录
说明
准备将自己读的一些和SNN(脉冲神经网络)相关的一些论文记录下来,方便自己以后回看也希望能够帮到有需要的人。 删除了文中一些自认为不重要的内容而用自己的话进行简洁描述(很少,比如引言的一些内容),其他部分尽量使用专业用语进行翻译,如果有什么出错或不恰当的地方希望各位批评指出。
相关信息
论文地址: Optimal ANN-SNN Conversion for High-accuracy and Ultra-low-latency Spiking Neural Networks 论文由北京大学(于肇飞组)研究人员发表于ICLR 2022,代码发布于here
主要贡献
论文首先分析了ANN转SNN过程中的一些转换误差,然后提出了quantization clip-floor-shift activation function去替换ANN中的ReLU激活函数,这样转换后的SNN能够在较低的time step内达到较高的精度。
ANN转SNN相关公式以及动机
- 符号定义:首先,定义
a
l
\boldsymbol{a^l}
al表示ANN中第
l
l
l层中所有神经元的输出,令
m
l
(
t
)
m^l(t)
ml(t)表示在t时刻(
t
i
m
e
s
t
e
p
=
t
time step=t
timestep=t时)脉冲神经元接收到前一层的输入后但并未发放脉冲前的膜电势,令
v
l
(
t
)
v^l(t)
vl(t)表示在t时刻(
t
i
m
e
s
t
e
p
=
t
time step=t
timestep=t时)脉冲神经元接收到前一层的输入并发放脉冲后的膜电势。
- 令
θ
l
\theta^l
θl表示脉冲神经元的放电阈值,
s
l
(
t
)
\boldsymbol{s}^l(t)
sl(t)表示在时刻
t
t
t第
l
l
l层中所有脉冲神经元发放的脉冲,假设神经元放电后传出的脉冲大小等于阈值
θ
l
\theta^l
θl,令
x
l
(
t
)
=
s
l
(
t
)
θ
l
x^l(t)=s^l(t) \theta^l
xl(t)=sl(t)θl表示第
l
l
l层的神经元向下一层传递的脉冲信息,
W
l
\boldsymbol{W}^l
Wl表示第
l
l
l层神经元和第
l
?
1
l-1
l?1层神经元之间的权值。
- ANN转SNN:在ANN中有
a
l
=
h
(
W
l
a
l
?
1
)
(1)
\boldsymbol{a^l} = h(\boldsymbol{W}^l\boldsymbol{a}^{l-1}) \tag{1}
al=h(Wlal?1)(1) ,其中
h
(
.
)
h(.)
h(.)表示ReLU激活函数。在SNN中有
v
l
(
t
)
?
v
l
(
t
?
1
)
=
W
l
x
l
?
1
(
t
)
?
s
l
(
t
)
θ
l
(2)
\boldsymbol{v}^l(t) - \boldsymbol{v}^l(t-1) = \boldsymbol{W}^l\boldsymbol{x}^{l-1}(t) - \boldsymbol{s}^l(t)\theta^l \tag{2}
vl(t)?vl(t?1)=Wlxl?1(t)?sl(t)θl(2) 通过将等式2从time step1累加到T,可以得到:
v
l
(
t
)
?
v
l
(
0
)
T
=
W
l
∑
i
=
1
T
x
l
?
1
(
i
)
T
?
∑
i
=
1
T
s
l
(
i
)
θ
l
T
(3)
\frac {\boldsymbol{v}^l(t) - \boldsymbol{v}^l(0)}{T} = \frac{\boldsymbol{W}^l \sum_{i=1}^T\boldsymbol{x}^{l-1}(i)}{T} - \frac{\sum_{i=1}^T\boldsymbol{s}^l(i)\theta^l}{T} \tag{3}
Tvl(t)?vl(0)?=TWl∑i=1T?xl?1(i)??T∑i=1T?sl(i)θl?(3) 使用
?
l
?
1
(
T
)
=
∑
i
=
1
T
x
l
?
1
(
i
)
T
\phi^{l-1}(T)=\frac{\sum_{i=1}^T \boldsymbol{x}^{l-1}(i)}{T}
?l?1(T)=T∑i=1T?xl?1(i)?表示从时刻0到T内的平均突触后电势,可以得到:
?
l
(
T
)
=
W
l
?
l
?
1
(
T
)
?
v
l
(
t
)
?
v
l
(
0
)
T
(4)
\phi^l(T) = \boldsymbol{W}^l \phi^{l-1}(T) - \frac {\boldsymbol{v}^l(t) - \boldsymbol{v}^l(0)}{T} \tag{4}
?l(T)=Wl?l?1(T)?Tvl(t)?vl(0)?(4) 等式4描述了相邻层之间脉冲神经元的平均突触后电势(
?
\phi
?)的关系。由于
?
(
T
)
≥
0
\phi(T) \geq 0
?(T)≥0,如果让初始膜电势
v
l
(
0
)
=
0
\boldsymbol{v}^l(0)=0
vl(0)=0并且忽略掉
v
l
(
T
)
T
\frac{\boldsymbol{v}^l(T)}{T}
Tvl(T)?,当令T(time step)足够大时等式4就几乎等同于等式1,即此时的SNN公式和ANN公式相等。然而太大的time step会导致很高的推理时间,从而影响SNN的实际应用,因此本文旨在在极低的延迟(time step)下实现高性能的ANN转换SNN。
转换误差分析
本部分详细分析ANN转换SNN中每一层存在的一些误差,此时假设ANN和SNN从前一层接收到的输入相等,即假设
a
l
?
1
=
?
l
?
1
\boldsymbol{a}^{l-1} = \boldsymbol{\phi}^{l-1}
al?1=?l?1,然后开始分析第
l
l
l层存在的误差。
- 为了简化后续公式,使用
z
l
=
W
l
?
l
?
1
(
T
)
=
W
l
a
l
?
1
\boldsymbol{z}^l = \boldsymbol{W}^l\boldsymbol{\phi}^{l-1}(T) = \boldsymbol{W}^l\boldsymbol{a}^{l-1}
zl=Wl?l?1(T)=Wlal?1表示第
l
?
1
l-1
l?1层传递至
l
l
l层的输入(ANN和SNN均如此)。
- 绝对转换误差 = 转换后的SNN的输出减去原始ANN的输出:
E
r
r
l
=
?
l
(
T
)
?
a
l
=
z
l
?
v
l
(
t
)
?
v
l
(
0
)
T
?
h
(
z
l
)
(5)
\boldsymbol{Err}^l = \boldsymbol{\phi}^l(T) - \boldsymbol{a}^l = \boldsymbol{z}^l - \frac {\boldsymbol{v}^l(t) - \boldsymbol{v}^l(0)}{T} - h(\boldsymbol{z}^l) \tag{5}
Errl=?l(T)?al=zl?Tvl(t)?vl(0)??h(zl)(5) 从等式5中可以看到如果
z
l
>
0
\boldsymbol{z}^l > 0
zl>0且
v
l
(
t
)
?
v
l
(
0
)
≠
0
\boldsymbol{v}^l(t) - \boldsymbol{v}^l(0) \ne 0
vl(t)?vl(0)?=0则转化误差就不为0。事实上,转换误差由以下三个因素造成:
- Clipping error:
由于脉冲神经元的阈值为
θ
l
\theta^l
θl,所以SNN的输出
?
l
(
T
)
=
∑
i
=
1
T
x
l
(
i
)
T
=
∑
i
=
1
T
s
l
(
i
)
T
θ
l
∈
[
0
,
θ
l
]
\phi^l(T)= \frac{\sum_{i=1}^T \boldsymbol{x}^l(i)}{T} = \frac{\sum_{i=1}^T \boldsymbol{s}^l(i)}{T}\theta^l \in [0,\theta^l]
?l(T)=T∑i=1T?xl(i)?=T∑i=1T?sl(i)?θl∈[0,θl],但是ANN的输出
a
l
∈
[
0
,
a
m
a
x
l
]
\boldsymbol{a}^l \in [0,\boldsymbol{a}^l_{max}]
al∈[0,amaxl?],其中
a
m
a
x
l
\boldsymbol{a}^l_{max}
amaxl?表示
a
l
\boldsymbol{a}^l
al的最大值。如图1a所示,
a
l
\boldsymbol{a}^l
al可以通过下式映射到
?
l
(
T
)
\phi^l(T)
?l(T):
?
l
(
T
)
=
c
l
i
p
(
θ
l
T
?
a
l
T
λ
l
?
,
0
,
θ
l
)
.
(6)
\phi^l(T) = clip(\frac{\theta^l}{T} \lfloor \frac{a^lT}{\lambda^l} \rfloor, 0, \theta^l). \tag{6}
?l(T)=clip(Tθl??λlalT??,0,θl).(6) 这里的
c
l
i
p
(
x
,
a
,
b
)
clip(x,a,b)
clip(x,a,b)函数表示当
x
<
a
x<a
x<a时结果为a,
x
>
b
x>b
x>b时结果为b,
x
∈
[
a
,
b
]
x \in [a,b]
x∈[a,b]时结果为x,
?
.
?
\lfloor . \rfloor
?.?表示向下取整,
λ
l
\lambda^l
λl表示将
a
l
a^l
al映射为
θ
l
\theta^l
θl的
a
l
a^l
al的值。在ANN中的位于
λ
l
\lambda^l
λl和
a
m
a
x
l
a^l_{max}
amaxl?之间的激活值都被映射为SNN中的
λ
l
\lambda^l
λl,这样造成的转换误差称为clipping error。 - Quantization error(flooring error):
输出脉冲
s
l
(
t
)
s^l(t)
sl(t)是离散事件,因此
?
l
(
T
)
\phi^l(T)
?l(T)在经过
θ
l
T
\frac {\theta^l}{T}
Tθl?量化后也是离散的,当把
a
l
a^l
al映射为
?
l
(
T
)
\phi^l(T)
?l(T)时,不可避免地存在着一些量化误差。例如图1a中所示,ANN中位于
[
λ
l
T
,
2
λ
l
T
]
[\frac{\lambda^l}{T}, \frac{2\lambda^l}{T}]
[Tλl?,T2λl?]之间的激活值在SNN中都被映射为
θ
l
T
\frac{\theta^l}{T}
Tθl?。 - Unevenness error:
不均匀误差是由于输入脉冲的不均匀造成的。同样的脉冲数量,如果脉冲到达的时间不一样,产生的输出也不一样,可能会产生比预期更多或更少的输出。 举个例子: 假设在源ANN中第
l
?
1
l-1
l?1层中的两个神经元和第
l
l
l层一个神经元的连接权值分别是2和-2,第
l
?
1
l-1
l?1层两个神经元的输出是[0.6, 0.4]。在转换后的SNN中假设
l
?
1
l-1
l?1层的两个脉冲神经元在5个time step内(time step=5)分别发放3个脉冲和2个脉冲,令阈值
θ
l
=
1
\theta^l =1
θl=1。因此有
?
l
?
1
(
T
)
=
[
0.6
,
0.4
]
\phi^{l-1}(T) = [0.6, 0.4]
?l?1(T)=[0.6,0.4]。即使
?
l
?
1
(
T
)
=
a
l
?
1
\phi^{l-1}(T) = a^{l-1}
?l?1(T)=al?1且ANN和SNN中的权值相等
?
l
(
T
)
\phi^l(T)
?l(T)也会随着脉冲到达的时间不同而变化。ANN中的
a
l
=
[
2
,
?
1
]
[
0.6
,
0.4
]
T
=
0.4
a^l = [2, -1][0.6, 0.4]^T = 0.4
al=[2,?1][0.6,0.4]T=0.4,对于SNN有如图1b-d所示的三种情况。 如果两个权值为2和-2的神经元发放脉冲时间分别为
t
=
1
,
3
,
5
t=1,3,5
t=1,3,5和
t
=
2
,
4
t=2,4
t=2,4,突触后神经元将会在
t
=
1
,
3
t=1,3
t=1,3时刻发放脉冲,且
?
l
(
T
)
=
0.4
=
a
l
\phi^l(T)=0.4=a^l
?l(T)=0.4=al。然而如果两个神经元发放脉冲时间分别为
t
=
1
,
2
,
3
t=1,2,3
t=1,2,3和
t
=
4
,
5
t=4,5
t=4,5,突触后神经元将会在
t
=
1
,
2
,
3
,
4
t=1,2,3,4
t=1,2,3,4时刻发放四个脉冲且
?
l
(
T
)
=
0.8
>
a
l
\phi^l(T)=0.8 > a^l
?l(T)=0.8>al;如果两个神经元发放脉冲时间分别为
t
=
3
,
4
,
5
t=3,4,5
t=3,4,5和
t
=
1
,
2
t=1,2
t=1,2,突触后神经元将只会在
t
=
5
t=5
t=5时刻发放一个脉冲且
?
l
(
T
)
=
0.2
<
a
l
\phi^l(T)=0.2 < a^l
?l(T)=0.2<al。
上述三种误差中存在一些相互依赖关系,特别是如果
v
l
(
T
)
∈
[
0
,
θ
l
]
v^l(T) \in [0, \theta^l]
vl(T)∈[0,θl],不均匀误差会退化为量化误差,因此假设
v
l
(
T
)
∈
[
0
,
θ
l
]
v^l(T) \in [0, \theta^l]
vl(T)∈[0,θl]时可以忽略掉不均匀误差的影响从而估计SNN的激活函数。在转换后的SNN中估计输出值
?
l
(
T
)
\phi^l(T)
?l(T)可以使用
c
l
i
p
(
.
)
clip(.)
clip(.)和
f
l
o
o
r
(
.
)
floor(.)
floor(.)函数来表示:
?
l
(
T
)
≈
θ
l
c
l
i
p
(
1
T
?
z
l
T
+
v
l
(
0
)
θ
l
?
,
0
,
1
)
.
(7)
\phi^l(T) \approx \theta^lclip(\frac{1}{T} \lfloor \frac{z^lT+v^l(0)}{\theta^l} \rfloor, 0, 1). \tag{7}
?l(T)≈θlclip(T1??θlzlT+vl(0)??,0,1).(7) 详细推导过程在论文的附录中,感兴趣的朋友可以去查看原始论文。 根据等式7,estimated conversion error
E
r
r
~
l
\widetilde{Err}^l
Err
l可以由下式得出:
E
r
r
~
l
=
θ
l
c
l
i
p
(
1
T
?
z
l
T
+
v
l
(
0
)
θ
l
?
,
0
,
1
)
?
h
(
z
l
)
≈
E
r
r
l
.
(8)
\widetilde{Err}^l = \theta^lclip(\frac{1}{T} \lfloor \frac{z^lT+v^l(0)}{\theta^l} \rfloor, 0, 1) - h(z^l) \approx Err^l. \tag{8}
Err
l=θlclip(T1??θlzlT+vl(0)??,0,1)?h(zl)≈Errl.(8)
优化的ANN转换SNN
quantization clip-floor activation function
由等式8可以得出,如果将ANN中的ReLU函数替换为带有一定量化步长L的clip-floor函数是不是能够消除掉在time step T=L时刻的转换误差呢?从而能够解决掉低时延的性能退化问题。 由上述思路,论文作者提出了quantization clip-floor activation function去训练ANN:
a
l
=
h
(
z
l
)
=
λ
l
c
l
i
p
(
1
L
?
z
l
L
λ
l
?
,
0
,
1
)
(9)
a^l = h(z^l) = \lambda^l clip(\frac{1}{L} \lfloor \frac{z^lL}{\lambda^l} \rfloor,0, 1) \tag{9}
al=h(zl)=λlclip(L1??λlzlL??,0,1)(9) 其中的超参数
L
L
L表示ANN中的量化步长(quantization step),而
λ
l
\lambda^l
λl是可训练的参数,决定着将ANN中
a
l
a^l
al映射到SNN中
?
l
(
T
)
\phi^l(T)
?l(T)的最大值对应的最大值(比较绕,其实说白了就是
f
(
λ
l
)
=
?
l
(
T
)
m
a
x
f(\lambda^l) = \phi^l(T)_{max}
f(λl)=?l(T)max?)。使用这样一个新的激活函数,满足以下几个条件时ANN和转换后的SNN之间的转换误差为0:
- 条件:量化步长L=time step T;
θ
l
=
λ
l
\theta^l = \lambda^l
θl=λl;
v
l
(
0
)
=
0
v^l(0)=0
vl(0)=0
- 缺陷:在
L
≠
T
L \neq T
L?=T时误差不一定为0。
进一步改进的quantization clip-floor-shift activation function
基于以上缺陷,论文作者又提出了进一步改进的quantization clip-floor-shift activation function:
a
l
=
h
^
(
z
l
)
=
λ
l
c
l
i
p
(
1
L
?
z
l
L
λ
l
+
φ
?
,
0
,
1
)
.
(10)
a^l = \hat h(z^l) = \lambda^lclip(\frac{1}{L} \lfloor \frac{z^lL}{\lambda^l}+ \varphi \rfloor,0, 1). \tag{10}
al=h^(zl)=λlclip(L1??λlzlL?+φ?,0,1).(10) 和式9相比,式10多了一个超参数向量
φ
\varphi
φ来控制激活函数的偏移(shift)。当
L
≠
T
L \neq T
L?=T时虽然不能保证转换误差为0,但是可以估计转换误差的期望值。相似于Deng & Gu, 2020,这里同样假设
z
i
l
z^l_i
zil?服从一定的均匀分布,当满足以下条件时,可以证明当源ANN中的
φ
=
1
2
\varphi= \frac{1}{2}
φ=21?时对于任意的T和L,转换误差的期望值接近于0。
- 条件:
θ
l
=
λ
l
\theta^l = \lambda^l
θl=λl;
v
l
(
0
)
=
θ
l
φ
v^l(0)=\theta^l \varphi
vl(0)=θlφ。
证明过程在论文附录中给出,感兴趣的朋友可以去查看原始论文。 结果表示当
φ
=
1
2
\varphi= \frac{1}{2}
φ=21?时即使
L
≠
T
L \neq T
L?=T平均转换误差也接近于0,从而能够在极低的time step内实现高性能的转换后的SNN。
用于带有quantization clip-floor-shift activation function的训练算法
训练带有quantization clip-floor-shift activation function的ANN也是一个问题。在训练时,论文作者采用straight-through estimatorBengio et al., 2013作为floor函数的导数,即令
d
?
x
?
d
x
=
1
\frac{d\lfloor x \rfloor}{dx} = 1
dxd?x??=1。整体的导数规则如下式17所示: 其中的
z
i
l
z^l_i
zil?表示
z
l
z^l
zl的第
i
i
i个元素。在训练ANN中使用该梯度结合随机梯度下降算法优化即可。
实验部分
作者使用VGG-16、ResNet-18、ResNet-20等网络结构在CIFAR-10、CIFAR-100和ImageNet数据集上做了实验证明了该方法的优越性。另外表示随着L的增加,转换后的SNN在time step较小时的精度也会随之下降,即L过大过小都不行,推荐的L为4或8.
部分参考文献
本文由CSDN-lan人啊原创,转载请注明!
|