Spiking Deep Residual Network神经网络实现

可以确定这是个ANN-to-SNN的算法。
深度残差网络的残差网络块:
CNN版本:
做法:用原数据进行3次卷积操作先生成一个结果F(x),然后进行一次卷积生成一个结果identity。最后残差单元的结果就是identity+F(x)。
为什么这么做:因为多次卷积会导致一些细节消失,而且深层网络到最后也存在着梯度消失或者爆炸的问题。这个时候identity的引入,会加强特征效果,减缓训练速度,但在一定程度上也强化了训练速度。
在这里插入图片描述
每一次卷积完以后都要进行一次批归一化处理,这个函数使结果x=wx+b各个维度均值为0,且方差为1。
所以他这里一个块的具体操作就是:
卷积 --> 批归一化 --> relu函数处理 --> 卷积 --> 批归一化 --> relu函数处理 --> 卷积 --> 批归一化 = F(x)
= shortcut
最后 结果就是shortcut+F(x)一个残差网络块的结果

批归一化的结果:把所有数据初始化成 均值为0,方差为1,相当于数据的初始化操作,使数据变得更稳定。
批归一化解决的问题:每一层的参数更新会导致上层的输入数据分布发生变化( Internal Covariate Shift),通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。而批归一化处理完以后都把输入数据分布固定。

BN算法过程:
1、计算批处理数据均值。
在这里插入图片描述
2、计算批处理数据方差。在这里插入图片描述
3、规范化。
在这里插入图片描述
这一步是利用上两步得到的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中是为了避免除数为0时所使用的微小正数。
4、尺度变换和偏移。
在这里插入图片描述
尺度变换脱离正态分布,使网络表达能力提升。
5、返回学习的参数在这里插入图片描述
ANN-SNN
1、激活函数ReLU层被替换成了IF神经元。
2、卷积层被替换成一层突触连接,类似卷积操作。
用ANN的激活函数估计脉冲神经元的发放率。
权重在转换之前已经被训练好了。

权重转换
转换过程,首先是在CNN中的Resnet版本中训练权值和偏置,然后再将这些权重和偏置转化成SNN版本上。
在这里插入图片描述
因为发放率属于【0,1】,所以权重和偏置也需要归一化。
在这里插入图片描述
方法1、针对残差结构的归一化,把连续激活函数值转成发射频率(firerate)。
想要理解这一块什么意思,首先我们要理解,修改好的脉冲残差块跟CNN的残差块还差了什么。
在这里插入图片描述
明显对应下来缺了归一化这一环。
所以3.2这一节说的应该就是归一化这一块。
在这里插入图片描述
刚开始的终点是要先找出:输入X的最大激活函数值–maxin,中间ReLU单元的最大函数值–maxint,输出ReLU单元的最大值–maxout。
基本残差块:
在这里插入图片描述
然后计算出映射到脉冲Resnet上的版本(归一化):
在这里插入图片描述
最后进行计算:
在这里插入图片描述
在这里插入图片描述
上式差别中可得在这里插入图片描述
方法2:分层的误差补偿。
ReLU函数的归一化激活函数被脉冲神经元的发放率所估计,对于一个人工神经元i,它的ReLU激活函数被计算为:
在这里插入图片描述
如果在脉冲之间的时间间隔比不应期更大,从仿真开始到时间t,神经元i已经发放的脉冲数满足
在这里插入图片描述
对比7和9,可以得到误差:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随着网络加深,抽样误差逐渐累积,减少了发射频率,导致表现变差。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述模型的估计:
在这里插入图片描述
在这里插入图片描述
然后减轻这个问题通过这个估计模型,首先计算整个SNN网络的误差系数,
在这里插入图片描述
在这里插入图片描述
是补偿因子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值