SNN_文献阅读_Effective and Efficient Computation with Multiple-timescaleSpiking Recurrent Neural Networks
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的更多相关文章
- 《The Unreasonable Effectiveness of Recurrent Neural Networks》阅读笔记
李飞飞徒弟Karpathy的著名博文The Unreasonable Effectiveness of Recurrent Neural Networks阐述了RNN(LSTM)的各种magic之处, ...
- 迁移学习《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 ...
- 【文献阅读】An efficient motion planning based on grid map: Predicted Trajectory Approach with global path guiding
(1)主要工作内容 本文提出了一种基于轨迹预测法的欠驱动无人艇的全局运动规划算法.该方法考虑了无人艇的所有动力学约束,并且能找到一条根据船舶自身操纵系统进行跟踪的全局轨迹. 根据USV数学模型生成的预 ...
- 文献阅读报告 - 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 ...
- Paper | Adaptive Computation Time for Recurrent Neural Networks
目录 1. 网络资源 2. 简介 3. 自适应运算时间 3.1 有限运算时间 3.2 误差梯度 1. 网络资源 这篇文章的写作太随意了,读起来不是很好懂(掺杂了过多的技术细节).因此有作者介绍会更好. ...
- facebook 摘要生成阅读笔记(二) Abstractive Sentence Summarization with Attentive Recurrent Neural Networks
整体流程与第一篇差不多,只是在encoder和decoder加入了RNN Encoder: 1. ai=xi+li ai=词向量+词在序列中的位置信息(相当于一个权重,[M, 1]) 流程: 先是CN ...
- 论文阅读笔记(二十二)【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),注重于更有相关性的帧. ...
- phd文献阅读日志-博一下学期
博一下学期: 1.week1,2018.2.26 2006-Extreme learning machine: theory and applications 期刊来源:Huang G B, Zhu ...
- 论文翻译: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 ...
- 文献阅读笔记——group sparsity and geometry constrained dictionary
周五实验室有同学报告了ICCV2013的一篇论文group sparsity and geometry constrained dictionary learning for action recog ...
随机推荐
- 如何新建一个django项目
1.新建项目 2选择django 3.接下来我们进入 djangotest目录输入以下命令,启动服务器: python manage.py runserver 0.0.0.0:8000 0.0.0.0 ...
- 学习lspci:总线
00:00.0 Host bridge 总线地址 00:00.0 是指PCI总线上的第一个设备,也称为根复杂性总线.在PCI架构中,每个设备都有唯一的总线地址,由域号.总线号.设备号和功能号组成.其中 ...
- Singleton Pattern 单例模式简介与 C# 示例【创建型】【设计模式来了】
〇.简介 1.什么是单例模式? 一句话解释: 单一的类,只能自己来创建唯一的一个对象. 单例模式(Singleton Pattern)是日常开发中最简单的设计模式之一.这种类型的设计模式属于创建型 ...
- [python]爬取手机号码前缀和地区信息
概述 使用python爬取手机号码前缀7位.区号和地区. 小网站不容易,对爬虫也挺友好,就不放链接了. 代码 import requests from lxml import etree from f ...
- 产品代码都给你看了,可别再说不会DDD(二):DDD概念大白话
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- 【路由器】OpenWrt 简介和安装
目录 简介 来源 介绍 安装 一般安装流程 固件搜索下载 参考资料 简介 来源 2002 年底 Linksys 公司推出 WRT-54G,采用了 Linux 取代了原来的 vXworks 系统.迫于 ...
- Python连接Neo4j工具比较 Neo4j Driver、py2neo
Python有许多可以连接Neo4j的库和工具,以下是一些常用的: Neo4j Driver for Python 这是官方提供的Python驱动程序,它使用Cypher查询语言与Neo4j数据库进行 ...
- Pycharm包推荐|自动检查shell脚本问题的包
如图,这个包自动会检测出哪块代码编写有问题,自动提示,这里可以根据提示进行修改,快速高效!!! 包的名字如图:Shell script formatter 太香了
- Jquery ajax方式提交表单
Jquery ajax方式提交表单,目前用过的有两种方式: 1.引人jquery.js和jquery.easyui.min.js后,用下面的方法: $('#checkForm1').form('sub ...
- 【krpano】密码插件
密码插件可以在浏览场景或者执行action之前弹出密码输入框,要求用户输入密码.当密码输入成功了才可以进行下一步操作. 下载地址:http://pan.baidu.com/s/1gfOKKKF 给场景 ...