【读论文】Going deeper in spiking neural networks Vgg and residual architecture

news2024/10/6 18:33:16

请添加图片描述
frontiers in Neuroscience 2019

摘要

本文提出一种新的方法来构建深度SNN,并在复杂视觉识别问题上证明其有效性(如CIFAR10和ImageNet);该方法应用于VGG和残差网络结构,并获得最优精度;最后给出稀疏事件驱动计算的分析,证明在脉冲域操作时减少硬件开销。

背景

SNN比ANN有更好的生物学可解释性,并具有事件驱动硬件的前景,它只在接收到二进制脉冲信号时处理输入信息,使其功耗显著降低。但大多数SNN的研究局限于简单而浅层的网路结构,SNN性能有限的主要原因是其时间信息处理能力,SNN与ANN有很大不同,需要重新思考SNN的机制。

主要贡献

提出一种新的ANN-SNN转换方法,由于目前最先进技术;首次探索通过残差网络构建深度SNN;证明了随着网络层数增加,SNN的稀疏性显著增加,进一步促进对ANN-SNN的探索。

主要内容与做法

输入与输出的表示

本文使用rate-encoded,时间窗足够大时,输入的平均脉冲数量与源ANN输入大小成正比;使用泊松事件生成网络的脉冲输入序列,SNN操作的每个时间步都与一个生成的随机数关联,将其与对应输入进行比较:如果随机数小于对应像素值,则触发脉冲事件。这种网络的SNN操作是“伪同时的”,即某一层立即对来自前一层的传入峰值进行操作,而不需要等待多个时间步来积累来自前一层神经元的信息。给定一个泊松生成的脉冲序列送入网络,脉冲将在输出处产生;推理是基于在给定时间窗口内网络输出层神经元的累积脉冲数量。

ANN与SNN神经元

使用ReLU作为ANN激活函数是因为其功能与无泄漏无不应期的IF神经元功能相同。适当选择神经元阈值与突触权重的比值对于确保分类精度损失最小化至关重要:阈值过高导致延迟增加,阈值过低导致精度变差。

结构限制

  1. 对bias的处理:
    ANN-SNN过程中通常不含bias,因此训练过程中不能使用正则化项(会加入bias),本文使用dropout进行正则化。
  2. 池化操作:
    对SNN使用最大池化会导致下一层信息大量丢失,所以使用平均池化。

提出算法:Spike-Norm

在足够大的时间窗为训练集生成泊松脉冲序列并输入网络,泊松脉冲序列可以记录加权脉冲输入的最大总和;为了最小化神经元的时间延迟,同时确保神经元放电阈值不会太低,根据第一层接收到的最大脉冲输入对第一层进行权重归一化,在第一层的阈值设定之后,可以得到具有代表性的输出脉冲序列,传入下一层;循环这个过程对网络的所有层进行归一化。
与之前工作不同的是,本文提出的方法考虑了实际SNN的操作。
请添加图片描述

扩展残差结构

  1. 本文提出的spike-norm应用在残差结构上会有精度退化,假设退化是因为连接点上没有ReLU:每个ReLU转换为IF神经元时,会产生一定的时间延迟,但因为Shortcuts的存在,初始脉冲信息可以被迅速传递到后面的层,因此同一层的两条平行路径不平衡的时间延迟会导致网络传播脉冲信息失真。
    如图B所示,在每个结点都设置ReLU,为并行路径提供时间平衡。
  2. 直接应用本文提出的阈值平衡方法无法达到与基准ANN相当的精度,非同一性路径中神经元层的脉冲阈值依赖于前一个结点上神经元层的活动,为解决这个问题本文启发式地将同一性ReLU与非同一性ReLU层的阈值都设为1。但仍无法使精度与基准ANN相当。
  3. 由图C可知,初始层的阈值平衡因子比整体要高很多,这可能时精度下降的主要原因。受VGG结构的启发,本文将第一个7 × 7卷积层替换为一系列3 × 3卷积,其中前两层不设置shortcuts;使用这样的初始非残差预处理层使初始层中可以应用本文提出的阈值平衡方法,同时对后面的层使用统一阈值平衡因子。
    请添加图片描述

未来工作

  1. 探索具有bias的SNN
  2. 探索除了ReLU-IF之外的其他变体
  3. 进一步优化有残差结构的ANN-SNN的性能损失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

文章标题LeetCode 20. 有效的括号题目链接🔗思路代码实现LeetCode 1047. 删除字符串中的所有相邻重复项题目链接🔗思路代码实现LeetCode 150. 逆波兰表达式求值题目链接🔗思路代码实现LeetCode 20. 有效的括号 题目链接🔗 LeetC…

运动基元(一):Dubin‘s曲线【part2】

