ANN Converse to SNN|(2) Max-Norm

2024-01-12 23:59
文章标签 norm max ann snn converse

本文主要是介绍ANN Converse to SNN|(2) Max-Norm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Fast-Classifying, High-Accuracy Spiking Deep Networks Through Weight and Threshold Balancing

作者:Peter U. Diehl,Daniel Neil, Jonathan Binas,Matthew Cook,Shih-Chii Liu and Michael Pfeiffer
会议:IJCNN2015
原文链接:paper
代码:https://github.com/dannyneil/spiking_relu_conversion
python版本代码:https://github.com/luaGeeko/Spiking-DeepNetworks_1

作者首次提出权重归一化的概念,虽然在之前Cao的文章中(博客链接)在实验部分对每层的阈值进行了不同的设置,但是Diehl的工作更加实现了自动确定,后续有工作证明权重归一化与阈值平衡在转换的过程中起到了相同的作用。同时作者也指出ReLU函数可以认为是没有不应期的IF模型在脉冲发放率的近似,这是在Cao的工作上的另一个推进。

主要工作

作者仔细分析了转换的方法会产生误差的原因在于

  • 神经元没能接受足够的输入而引发脉冲,导致此单元的脉冲发放率低于预期
  • 神经元接受了太多输入,导致神经元每个仿真步都产生多个脉冲(作者在这里的意思应该是导致膜电势高于阈值太多,从基于事件的角度确实会导致神经元产生太多脉冲),原因在于要么神经元接受了太多脉冲或者某些权重比阈值高太多
  • 由于脉冲输入的概率特性,脉冲串不均匀,可能会导致某个特征集过度激活或者没怎么激活的情况

同时提出了转换方法的步骤:

  • 使用ReLU激活函数,bias设置为0,使用反向传播进行训练
  • 直接将权重进行映射
  • 使用权重归一化

作者使用IF神经元模型
d v m e m ( t ) d t = ∑ i ∑ s ∈ S i w i δ ( t − s ) \frac{d v_{\mathrm{mem}}(t)}{d t}=\sum_{i} \sum_{s \in S_{i}} w_{i} \delta(t-s) dtdvmem(t)=isSiwiδ(ts)

作者同样指出阈值和权重之间的平衡关系,权重对应了神经元要接受的输入,而阈值则负责决定是否发放脉冲,当二者比值较大时,神经元的脉冲发放率会提高,反之会降低,因此二者关系要做好平衡。为了保证输入足够小而防止神经元过度放电,最稳妥的办法就是假设所有的可能的正的活动同时发生,然后将权重按照可能的最大值进行缩放,如果连最大值都只能在一个时间步内发放一个脉冲,那么就不会有同时发放多个脉冲的事情了。为此,作者提出了两种方法:model-based normalization和data-based normalization。

Model-based Normalization

Model-based Norm不使用数据集,针对每层的每个神经元的所有连接的和找最大,之所以用和是因为要使归一化后该神经元释放脉冲后不会再次立刻释放脉冲,然后将每层的每个神经元的所有连接除以这个最大值。(该方法的从根本上杜绝了信息剩余,但全部正值对应的连接同时发放脉冲且所有负的权重对应的神经元都不活动的发生几率实在太小太小,这会大大减速网络运行,且易受噪声干扰)

matlab代码
function [net, norm_constants] = normalize_nn_model(varargin)net = varargin{1};if(nargin ~= 1)dofinal = varargin{2};endif (dofinal)endlayer = numel(net.size)-1;elseendlayer = numel(net.size)-2;endfor l = 1 : endlayerweight_sum = max(sum(max(0,net.W{l}),2));norm_constants(l) = 1 ./ weight_sum;net.W{l} = net.W{l} ./ weight_sum;end
end

Data-based Normalization

Data-based norm使用训练数据集寻找最大激活值对权重进行缩放,是考虑到训练集和测试集具有相同的分布,因此最大激活值通常是接近的。算法的第10行之所以是将最大值除以先前层的缩放值作为本层的缩放系数,是考虑到当先前层权重做了缩放后,对应的本层的输入也会缩小,本层的最大激活值也就有原来的最大变成了最大值除以之前的缩放值。第5-7行寻找最大权重的原因是排除个别权重特别大,当其输入被激活后反而比得到的激活值更大的情况,但是这种情况通常来说比较小。

matlab代码
function [nn, factor_log] = normalize_nn_data(nn, x)% Repropagate Activationsnn.testing = 1;nn = nnff(nn, x, zeros(size(x,1), nn.size(end)));nn.testing = 0;previous_factor = 1;for l = 1 : numel(nn.size)-1 % Find the max and rescaleweight_max = max(max(max(0, nn.W{l})));activation_max = max(max(max(0, nn.a{l+1})));scale_factor = max(weight_max, activation_max);applied_inv_factor = scale_factor / previous_factor;nn.W{l} = nn.W{l} / applied_inv_factor;factor_log(l) = 1 / applied_inv_factor;previous_factor = applied_inv_factor;end

