TODO
-
[x] 1、了解什么是SNN(脉冲神经网络)
-
[x] 2、对比ANN和SNN区别
-
[x] 3.学习MS-ResNet;(SNN)
论文:Advancing Residual Learning towards Powerful Deep Spiking Neural Networks
1.SNN
1.1 NN的进化
第一代nn:感知器,一个简单的神经元只能处理二进制数据。
Perceptron
第二代nn:通常是全连接的神经网络,它们输入连续的值,然后输出连续的值 ,也就是目前我们一直在使用各种神经网络,BP,CNN,RNN等,本质来讲,这些神经网络都是基于神经脉冲的频率进行编码( rate coded)。
第三代nn:脉冲神经网络(spiking neural networks),其模拟神经元更加接近实际,把时间信息的影响也考虑其中 。旨在弥合神经科学与机器学习之间的鸿沟,使用接近真实的生物神经模型来进行计算。SNN可以归类为类脑计算,是认为生物智能是人工智能想要达到的目标和方向,标榜自然智进行改进与深化。
1.2 SNN的编码方式
1.3 SNN模型
1.4 SNN的训练方式
1.5 局限性
2. SNN vs ANN
2.1 SNN
SNN 作为人工智能和神经形态计算机群体中的计算工具的实用价值,长期以来一直存在争论。尤其是和人工神经网络 (ANN) 相比。在过去的几年里,这些怀疑减缓了神经形态计算 (neuromorphic computing ) 的发展,而随着深度学习的快速进步,研究人员试图从根本上缓解这个问题,人们想要通过加强 SNN 的手段,如改善训练算法,来缓解这个问题。
与成熟有效的人工神经网络 (ANN) 训练算法:误差反向传播算法 (Back Propagation) 不同,神经网络研究中最困难的问题之一是由于复杂的动力学和脉冲的不可微性质导致的训练困难。
为了提升脉冲神经网络的精度,已有一些前人的工作做出了探索,如:
- Spike timing dependent plasticity (STDP) :无监督学习方法
- 添加奖励机制
- 把预训练好的 ANN 转化为 SNN:为了提升 ANN 与 SNN 的兼容性,通常把 bias 去掉,使用 ReLU 激活函数,把 max-pool 换成 average-pool 等。把 ANN 转化成 SNN 时,通常包括 weight/activation normalization,threshold tuning, sampling error compensation 等操作以维持精度。
- 脉冲神经网络使用 BP 算法训练:在执行反向传播时,梯度可以沿着空间维度通过聚合脉冲传播,也可以沿着时间和空间2个维度通过计算膜电势的梯度传播
由于 SNN 缺乏专门的benchmark,许多工作直接使用 ANN 的 benchmark 来验证 SNN 模型。例如,用于 ANN 验证的图像数据集被简单地转换为 Spike 版本,用于 SNN 训练和测试。 此外,网络的准确性仍然是主要的评估指标,但众所周知,我们的大脑在绝对识别准确性方面,通常比现有的人工智能机器表现得差。这反映了我们需要更全面和公平的衡量标准来评估和模拟生物大脑工作方式的 SNN。简而言之,由于不适当的评估指标,目前的 SNN 无法击败 ANN。因此,出现了1个开放的问题
2.2 如何评估 SNN 是有意义的
这篇文章将预训练好的 ANN 转化成 SNN,在这个工作里面作者考虑到了 SNN 网络的 Efficiency,而不仅仅是 Accuracy。评价一个 SNN 时要从多个角度考量,比如:application accuracy,memory cost, compute cost 。
在以 ANN 主导的评价指标和任务中,相同大小的 SNN 无法打败 ANN。但是在以 SNN 主导的评价指标和任务中,SNN 的表现会更好。
2.3 脉冲神经网络的原理
如下图1所示是ANN 和 SNN 的单个基本神经元:
(a) 图是典型的单个 ANN 神经元,ANN 的计算方法是:
y=(b + ) (1)
- :非线性的激活函数
- X代表上个神经元过来的连续的激活值 (Pre-activation),通过突触 (Synapse) 传递到树突的位置 (Dendrite),并且最终由细胞体 (Soma) 来处理这个激活值 (具体处理方法就是1式)
- ANN 中的神经元使用高精度和连续值编码的激活值进行相互通信,并且只在空间域 (spatial domain,即 layer by layer) 传播信息。从上述方程可以看出,输入和权重的相乘和累加 (MAC) 是网络的主要操作
(b) 图是典型的单个 SNN 神经元,它的结构与 ANN 神经元相似,但行为不同。脉冲神经元之间的交流通过 binary 的 events,而不是连续的激活值
S代表上个神经元过来的一个一个的脉冲 (Spike),通过突触 (Synapse) 传递到树突的位置 (Dendrite),并且最终由细胞体 (Soma) 来处理这些脉冲 (具体处理方法就是2式)
= - [u(t) - ] + K(t - ) (2)
s(t)=1 & u(t)= , if u(t)
s(t)=0 , if u(t) <
- t:时间步长,时间离散化单位,模型中的微分方程会根据t进行更新
- τ:时间常数
- u:膜电位
- s:输出脉冲
- ur1:静息电位,指神经元在没有接收到任何突触输入时的电位水平。它通常被设置为一个负值,比如-70mV。这个负值意味着当神经元不被激活时,内部是趋向稳定的状态。
- ur2:复位电位,当神经元放电产生脉冲后,为了准备下一次积分放电,需要将电位重新设置到一个复位值。这个值通常接近甚至等于静息电位,比如也设为-70mV。它使得神经元在放电后快速返回静息,准备下一次信息编码。
- : 第 j 个输入神经元的突触权重
- :第 j 个输入神经元的第 k 个脉冲在的积分时间窗口内激发的时间(总共 脉冲序列),发放脉冲的时刻
- K():描述时间衰减效应的核函数
- :决定是否发射脉冲的发射阈值
接下来用人话即使一下2是什么意思:
1 | 1.当膜电位 ut(也就是细胞体 Soma 这个隐含电位) 高于阈值 uth时,脉冲神经元看做一次点火,此时输出电位 st 置为1,同时膜电位 ut 回归到重置电位 ur2 。 |
与 ANN 不同的是,SNN 使用脉冲的序列来传递信息,每个脉冲神经元都经历着丰富的动态行为。 具体而言,除了空间域中的信息传播外,时间域中的过去历史也会对当前状态产生紧密的影响。 因此,与主要通过空间传播和连续激活的神经网络相比,神经网络通常具有更多的时间通用性,但精度较低。 由于只有当膜电位超过一个阈值时才会激发尖峰信号,因此整个尖峰信号通常很稀疏。 此外,由于尖峰值 (Spike) 是二进制的,即0或1,如果积分时间窗口 调整为1,输入和权重之间的乘法运算就可以消除。由于上述原因,与计算量较大的 ANN 网络相比,SNN 网络通常可以获得较低的功耗
3.脉冲神经网络数据集
这一节介绍下脉冲神经网络的基本数据集。
像 MNIST,CIFAR10 这类基于帧的静态图像,广泛应用于 ANN 中,我们称之为 ANN-oriented dataset,如下图2的前2行所示。
CIFAR-10:32×32×3 RGB image,Training set:50000,Testing set:10000
MNIST:28×28×1 grayscale image,Training set:60000,Testing set:10000
图2的后2行 N-MNIST 和 DVS-CIFAR10 叫做 SNN-oriented dataset。这里的 DVS 叫做 dynamic vision sensor,代表使用了动态视觉传感器扫描每张 images 得到的 spike 数据。它除了具有与 ANN-oriented dataset 相似的空间信息外,还包含更多的动态时间信息,而且尖峰事件与神经网络中的信号格式自然兼容,因此我们称之为 SNN-oriented dataset。
DVS 产生两个通道的脉冲事件,命名为 On 和Off 事件 (分别如图2中红色和蓝色所示)。因此,DVS 将每个图像转换为 的脉冲模式。
N-MNIST:34×34×2×T spatio-temporal spike pattern,Training set:60000,Testing set:10000
DVS-CIFAR-10:128×128×2×T spatio-temporal spike pattern,Training set:9000,Testing set:1000
一般来说,ANN 接收帧为基础的图像,而 SNN 接收事件驱动的脉冲信号。因此,有时需要将相同的数据转换为另一个域中的不同形式来处理。本文以视觉识别任务为例,主要介绍了四种信号转换方法,如下图3所示: