一、什么是脉冲神经网络?

与人工神经网络不同,脉冲神经网络力求以更高的保真度和真实度模仿自然界神经元的本质。

人类连接组计划捕捉到的人类大脑侧视图,包括大脑和小脑

除了我们周围浩瀚的宇宙之外,人脑可能是我们所遇到过的最错综复杂的东西之一。它总共由近 1000 亿个神经元和近 40 万亿个突触组成,是研究起来最复杂的结构之一。它的结构错综复杂,拥有数万多种不同类型的神经元,并且能够在如此低的功耗(约 20 瓦)下在广阔的层面上运作,这让我们惊叹不已。目前还没有关于我们大脑如何运作的宏大统一理论,但我们只能通过多年持续的科学研究获得的知识来近似大脑的功能。大脑的特殊功能之一是识别模式或理解大量数据以得出推论,而无需处理其中的复杂性。我们的大脑通过尖峰生成和学习,在各个编码神经信号的层面上抽象出非必要特征,这项工作非常了不起。

大脑是一个密集的器官,由称为神经元的特殊细胞组成,这些细胞与其他神经元一起充当信息载体和决策者

神经元和神经网络:大脑由数十亿个称为神经元的神经细胞组成,它们是神经系统的基本组成部分。神经元相互连接形成复杂的网络,使它们能够相互通信。

神经通讯:神经元之间的通讯通过电信号和化学信号进行。当一个神经元接收到来自其他神经元的信号时,它会在细胞体内处理这些信息,如果累积的输入足够强,就会产生一种称为动作电位的电脉冲。

突触和神经递质:神经元之间没有物理连接,而是通过称为突触的特殊连接点进行通信。当动作电位到达神经元轴突(突触前神经元)的末端时,它会触发化学信使(称为神经递质)释放到突触中。然后,这些神经递质与接收神经元(突触后神经元)上的受体结合,从而传输信号。

神经可塑性和学习:大脑最显著的特征之一是它能够根据经验进行适应和改变。这种特性被称为神经可塑性。通过突触的增强或减弱,神经元之间的连接可以改变,并形成新的连接。这一过程是学习和记忆形成的基础。

大脑区域和功能:大脑分为不同的区域,每个区域负责特定的功能。例如:

  • 大脑皮层是大脑的外层,参与思考、感知、语言和决策等高级认知功能

  • 小脑对于运动控制、平衡和协调至关重要

  • 边缘系统在情绪、动机和记忆中发挥作用

神经元的工作机制涉及复杂的电信号和化学信号传递过程。神经元是神经系统的基本单位,负责接收、处理和传递大脑及身体其他部位的信息。

典型的神经元结构及其所有组成部分

神经元结构:神经元具有独特的结构,使其能够发挥其功能。神经元的主要成分包括:

  • 细胞体(Soma):神经元的中心部分,包含细胞核和大部分细胞机制。

  • 树突:类似分支的延伸,接收来自其他神经元或感觉受体的传入信号。

  • 轴突:一种细长的突起,将电脉冲传输出细胞体。

  • 轴突末端:轴突的末端,在此与其他神经元建立突触连接。

静止时,神经元细胞膜内部与外部相比保持负电荷。这种静息电位对于神经元处理和传输信息的准备至关重要。当神经元通过树突(从细胞体延伸出来的树状结构)接收传入信号时,这些信号可以激发或抑制神经元。如果传入信号足够强并且集体达到某个阈值,它们会触发突然而短暂的电脉冲,称为“动作电位”。

当神经元的电位超过阈值水平时,就会产生尖峰,然后它会下降到静息电位,并再次累积回到阈值

该动作电位沿着神经元细长的突起(称为“轴突”)传播。轴突就像一条通信电缆,将电信号从细胞体传输到轴突末端。

动作电位(尖峰)通过轴突流向树突,帮助处理信息

到达轴突末端后,动作电位会刺激化学信使“神经递质”释放到突触中,突触是轴突末端和邻近神经元树突之间的一个微小间隙。神经递质随后扩散到突触中并与邻近神经元树突上的受体结合。根据神经递质的类型和特定受体,这种相互作用可导致突触后神经元的去极化(兴奋)或超极化(抑制)。如果集体兴奋信号超过抑制信号,则突触后神经元会产生其动作电位,并且该过程会在连接的神经元中继续进行,从而在整个神经网络中产生电脉冲的连锁反应。

动作电位导致神经递质在突触间隙释放,进而导致突触后神经元产生电信号

这一事件序列使得神经元能够相互通信并形成复杂的网络,成为大脑和神经系统各种认知和生理功能的基础。

为了促进人工智能的发展,我们设计了人工神经网络 (ANN),它在一定程度上模仿大脑的工作方式,并能对标记数据进行相当好的分类。但它仍然无法复制大脑简化我们所观察或接收输入的复杂世界的能力。这是开发强人工智能所要应对的真正挑战,强人工智能可以使我们的系统更加智能,尽管大脑的工作机制仍是一个谜。这对于降低复杂性并在一段时间内形成有意义的抽象至关重要。提供在没有监督数据集的情况下找到模式并进行合理抽象的能力将使机器的性能与其高计算能力相结合,从而提高数倍。这是人工智能主要研究的下一个方向。因此,我们正在寻找不同的架构和学习方法,这些架构和学习方法可以更好地模拟我们的大脑功能,并有助于加速研究,摆脱当前 ANN 架构的缺陷。

脉冲神经网络的灵感来自人类大脑中的生物神经元。它们通过使用脉冲或离散事件来传递信息,从而模仿真实神经元的行为。这使得 SNN 比其他神经网络模型更符合生物学原理。

在生物学领域,神经元通过强大的电脉冲进行交流,这种脉冲被称为“尖峰”。因此,在这个人造领域,尖峰神经网络也紧随其后。它们摒弃了前辈的连续流,而是采用离散事件,即这些神秘的“尖峰”,来传达和处理知识。

正如神经元膜的微妙平衡决定了脉冲的产生,SNN 也包含这一本质。当膜电位超过神圣阈值时,脉冲就会出现,穿过网络,并影响其路径上的其它神经元。

确实,脉冲神经网络擅长理解神经群的时间节律。它们的优势在于捕捉脉冲的微妙舞动,把握时间的起伏。因此,它们能够完成辨别瞬态信号、处理事件和协调同步的任务。

a. 生物神经元 b. 人工神经元 c. 生物突触 d. 具有连接的人工神经网络

然而,构成 SNN 的线索多种多样。核心是脉冲神经元,由输入电流、膜电位和产生脉冲的机制组成。这些网络的训练是通过各种算法实现的,无论是无监督的、有监督的,还是在强化的指导下,调整突触权重以表现出所需的行为或从丰富的数据领域中收集模式。

  • 神经元模型:SNN 中的每个神经元都由一个模拟生物神经元行为的数学模型表示。最常用的模型是泄漏积分和激发 (LIF) 神经元模型。它由一个积累传入信号的膜电位和一个确定神经元何时激发脉冲的阈值组成。

  • 膜电位整合:神经元的膜电位通过整合来自其输入连接的传入信号而随时间更新。这些信号可以表示为尖峰或连续值。膜电位随着正输入信号的到来而增加,并由于泄漏项而随时间衰减。

  • 脉冲生成:一旦膜电位达到或超过某个阈值,神经元就会产生脉冲或动作电位。该脉冲是一个离散事件,代表神经元的输出信号。发射后,膜电位被重置为静息电位,并且可能会强制执行不应期,在此期间神经元暂时对传入信号没有反应。

  • 脉冲传播:神经元产生的脉冲通过加权连接传输到其他神经元。连接的权重决定了脉冲对接收神经元膜电位的影响。通常,权重会根据学习规则进行更新,例如脉冲时间依赖性可塑性 (STDP),它根据突触前和突触后脉冲的相对时间来加强或削弱连接。

  • 时间编码和解码:在 SNN 中,信息以脉冲的时间和模式进行编码。脉冲的精确时间携带着重要的时间信息。通过学习和训练,SNN 可以学习解码此时间代码并提取相关特征或执行特定任务,例如模式识别或序列处理。

  • 训练和学习:训练 SNN 涉及调整连接的权重以优化网络性能。已经为 SNN 开发了各种学习规则和算法,包括监督学习、无监督学习和强化学习。由于脉冲的离散性质和所涉及的时间动态,训练 SNN 可能比训练传统神经网络更具挑战性。

尽管 SNN 具有自身的优势并且正在积极研究中,但目前人们认为它们在多个方面落后于深度学习。以下是造成这种滞后的一些原因:

  • 训练复杂性:深度学习模型(例如卷积神经网络 (CNN) 和循环神经网络 (RNN))具有完善的训练算法(例如反向传播),这些算法高效且有效。另一方面,由于脉冲神经元的性质以及捕捉网络时间动态的需要,训练 SNN 更具挑战性。开发高效的 SNN 训练算法是一个活跃的研究领域。

  • 硬件支持有限:深度学习受益于专用硬件,例如 GPU 和 TPU,它们为训练和推理提供了显著的加速。然而,SNN 尚未获得同等程度的硬件优化。大多数现有硬件平台都是为传统人工神经网络设计的,这使得利用专门为 SNN 量身定制的硬件加速更具挑战性。一些硬件平台是 Spinnaker、英特尔 Loihi 芯片,但还有很多工作要做。

  • 缺乏标准化:深度学习受益于成熟的框架和库(例如 TensorFlow、PyTorch),这些框架和库提供了丰富的工具生态系统、预训练模型和社区支持。相比之下,SNN 缺乏可以支持基于 SNN 的模型的开发、训练和部署的标准化框架。标准化的缺乏阻碍了 SNN 的更广泛采用和发展。

  • 可扩展性:深度学习模型已展现出卓越的可扩展性,使其能够处理大规模数据集和复杂任务。然而,由于脉冲神经元建模的复杂性增加以及相关的时间动态,SNN 面临着可扩展性的挑战。扩展 SNN 以处理大规模数据集和复杂任务,同时保持效率和性能是一项持续的研究挑战。

  • 有限的基准测试和应用:深度学习已在各种任务和数据集上进行了广泛的基准测试,从而让人们更深入地了解了它的能力和局限性。相比之下,SNN 尚未在广泛的任务和数据集上进行广泛的基准测试。此外,深度学习已在各个行业得到广泛应用,推动了计算机视觉、自然语言处理和语音识别等领域的创新。SNN 仍处于应用开发的早期阶段,尚未在广泛的实际应用中表现出可比的性能。

