原文链接: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相关公式以及动机

  • 符号定义:首先,定义al\boldsymbol{a^l}al表示ANN中第lll层中所有神经元的输出,令ml(t)m^l(t)ml(t)表示在t时刻(timestep=ttime step=ttimestep=t时)脉冲神经元接收到前一层的输入后但并未发放脉冲前的膜电势,令vl(t)v^l(t)vl(t)表示在t时刻(timestep=ttime step=ttimestep=t时)脉冲神经元接收到前一层的输入并发放脉冲后的膜电势。
  • 令θl\theta^lθl表示脉冲神经元的放电阈值,sl(t)\boldsymbol{s}^l(t)sl(t)表示在时刻ttt第lll层中所有脉冲神经元发放的脉冲,假设神经元放电后传出的脉冲大小等于阈值θl\theta^lθl,令xl(t)=sl(t)θlx^l(t)=s^l(t) \theta^lxl(t)=sl(t)θl表示第lll层的神经元向下一层传递的脉冲信息,Wl\boldsymbol{W}^lWl表示第lll层神经元和第l−1l-1l−1层神经元之间的权值。
  • ANN转SNN:在ANN中有
    al=h(Wlal−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中有
    vl(t)−vl(t−1)=Wlxl−1(t)−sl(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,可以得到:
    vl(t)−vl(0)T=Wl∑i=1Txl−1(i)T−∑i=1Tsl(i)θlT(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=1Txl−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)=Wlϕl−1(T)−vl(t)−vl(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,如果让初始膜电势vl(0)=0\boldsymbol{v}^l(0)=0vl(0)=0并且忽略掉vl(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从前一层接收到的输入相等,即假设al−1=ϕl−1\boldsymbol{a}^{l-1} = \boldsymbol{\phi}^{l-1}al−1=ϕl−1,然后开始分析第lll层存在的误差。

  • 为了简化后续公式,使用zl=Wlϕl−1(T)=Wlal−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−1l-1l−1层传递至lll层的输入(ANN和SNN均如此)。
  • 绝对转换误差 = 转换后的SNN的输出减去原始ANN的输出:
    Errl=ϕl(T)−al=zl−vl(t)−vl(0)T−h(zl)(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中可以看到如果zl>0\boldsymbol{z}^l > 0zl>0且vl(t)−vl(0)≠0\boldsymbol{v}^l(t) - \boldsymbol{v}^l(0) \ne 0vl(t)−vl(0)​=0则转化误差就不为0。事实上,转换误差由以下三个因素造成:
  1. Clipping error:
    由于脉冲神经元的阈值为θl\theta^lθl,所以SNN的输出ϕl(T)=∑i=1Txl(i)T=∑i=1Tsl(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的输出al∈[0,amaxl]\boldsymbol{a}^l \in [0,\boldsymbol{a}^l_{max}]al∈[0,amaxl​],其中amaxl\boldsymbol{a}^l_{max}amaxl​表示al\boldsymbol{a}^lal的最大值。如图1a所示,al\boldsymbol{a}^lal可以通过下式映射到ϕl(T)\phi^l(T)ϕl(T):
    ϕl(T)=clip(θlT⌊alTλ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)
    这里的clip(x,a,b)clip(x,a,b)clip(x,a,b)函数表示当x<ax<ax<a时结果为a,x>bx>bx>b时结果为b,x∈[a,b]x \in [a,b]x∈[a,b]时结果为x,⌊.⌋\lfloor . \rfloor⌊.⌋表示向下取整,λl\lambda^lλl表示将ala^lal映射为θl\theta^lθl的ala^lal的值。在ANN中的位于λl\lambda^lλl和amaxla^l_{max}amaxl​之间的激活值都被映射为SNN中的λl\lambda^lλl,这样造成的转换误差称为clipping error
  2. Quantization error(flooring error):
    输出脉冲sl(t)s^l(t)sl(t)是离散事件,因此ϕl(T)\phi^l(T)ϕl(T)在经过θlT\frac {\theta^l}{T}Tθl​量化后也是离散的,当把ala^lal映射为ϕl(T)\phi^l(T)ϕl(T)时,不可避免地存在着一些量化误差。例如图1a中所示,ANN中位于[λlT,2λlT][\frac{\lambda^l}{T}, \frac{2\lambda^l}{T}][Tλl​,T2λl​]之间的激活值在SNN中都被映射为θlT\frac{\theta^l}{T}Tθl​。
  3. Unevenness error:
    不均匀误差是由于输入脉冲的不均匀造成的。同样的脉冲数量,如果脉冲到达的时间不一样,产生的输出也不一样,可能会产生比预期更多或更少的输出。
    举个例子:
    假设在源ANN中第l−1l-1l−1层中的两个神经元和第lll层一个神经元的连接权值分别是2和-2,第l−1l-1l−1层两个神经元的输出是[0.6, 0.4]。在转换后的SNN中假设l−1l-1l−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)=al−1\phi^{l-1}(T) = a^{l-1}ϕl−1(T)=al−1且ANN和SNN中的权值相等ϕl(T)\phi^l(T)ϕl(T)也会随着脉冲到达的时间不同而变化。ANN中的al=[2,−1][0.6,0.4]T=0.4a^l = [2, -1][0.6, 0.4]^T = 0.4al=[2,−1][0.6,0.4]T=0.4,对于SNN有如图1b-d所示的三种情况。
    如果两个权值为2和-2的神经元发放脉冲时间分别为t=1,3,5t=1,3,5t=1,3,5和t=2,4t=2,4t=2,4,突触后神经元将会在t=1,3t=1,3t=1,3时刻发放脉冲,且ϕl(T)=0.4=al\phi^l(T)=0.4=a^lϕl(T)=0.4=al。然而如果两个神经元发放脉冲时间分别为t=1,2,3t=1,2,3t=1,2,3和t=4,5t=4,5t=4,5,突触后神经元将会在t=1,2,3,4t=1,2,3,4t=1,2,3,4时刻发放四个脉冲且ϕl(T)=0.8>al\phi^l(T)=0.8 > a^lϕl(T)=0.8>al;如果两个神经元发放脉冲时间分别为t=3,4,5t=3,4,5t=3,4,5和t=1,2t=1,2t=1,2,突触后神经元将只会在t=5t=5t=5时刻发放一个脉冲且ϕl(T)=0.2<al\phi^l(T)=0.2 < a^lϕl(T)=0.2<al。

上述三种误差中存在一些相互依赖关系,特别是如果vl(T)∈[0,θl]v^l(T) \in [0, \theta^l]vl(T)∈[0,θl],不均匀误差会退化为量化误差,因此假设vl(T)∈[0,θl]v^l(T) \in [0, \theta^l]vl(T)∈[0,θl]时可以忽略掉不均匀误差的影响从而估计SNN的激活函数。在转换后的SNN中估计输出值ϕl(T)\phi^l(T)ϕl(T)可以使用clip(.)clip(.)clip(.)和floor(.)floor(.)floor(.)函数来表示:
ϕl(T)≈θlclip(1T⌊zlT+vl(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 Err~l\widetilde{Err}^lErrl可以由下式得出:
Err~l=θlclip(1T⌊zlT+vl(0)θl⌋,0,1)−h(zl)≈Errl.(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} Errl=θ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:
al=h(zl)=λlclip(1L⌊zlLλ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)
其中的超参数LLL表示ANN中的量化步长(quantization step),而λl\lambda^lλl是可训练的参数,决定着将ANN中ala^lal映射到SNN中ϕl(T)\phi^l(T)ϕl(T)的最大值对应的最大值(比较绕,其实说白了就是f(λl)=ϕl(T)maxf(\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;vl(0)=0v^l(0)=0vl(0)=0
  • 缺陷:在L≠TL \neq TL​=T时误差不一定为0。

进一步改进的quantization clip-floor-shift activation function

基于以上缺陷,论文作者又提出了进一步改进的quantization clip-floor-shift activation function:
al=h^(zl)=λlclip(1L⌊zlLλ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≠TL \neq TL​=T时虽然不能保证转换误差为0,但是可以估计转换误差的期望值。相似于Deng & Gu, 20201,这里同样假设zilz^l_izil​服从一定的均匀分布,当满足以下条件时,可以证明当源ANN中的φ=12\varphi= \frac{1}{2}φ=21​时对于任意的T和L,转换误差的期望值接近于0。

  • 条件:θl=λl\theta^l = \lambda^lθl=λl;vl(0)=θlφv^l(0)=\theta^l \varphivl(0)=θlφ。
    证明过程在论文附录中给出,感兴趣的朋友可以去查看原始论文。
    结果表示当φ=12\varphi= \frac{1}{2}φ=21​时即使L≠TL \neq TL​=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⌋dx=1\frac{d\lfloor x \rfloor}{dx} = 1dxd⌊x⌋​=1。整体的导数规则如下式17所示:
其中的zilz^l_izil​表示zlz^lzl的第iii个元素。在训练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. ↩︎

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

  1. 联邦学习论文阅读三:ChainFL

    联邦学习论文阅读三:ChainFL Secure and Efficient Federated Learning Through Layering and Sharding Blockchain 论 ...

  2. 【OTFS与信号处理:论文阅读4】OTFS时延多普勒域嵌入导频辅助信道估计

    2023.07.10 虽说目前已经有频谱效率更高的叠加导频设计,但是这篇论文堪称OTFS嵌入式导频的经典之作,经常被其他论文引用,左思右想觉得还是有必要重新阅读并记录学习过程.(注:关于MIMO的部分 ...

  3. 【项目调研+论文阅读】(目录)中文实体识别研究方法综述 day6

    文章目录 一.基于词典和规则的方法 二.基于统计机器学习的方法 1.隐马尔可夫模型(HiddenMarkovMode,HMM)的方法 2.基于最大熵(MaxmiumEntropy)的 方 法 3.基 ...

  4. 论文阅读——基于文档主题结构的关键词抽取方法研究(理解)

    1.引言 1.1关键词自动标注的主要方式与算法 关键词自动标注主要有两种方式:关键词抽取与关键词分配. 关键词抽取,是从文档内容中寻找并推荐关键词 关键词分配,是从一个预先构造好的受控词表(contr ...

  5. (深度卷积生成对抗神经网络)DCGANs论文阅读与实现pytorch

    文章目录 INTRODUCTION Approach and Model Architecture 具体的修改细节 pytorch实现 可以选定特定的数字的DCGANs INTRODUCTION GA ...

  6. 论文阅读三:GHM《Gradient Harmonized Single-stage Detector》

    论文链接:Gradient Harmonized Single-stage Detector 论文来自香港中文大学 一.论文出发点    我们都知道,one-stage检测器一个极大的问题就是easy ...

  7. 论文阅读三:基于改进人工蜂群算法的SDN负载均衡策略研究

    名词解释: Artificial Bee Colony Algorithm, ABC:人工蜂群算法 Load balancing algorithm based on improved artific ...

  8. 【项目调研+论文阅读】基于BERT的中文命名实体识别方法[J] | day6

    <基于BERT的中文命名实体识别方法>王子牛 2019-<计算机科学> 文章目录 一.相关工作 二.具体步骤 1.Bi-LSTM 2.CRF结构 三.相关实验 1.数据集 2. ...

  9. 【项目调研+论文阅读】基于医学文献的实体抽取(NER)方法研究 day5

    一.<基于文献的药物表型实体识别及关系抽取方法研究>北京交通大学-张琛 表型实体:疾病.体症.基因.化学物质和药物名称. 信息提取的传统方法分为三步:命名实体识别.关系抽取.事件抽取. - ...

最新文章

  1. 十二届蓝桥杯省赛B组C++解析(填空题部分)
  2. eclipse中Tomcat启动了 但看不到tomcat首页
  3. DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)
  4. 【Python】学习笔记一:Hello world
  5. 【前端学习日记】用reveal.js实现制作网页幻灯片
  6. ITK:使用平面结构元素腐蚀二进制图像
  7. VTK:可视化之Lorenz
  8. MySQL 高级 - 存储过程 - 概述
  9. 奇小葩讲设备树(1/5)-- Linux设备树详解(一) 基础知识
  10. Mono,CLR,.net,Net Framework之间的关系
  11. 开发工具:IDEA 调试技巧,非常实用,欢迎收藏!
  12. xmemcached spring 配置文件
  13. java8 list 去重_Java8-Stream在集合中的8种应用案例
  14. sparksql 操作hive_三十六、图解SparkSQL运行原理
  15. (转)J2ME中随机数字的生成
  16. android EditText使用指南
  17. 干货 | 机器学习在web攻击检测中的应用实践
  18. CJOJ 1070 【Uva】嵌套矩形(动态规划 图论)
  19. 项目管理 : 智能家居项目实施计划
  20. 2023年新年倒计时HTML源代码,2023年春节倒计时代码

热门文章

  1. 备战秋招——记录自己学习的第六天(Django项目难点拆分——层级评论数据结构实现)
  2. linux学习笔记,简单的粗暴使用教学
  3. Office 被曝 0 day 漏洞,微软确认 Windows 支持诊断工具存在问题;台半导体厂主管薪水大涨,超 10 人跻身亿元俱乐部
  4. linux 替换多行内容,整理sed实战修改多行配置技巧
  5. 计算机用于描述音乐乐曲,专转本计算机每届转本题目易出易错题目
  6. 找不到wpcap.dll解决方法
  7. gm修改爆率需要重启服务器吗,自己开传奇如何设置GM名单,以及装备爆率
  8. 【论文笔记】Incorporating Learnable Membrane Time Constant to Enhance Learning of SNN
  9. 抢东西用的时间软件_紧急重要四象限软件用哪款?这款时间管理便签软件适合你...
  10. 福州python招聘_东南网2017招聘启事