Adaptive SRNN

基于多时间尺度脉冲循环神经网络的高效计算(SRNN)

中心思想:

使用替代梯度进行训练,克服SNN中梯度不连续的问题。

在PyTorch中直接使用BPTT进行训练。

结构

本文讨论由一个或者多个递归层组成的SNN——SRNN。

使用LIF神经元+Adaptive脉冲神经元

「具有两个循环层的SNN,循环层内神经元完全循环连接,层与层之间的神经元完全前向连接。」

基本组成

LIF神经元:

\(\hat{f_s}(u_t,\theta)\),其中\(u_t\)为膜电位,\(\theta\)为阈值。

对应公式:

\(\tau_{m} \frac{d u}{d t}=-\left(u_{t}-u_{r}\right)+R_{m} I_{t}\)

\(s_{t}=\hat{f}_{s}\left(u_{t}, \theta\right)\)

\(u_{t}=u_{t}\left(1-s_{t}\right)+u_{r} s_{t}\)

其中,\(I_t=\sum_{t_i}\delta (t_i)\)为输入,表示为脉冲串\(\{t_i\}\),\(u_t\)是按照时间常数\(\tau_m\)随指数衰减的膜电位,\(R_m\)是膜电阻,脉冲发射是阈值和电位的非线性函数\(S_{pike}=\hat{f}_{s}(u_{t})\)。

Adaptive脉冲神经元:

每次放电后阈值都会增加,随着时间常数\(\tau_{adp}\)指数衰减。用前向欧拉一阶指数积分器的方法在\(dt=1ms\)的离散时间内模拟连续神经元模型:

\(\alpha=\exp \left(-d t / \tau_{m}\right)\)

\(\rho=\exp \left(-d t / \tau_{a d p}\right)\)

\(\eta_{t}=\rho \eta_{t-1}+(1-\rho) S_{t-1}\)

\(\theta=b_{0}+\beta \eta_{t}\)

\(u_{t}=\alpha u_{t-1}+(1-\alpha) R_{m} I_{t}-S_{t-1} \theta\) &

\(\theta\)为动态阈值,\(\rho\)表示单时间步衰减。

为了确定SNN的有效性,可以将SNN转换为具有ReLU激活功能的RNN网络,即在每个时间步将膜电位而不是偶尔的脉冲信号传递给其他的神经元,即将&替换为:

\(S_t=ReLU(u_t-\theta)\)

(即RELU SRNN)

BPTT:时间反向传播算法

用于训练SRNN。将输出预测值和输出目标之间的差值从输出传递回输入,包括过去的输入,通过梯度下降来优化权重和更新参数。

应用了交替梯度算法:通过放电神经元的不连续脉冲产生器来逼近误差梯度,替代梯度方法用一个将输出脉冲与膜电位联系起来的导数来代替不存在的梯度。

利用高斯分布:\(\hat{f}_{s}^{\prime}\left(u_{t}\right)=\mathcal{N}\left(u_{t} \mid \theta, \sigma^{2}\right)\)

其期望为阈值\(\theta\),方差为0.5,用来表示误差反向传播的膜电位值。

定义BPTT算法的损失函数并最小化损失函数,需要考虑不同任务下的标签类型:对于顺序分类任务,在序列末尾作为误差;对于时间流任务,在每一个时间步长生成一个输出并对其作为误差。

解码SRNN:解码SRNN的输出是对脉冲神经元行为的解释。输出神经元的膜电位和脉冲历史,频率编码或者到达时间编码都可以代表每一类神经元的信念。本文定义了一些输出编码方法和相关的损失函数。

基于脉冲的分类:

神经元发出脉冲的原因是膜电位到达了阈值。

分类任务中,最简单的方法就是统计某一段时间窗口内的脉冲数目,虽然简单但容易出错:(1)一些输出神经元可能发出相同数目的脉冲(2)神经元的重置和重现机制可能会降低强刺激脉冲的放电率(3)单个神经元的实时读出是不可行的。

因此,我们使用在每个时间步可用的输出神经元直接进行测量。

直接测量:输出神经元的膜电位可以用于分类,因为其代表了输出神经元的历史测量值。

定义了几种从膜电势历史中进行解码结果的方法:(1)最后时间步长的膜电势,即取样本最后一个时间步长的输出膜电位值作为输出。(2)最大的随时间变化的膜电位为:在呈现样本期间达到的最大膜电位作为输出神经元的值。(3)读出积分器:虽然膜电位可以被解释为神经元激活的移动平均,但脉冲引起的集合不符合这一概念。因此我们定义了一个非脉冲读出层,那里的膜电位是在没有神经元脉冲和重置的情况下计算的,这避免了脉冲神经元的重置机制对分类性能的影响。读出积分器被定义为:\(u_{t}=\alpha u_{t}+(1-\alpha) x_{t}\),其中\(u_t\)是输出膜电势,\(x_t\)是输入脉冲串,\(\alpha =e^{-\frac{\tau_m}{dt}}\),其中\(\tau_m\)是不可训练的时间常数,我们对非脉冲读出神经元使用随时间变化的平均值。