值得注意的是,虽然 SNN 目前在某些方面落后于深度学习,但它们具有独特的属性,使其有望完成某些类型的任务。脉冲神经网络可以更好地模拟神经信息处理的时间动态,并且正在被探索用于基于事件的视觉和神经形态计算等应用。正在进行的研究旨在解决 SNN 目前的局限性并在未来充分发挥其潜力。

SNN 的应用涵盖了知识的各个领域。从神圣的神经科学研究殿堂到机器人、传感器网络和认知领域的勤奋领域,它们都有自己的用途。它们的优点在能源效率、稀疏信息处理和时间数据掌握领域中得到了体现。然而,这一奇迹也伴随着挑战,包括复杂性、训练算法和无限的可扩展性领域,学者们在孜孜不倦的追求中寻求克服这些挑战。

因此,脉冲神经网络证明了我们寻求理解自然界自身创造的复杂运作方式的努力。

二、是什么让脉冲神经网络发挥作用?


在这里,我们讨论脉冲神经网络的数学工作原理以及用于描述其操作的各种模型。

大脑中神经元及其活动的艺术可视化

根据计算单元,神经网络可分为三代:

  • 第一代:这一代神经网络包括感知器、霍普菲尔德网络、玻尔兹曼机等。

  • 第二代:这一代神经网络包括多层神经网络、循环网络等。

  • 第三代:这一代神经网络包括脉冲神经网络 (SNN),它更真实地表示了大脑内的工作和信息流。

脉冲神经网络如何工作?

两个生物神经元之间的神经受体的传递

光学微腔作为脉动神经元的图示

传统 ANN 和 SNN 之间的主要区别在于信息传播方法。SNN 试图更紧密地模仿生物神经网络。这就是为什么 SNN 不使用 ANN 中不断变化的时间值,而是使用在特定时间点发生的离散事件。SNN 接收一系列尖峰作为输入,并产生一系列尖峰作为输出(一系列尖峰通常称为尖峰序列)。

总体思路如下:

  • 在每个时间点,每个神经元都具有某种类似于生物神经元电势的值;

  • 神经元中的值可以根据神经元的数学模型而改变,例如,如果一个神经元从上游神经元接收到一个脉冲,那么该值可能会增加或减少;

  • 如果一个神经元的值超过某个阈值,那么该神经元就会向与初始神经元相连的每个下游神经元发送一个脉冲;

  • 此后,神经元的值将立即降至平均值以下。因此,神经元将经历与生物神经元不应期类似的过程。随着时间的推移,神经元的值将平稳地恢复到平均值。

SNN 模型

SNN 神经元实际上是建立在生物神经元的数学描述之上的。有两组基本方法用于对 SNN 神经元进行建模。

基于电导的模型描述了神经元中动作电位的启动和传播方式

  • Hodgkin-Huxley模型

  • 菲茨休–南云模型

  • 莫里斯-莱卡模型

  • Hindmarsh–Rose 模型

  • 伊日克维奇模型

  • 电缆理论

阈值模型在特定阈值处产生脉冲

  • 完美整合并发射

  • 泄漏的集成点火

  • 自适应集成发射

尽管所有这些方法都试图描述生物神经元,但基于这些模型构建的 SNN 神经元可能略有不同。

不同 SNN 模型及其计算成本的比较

这里我们将从以上两类中讲解三种最广泛使用的SNN模型:

1. Hodgkin-Huxley模型

霍奇金-赫胥黎模型是描述神经元中动作电位的产生和传播的数学模型。该模型由艾伦·霍奇金爵士和安德鲁·赫胥黎爵士于 1952 年开发,代表了我们对神经细胞电活动的理解的重大进步。

该模型特别关注鱿鱼巨轴突,这是一种长而相对较大的神经纤维,适合进行实验研究。霍奇金和赫胥黎对鱿鱼巨轴突进行了一系列实验,并利用这些数据开发了一组微分方程,准确描述了动作电位期间观察到的离子电流和膜电位变化。

Hodgkin-Huxley模型的关键组成部分包括:

  • 膜电容(Cₘ):表示神经元膜储存电荷的能力。

  • 钠电导(gₙₐ):描述膜对钠离子的渗透性。

  • 钾电导(gₖ):描述膜对钾离子的渗透性。

  • 泄漏电导(gₗ):表示其他离子的较小、恒定的电导。

该模型的方程式描述了电导率如何随时间变化以响应膜电位的变化,以及细胞内外离子浓度的影响。霍奇金-赫胥黎模型提供了对神经元中动作电位启动和传播的潜在机制的洞察。

神经元胞体内离子转移机制的图示。主要观察之一是氯离子的电荷抵消,但钾离子的电荷略大

基于 Hodgkin-Huxley 的等效电路图,近似描述树突中正在发生的过程

霍奇金-赫胥黎模型由一组四个常微分方程描述,这些方程控制膜电位的动态以及钠 (Na⁺)、钾 (K⁺) 和漏 (L) 电流的电导率。该模型是根据鱿鱼巨轴突的实验数据开发的。

膜方程如下

霍奇金-赫胥黎模型中定义的膜方程

钠活化变量方程(m)

钠失活变量 (h) 方程

钾活化变量(n)方程

这里:

  • V是膜电位。

  • C ₘ 是膜电容。

  • Iₑₓₜ 是外部电流

  • g ˉNa、g ˉK 和g ˉL 分别是钠、钾和漏电流的最大电导率。

  • m、h和n是无量纲门控变量,分别代表钠通道的激活、钠通道的失活和钾通道的激活。

  • E Na、E K 和E L 分别是钠、钾和漏电流的反转电位。

  • α ₘ、β ₘ、α ₕ、β ₕ、α ₙ、β ₙ 是控制离子通道开启和关闭的电压依赖性速率常数。

霍奇金赫胥黎模型中的门控方程

这些方程描述了膜电位的动态以及电压门控离子通道的开放和关闭,为可兴奋细胞中动作电位的产生和传播提供了定量的理解。

这些方程共同描述了神经元的膜电位如何响应外部刺激而发生变化,以及这种变化如何导致动作电位的产生。霍奇金-赫胥黎模型在神经科学中具有很高的影响力,并且仍然是理解神经元行为的基本模型。

霍奇金-赫胥黎模型的关键发现之一是电压门控离子通道的概念。根据该模型,这些通道的打开和关闭是电压依赖性的,允许神经元根据膜电位的变化调节离子流。该模型为我们理解神经元电信号传导的基本原理奠定了基础,并在神经科学领域产生了深远影响。

虽然最初的 Hodgkin-Huxley 模型是为鱿鱼巨型轴突开发的,但该模型的变体已被改编以描述不同类型的神经元和其他可兴奋细胞中的电活动。该模型有助于塑造我们对神经元兴奋性的生物物理学的理解,并且仍然是神经科学的一个基本概念。

2. Izhikevich模型

Izhikevich 模型是 Eugene M. Izhikevich 于 2003 年开发的一种简化的脉冲神经元数学模型。该模型以计算效率高的方式表示神经元脉冲行为的动态,同时保持一定的复杂度,能够捕捉生物神经元的关键特征。Izhikevich 模型由于其简单性以及能够复制真实神经元中观察到的各种放电模式的能力,特别适合用于模拟和计算研究。

该模型由两个耦合微分方程表示,一个用于膜电位(v),另一个用于恢复变量(u)。方程如下:

膜电位方程

当膜电位达到阈值时,就会产生尖峰,并使用重置条件更新变量,如图所示

这里:

  • v是膜电位。

  • u是恢复变量。

  • I是输入电流。

  • a、b、c和d是控制神经元动态的参数。

尖峰模型和尖峰的形成

Izhikevich 模型用途广泛,可以复制在真实神经元中观察到的一系列脉冲模式,例如规则脉冲、快速脉冲、爆发和颤动。该模型的灵活性使其可用于研究不同类型的神经元和神经网络的计算特性。

Izhikevich 模型的优势之一是其简单性,可以实现高效的数值模拟和分析。研究人员和计算神经科学家经常使用该模型来探索神经网络行为、突触可塑性和神经计算的其他方面。此外,该模型还被用于神经形态硬件的开发,旨在在电子电路中模拟大脑的计算原理。

3. 泄漏的集成点火

Leaky 积分与激发 (LIF) 模型是一种简单的数学模型,用于描述神经元对输入刺激的反应行为。由于其简单性和计算效率,该模型在计算神经科学中得到广泛应用。该模型捕捉了神经元积分与激发的基本原理,尽管它是真实神经元中生物物理复杂性的简化。

整合与火灾模型示意图

LIF 模型背后的关键思想是,神经元的膜电位会随时间整合传入的突触电流。当膜电位达到某个阈值时,神经元会激发,产生动作电位(尖峰)。此外,该模型还包含一个泄漏项,表示离子通过细胞膜的被动泄漏,这会导致膜电位在没有输入的情况下衰减至静息水平。

