脉冲神经网络(SNN)论文阅读(三)-----高精度低时延的ANN转换SNN方法

原文链接:CSDN-脉冲神经网络(SNN)论文阅读(三)-----高精度低时延的ANN转换SNN方法

目录

说明

准备将自己读的一些和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 l1层神经元之间的权值。
  • 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(Wlal1)(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(t1)=Wlxl1(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)=TWli=1Txl1(i)Ti=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} ϕl1(T)=Ti=1Txl1(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ϕl1(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} al1=ϕl1,然后开始分析第 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ϕl1(T)=Wlal1表示第 l − 1 l-1 l1层传递至 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=zlTvl(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。事实上,转换误差由以下三个因素造成:
  1. 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)=Ti=1Txl(i)=Ti=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 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
    图1
  2. 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
  3. Unevenness error:
    不均匀误差是由于输入脉冲的不均匀造成的。同样的脉冲数量,如果脉冲到达的时间不一样,产生的输出也不一样,可能会产生比预期更多或更少的输出。
    举个例子:
    假设在源ANN中第 l − 1 l-1 l1层中的两个神经元和第 l l l层一个神经元的连接权值分别是2和-2,第 l − 1 l-1 l1层两个神经元的输出是[0.6, 0.4]。在转换后的SNN中假设 l − 1 l-1 l1层的两个脉冲神经元在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] ϕl1(T)=[0.6,0.4]。即使 ϕ l − 1 ( T ) = a l − 1 \phi^{l-1}(T) = a^{l-1} ϕl1(T)=al1且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, 20201,这里同样假设 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., 20132作为floor函数的导数,即令 d ⌊ x ⌋ d x = 1 \frac{d\lfloor x \rfloor}{dx} = 1 dxdx=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人啊原创,转载请注明!


  1. Shikuang Deng and Shi Gu. Optimal conversion of conventional artificial neural networks to spiking neural networks. In International Conference on Learning Representations, 2020. ↩︎

  2. Yoshua Bengio, Nicholas L´eonard, and Aaron Courville. Estimating or propagating gradients through stochastic neurons for conditional computation. arXiv preprint arXiv:1308.3432, 2013. ↩︎

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值