在【The Heidelberg spiking datasets for the systematic evaluation ofspiking neural networks】中使用了所有三种方法的变体,即对于流任务,每个时间步都需要分类,并且当只使用单个神经元来表示输出的时候,只能直接测量。为了训练网络,应用数据集8的时候使用交叉熵函数作为误差函数。在流任务中,读出膜电势被用作输出,在每个时间步与对应的目标进行比较。在分类任务中,将读取整个序列后的输出序列与正确标签进行比较。

我们在PyTorch中实现了各种SRNN,其中代理梯度的使用允许我们应用BPTT来有效地最小化损失,并利用标准的深度学习优化,包括对脉冲神经元参数的训练。

实验过程

QTDP、S-MNIST、PS-MNIST、SHD

编码和解码:

编码:DVS传感器转化 或者 基于速率的泊松时间编码。

解码:针对不同任务采用不同解码方式,QTDP任务采用膜电位直接解码方法;MNIST任务采用脉冲计数解码方法;SHD任务采用读出积分器方法。

能效

一个争议的问题为,SNN与ANN相比,是否能实现平均功率的降低。在这里,我们根据寄存器传输逻辑(RTL)级别的功率数从中推导出45nm CMOS工艺的理论能量值。

我们通过计算每个时间步所需的运算量来计算循环网络的理论能耗。我们计算了乘法和累加运算和累加运算。标准的人工神经元对每个输入都需要乘法和加法运算;相反,脉冲神经元只要求每个输入脉冲的累加运算,而它的内部状态动力学需要一些乘法和加法运算。

因此,在网络中,我们需要考虑神经元输入连接的数量、层中神经元的数量以及内部计算的成本。例如,考虑第l层的循环层,定义为:\(y_{l, t}=f\left(W \cdot x_{t}+W_{r e c} \cdot y_{l, t-1}\right)+b\),输入大小为m层,输出大小为n层:这需要两次乘法运算和一次累加运算。对于每一个时间步长,RNN所需要的能量计算为: \(Energy_{r n n}=(m n+n n) E_{MAC}\)。在SNN中,需要考虑稀疏脉冲活动(平均激发速率为\(F_r\)): \(Energy_{s r n n}=(m n+n n) E_{A C} F r\),且在稀疏脉冲的SRNN中, \(F r<<1\)。

我们计算了RNN的所有层l和所有时间步T的理论能量成本总和,\(E_{rnn}=\displaystyle\sum_{t\in T}\displaystyle\sum_{l\in L}Energy_{l,t}\):我们计算了表格2中的各种循环网络MACS/AC的能量消耗。

表格2:不同神经元的每层能量消耗。网络层的输入大小是m,输出大小是n。\(E_{AC}\)是每次累加运算的能量成本,\(E_{MAC}\)是每次长发和加法运算的成本。Adaptative*是非脉冲自适应神经元。

表格3:模型性能和能耗,实际相对能量成本。为了进行比较,将Adaptive SRNN的能耗和错误率设置为1倍。能量(energy)/误差(error)比被计算为能量(energy)/误差(error)相对于自适应SRNN的比率。效率定义为能量(energy)和错误率(error retio)的乘积。对于能耗测量\(E_{MAC}\)和\(E_{AC}\),使用[28]:一个32位MAC需要3.2pJ,一个32位AC需要0.1pJ。

图8:各种网络精确度与能量比。SRNN的解决方案位于节能和高效网络的Pareto front,Adaptive SRNN获得了接近RELU SRNN的性能,但理论上的能源效率高出28-243倍。与更复杂的SHD和PSMNIST任务相比,我们计算出SRNN的能量效率高出100倍以上,因为在更大的网络中,输入端数量和稀疏性都增加了。