漏电集成及火灾模型示意图

LIF 模型的基本方程如下:

这里:

  • V是膜电位。

  • τ ₘ 是膜时间常数,表示膜电位在阶跃输入作用下达到最终值的约 63.2% 所需的时间。

  • I ( t )是输入电流。

  • Vᵣₑₛₜ 是静息膜电位。

  • Cₘ是膜电容。

当膜电位v达到预定义阈值V ₜₕᵣₑₛₕ 时,神经元会发出脉冲,膜电位会重置为静息值 Vᵣₑₛₑₜ。重置机制描述如下:

LIF 模型提供了一种计算效率高的方式来模拟神经元的放电行为,通常用于大规模神经网络模拟。虽然 LIF 模型缺乏 Hodgkin-Huxley 模型等更复杂的神经元模型的详细生物物理真实性,但它对于研究神经系统中的网络级特性和突发行为很有价值。它是更复杂模型的构建块,也是理解神经信息处理基本原理的有用工具。

基于 Izhikevich 模型的神经元脉冲响应

基于泄漏积分和激发模型的神经元脉冲响应

总结泄漏积分点火、Izhikevich 模型、Hodgkin-Huxley 模型

1.泄漏积分燃烧 (LIF) 模型:

  • 概念:

  • 一个简单的数学模型,描述神经元在一段时间内整合传入电流时的行为。

    主要特点:

  • 膜电位(v)整合输入直至达到阈值。

  • 一旦达到阈值,就会产生一个尖峰,并将膜电位重置为静息值。

  • 包括一个泄漏项,表示在没有输入的情况下膜电位的被动衰减。

2.Izhikevich模型:

  • 概念:

  • 为提高计算效率而设计的神经元模型,能够复制在真实神经元中观察到的各种脉冲模式。

    主要特点:

  • 灵活,能够模仿不同的射击模式,例如常规射击、快速射击、爆发等。

  • 与 Hodgkin-Huxley 模型相比,采用简化的形式,使其具有计算效率。

  • 对于神经网络的模拟和计算研究特别有用。

3.霍奇金-赫胥黎模型:

  • 概念:

  • 描述神经元中动作电位的产生和传播的详细生物物理模型。

    主要特点:

  • 基于对鱿鱼巨轴突的实验。

  • 包括钠和钾的电压门控离子通道以及漏电流。

  • 提供离子电流及其在动作电位产生中的作用的详细说明。

  • 这是理解神经元兴奋性的生物物理学的基础,广泛应用于神经科学。

总之,脉冲神经网络的数学涉及微分方程、代数方程和学习规则的组合,以捕捉单个神经元的脉冲行为及其在网络中的相互作用。这些数学模型可帮助研究人员和工程师了解 SNN 的计算特性及其在神经形态计算、模式识别和认知系统等领域的潜在应用。

三、脉冲神经网络架构


神经元及其互连的艺术可视化

脉冲神经网络 (SNN) 的数学涉及对单个神经元的动态和神经元之间的相互作用进行建模。SNN 是一种计算模型,其灵感来自生物神经元通过离散电事件(称为脉冲或动作电位)进行通信的方式。SNN 的数学通常包括以下关键组成部分:

1. 神经元模型:

  • 泄漏积分和激发 (LIF) 模型:描述神经元对传入电流的积分,当达到阈值时导致出现尖峰。

  • Izhikevich 模型:一种计算效率高的模型,能够重现真实神经元中观察到的各种脉冲模式。

  • 霍奇金-赫胥黎模型:一种考虑神经元膜中离子通道动态的生物物理详细模型。

2.突触相互作用:

  • 突触连接被建模用于在神经元之间传递信号。

  • 突触权重决定连接的强度并影响突触后神经元的膜电位。

3. 脉冲动力学:

  • 当神经元的膜电位超过某个阈值时,就会产生尖峰。

  • 脉冲时间、频率和模式在 SNN 中编码信息。

4.网络拓扑:

  • 神经元的排列及其连接形成网络拓扑。

  • 可以考虑不同的网络架构,例如前馈、循环或稀疏连接网络。

5.数学方程式:

  • 神经元的行为通常用常微分方程或差分方程来描述,捕捉膜电位、突触相互作用和脉冲产生的动态。

6.学习规则:

  • 突触可塑性规则控制突触权重如何随时间变化,从而实现网络学习。

  • 脉冲时间依赖可塑性 (STDP) 是一种基于突触前和突触后脉冲的相对时间的常见学习机制。

7.模拟与分析:

  • 数值模拟用于研究SNN 随时间的行为。

  • 采用相平面分析等分析工具来了解网络的动态。

人工神经网络与神经元动力学

SNN架构:


脉冲神经网络 (SNN) 是在计算神经科学中发展起来的,用于复制有机神经元的行为。因此,开发了泄漏整合和激发 (LIF) 模型,该模型将神经元活动描述为整合传入的脉冲和向环境的不良分散(泄漏)。


脉冲神经网络缺乏一般的线性结构。在这方面,除了输入层和输出层之外,它缺少一个独特的层。它们没有使用清晰的层,而是使用更复杂的结构(如循环或多向连接)在神经元之间传递数据。由于它们的复杂性,它们需要不同类型的训练和学习算法。为了适应脉冲行为,必须修改反向传播等技术。


典型的脉冲神经网络架构是:

典型的脉冲神经网络架构

让我们总结一下脉冲神经网络的总体思想:

  • 每个神经元的值与生物神经元的当前电位相同

  • 根据其数学模型,神经元的值可能会波动。例如,如果一个神经元从上游神经元接收到一个脉冲,其值可能会增加或减少

  • 一旦超过某个阈值,神经元的值就会降至平均值以下,此时它会向连接到原始神经元的每个下游神经元传输单个脉冲

  • 因此,神经元将具有与生物神经元相当的不应期。神经元的值最终将恢复到平均值

尽管 SNN 在概念上很独特,但它仍然是一个神经网络,因此 SNN 架构可以分为三类:

  • 前馈神经网络是一种经典的 NN 架构,广泛应用于所有行业。在这种架构中,数据严格沿一个方向传输 - 从输入到输出,没有循环,处理可以在多个隐藏层上进行。大多数现代 ANN 架构都是前馈的;

  • 循环神经网络(RNN) 是一种更高级的架构。在 RNN 中,神经元之间的连接沿着时间序列形成有向图。这使得网络能够表现出时间动态行为。如果 SNN 是循环的,它将是动态的并且具有很高的计算能力;

  • 在混合神经网络中,一些神经元将具有前馈连接,而其他神经元将具有循环连接。此外,这些组之间的连接也可能是前馈或循环的。有两种类型的混合神经网络可用作 SNN 架构:

  • Synfire 链是一个多层网络,允许脉冲活动以脉冲序列传输同步波的形式从一层传播到另一层并返回;

  • 储层计算可用于构建具有循环储层和输出神经元的储层 SNN。

卷积神经网络与脉冲神经网络的比较

Akida NSoC 架构

Akida Neuron 面料

“Akida” 设备具有用于系统和数据管理的片上处理器复合体,还用于指示神经元结构(稍后会详细介绍)处于训练或推理模式。这是在神经元结构中设置阈值的问题。然而,真正的关键是数据到脉冲转换器,特别是在计算机视觉等领域,像素数据需要转换为脉冲。从效率的角度来看,这不是一个计算成本高昂的问题,但它确实增加了一些编译器和软件步骤。目前有音频、像素和金融科技转换器在片上拥有自己的专用位置。


他们用来评估其性能和效率的 CIFAR 10 基准并不常见,但下面的图表强调的不仅仅是同类比较。它表明,这里的另一种神经形态架构 True North 具有出色的性能和效率,但考虑到工艺技术,价格昂贵,虽然没有显示英特尔的“Loihi”,但它很可能属于同一阵营。Beachler 表示,Brainchip 的真正故事是相对准确度的价格,对于更多的推理商店来说,10% 的差异可能是一个大问题。

他们正在使用 CIFAR 10 基准来评估其性能和效率

Brainchip 的“Akida”芯片既针对数据中心,也针对训练和推理,但实际上,正如该公司的产品负责人 Bob Beachler 告诉我们的那样,边缘推理才是主要目标。这尤其包括视觉系统,也包括金融技术应用,因为用户无法容忍来自云端的间歇性连接或延迟。


该公司的 Akida 开发环境将于今年第三季度发布,基于 FPGA 的加速器将于 2018 年底上市。到 2019 年,该公司希望推出其 SoC 样品,Akida 加速卡将于 2019 年底上市,每块板的芯片数量未公开。


基于脉冲的神经编码


人工脉冲神经网络旨在进行神经计算。这就要求神经脉冲具有意义:计算中重要的变量必须根据脉冲神经元与之通信的脉冲来定义。基于生物学知识,人们提出了多种神经元信息编码:

  • 二进制编码:

二进制编码是一种全有或全无的编码,其中神经元在特定时间间隔内要么活跃要么不活跃,在整个时间范围内发射一个或多个脉冲。生理神经元在接收输入(光或外部电输入等感官刺激)时往往会被激活,这一发现鼓励了这种编码。


单个神经元可以从这种二进制抽象中受益,因为它们被描绘为只能接受两个开/关值的二进制单元。它还可以应用于解释来自当前脉冲神经网络的脉冲序列,其中输出脉冲序列的二进制解释用于脉冲序列分类。

  • 费率编码:

速率编码中只使用间隔内脉冲的速率作为信息传递的度量,速率编码是对脉冲时间特性的抽象。生理神经元对更强的(感官或人工)刺激更频繁地激发,这一事实激发了速率编码。


