ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

脉冲神经网络:从ANN到SNN

脉冲神经网络:从ANN到SNN

上一节,我们已经知道:

  • ANN 可以处理时序信息,RNN 和 Transformer 都是例子。

  • SNN 的特点不是“只有它能处理时间”,而是使用脉冲事件和神经元内部的时间动力学来组织计算。

  • SNN 不一定比 ANN 更省电,它的实际效率受到网络、硬件和实现方式的影响。

这里我们要学习神经网络不仅可以利用数值大小计算,还可以利用脉冲发生的时间计算。

1.SNN与ANN的区别

左边是 ANN,输出一个数值,例如:y=0.8

右边是 SNN,输出沿时间轴排列的一系列脉冲。

1. 一个数值和一串脉冲有什么区别?

假设我们希望神经网络表示“外界刺激有多强”。

对于普通人工神经元,我们可以用数值表示: y=0.8

这个 0.8 可以理解为某种激活程度。

但 SNN 可以采用另一种表示方式。

我们可以把这两种方式理解为:

ANN 可以通过一个数值告诉你某种激活程度,而 SNN 可以通过脉冲的数量、发生时间和分布来传递信息。

例如,同样观察 100 毫秒:

一种神经元可能发放 2 次脉冲,另一种可能发放 10 次。

这种差别可以承载信息。

当然,SNN 也不只使用脉冲次数编码信息,后面我们会讲到脉冲发生的时间。

神经元的输出,一定要用一个数值表示吗?

答案是:不一定。

这正是从普通 ANN 过渡到 SNN 的一个重要切入点。

2.三代神经网络,“代”究竟在哪里?

第一代:阈值型

还记得上一节的 M-P 模型和感知机吗?

它们可以按照一个阈值规则输出:

就像一个开关。

条件满足,输出 1;条件不满足,输出 0。

它最关注的是:

激活还是不激活?

第二代:连续激活型

后来,人们开始使用 Sigmoid 等激活函数。

例如 Sigmoid:

它不再只能表达“是”或“否”,还能表达不同的激活程度。

这也使连续激活型网络能够采用微分方法来进行梯度计算和参数训练。

不过需要说明:并非所有现代 ANN 的激活函数都像 Sigmoid 一样处处平滑,例如 ReLU 在零点不可导,但仍然可以使用适当的梯度方法训练。

相较于硬阈值,连续激活函数可以表达不同的激活程度。

很多常见的现代 ANN 都属于这一类模型范式。

第三代:脉冲型

SNN 引入了脉冲发放及其时间动力学。

我们不再只关注一个静态的输出数值,而是研究:

某个神经元何时发放脉冲?多个脉冲之间间隔多久?这些脉冲如何影响其他神经元?

一个特别重要的误区

注意,第三代不意味着一定比第二代更先进、更准确或更快。

这个“代”主要是根据神经元模型的信息表达与计算机制进行分类,而不是严格的性能排名。

它也不表示第二代出现后第一代就消失、第三代出现后第二代就会被替代。

这页的分类参考了 Maass 在 1997 年提出的相关研究视角。

2.什么是 Spike?从输出值到脉冲事件

很多初学者会以为 Spike 就是神经元输出一个 1。

这个理解有一定道理,但还不够完整。

1. Spike 到底是什么?

在 SNN 中,Spike 通常指一个神经元在某个时刻发生的发放事件。

如果我们用离散时间表示,可以写成:

举个例子,观察一个神经元 8 个时间步:

这意味着它在第 3、5、8 个时间步发放了脉冲。

2. 为什么竖线高度都一样?

我们画的是脉冲发放时刻图(Spike Train),不是生物神经元真实动作电位的完整波形。

竖线只是告诉我们:

“这个时间点发生过一次脉冲。”

它的高度没有特殊数值含义。

所以千万不要把这张图理解成某种连续的电压变化曲线。

3. 那信息藏在哪里?

例如下面两个脉冲序列:

它们都有两次脉冲,但是发放时刻不一样。

如果神经网络使用时序编码,这两种模式就可能表示不同信息。

3.为什么脉冲发放的时间很重要?

请看下图,都是在100ms内发出了三次脉冲,它们包含的信息一定相同吗?

1. 第一种观察方法:只看脉冲次数

假设我们观察 100 ms。

序列 A 发放 3 次,序列 B 也发放 3 次。

计算平均发放频率:A 和 B 的平均发放频率都是 30 Hz。

如果只看平均发放频率,它们没有区别。

2. 第二种观察方法:比较发放时刻

下面我用两组教学数据进一步解释图片的意思。

对于采用特定时序编码的网络来说,这两种脉冲模式可能对应不同的信息。

这就涉及两种重要的信息编码思想

编码方式

主要关注什么

频率编码(Rate Coding)

一段时间内发放多少次脉冲

时间编码(Temporal Coding)

脉冲具体在什么时候发放、彼此相隔多久

举个直观的例子。

假设你听见别人敲门。

“咚——咚——咚”

和

“咚咚咚——”

虽然都是敲了 3 次,但节奏不同。

第一个你会察觉到这个人没那么着急,第二个你会察觉到这个人很慌张。

这就是时间分布可能携带信息的直观例子。

不过,SNN 并不一定都使用精确时间编码。有的 SNN 主要依赖发放频率,有的则利用脉冲时刻或群体脉冲模式。这里暂不展开

4.脉冲神经元如何产生输出

前面我们一直在说脉冲,但脉冲究竟怎么产生呢?请看下图,结合这张图我进行讲解

1. 什么是膜电位?

你可以把神经元想象成一个会漏水的水桶。

膜电位 V 就像桶里的水位。

当输入信号到来时,膜电位可能上升;没有足够输入时,膜电位可能逐渐下降。

当膜电位达到预设阈值,神经元就会发放一次脉冲。

发放之后,膜电位通常会被重置。

这就是 PPT 中“阈值—发放—复位”的基本思想。

2. 数学扩展:LIF 神经元

下面我们在上图基础上补充一点数学知识。

LIF 的全称是 Leaky Integrate-and-Fire,即泄漏积分发放模型。

这里只做简单讲解

一个简化的离散形式是:

假设:

初始膜电位:

每一步的输入都是:

那么第一个时间步:

因为 (0.4<1),所以不发放。

第二个时间步:

仍然不发放。

第三个时间步:

这一次:

因此,神经元发放一次脉冲!

脉冲神经元不是简单地把输入变成 0 或 1,而是通过随时间变化的内部状态,决定何时发放脉冲。

因此我们可以得到下图

SNN的挑战

第一代神经网络主要讨论神经元是否激活。

第二代神经网络能够通过连续数值表达激活程度。

第三代神经网络采用脉冲型神经元,可以利用脉冲事件和发放时间组织计算。

但三代模型并不是简单的新旧替代关系。

尤其是ANN 通过 RNN、位置编码等方法,也可以处理复杂的时序信息。

因此,理解 SNN 的关键,不是强调 ANN 做不到什么,而是理解 SNN 选择了什么样的神经元模型与计算机制。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进