原文链接:CSDN-脉冲神经网络(SNN)论文阅读(三)-----高精度低时延的ANN转换SNN方法
Optimal ANN-SNN Conversion for High-accuracy and Ultra-low-latency Spiking Neural Networks
- 目录
-
- 说明
- 相关信息
- 主要贡献
- ANN转SNN相关公式以及动机
- 转换误差分析
- 优化的ANN转换SNN
-
- quantization clip-floor activation function
- 进一步改进的quantization clip-floor-shift activation function
- 用于带有quantization clip-floor-shift activation function的训练算法
- 实验部分
- 部分参考文献
目录
说明
准备将自己读的一些和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=1Txl−1(i)−T∑i=1Tsl(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=1Txl−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=1Txl(i)=T∑i=1Tsl(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 xx<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人啊原创,转载请注明!