三、六种Dubin’s轨迹的实现——开始摆盘啦 3.1 LSL LSL的第一段圆弧的曲率 k 1 = k m a x > 0 → s i g n ( k 1 ) = 1 k_1=k_{max}>0\rightarrow

118、【回溯算法】leetcode ——40. 组合总和 II:回溯法+剪枝优化(C++版本)

题目描述 原题链接:40. 组合总和 II 解题思路 本题的特点是,一个允许结果中出现相同数字,但每个元素仅能被选取一次。结果与结果之间不允许有重复,需要去重。 与 77. 组合(回溯法剪枝优化) 的相同之处在于…

【JavaSE专栏9】Java 注释知多少

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

斐波那契数列的--------5种算法(又称“兔子数列”)

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:…

决策树-剪枝处理

前言:理解《机器学习》P79-83中的决策树剪枝示例。 决策树生成 原始数据集如下所示,前10行为训练集,后7行为验证集,由此数据集可生成如下所示的决策树。 下面解释未进行剪枝操作的决策树为何如上图所示。 不对解释每个结点和分支…

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制,只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念, 以及常用到的命中测试、2d控件如何在3D对象中进行渲染,除此之外,还演示了如何导入外部…

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN:一个token就是一层layer,对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…

【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer

论文:【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer 代码:https://github.com/dongbo811/AFFormer 这是来自阿里巴巴的工作,作者构建了一个轻量级的Transformer网络用于语义分割,主要有两点…

发现下属的学历造假,但是他的工作能力又很强,该开除他吗?

在职场上混,学历是敲门砖还是定音锤呢?一位网友问:发现下属的学历造假,但是他的工作能力又很强,该开除他吗?有人觉得一定要开除,这就是钻空子,受影响最大的人不是他,而是那些真才实…

上采样与下采样

数据分析中的上采样和下采样 背景: 在分类问题中,由于各种原因,我们所获取到的数据集很容易出现正负样本的不平衡,或者某些数据特别多,有些数据则特别少,在这样的数据集中,进行训练&#xff0c…

OpenCV直方图Java 演示程序

直方图Java 演示程序以下文件编码为utf-8 为佳。代码文件名:OpenCvMain.javapackage org.opencv;import java.net.URL;import java.util.LinkedList;import java.util.List;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;…

Linux常用命令——setpci命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setpci 查询和配置PCI设备的使用工具 补充说明 setpci命令是一个查询和配置PCI设备的使用工具。 语法 setpci(选项)(参数)选项 -v:显示指令执行的细节信息; -f:当没有任何…

Opencv形态学操作——腐蚀、膨胀、梯度、开运算、闭运算、礼帽、黑帽(附案例详细讲解及可执行代码)

Opencv形态学操作 腐蚀膨胀梯度开运算闭运算礼帽黑帽总结腐蚀 在地理或者化学中,我们学习过腐蚀,是指在某种 作用下产生损耗与破坏的过程。你也可以理解为减肥。在Opencv中,腐蚀操作可以使白色轮廓变小,也就是说可以去除一些白色的噪声。 如果你接触过卷积核的话,腐蚀就更…

【JavaSE专栏8】运算符、表达式和语句

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

盖子的c++小课堂——第十三讲:二维数组

前言 过了几天了,终于有时间更新了,有个通知,以后我不用颜色区分了,不然换了背景看不见,理解一下,蟹蟹~~ 举例 作者:一下是某次奥运会的奖牌榜,你知道如何储存奖牌榜吗~~ 粉丝&am…

机器学习中软投票和硬投票的不同含义和理解

设置一个场景,比如对于今天音乐会韩红会出现的概率三个人三个观点 A:韩红出现的概率为47% B:韩红出现的概率为57% C:韩红出现的概率为97% 软投票:软投票会认为韩红出现的概率为1/3*(47%57%97%)67% 硬投票:…

“子序列问题”系列总结,一文读懂(Java实现)

目录 前言 一、最长递增子序列 1.1、dp定义 1.2、递推公式 1.3、初始化 1.4、注意 1.5、解题代码 二、最长连续递增序列 2.1、分析 2.2、解题代码 三、最长重复子数组 3.1、dp定义 3.2、递推公式 3.3、初始化 3.4、解题代码 四、最长公共子序列 4.1、分析 4.2…

Opencv项目实战:20 单手识别数字0到5

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示 HandTrackingModule.py Figures_counter.py 4、项目资源 5、项目总结 0、项目介绍 今天要做的是单手识别数字0到5,通过在窗口展示,实时的展示相应的图片以及文字。 在网上找了很久的…

硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

文章目录一、BeautifulSoup介绍二、安装三、bs4数据解析的原理四、bs4 常用的方法和属性1、BeautifulSoup构建1.1 通过字符串构建1.2 从文件加载2、BeautifulSoup四种对象2.1 Tag对象2.2 NavigableString对象2.3 BeautifulSoup对象2.4 Comment对象五、contents、children与desc…