作者丨科技猛兽
编辑丨极市平台
本文首发于极市平台公众号,转载请获得授权并标明出处。
本文目录
1 脉冲神经网络简介
2 脉冲神经网络原理
3 脉冲神经网络数据集
4 脉冲神经网络训练方法
5 脉冲神经网络评价指标
1 脉冲神经网络简介
脉冲神经网络 (SNN) 属于第三代神经网络模型,实现了更高级的生物神经模拟水平。除了神经元和突触状态之外,SNN 还将时间概念纳入了其操作之中,是一种模拟大脑神经元动力学的一类很有前途的模型。
那么什么是第一代和第二代神经网络模型呢?
第一代神经网络
第一代神经网络又称为感知器,在1950年左右被提出来,它的算法只有两层,输入层输出层,主要是线性结构。它不能解决线性不可分的问题,对稍微复杂一些的函数都无能为力,如异或操作。
第二代神经网络:BP 神经网络
为了解决第一代神经网络的缺陷,在1980年左右 Rumelhart、Williams 等人提出第二代神经网络多层感知器 (MLP)。和第一代神经网络相比,第二代在输入层之间有多个隐含层的感知机,可以引入一些非线性的结构,解决了之前无法模拟异或逻辑的缺陷。
第二代神经网络让科学家们发现神经网络的层数直接决定了它对现实的表达能力,但是随着层数的增加,优化函数愈发容易出现局部最优解的现象,由于存在梯度消失的问题,深层网络往往难以训练,效果还不如浅层网络。
所有对目前机器学习有所了解的人都听说过这样一个事实:目前的人工神经网络是第二代神经网络。它们通常是全连接的,接收连续的值,输出连续的值。尽管当代神经网络已经让我们在很多领域中实现了突破,但它们在生物学上是不精确的,其实并不能模仿生物大脑神经元的运作机制。
第三代神经网络:脉冲神经网络
第三代神经网络,脉冲神经网络 (Spiking Neural Network,SNN) ,旨在弥合神经科学和机器学习之间的差距,**使用最拟合生物神经元机制的模型来进行计算,更接近生物神经元机制。**脉冲神经网络与目前流行的神经网络和机器学习方法有着根本上的不同。SNN 使用脉冲——这是一种发生在时间点上的离散事件——而非常见的连续值。每个峰值由代表生物过程的微分方程表示出来,其中最重要的是神经元的膜电位。本质上,一旦神经元达到了某一电位,脉冲就会出现,随后达到电位的神经元会被重置。对此,最常见的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏连接的,并会利用特殊的网络拓扑。
然而,关于 SNN 作为人工智能和神经形态计算机群体中的计算工具的实用价值,长期以来一直存在争论。尤其是和人工神经网络 (ANN) 相比。在过去的几年里,这些怀疑减缓了神经形态计算 (neuromorphic computing ) 的发展,而随着深度学习的快速进步,研究人员试图从根本上缓解这个问题,人们想要通过加强 SNN 的手段,如改善训练算法,来缓解这个问题。
与成熟有效的人工神经网络 (ANN) 训练算法:误差反向传播算法 (Back Propagation) 不同,神经网络研究中最困难的问题之一是由于复杂的动力学和脉冲的不可微性质导致的训练困难。
为了提升脉冲神经网络的精度,已有一些前人的工作做出了探索,如:
- Spike timing dependent plasticity (STDP) :无监督学习方法
1 Unsupervised learning of digit recognition using spike-timing-dependent plasticity
- 添加奖励机制
2 Combining stdp and reward-modulated stdp in deep convolutional spiking neural networks for digit recognition
- 把预训练好的 ANN 转化为 SNN
3 Spiking deep convolutional neural networks for energy-efficient object recognition
4 Spiking deep residual network
5 Fast-classifying, high-accuracy spiking deep networks through weight and threshold balancing
6 Training spiking deep networks for neuromorphic hardware
7 Conversion of continuous-valued deep networks to efficient event-driven networks for image classification
为了提升 ANN 与 SNN 的兼容性,通常把 bias 去掉,使用 ReLU 激活函数,把 max-pool 换成 average-pool 等。把 ANN 转化成 SNN 时,通常包括 weight/activation normalization,threshold tuning, sampling error compensation 等操作以维持精度。
- 脉冲神经网络使用 BP 算法训练
8 Hybrid macro/micro level backpropagation for training deep spiking neural networks
9 Training deep spiking neural networks using backpropagation
10 Spatio-temporal backpropagation for training high-performance spiking neural networks
11 Direct training for spiking neural networks: Faster, larger, better
在执行反向传播时,梯度可以沿着空间维度通过聚合脉冲传播,也可以沿着时间和空间2个维度通过计算膜电势的梯度传播。
简而言之,通过上述努力,SNN 在视觉识别任务中的应用精度逐渐接近 ANN。
由于 SNN 缺乏专门的benchmark,许多工作直接使用 ANN 的 benchmark 来验证 SNN 模型。例如,用于 ANN 验证的图像数据集被简单地转换为 Spike 版本,用于 SNN 训练和测试。 此外,网络的准确性仍然是主要的评估指标,但众所周知,我们的大脑在绝对识别准确性方面,通常比现有的人工智能机器表现得差。这反映了我们需要更全面和公平的衡量标准来评估和模拟生物大脑工作方式的 SNN。简而言之,由于不适当的评估指标,目前的 SNN 无法击败 ANN。因此,出现了1个开放的问题,即:
如何评估 SNN 是有意义的?
Training spiking deep networks for neuromorphic hardware
这篇文章将预训练好的 ANN 转化成 SNN,在这个工作里面作者考虑到了 SNN 网络的 Efficiency,而不仅仅是 Accuracy。评价一个 SNN 时要从多个角度考量,比如:application accuracy,memory cost, compute cost 。
在以 ANN 主导的评价指标和任务中,相同大小的 SNN 无法打败 ANN。但是在以 SNN 主导的评价指标和任务中,SNN 的表现会更好。
2 脉冲神经网络原理
如下图1所示是ANN 和 SNN 的单个基本神经元。
(a) 图是典型的单个 ANN 神经元,ANN 的计算方法是:
y = ϕ ( b + ∑ j x j w j ) (1) y=\phi (b+\sum_j x_jw_j)\tag{1} y=ϕ(b+j∑xjwj)(1)
式中, ϕ ( ⋅ ) \phi(\cdot) ϕ(⋅) 是非线性的激活函数。
X 0 X_0 X0 代表上个神经元过来的连续的激活值 (Pre-activation),通过突触 (Synapse) 传递到树突的位置 (Dendrite),并且最终由细胞体 (Soma) 来处理这个激活值 (具体处理方法就是1式)。
ANN 中的神经元使用高精度和连续值编码的激活值进行相互通信,并且只在空间域 (spatial domain,即 layer by layer) 传播信息。从上述方程可以看出,输入和权重的相乘和累加 (MAC) 是网络的主要操作。
**(b) 图是典型的单个 SNN 神经元,**它的结构与 ANN 神经元相似,但行为不同。脉冲神经元之间的交流通过 binary 的 events,而不是连续的激活值。
S 0 S_0 S0 代表上个神经元过来的一个一个的脉冲 (Spike),通过突触 (Synapse) 传递到树突的位置 (Dendrite),并且最终由细胞体 (Soma) 来处理这些脉冲 (具体处理方法就是2式)。
这个式子看起来很麻烦,我们先来理解下每个变量的含义。
式中 t t t 代表时间步长, τ \tau τ 是常数, u u u 和 s s s 代表膜电位和输出峰值。
u r 1 u_{r_1} ur1 和 u r 2 u_{r_2} ur2 分别是静息电位和重置电位。
w j w_j wj 是第 j j j 个输入突触的权重。
t j k t_j^k tjk 是当第 j j j 个输入突触的第 k k k 个脉冲在 T w T_w Tw 这个积分时间窗口内激发了 (即状态为1) 的时刻。
K ( ⋅ ) K(\cdot) K(⋅) 是代表延时效应的核函数。
T w T_w Tw 是积分时间窗口。
u t h u_{th} uth 是个阈值,代表要不要点火 (Fire) 一次。
接下来我们用人话解释一下2式是什么意思:
1 当膜电位 u ( t ) u(t) u(t) (也就是细胞体 Soma 这个隐含电位) 高于阈值 u t h u_{th} uth 时,脉冲神经元看做一次点火,此时输出电位 s ( t ) s(t) s(t) 置为1,同时膜电位 u ( t ) u(t) u(t) 回归到重置电位 u r 2 u_{r_2}