实验

作者使用泊松编码,设计了全连接和卷积网络结构在MNIST数据集上进行了测试,


在这里插入图片描述

上述实验可以看到使用归一化后,SNN的性能可以与ANN相当。注意到作者将输入脉冲发放率作为了一个超参数,同时加上之前提到的阈值,二者都会对神经元的脉冲发放造成影响,作者也将二者作为因变量分析了其对分类性能的影响:输入脉冲编码频率越高,网络神经元能发放的脉冲也就越多,在一定阈值下,对网络预测的影响不是很大;神经元阈值越高。神经元脉冲越难发放,可以看到,当神经元阈值较低时,网络的分类能力大幅下降,同样,当阈值特别高时,网络中激活值比较小的神经元在仿真时间内可能永远都无法发放脉冲,将直接导致分类性能的下降。

最后作者列举了一下snn在MNIST上的分类性能。

在这里插入图片描述

总结

归一化是我认为的整个conversion方法的基石,但是作者的max-norm只在MSE loss和MNIST进行了实验,因此无法辨别出最大归一化的缺点就是对复杂网络和大型数据集不友好,增加相当多的时间延迟。

这篇关于ANN Converse to SNN|(2) Max-Norm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599599

相关文章

file-max与ulimit的关系与差别

http://zhangxugg-163-com.iteye.com/blog/1108402 http://ilikedo.iteye.com/blog/1554822

POJ 1050 To the Max(枚举+动规)

题目: http://poj.org/problem?id=1050 题解: 此题转化成一维后就相当于求最大连续子序列了,可以枚举所有的行组合,把枚举到的起始行到终止行的值按列相加存入一个一维数组。 代码: #include<cstdio>#include<cstring>int a[101][101];int value[101];int dp[101];int max(

报错:Reached the max session limit(DM8 达梦数据库)

报错:Reached the max session limit - - DM8 达梦数据库 1 环境介绍2 数据库启动SYSTEM IS READY后面日志3 数据库刚启动日志4 达梦数据库学习使用列表 1 环境介绍 某项目无法连接数据库,报错:超过最大会话数限制 , 检查 dmdba ulimit -a openfiles 已改检查 dm.ini 其中 MAX_SESSION

【硬刚ES】ES基础(二十) 单字符串多字段查询:Dis Max Query

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。

[LeetCode] 695. Max Area of Island

题:https://leetcode.com/problems/max-area-of-island/description/ 题目 Given a non-empty 2D array grid of 0’s and 1’s, an island is a group of 1’s (representing land) connected 4-directionally (horizont

[LeetCode] 485. Max Consecutive Ones

题: 题目 Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1,1,0,1,1,1]Output: 3Explanation: The first two digits or the last three digits are consec

直接训练SNN:从LIF模型到MNIST分类的完整实战【含源码】

我们计划使用原生Python代码直接训练SNN,并在相同的精度、超参数和网络结构下与SpikingJelly进行精度对比。以下是基准方法和相关教程的链接: 时间驱动:使用单层全连接SNN识别MNIST — SpikingJelly alpha 文档 在直接训练SNN时,我们需要实现以下三个方面: LIF神经元:实现充电、发射脉冲、重置等操作。编码方式:将连续值转换为适合SNN输入的形式

whose UTF8 encoding is longer than the max length 32766

问题描述:java.lang.IllegalArgumentException: Document contains at least one immense term in field=“cf_jg.keyword” (whose UTF8 encoding is longer than the max length 32766) 原因:设置为keyword类型的字段,插入很长的大段内容后,报

HDU_Max Sum(DP)

解题报告 http://blog.csdn.net/juncoder/article/details/38150533 题目传送门 题意: 求子区间连续和最大 思路: DP,dp[i]=max(dp[i-1]+num[i],num[i]) 如果区间内有一个数使得连续和小于0,那么从那个数开始重新定位区间。 #include <cstdio>#include <cstring

Pytorch中不同的Norm归一化详细讲解

在做项目或者看论文时,总是能看到Norm这个关键的Layer,但是不同的Norm Layer具有不同的作用,准备好接招了吗?(本文结论全部根据pytorch官方文档得出,请放心食用) 一. LayerNorm LayerNorm的公示如下: y = x − E [ x ] Var ⁡ [ x ] + ϵ ∗ γ + β y=\frac{x-\mathrm{E}[x]}{\sqrt{\op