它可以在单神经元级别使用,也可以再次用于解释脉冲序列。在第一种情况下,神经元直接描述为速率神经元,它们在每个时间步骤将实值输入数字“速率”转换为输出“速率”。在技术背景和认知研究中,速率编码一直是传统人工“S 形”神经元背后的概念。

  • 完全时间代码:

全时间代码的编码取决于所有脉冲的精确时间。神经科学证据表明,脉冲时间可以非常精确且可重复。时间与全时间代码中的某个(内部或外部)事件相关(例如刺激的开始或参考神经元的脉冲)。

  • 延迟编码:

延迟编码使用脉冲的时间,而不是脉冲的数量。特定(内部或外部)事件与第一个脉冲之间的延迟用于编码信息。这是基于以下发现:重大感官事件会导致上游神经元更早地产生脉冲。


这种编码已用于无监督和监督学习方法,例如 SpikeProp 和 Chronotron 等。有关刺激的信息按组中神经元产生第一个脉冲的顺序进行编码,这与等级顺序编码密切相关。


SNN 架构

脉冲神经网络的架构

以下是使用snnTorch库(https://snntorch.readthedocs.io/en/latest)对脉冲神经元的简单实现

$ pip install snntorch
import snntorch as snn
from snntorch import spikeplot as splt
from snntorch import spikegen
from matplotlib import pyplot as plt
def leaky_integrate_and_fire(mem, x, w, beta, threshold=1):
 spk = (mem > threshold) # if membrane exceeds threshold, spk=1, else, 0
 mem = beta * mem + w*x - spk*threshold
 return spk, mem
# set neuronal parameters
delta_t = torch.tensor(1e-3)
tau = torch.tensor(5e-3)
beta = torch.exp(-delta_t/tau)

print(f"The decay rate is: {beta:.3f}")
num_steps = 250

# initialize inputs/outputs + small step current input
x = torch.cat((torch.zeros(10), torch.ones(240)*0.5), 0)
mem = torch.zeros(1)
spk_out = torch.zeros(1)
mem_rec = []
spk_rec = []

# neuron parameters
w = 0.4
beta = 0.819

# neuron simulation
for step in range(num_steps):
 spk, mem = leaky_integrate_and_fire(mem, x[step], w=w, beta=beta)
 mem_rec.append(mem)
 spk_rec.append(spk)

# convert lists to tensors
mem_rec = torch.stack(mem_rec)
spk_rec = torch.stack(spk_rec)

可视化输入电流和膜电位随时间的增长。最后一张图显示了动作电位以规律的间隔发射


在 SNN 架构中,脉冲神经元和连接突触由可配置的标量权重描述。模拟输入数据使用基于速率的技术、某种时间编码或群体编码编码到脉冲序列中,作为构建 SNN 的初始阶段。


如前所述,大脑中的生物神经元(和模拟脉冲神经元)从神经网络中的其他神经元获得突触输入。动作电位产生和网络动态都存在于生物大脑网络中。


脉冲神经网络学习

SNN 中的学习规则


几乎所有 ANN(无论是脉冲还是非脉冲)都通过改变标量值突触权重来实现学习。脉冲允许复制一种生物可信的学习规则,而这种规则在非脉冲网络中是不可能实现的。神经科学家在总称脉冲时间依赖性可塑性 (STDP) 下发现了这种学习规则的许多变体。


其主要特征是,连接突触前和突触后神经元的权重(突触效能)会根据数十毫秒时间间隔内的相对脉冲时间而改变。权重调整基于突触本地和时间本地的信息。下一小节将介绍 SNN 中的无监督和监督学习技术。


  • 无监督学习

数据在传输过程中不带标签,网络也不会收到有关其性能的反馈。检测数据中的统计相关性并做出反应是一种常见的活动。Hebbian 学习及其脉冲泛化(如 STDP)就是一个很好的例子。识别相关性本身可以是一个目标,但它也可以用于稍后对数据进行聚类或分类。


STDP 被定义为一种过程,如果突触后神经元在突触前神经元激发后不久激活,则突触权重会增强,如果突触后神经元激发较晚,则突触权重会减弱。另一方面,这种传统形式的 STDP 只是 STDP 众多生理形式之一。


  • 监督学习

在监督学习中,数据(输入)伴随着标签(目标),学习设备的目的是将输入(类别)与目标输出(输入和输出之间的映射或回归)相关联。计算目标和实际输出之间的误差信号,并利用该信号更新网络的权重。


监督学习允许我们使用目标直接更新参数,而强化学习只为我们提供一个通用的错误信号(“奖励”),反映系统运行情况。在实践中,两种监督学习之间的界限很模糊。


如何训练SNN?


脉冲神经元网络 (SNN) 是第三代人工神经网络 (ANN) 的计算单元,它模仿的生物神经网络比 ANN 更难以区分。脉冲神经网络最重要的特征是能源效率和生物合理性。SNN 将时间概念融入其操作模型,该模型以时间相关的脉冲方式运行。脉冲神经网络常用的学习方法分为无监督学习和监督学习。与传统人工神经网络相比,脉冲神经网络的一些显着优势是与大脑的相似性、计算能力和事件驱动神经处理中的能源效率。


为实现 SNN 模型,开发了脉冲编码方法、脉冲神经网络架构和脉冲神经网络模拟。脉冲神经网络执行的各种功能包括数据/模式分类、估计、预测、信号处理和机器人控制应用。在神经科学领域,研究人员已经研究模拟脑规模的 SNN 来研究大脑功能。脉冲神经网络应用于不同的专业领域,其未来范围将集中在将强化学习融入 SNN,也用于物联网 (IoT) 和储层计算的边缘设备。


不幸的是,截至目前,还没有有效的监督可解释学习方法可用于训练 SNN。SNN 操作的关键概念不允许使用适合其他 NN 的经典学习方法。尽管如此,科学家仍在寻找最佳方法。这就是为什么训练 SNN 可能是一项艰巨任务的原因。不过,您可以将以下方法应用于 SNN 训练:

● 无监督学习

o脉冲时间依赖性可塑性 (STDP)(http://www.scholarpedia.org/article/Spike-timing_dependent_plasticity

o不断发展的脉冲神经网络(https://arxiv.org/pdf/1807.09374.pdf

o Artola、Bröcher、Singer (ABS) 规则(https://www.sciencedirect.com/science/article/abs/pii/016622369390081V

o Bienenstock、Cooper、Munro (BCM) 规则(http://www.scholarpedia.org/article/BCM_theory

o BCM 和 STDP 规则之间的关系(http://www.izhikevich.org/publications/bcm.pdf

● 监督学习

o SpikeProp(https://www.researchgate.net/publication/221165220_SpikeProp_backpropagation_for_networks_of_spiking_neurons

o远程监督方法(ReSuMe)(http://d1.cie.put.poznan.pl/pracownicy/prac_15/Publikacje/ReSuMe_FP_TechRep_2005a.pdf

频率分布(https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.5637&rep=rep1&type=pdf

o局部错误驱动的联想生物现实算法(LEABRA)(https://en.wikipedia.org/wiki/Leabra

o监督赫布学习(http://ecee.colorado.edu/~ecen4831/Demuth/Ch7_pres.pdf

● 强化学习

o Spiking Actor-Critic 方法()

o通过奖励调节的 STDP 进行强化学习(https://florian.io/papers/2007_Florian_Modulated_STDP.pdf

训练SNN


您已经了解了如何为我们的网络建模神经元,研究了它的响应,并分析了编码方法以获得我们想要的输入。现在到了最重要的过程:网络训练。人类大脑如何学习,这到底意味着什么?


学习是改变连接神经元的权重的过程,使其以理想的方式连接起来。然而,生物神经元使用突触来传递信息。权重变化相当于突触的连接强度,而突触连接强度可以随着时间推移而改变,这会导致突触可塑性。突触可塑性是突触改变其强度的能力。


突触时间依赖性可塑性 (STDP)


“一起激发的神经元会连接在一起”。这句话描述了我们将要讨论的著名的赫布学习和突触时间依赖可塑性 (STDP) 18学习方法。STDP 是一种基于以下原理的无监督方法。

神经元调整其突触前输入尖峰(前一个神经元的输入权重),以使输入尖峰与输出尖峰的时间相匹配。

数学表达式将有助于我们理解。

尖峰时间依赖可塑性 (STDP) 模型或如何理解记忆。


让我们考虑一个输入权重w 1。如果来自w 1 的脉冲在神经元发出脉冲之后到达,则权重会减小,因为输入脉冲对输出脉冲没有影响。


另一方面,在神经元激发之前到达的脉冲会强烈影响神经元脉冲的时间,因此它的权重会增加,以通过该突触在时间上连接两个神经元(权重w 1)。


由于这一过程,神经元的连接中出现了模式,并且已证明实现了学习。


SpikeProp


SpikeProp 是最早被使用的学习方法之一。它可以被认为是一种有监督的 STDP 学习方法。


核心原理是一样的:它根据脉冲时间改变突触权重。与 STDP 的不同之处在于,虽然 STDP 测量突触前和突触后脉冲时间的差异,但这里我们只关注神经元(突触后)产生的脉冲及其时间。

由于它是一种监督学习方法,因此我们需要一个目标值,即输出脉冲的期望发射时间。损失函数和突触的比例权重变化取决于最终脉冲时间和期望脉冲时间之间的差异。


换句话说,我们尝试以这样一种方式改变输入突触权重,使得输出尖峰的时间与最终尖峰的期望时间相匹配。


如果我们看一下损失函数的方程,我们会注意到它与 STDP 权重更新规则的相似性。

事实上,我们考虑输出与所需脉冲时间的差异,这使我们能够:a)创建类来对数据进行分类;b)使用具有类似反向传播规则的损失函数来更新神经元的输入权重。

或者

δj 项是权重更新的关键项,等于以下等式:

对 delta 项的调整可以为我们提供具有多层的 SpikeProp 的反向传播规则。


这种方法说明了 SNN 的强大功能。使用 SpikeProp,我们可以对单个神经元进行编码,以对给定问题的多个类别进行分类。例如,如果我们将第一个类别的所需输出时间设置为 50 毫秒,将第二个类别的所需输出时间设置为 75 毫秒,则单个神经元可以区分多个类别。这样做的缺点是神经元只能访问前 50 毫秒的信息来决定输入是否属于第一个类别。


Python 中的实现


人们对脉冲神经网络的兴趣日益浓厚,这导致了许多开发 Python SNN 库的尝试。仅举几个例子,Norse(https://github.com/electronicvisions/norse)、PySNN(https://github.com/BasBuller/PySNN)和snnTorch(https://github.com/jeshraghian/snntorch)在利用脉冲神经网络简化深度学习过程方面做得非常出色。请注意,它们还包含完整的文档和教程。


现在,让我们看看如何为著名的 MNIST 数据集创建自己的分类器。我们将使用Jason Eshraghian 20的 snnTorch 库来实现我们的目的,因为它使我们更容易理解网络的架构。SnnTorch可以被认为是扩展 PyTorch 库的库。


如何构建脉冲神经网络?


当然,使用 SNN 是一项具有挑战性的任务。不过,您可能会发现一些有趣且有用的工具:

  • 如果你想要一个可以帮助模拟脉冲神经网络并且主要由生物学家使用的软件,你可能需要检查:

  • GENESIS(https://en.wikipedia.org/wiki/GENESIS_(software)

  • Neuron(https://en.wikipedia.org/wiki/Neuron_(software)

  • Brian(https://en.wikipedia.org/wiki/Brian_(software)

  • NEST(https://en.wikipedia.org/wiki/NEST_(software)


如果您想要一个可以用来解决实际问题而不是理论问题的软件,您应该检查:

  • SpikeNet(https://www.sciencedirect.com/science/article/abs/pii/S0925231299000958


无论如何,如果你只是想触摸球体,那么你应该使用TensorFlow或SpykeTorch。不过,请注意,在没有专门硬件的情况下在本地使用 SNN 的计算成本非常高。


Tensorflow


您当然可以使用 Tensorflow 创建 SNN,但由于深度学习框架最初不是为使用 SNN 而创建的,因此您必须自己编写大量代码。请查看有关该主题的相关笔记本,其中包含基本的 SNN 模拟,可帮助您入门:

  • 使用 Tensorflow 模拟脉冲神经元(https://github.com/kaizouman/tensorsandbox/blob/master/snn/simple_spiking_model.ipynb

  • 使用 Tensorflow 进行泄漏积分并激发神经元(https://github.com/kaizouman/tensorsandbox/blob/master/snn/leaky_integrate_fire.ipynb


SpykeTorch


  • SpykeTorch(https://cnrl.ut.ac.ir/SpykeTorch/doc/index.html)是 PyTorch 生态系统中卷积脉冲神经网络的 Python 模拟器。希望它最初是为与 SNN 配合使用而开发的,这样您就可以使用高级 API 有效地完成任务。

  • 尽管文档不完整,但模拟器有一个很棒的教程可以帮助您顺利启动。


结论:


脉冲神经网络 (SNN) 是人工神经网络领域中一种独特且前景光明的架构,其灵感来源于生物神经元通过脉冲或动作电位进行通信的方式。在结束关于 SNN 架构的讨论时,出现了几个关键点:

  • 生物启发:SNN 旨在比传统的人工神经网络更接近地模拟大脑中观察到的神经过程。通过结合时间动态和基于脉冲的通信的概念,SNN 旨在捕捉生物系统中的效率和并行性。

  • 事件驱动处理:与以连续方式运行的传统神经网络不同,SNN 是事件驱动的。SNN 中的神经元响应输入刺激产生脉冲,从而实现更节能和异步的计算形式。这种事件驱动特性使 SNN 适合具有时间依赖性和动态输入模式的任务。

  • 稀疏且高效的表示:SNN 通常表现出稀疏的激活模式,这意味着在任何给定时间只有一部分神经元处于活动状态。这种稀疏性有助于提高计算效率、降低功耗并促进大规模神经网络的处理。

  • 时间信息处理:SNN 擅长处理时间信息,因为它们能够将时间编码到神经动态中。这使得它们非常适合涉及顺序数据的任务,例如语音识别、视频分析和时间序列预测。

  • 学习机制:与传统神经网络相比,训练 SNN 面临独特的挑战。脉冲时间依赖性可塑性 (STDP) 是 SNN 中常用的学习规则,其中脉冲的时间在调整突触权重方面起着至关重要的作用。这种受生物启发的学习机制使 SNN 能够适应不断变化的输入模式并从时间关系中学习。


总之,脉冲神经网络代表了一种令人着迷的神经计算方法,其灵感来自复杂的生物神经系统。虽然还有一些挑战需要克服,但在效率、时间处理和神经形态应用方面的潜在优势使 SNN 成为人工智能领域继续探索和进步的一个令人兴奋的领域。


四、脉冲神经网络的进展、应用和未来


Dalle 想象中的两个脉冲神经元 -3

脉冲神经网络 (SNN) 是一类人工神经网络,其灵感来源于生物神经元通过脉冲或动作电位进行交流的方式。它们与传统的人工神经网络(例如前馈神经网络和循环神经网络)的不同之处在于时间处理和事件驱动特性。

脉冲神经网络的实际应用和用例


脉冲神经网络特定的网络拓扑结构为机器人和计算机视觉领域开辟了广泛的可能性,引起了人工智能界的极大兴趣。其主要优势是使用神经形态硬件在脉冲神经网络中进行内存计算。

脉冲神经网络可用于许多不同的行业,包括:

  • 假肢:目前,已经有视觉和听觉神经假肢,它们使用脉冲序列向视觉皮层发送信号,并让患者恢复空间定位能力。此外,科学家正在研究使用相同方法的机械运动假肢。此外,脉冲序列可以通过植入电极输送到大脑,从而消除帕金森病、肌张力障碍、慢性疼痛和精神分裂症的症状。

  • 机器人:总部位于圣地亚哥的Brain Corporation使用 SNN开发机器人,而SyNAPSE则开发神经形态系统和处理器。

  • 计算机视觉:计算机视觉是可以从使用 SNN 进行自动视频分析中受益匪浅的领域。IBM TrueNorth数字神经芯片可以提供帮助,因为它包含一百万个可编程神经元和 2.56 亿个可编程突触,可模拟视觉皮层神经元的功能。这种神经芯片通常被认为是第一个专门设计用于与 SNN 配合使用的硬件工具。

  • 电信:高通正在积极研究将SNN 集成到电信设备中的可能性。

在不远的将来,人工大脑将变得十分现实


  1. 1.神经形态计算:SNN 对于开发模仿大脑结构和功能的神经形态计算系统至关重要。这些系统可应用于机器人技术、传感处理和认知计算。

IBM TrueNorth:IBM 开发的 TrueNorth 是一款神经形态芯片,旨在模拟人脑的并行处理能力。它由 4,096 个神经突触核心组成,每个核心包含 256 个可编程神经元和 256x256 个可编程突触。

TrueNorth: Design and Tool Flow of a 65 mW 1 Million Neuron Programmable Neurosynaptic Chip for IEEE TCADIS | IBM Research(https://research.ibm.com/publications/truenorth-design-and-tool-flow-of-a-65-mw-1-million-neuron-programmable-neurosynaptic-chip

TrueNorth: A Deep Dive into IBM’s Neuromorphic Chip Design — Open Neuromorphic (open-neuromorphic.org)(https://open-neuromorphic.org/blog/truenorth-deep-dive-ibm-neuromorphic-chip-design/

SpiNNaker(脉冲神经网络架构):由曼彻斯特大学牵头的 SpiNNaker 项目旨在创建一个模拟脉冲神经网络的大规模并行计算机系统。为此开发的 SpiNNaker 芯片可以实时模拟大规模神经网络。

Research Groups: APT — Advanced Processor Technologies (School of Computer Science — The University of Manchester)(https://apt.cs.manchester.ac.uk/projects/SpiNNaker/

BrainScaleS 项目:BrainScaleS 项目是欧洲人脑计划的一部分,专注于开发神经形态硬件。BrainScaleS 系统由在专用硬件上实现的神经元和突触的物理模型组成,用于模拟类似大脑的处理。

BrainScales BrainScaleS today (2020–2023) (uni-heidelberg.de)(https://brainscales.kip.uni-heidelberg.de/

Frontiers | The BrainScaleS-2 Accelerated Neuromorphic System With Hybrid Plasticity (frontiersin.org)(https://www.frontiersin.org/articles/10.3389/fnins.2022.795876/full

NeuroGrid: NeuroGrid 是斯坦福大学开发的神经形态计算平台。它旨在实时模拟一百万个神经元的行为,并已用于神经科学研究和神经活动模拟。

NeuroGrid: recording action potentials from the surface of the brain | Nature Neuroscience(https://www.nature.com/articles/nn.3905

https://web.stanford.edu/group/brainsinsilicon/documents/BenjaminEtAlNeurogrid2014.pdf

Loihi:Loihi 是英特尔实验室开发的一款神经形态芯片,具有大量人工神经元和突触,专为实时学习应用而设计,支持在线学习,能够适应不断变化的环境。

Neuromorphic Computing and Engineering with AI | Intel®(https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html

Loihi: A Neuromorphic Manycore Processor with On-Chip Learning (berkeley.edu)(https://redwood.berkeley.edu/wp-content/uploads/2021/08/Davies2018.pdf

BrainChip Akida:BrainChip 的 Akida 神经形态片上系统 (NSoC) 专为边缘计算应用而设计。它能够从传入数据中学习并实时做出决策。该芯片针对视觉传感器、音频分析和其他基于传感器的任务等应用。

Products — Akida Neural Processor SoC — BrainChip(https://brainchip.com/akida-neural-processor-soc/

Akida Generations — BrainChip(https://brainchip.com/akida-generations/

2. 脉冲神经网络硬件:SNN 的特定应用硬件实现正在边缘计算设备中用于图像和语音识别等任务,其中低功耗和实时处理至关重要。

3. 脑机接口:SNN 用于脑机接口,解码神经信号,允许用户通过直接的大脑通信来控制外部设备。

4. 认知机器人:SNN 在开发更多受生物启发的机器人方面发挥着作用,这些机器人可以实时适应和学习,使其适合复杂和动态的环境。

5. 模式识别:SNN 用于模式识别任务,尤其是在数据的时间动态至关重要的场景中,例如语音和手势识别。

脉冲神经网络的未来


数据科学家对 SNN 有两种看法:怀疑论者和乐观论者。

乐观主义者认为 SNN 代表着未来,因为:

  • 它们是 NN 进化的合乎逻辑的步骤;

  • 从理论上讲,它们比传统的 ANN 更强大;

  • 已经存在的 SNN实现展示了 SNN 的潜力。


  1. 增强学习规则:继续研究 SNN 更复杂的学习规则,以提高其从复杂多样的数据集中学习的能力。

  2. 可扩展性:解决可扩展性问题,以便训练更大、更复杂的脉冲神经网络来处理现实世界的应用。

  3. 与传统 AI 接口:将 SNN 与传统人工神经网络进一步结合,以创建更强大、用途更广泛的混合模型。

  4. 医疗保健中的应用:扩大SNN在医疗保健领域的应用,用于医学图像分析、疾病诊断和个性化医疗等任务。

  5. 认知计算:SNN 的进步支持能够模拟高阶大脑功能的更复杂的认知计算系统的开发。

  6. 了解生物系统:使用 SNN 作为了解和模拟复杂生物系统的工具,从而深入了解大脑功能和潜在的治疗干预措施。


另一方面,怀疑论者认为 SNN 被高估了,原因如下:

  • 目前没有专门针对SNN设计的学习方法;

  • 有效使用 SNN 需要专门的硬件;

  • 它们在各个行业中并不常用,要么是一种小众解决方案,要么只是一个花哨的想法;

  • SNN 的解释能力不如 ANN;

  • 关于SNN的理论文章比实践文章多;

  • 尽管已经存在了一段时间,但 SNN 领域仍然没有取得重大突破。

因此,SNN 的未来尚不明朗。在我看来,SNN 只是需要更多的时间和研究才能发挥作用。

神经元连接的艺术渲染

脉冲神经网络的优点和缺点


脉冲神经网络与传统神经网络相比具有几个明显的优势。脉冲神经网络的优点和缺点如下表所示:

  1. SNN 是动态的。因此,它擅长处理语音和动态图像识别等动态过程;

  2. SNN 在工作时仍可进行训练;

  3. 您只需要训练输出神经元来训练SNN;

  4. SNN 通常比传统 ANN 具有更少的神经元;

  5. SNN 可以工作非常快,因为神经元会发送脉冲而不是连续值;

  6. 由于 SNN 使用信息的时间呈现方式,因此提高了信息处理的效率和抗噪能力。

不幸的是,SNN 也有两个主要缺点:

  1. SNN 很难训练。目前还没有专门针对此任务设计的学习方法;

  2. 建立小型的SNN是不切实际的。


脉冲神经网络的挑战


从理论上讲,SNN 比当前一代 NN 更强大。不过,在 SNN 得到广泛应用之前,仍有两个严峻的挑战需要解决:

  1. 第一个挑战来自于缺乏专门为 SNN 训练开发的学习方法。SNN 操作的具体性不允许数据科学家有效地使用传统的学习方法,例如梯度下降。当然,有无监督的生物学习方法可用于训练 SNN。然而,这将是耗时的,而且无关紧要,因为传统的 ANN 会学得更快、更好;

  2. 第二个是硬件。使用 SNN 需要计算大量资源,因为它需要求解许多微分方程。因此,如果没有专门的硬件,您将无法有效地在本地工作。


脉冲神经网络的进展:


  1. 生物学启发:神经科学研究的进步有助于更好地理解大脑的功能,从而改进了脉冲神经元及其相互作用的模型。

  2. 学习算法:开发专门针对 SNN 的学习算法,例如脉冲时间依赖可塑性 (STDP),它可以解释学习过程中脉冲的精确时间。

  3. 硬件实现:专门的硬件加速器和神经形态芯片,旨在有效模拟和处理脉冲神经网络,提高能源效率和实时性能。

  4. 深度脉冲神经网络:将 SNN 扩展到更深的架构,从而能够开发利用脉冲神经元优势的深度学习模型。

  5. 混合模型:将 SNN 与传统人工神经网络相结合,创建结合两种方法优势的混合模型,实现更灵活、更强大的学习。

  6. 事件驱动处理:利用 SNN 的事件驱动特性有效处理时间数据,使其适用于涉及时间序列数据和基于事件的感知的应用。


学习脉冲神经网络的资源


脉冲神经网络 (SNN) 是一种特定类型的人工神经网络,它采用更受生物启发的方法,将神经元建模为通过脉冲或脉冲进行通信的实体。脉冲神经网络 (SNN) 领域不断发展,研究人员不断贡献宝贵见解。以下是一些涵盖脉冲神经网络各个方面的研究论文和书籍:

研究论文:

  1. Title: “Spiking Neuron Models: Single Neurons, Populations, Plasticity” Authors: Wulfram Gerstner, Werner M. Kistler, Richard Naud, and Liam Paninski (https://lcn.epfl.ch/~gerstner/SPNM/node26.html

  2. Title: “Neuronal Dynamics: From Single Neurons to Networks and Models of Cognition” Authors: Wulfram Gerstner and Werner M. Kistler (https://neuronaldynamics.epfl.ch/

  3. Title: “Biological learning curves outperform existing ones in neural networks” Authors: Rui Xu, Bo Li, Chunpeng Wu, Yansong Chua, and Bertram E. Shi (https://arxiv.org/abs/1911.02685

  4. Title: “Spiking Neural Networks for Computer Vision” Authors: Sander M. Bohte, Jorg Conradt, and Eugene M. Izhikevich (https://arxiv.org/abs/1802.02627

  5. Title: “Spiking neural networks: principles and challenges” Authors: Izhikevich, E. M. (https://www.sciencedirect.com/science/article/pii/S136466130400247X

  6. Title: “Learning to Communicate with Spiking Neurons” Authors: S. Diehl, D. Neil, J. Binas, M. Cook, S.-C. Liu, and M. Pfeiffer (https://pub.uni-bielefeld.de/record/2907228

  7. Title: “Deep Spiking Neural Networks With LIF Neurons” Authors: S. K. Esser, R. Appuswamy, P. Merolla, J. V. Arthur, and D. S. Modha (https://www.frontiersin.org/articles/10.3389/fnins.2015.00073/full

  8. Title: “Surrogate Gradient Learning in Spiking Neural Networks: Bringing the Wisdom of Hodgkin–Huxley into Deep Learning” Authors: Friedemann Zenke, Surya Ganguli (https://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1006582

  9. Title: “Training deep spiking neural networks using backpropagation” Authors: Guillaume Bellec, Darjan Salaj, Anand Subramoney, Robert Legenstein, Wolfgang Maass (https://arxiv.org/abs/1811.05281


图书:

  1. Title: “Principles of Neural Coding” Authors: Rodrigo Quian Quiroga (https://www.springer.com/gp/book/9781420072880

  2. Title: “Spiking Neuron Models” Authors: Wulfram Gerstner, Werner M. Kistler, Richard Naud, and Liam Paninski (https://www.cambridge.org/9781107027540

  3. Title: “Neural Engineering: Computation, Representation, and Dynamics in Neurobiological Systems” Authors: Chris Eliasmith and Charles H. Anderson (https://mitpress.mit.edu/books/neural-engineering

  4. Title: “Neural Networks and Learning Machines” Authors: Simon O. Haykin (https://www.pearson.com/us/higher-education/program/Haykin-Neural-Networks-and-Learning-Machines-3rd-Edition/PGM332419.html

  5. Title: “Neuronal Dynamics: From Single Neurons to Networks and Models of Cognition” Authors: Wulfram Gerstner and Werner M. Kistler (https://neuronaldynamics.epfl.ch/

  6. Title: “Theoretical Neuroscience: Computational and Mathematical Modeling of Neural Systems” Authors: Peter Dayan and Laurence Abott (https://www.amazon.in/Theoretical-Neuroscience-Computational-Mathematical-Modeling/dp/0262541858

  7. Title: “Spiking Neural Networks: Theory and Applications” Authors: Eugenio U. Hernandez, Aurel A. Lazar (https://www.springer.com/gp/book/9783319011702

  8. Title: “Spiking Neural Networks for Artificial Intelligence” Authors: K. I. Diamantaras, S. I. Fotopoulos (https://www.springer.com/gp/book/9780387786058

  9. Title: “Spiking Neuron Models: An Introduction” Authors: Thorpe, S., & Gautrais, J. (https://link.springer.com/chapter/10.1007/978-3-642-14047-9_8

  10. Title: “Spiking Neural Networks: From Concept to Implementation” Authors: Bernd Porr, Florentin Wörgötter (https://link.springer.com/book/10.1007/978-1-4471-6188-2


SNUFA年度在线研讨会将脉冲神经网络研究人员聚集在一起,展示他们的工作成果,并讨论如何将这些发现转化为对神经回路和新型大脑启发式计算方法的更好理解。感兴趣的主题包括人工和生物学上可行的学习算法,以及对经过训练的脉冲回路进行剖析以了解神经处理。

SNUFA | Spiking Neural networks as Universal Function Approximators (https://snufa.net/

这里提到了一些免费资源,可帮助您开始理解和实现脉冲神经网络(某些链接可能会更改,您也可以自行搜索):

GitHub - zhouchenlin2096/Awesome-Spiking-Neural-Networks:脉冲神经网络的论文列表……

脉冲神经网络的论文列表,包括论文、代码和相关网站。- GitHub …

https://github.com/zhouchenlin2096/Awesome-Spiking-Neural-Networks

GitHub - vvvityaaa/awesome-spiking-neural-networks:Spiking Neural 的精选材料清单……

脉冲神经网络(第三代人工神经网络)的材料精选列表。- GitHub ...

https://github.com/vvvityaaa/awesome-spiking-neural-networks

这些资源涵盖了一系列主题,包括脉冲神经网络的理论、应用和训练方法。请记住,该领域正在迅速发展,因此探索最新的会议论文集和期刊以了解脉冲神经网络的前沿研究是有益的。

结论


脉冲神经网络毫无疑问代表了人工智能行业的一个里程碑。然而,另一方面,怀疑论者认为脉冲神经网络被高估了。在本文中,我们了解了脉冲神经网络的定义、工作原理、脉冲神经网络的用例以及脉冲神经网络的优缺点。

五、使用脉冲神经网络对医疗数据进行分类


神经元动作电位运动的艺术可视化

在不断发展的生物医学研究领域中,对标准化数据集的需求在推动机器学习和计算机视觉应用方面发挥着关键作用。Zenodo 的研究人员已经提供了MedMNIST,这是一个类似于 MNIST 的大规模标准化生物医学图像集合,包括 12 个 2D 数据集和 6 个 3D 图像数据集。MedMNIST 旨在对轻量级 2D 和 3D 图像进行分类,具有各种数据规模(从 100 到 100,000)和各种任务(二分类/多分类、有序回归和多标签)。由此产生的数据集总共包含约 708K 张 2D 图像和 10K 张 3D 图像,可以支持生物医学图像分析、计算机视觉和机器学习中的众多研究和教育目的。

人们可以找到有关论文、研究、如何使用数据集以及为其 GitHub 存储库做出贡献的详细信息 |点击此

在我们的实验中,我们将使用MedMNIST v2

不同 MedMNIST 数据集的可视化表示


MedMNIST v2 中分类十项全能的关键特性

MedMNIST 分类十项全能具有几个主要特点:

  • 多样化任务:该基准涵盖了一系列医疗状况和成像方式,可确保 AutoML 工具在各种分类挑战中得到测试。

  • 可扩展性:基准测试涵盖从二分类和多类分类到有序回归和多标签分类等任务,可以满足各种复杂性的需求,从而可以在评估 AutoML 性能时具有可扩展性。

  • 用户友好数据集:利用熟悉的 MedMNIST 数据集,该基准提高了可访问性,使其对于经验丰富的研究人员和刚进入该领域的研究人员都十分友好。


迈向医学成像 AutoML 的进步

MedMNIST 分类十项全能不仅为 AutoML 工具提供了强大的评估平台,而且还推动了医学图像分析的进步。通过鼓励研究人员突破医疗保健领域自动化机器学习的界限,该基准旨在加速开发能够彻底改变医疗状况诊断和治疗的工具。

主要特点:

  • 多样性:它涵盖了多种数据模式、数据集规模(从 100 到 100,000)和任务(二分类/多分类、多标签和有序回归)。它与 VDD 和 MSD 一样多样化,可以公平地评估机器学习算法在不同设置中的可推广性能,但同时提供 2D 和 3D 生物医学图像。

  • 标准化:每个子数据集都预处理成相同的格式,不需要用户有任何背景知识。作为一个类似MNIST的数据集集合,用于对小图像进行分类任务,它主要关注机器学习部分,而不是端到端系统。

  • 轻量级:28×28(2D)或28×28×28(3D)的小尺寸有利于评估机器学习算法。

  • 教育:作为一个跨学科的研究领域,生物医学图像分析对于其他社区的研究人员来说很难掌握,因为它需要计算机视觉、机器学习、生物医学成像和临床科学的背景知识。

总之,MedMNIST v2 成为一项开创性的资源,为生物医学研究、计算机视觉和机器学习的进步奠定了基础。它的标准化格式、多样化的任务和可扩展性使其成为经验丰富的研究人员和那些涉足令人兴奋的生物医学图像分析领域的研究人员的宝贵资产。

使用传统 ConvNet 和脉冲神经网络实现 MedMNIST 分类的 Python 实现

PathMNIST 基于一项先前的研究,该研究用于预测结直肠癌组织学切片的存活率,提供了来自苏木精和伊红染色的组织学图像的 100,000 个不重叠图像块的数据集 (NCT-CRC-HE-100K) 和来自不同临床中心的 7,180 个图像块的测试数据集 (CRC-VAL-HE-7K)。该数据集由 9 种组织组成,因此需要进行多类分类任务。每个子集(例如 pathmnist.npz)由 6 个键组成:train_images、train_labels、val_images、val_labels、test_images 和 test_labels。

第一个任务是使用 pip 安装 medmnist 包,然后下载 pathmnist 数据集,用于可视化和训练用于分类的卷积神经网络

!pip install medmnist
from tqdm import tqdm
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torch.utils.data as data
import torchvision.transforms as transforms

import medmnist
from medmnist import INFO, Evaluator
print(f"MedMNIST v{medmnist.__version__} @ {medmnist.HOMEPAGE}")
#output of the print statement 

MedMNIST v2.2.3 @ https://github.com/MedMNIST/MedMNIST/
# we select pathmnist to download

data_flag = 'pathmnist'
download = True

NUM_EPOCHS = 3
BATCH_SIZE = 128
lr = 0.001

info = INFO[data_flag]
task = info['task']
n_channels = info['n_channels']
n_classes = len(info['label'])

DataClass = getattr(medmnist, info['python_class'])

# preprocessing
data_transform = transforms.Compose([
   transforms.ToTensor(),
   transforms.Normalize(mean=[.5], std=[.5])
])

# load the data
train_dataset = DataClass(split='train', transform=data_transform, download=download)
test_dataset = DataClass(split='test', transform=data_transform, download=download)

pil_dataset = DataClass(split='train', download=download)

# encapsulate data into dataloader form
train_loader = data.DataLoader(dataset=train_dataset, batch_size=BATCH_SIZE, shuffle=True)
train_loader_at_eval = data.DataLoader(dataset=train_dataset, batch_size=2*BATCH_SIZE, shuffle=False)
test_loader = data.DataLoader(dataset=test_dataset, batch_size=2*BATCH_SIZE, shuffle=False)
# montage of 16 x 16 

train_dataset.montage(length=16)

通过 pathmnist 数据集提取的结直肠癌组织学幻灯片的可视化


我们假设阅读此博客的每个人都熟悉使用 Pytorch 进行构建以及使用 ConvNets 对图像进行分类。

# define a simple CNN model

class Net(nn.Module):
   def __init__(self, in_channels, num_classes):
       super(Net, self).__init__()

       self.layer1 = nn.Sequential(
           nn.Conv2d(in_channels, 16, kernel_size=3),
           nn.BatchNorm2d(16),
           nn.ReLU())

       self.layer2 = nn.Sequential(
           nn.Conv2d(16, 16, kernel_size=3),
           nn.BatchNorm2d(16),
           nn.ReLU(),
           nn.MaxPool2d(kernel_size=2, stride=2))

       self.layer3 = nn.Sequential(
           nn.Conv2d(16, 64, kernel_size=3),
           nn.BatchNorm2d(64),
           nn.ReLU())
       
       self.layer4 = nn.Sequential(
           nn.Conv2d(64, 64, kernel_size=3),
           nn.BatchNorm2d(64),
           nn.ReLU())

       self.layer5 = nn.Sequential(
           nn.Conv2d(64, 64, kernel_size=3, padding=1),
           nn.BatchNorm2d(64),
           nn.ReLU(),
           nn.MaxPool2d(kernel_size=2, stride=2))

       self.fc = nn.Sequential(
           nn.Linear(64 * 4 * 4, 128),
           nn.ReLU(),
           nn.Linear(128, 128),
           nn.ReLU(),
           nn.Linear(128, num_classes))

   def forward(self, x):
       x = self.layer1(x)
       x = self.layer2(x)
       x = self.layer3(x)
       x = self.layer4(x)
       x = self.layer5(x)
       x = x.view(x.size(0), -1)
       x = self.fc(x)
       return x
model = Net(in_channels=n_channels, num_classes=n_classes)
   
# define loss function and optimizer
if task == "multi-label, binary-class":
   criterion = nn.BCEWithLogitsLoss()
else:
   criterion = nn.CrossEntropyLoss()
   
optimizer = optim.SGD(model.parameters(), lr=lr, momentum=0.9)
# training process

for epoch in range(NUM_EPOCHS):
   train_correct = 0
   train_total = 0
   test_correct = 0
   test_total = 0
   
   model.train()
   for inputs, targets in tqdm(train_loader):
       # forward + backward + optimize
       optimizer.zero_grad()
       outputs = model(inputs)
       
       if task == 'multi-label, binary-class':
           targets = targets.to(torch.float32)
           loss = criterion(outputs, targets)
       else:
           targets = targets.squeeze().long()
           loss = criterion(outputs, targets)
       
       loss.backward()
       optimizer.step()
# evaluation

def test(split):
   model.eval()
   y_true = torch.tensor([])
   y_score = torch.tensor([])
   
   data_loader = train_loader_at_eval if split == 'train' else test_loader

   with torch.no_grad():
       for inputs, targets in data_loader:
           outputs = model(inputs)

           if task == 'multi-label, binary-class':
               targets = targets.to(torch.float32)
               outputs = outputs.softmax(dim=-1)
           else:
               targets = targets.squeeze().long()
               outputs = outputs.softmax(dim=-1)
               targets = targets.float().resize_(len(targets), 1)

           y_true = torch.cat((y_true, targets), 0)
           y_score = torch.cat((y_score, outputs), 0)

       y_true = y_true.numpy()
       y_score = y_score.detach().numpy()
       
       evaluator = Evaluator(data_flag, split)
       metrics = evaluator.evaluate(y_score)
   
       print('%s  auc: %.3f  acc:%.3f' % (split, *metrics))

       
print('==> Evaluating ...')
test('train')
test('test')#output of the experiment
==> Evaluating ...
train  auc: 0.986  acc:0.823
test  auc: 0.948  acc:0.662


让我们使用脉冲神经网络实现同样的功能。

我们将使用snnTorch库来实现 ConvNets 的 Leaky 版本。snnTorch是一个 Python 包,用于使用脉冲神经网络执行基于梯度的学习。它扩展了 PyTorch 的功能,利用其 GPU 加速张量计算并将其应用于脉冲神经元网络。

首先,我们将使用 pip 安装snnTorch,然后构建一个泄漏版本的 ConvNet 进行分类。

! pip install snntorch
import snntorch as snn
from snntorch import spikeplot as splt
from snntorch import spikegen
# Leaky neuron model, overriding the backward pass with a custom function
class LeakySigmoidSurrogate(nn.Module):
 def __init__(self, beta, threshold=1.0, k=25):

     # Leaky_Surrogate is defined in the previous tutorial and not used here
     super(Leaky_Surrogate, self).__init__()

     # initialize decay rate beta and threshold
     self.beta = beta
     self.threshold = threshold
     self.surrogate_func = self.FastSigmoid.apply

 # the forward function is called each time we call Leaky
 def forward(self, input_, mem):
   spk = self.surrogate_func((mem-self.threshold))  # call the Heaviside function
   reset = (spk - self.threshold).detach()
   mem = self.beta * mem + input_ - reset
   return spk, mem

 # Forward pass: Heaviside function
 # Backward pass: Override Dirac Delta with gradient of fast sigmoid
 @staticmethod
 class FastSigmoid(torch.autograd.Function):
   @staticmethod
   def forward(ctx, mem, k=25):
       ctx.save_for_backward(mem) # store the membrane potential for use in the backward pass
       ctx.k = k
       out = (mem > 0).float() # Heaviside on the forward pass: Eq(1)
       return out

   @staticmethod
   def backward(ctx, grad_output):
       (mem,) = ctx.saved_tensors  # retrieve membrane potential
       grad_input = grad_output.clone()
       grad = grad_input / (ctx.k * torch.abs(mem) + 1.0) ** 2  # gradient of fast sigmoid on backward pass: Eq(4)
       return grad, None


spike_grad = surrogate.fast_sigmoid(slope=25)
beta = 0.5

lif1 = snn.Leaky(beta=beta, spike_grad=spike_grad)
# dataloader arguments
batch_size = 128
data_flag = 'pathmnist'
download = True

dtype = torch.float
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
# neuron and simulation parameters
spike_grad = surrogate.fast_sigmoid(slope=25)
beta = 0.5
num_steps = 50
# Define Network
class Net(nn.Module):
   def __init__(self):
       super().__init__()

       # Initialize layers
       self.conv1 = nn.Conv2d(1, 12, 5)
       self.lif1 = snn.Leaky(beta=beta, spike_grad=spike_grad)
       self.conv2 = nn.Conv2d(12, 64, 5)
       self.lif2 = snn.Leaky(beta=beta, spike_grad=spike_grad)
       self.fc1 = nn.Linear(64*4*4, 10)
       self.lif3 = snn.Leaky(beta=beta, spike_grad=spike_grad)

   def forward(self, x):

       # Initialize hidden states and outputs at t=0
       mem1 = self.lif1.init_leaky()
       mem2 = self.lif2.init_leaky()
       mem3 = self.lif3.init_leaky()

       cur1 = F.max_pool2d(self.conv1(x), 2)
       spk1, mem1 = self.lif1(cur1, mem1)

       cur2 = F.max_pool2d(self.conv2(spk1), 2)
       spk2, mem2 = self.lif2(cur2, mem2)

       cur3 = self.fc1(spk2.view(batch_size, -1))
       spk3, mem3 = self.lif3(cur3, mem3)
       return spk3, mem3

#  Initialize Network
net = nn.Sequential(nn.Conv2d(1, 12, 5),
                   nn.MaxPool2d(2),
                   snn.Leaky(beta=beta, spike_grad=spike_grad, init_hidden=True),
                   nn.Conv2d(12, 64, 5),
                   nn.MaxPool2d(2),
                   snn.Leaky(beta=beta, spike_grad=spike_grad, init_hidden=True),
                   nn.Flatten(),
                   nn.Linear(64*4*4, 10),
                   snn.Leaky(beta=beta, spike_grad=spike_grad, init_hidden=True, output=True)
                   ).to(device)data, targets = next(iter(train_loader))
data = data.to(device)
targets = targets.to(device)

for step in range(num_steps):
   spk_out, mem_out = net(data)

def forward_pass(net, num_steps, data):
 mem_rec = []
 spk_rec = []
 utils.reset(net)  # resets hidden states for all LIF neurons in net

 for step in range(num_steps):
     spk_out, mem_out = net(data)
     spk_rec.append(spk_out)
     mem_rec.append(mem_out)

 return torch.stack(spk_rec), torch.stack(mem_rec)
spk_rec, mem_rec = forward_pass(net, num_steps, data)
acc = SF.accuracy_rate(spk_rec, targets)
def batch_accuracy(train_loader, net, num_steps):
 with torch.no_grad():
   total = 0
   acc = 0
   net.eval()

   train_loader = iter(train_loader)
   for data, targets in train_loader:
     data = data.to(device)
     targets = targets.to(device)
     spk_rec, _ = forward_pass(net, num_steps, data)

     acc += SF.accuracy_rate(spk_rec, targets) * spk_rec.size(1)
     total += spk_rec.size(1)

 return acc/total



test_acc = batch_accuracy(test_loader, net, num_steps)

print(f"The total accuracy on the test set is: {test_acc * 100:.2f}%")
optimizer = torch.optim.Adam(net.parameters(), lr=1e-2, betas=(0.9, 0.999))
num_epochs = 1
loss_hist = []
test_acc_hist = []
counter = 0

# Outer training loop
for epoch in range(num_epochs):

   # Training loop
   for data, targets in iter(train_loader):
       data = data.to(device)
       targets = targets.to(device)

       # forward pass
       net.train()
       spk_rec, _ = forward_pass(net, num_steps, data)

       # initialize the loss & sum over time
       loss_val = loss_fn(spk_rec, targets)

       # Gradient calculation + weight update
       optimizer.zero_grad()
       loss_val.backward()
       optimizer.step()

       # Store loss history for future plotting
       loss_hist.append(loss_val.item())

       # Test set
       if counter % 50 == 0:
         with torch.no_grad():
             net.eval()

             # Test set forward pass
             test_acc = batch_accuracy(test_loader, net, num_steps)
             print(f"Iteration {counter}, Test Acc: {test_acc * 100:.2f}%\n")
             test_acc_hist.append(test_acc.item())

       counter += 1
# Plot loss
plt.plot(train_losses,label="train_losses")
plt.plot(test_losses,label="test_losses")
plt.title("Plot for Loss")
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.legend()

# final outcome

Iteration 450, Test Acc: 61.2%

我们可以看到,即使使用最小的架构,我们也能够复制 ConvNet 的性能,尽管在性能和 GPU 上所花费的时间方面还有很长的路要走。请记住,我们只是在 GPU 上模拟 Leaky Spiking 神经网络行为,真正的测试将在真正的神经形态硬件上进行。

结论和最终想法

总之,虽然 SNN 为更具生物学合理性和节能性的神经网络架构提供了一条有希望的途径,但在训练方法、硬件实现和广泛采用方面仍然存在挑战需要克服。这些领域的持续研究和进步可能会有助于将 SNN 成功整合到各种实际应用中。神经形态计算和脉冲神经网络的结合代表了一种构建计算系统的方法,该方法从人类大脑的原理中汲取灵感,重点是效率、并行性和事件驱动处理。这种融合有望推动人工智能和认知计算领域的发展。随着脉冲神经网络研究的持续,它们的潜在应用和对各个领域的影响可能会扩大,使它们成为更广泛的人工智能领域中一个令人兴奋的研究领域。脉冲神经网络代表了一种令人着迷的神经计算方法,从复杂的生物神经系统中汲取灵感。尽管仍存在一些挑战需要克服,但在效率、时间处理和神经形态应用方面的潜在优势使得 SNN 成为人工智能领域持续探索和进步的一个令人兴奋的领域。

微信群

内容中包含的图片若涉及版权问题,请及时与我们联系删除