SNN_文献阅读_Effective and Efficient Computation with Multiple-timescaleSpiking Recurrent Neural Networks的更多相关文章

  1. 《The Unreasonable Effectiveness of Recurrent Neural Networks》阅读笔记

    李飞飞徒弟Karpathy的著名博文The Unreasonable Effectiveness of Recurrent Neural Networks阐述了RNN(LSTM)的各种magic之处, ...

  2. 迁移学习《Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks》

    论文信息 论文标题:Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Ne ...

  3. 【文献阅读】An efficient motion planning based on grid map: Predicted Trajectory Approach with global path guiding

    (1)主要工作内容 本文提出了一种基于轨迹预测法的欠驱动无人艇的全局运动规划算法.该方法考虑了无人艇的所有动力学约束,并且能找到一条根据船舶自身操纵系统进行跟踪的全局轨迹. 根据USV数学模型生成的预 ...

  4. 文献阅读报告 - Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks

    paper:Gupta A , Johnson J , Fei-Fei L , et al. Social GAN: Socially Acceptable Trajectories with Gen ...

  5. Paper | Adaptive Computation Time for Recurrent Neural Networks

    目录 1. 网络资源 2. 简介 3. 自适应运算时间 3.1 有限运算时间 3.2 误差梯度 1. 网络资源 这篇文章的写作太随意了,读起来不是很好懂(掺杂了过多的技术细节).因此有作者介绍会更好. ...

  6. facebook 摘要生成阅读笔记(二) Abstractive Sentence Summarization with Attentive Recurrent Neural Networks

    整体流程与第一篇差不多,只是在encoder和decoder加入了RNN Encoder: 1. ai=xi+li ai=词向量+词在序列中的位置信息(相当于一个权重,[M, 1]) 流程: 先是CN ...

  7. 论文阅读笔记(二十二)【CVPR2017】:See the Forest for the Trees: Joint Spatial and Temporal Recurrent Neural Networks for Video-based Person Re-identification

    Introduction 在视频序列中,有些帧由于被严重遮挡,需要被尽可能的“忽略”掉,因此本文提出了时间注意力模型(temporal attention model,TAM),注重于更有相关性的帧. ...

  8. phd文献阅读日志-博一下学期

    博一下学期: 1.week1,2018.2.26 2006-Extreme learning machine: theory and applications 期刊来源:Huang G B, Zhu ...

  9. 论文翻译:2020_WaveCRN: An efficient convolutional recurrent neural network for end-to-end speech enhancement

    论文地址:用于端到端语音增强的卷积递归神经网络 论文代码:https://github.com/aleXiehta/WaveCRN 引用格式:Hsieh T A, Wang H M, Lu X, et ...

  10. 文献阅读笔记——group sparsity and geometry constrained dictionary

    周五实验室有同学报告了ICCV2013的一篇论文group sparsity and geometry constrained dictionary learning for action recog ...

随机推荐

  1. redis 中的 字符串

    String是redis 中的最基本的类型, 为二进制安全  ,意味着String可以表示各种类型  一个字符串value 最大为 521M set k1 v100 set k2 v200 get 命 ...

  2. 【心得】C51单片机_中断

    @ 目录 ①学习单片机中断总思想 ②学习单片机中断总思想 ③学习单片机中断总方法 外部中断 定时计数器中断 串行口中断 ④总结 附 ①学习单片机中断总思想 标题客观的说,学习单片机只需要掌握 I/O ...

  3. [数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北

    MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据.它提供了一组强大的工具,可以轻松地加载.分析和可视化移动物体的轨迹.通过使用Mo ...

  4. WPF自定义控件之消息提示

    创建消息提示控件 internal class Message : ContentControl { public int Time { get; set; } [Bindable(true)] pu ...

  5. SpringBoot3文件管理

    目录 一.简介 二.工程搭建 1.工程结构 2.依赖管理 三.上传下载 1.配置管理 2.上传下载 四.Excel文件 1.Excel创建 2.Excel读取 3.解析监听 4.导入导出 五.参考源码 ...

  6. 利用CI机制管控jar依赖树

    1. 现状·问题 你还记得你排查jar冲突的付出么? 为了有效控制jar包更新带来的未知jar引入和变动,我们经常使用dependency-tree来查看依赖关系排查问题,通常是出现问题再被动分析和排 ...

  7. 结果过滤器—MVC项目中结果过滤器(Result Filter)使用

    一.什么是结果过滤器? 结果过滤器(ResultFilter),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑.结果过滤器可以替换或更改 Ac ...

  8. 《Kali渗透基础》07. 弱点扫描(一)

    @ 目录 1:漏洞发现 1.1:Exploit-DB 1.2:searchsploit 1.3:nmap 2:漏洞管理 3:弱点扫描类型 4:漏洞基本概念 4.1:CVSS 4.2:CVE 4.3:O ...

  9. Lazada商品详情(代码封装)以及应用

      编辑切换为居中 Lazada平台的分析可以从以下几个方面入手: 1. 市场分析:对Lazada平台市场进行分析,及时了解市场趋势和变化,调整企业的经营策略.可以监测Lazada平台上商品的销售量. ...

  10. RocketMQ 系列(三) 集成 SpringBoot

    RocketMQ 系列(三) 集成 SpringBoot 前两篇文章介绍了 RocketMQ 基本概念与搭建,现在以它与 SpringBoot 的结合来介绍其基本的用法. RocketMQ系列(一) ...