一文通俗入门·脉冲神经网络·第三代神经网络

目录

一、前言        

二、脉冲神经网络的基本要素及学习算法

(一)脉冲神经元

(二)信息编码

1. 频率编码

2. 时间编码

三、学习算法

(一)基于BP的直接训练算法

(二)无监督学习算法

(三)ANN-SNN转换算法


一、前言        

        ANN经历了几代进化,从感知机到基于联结主义的多层神经网络,再到以卷积神经网络为基础的深度学习方案。虽然取得了显著进步,但深度神经网络仍面临着诸多挑战,如功耗效率、安全性、可解释性和在线学习能力等。

        相比之下,脉冲神经网络(Spiking Neural Network,SNN)在类脑计算研究中占据核心地位,被认为是新一代的神经网络。SNN以脉冲神经元为计算单元,模仿人类大脑的信息编码和处理过程。它采用离散事件(脉冲)对数据进行编码处理,相比ANN,能耗显著降低,计算能力更加突出。在神经元模型方面,SNN采用具有记忆的非差分神经元模型,如霍奇金-赫胥黎(H-H)模型、泄漏积分发射(LIF)模型等。这种模型具备可提取数据时空特征、功耗更低、更适合并行计算的优势,因此在语音识别、视觉处理、医疗诊断等领域得到了广泛应用。

在接下来的内容中,本文将介绍SNN的基本要素和学习算法。

二、脉冲神经网络的基本要素及学习算法

(一)脉冲神经元

        SNN的基本计算单元是脉冲神经元,其活动以离散的脉冲形式进行。不同于传统神经元的连续激活值,脉冲神经元通过发放脉冲来传递信息,模拟生物神经元的行为。经过多年发展,已建立了多种脉冲神经元模型,如H-H模型、LIF模型、Izhikevich 模型和脉冲响应模型(SRM)等。下面以LIF神经元模型为例介绍脉冲神经元的工作原理:

LIF神经元微分版方程
LIF神经元离散版方程
LIF神经元等效电路图

 

        (1)输入加权和: 脉冲神经元接收来自其他神经元或外部输入的信号,每个输入信号都有一个对应的突触权重。这些输入信号通过突触权重进行加权求和,形成神经元的总输入。输入信号在计算时表达为0或1,即如果其他神经元向当前的神经元发送信号(称为脉冲),那么在数值上就用1表示,如果没有信号,则表示为0;在上式中X_t就是输入加权和

        (2)神经元膜电位: 脉冲神经元内部维持着一个电位,称为膜电位。膜电位是由输入信号加权和以及神经元自身特性(如电容和电阻)所决定的。膜电位随时间的变化受到输入信号的影响而发生改变。在上式中H_{t+1}V_{t+1}就是神经元在不同活动后的膜电位;H_{t+1}是将输入信号累积到膜电位后的电压;V_{t+1}是经过脉冲发放后的电压。

        (3)阈值激活: 当膜电位超过了神经元的阈值时,神经元就会产生一个脉冲(或称为动作电位)。阈值的设定是脉冲神经元产生脉冲的触发条件,通常情况下,阈值是一个固定的参数。

        (4)脉冲传递: 一旦神经元的膜电位超过了阈值,神经元就会产生一个脉冲。这个脉冲会被发送到与之连接的其他神经元,影响它们的膜电位,并在一定的时间内传播到网络的其他部。

(5)膜电位重置: 在产生脉冲后,脉冲神经元的膜电位会被重置到一个基准值,通常是零。这个过程模拟了生物神经元在产生动作电位后的恢复过程。

        (6)绝对不应期: 在产生脉冲后,脉冲神经元会进入一个绝对不应期的状态,这段时间内神经元无法再次产生脉冲。这个时间窗口内,即使输入信号再次超过阈值,神经元也不会产生新的脉冲。

(二)信息编码

        在生物神经系统中,信息是被分散编码并通过动态神经来表达的。神经脉冲序列是信息在神经系统中的一种重要表达方式。为了描述这种神经活动,研究人员提出了多种编码方法,其中频率编码和时间编码是两种较为常见的神经信息编码方式。

1. 频率编码

  • 原理: 频率编码是通过神经元的脉冲发射频率来传递信息的。信息的强度通常与神经元产生脉冲的频率成正比关系,即输入信号的强度越大,神经元产生脉冲的频率越高。
  • 特点: 频率编码机制较为简单,易于实现和理解。在一些任务中,频率编码能够提供良好的性能,特别是在简单的分类和识别任务中表现突出。
  • 应用: 频率编码常用于处理连续信号、模拟信号或需要高度灵活性的任务,如音频处理、图像识别等。
频率编码示意

2. 时间编码

  • 原理: 时间编码是通过神经元的脉冲时间序列来传递信息的。不同于频率编码,时间编码关注的是神经脉冲的时序模式和时间间隔。
  • 特点: 时间编码更加符合生物神经系统中信息传递的方式,能够更好地处理时序信息和事件驱动的任务。它可以提供更高的信息传输效率和灵敏度。
  • 具体方法

(1)时滞编码: 神经脉冲的产生时间与刺激的强度呈负相关。

(2)排序编码: 对脉冲到达的顺序进行特定编码,可结合特定的神经元模型实现特征提取等功能。

(3)相位编码: 根据背景振荡对脉冲相位中的信息进行编码,已应用于一些需要时序信息处理的任务中,如机器人导航和嗅觉系统等。

  频率编码和时间编码各有优劣,选择合适的编码方式取决于具体的任务需求和应用场景。在处理时序信息、事件驱动任务或模拟生物神经系统行为时,时间编码通常更为适用。

三、学习算法

        脉冲神经网络(SNN)的神经元信息通过脉冲序列传递,不再具备连续可微的特性,因此传统的人工神经网络(ANN)学习算法难以直接套用于SNN。研究者在充分考虑神经元模型与信息编码的差异、平衡生物合理性和计算可行性的基础上,提出了多种创新的训练算法。这些算法主要涵盖(1)基于反向传播(BP)的直接训练算法、无监督学习算法以及ANN到SNN的转化算法。

(一)基于BP的直接训练算法

        基于反向传播的算法主要解决了脉冲信号的离散性和激活函数的不可微性,以及传统反向传播算法无法直接应用于脉冲神经网络的问题。以下是几种基于反向传播的算法,用于训练脉冲神经网络:

  • Surrogate Gradient Methods(替代梯度方法): 这种方法是通过将不可微的脉冲激活函数替换为可微的近似函数,从而使得整个网络仍然可以通过反向传播进行训练。常用的替代函数包括sigmoid函数、ReLU函数等。虽然这种方法引入了一定的近似误差,但在实践中已被证明是有效的。
  • Reinforcement Learning(强化学习): 在强化学习中,代理通过与环境的交互来学习如何采取行动以达到预期的目标。在SNN中,可以将神经元的脉冲发放看作是代理与环境的交互,通过调整连接权重来最大化奖励或最小化成本函数。这种方法不依赖于梯度信息,因此适用于不可微的脉冲神经网络。
  • Evolutionary Algorithms(进化算法): 进化算法通过模拟生物进化过程来搜索最优解。在SNN中,可以通过调整连接权重和网络结构来优化网络性能。常用的进化算法包括遗传算法、遗传规划等。

        这些基于反向传播的算法为脉冲神经网络的训练提供了一些解决方案,使得SNN能够适应各种复杂的任务和场景。然而,每种方法都有其自身的优缺点,需要根据具体情况选择合适的算法。

(二)无监督学习算法

        无监督学习通过对无标签样本数据的学习,揭示数据的内在特性及规律。SNN的无监督学习算法基于Hebb学习规则建立。其中,STDP(Spike-Timing-Dependent Plasticity,时序相关突触前后塑性)学习规则是Hebb学习规则的典型代表,直观地反映了两个神经元之间的突触强度与突触前后脉冲的相对时间有关。当突触前神经元发放脉冲时,导致突触后神经元电位增加,从而加强了突触传递效率,这被称为长时程增强作用(LTP);相反,如果突触传递效率下降,这被称为长时程抑制作用(LTD)。LTP和LTD为解释STDP学习规则中神经元之间复杂相互作用提供了理论支持。

        近年来,研究人员基于STDP学习规则提出了多种SNN无监督学习算法。然而,由于STDP学习规则更注重相邻两层之间的连接,缺乏与网络其他部分的关联和协调,因此在应用于多层网络时存在准确性不足的问题。这意味着在设计多层SNN时,需要考虑如何在不同层之间实现有效的信息传递和调节,以充分利用STDP学习规则的优势,并解决其在网络整体性能方面的不足。

(三)ANN-SNN转换算法

        基于ANN到SNN的转换训练算法通常利用频率编码将SNN中的脉冲序列频率与ANN中的激活值对应起来,以实现权重的转移。这种方法省去了直接训练SNN的难度,使得从ANN到SNN的转换更加容易。Cao首次提出了将ANN中的ReLU函数的激活值与SNN中的IF神经元建立等价联系的想法。随后,Rueckauer从理论上证明了一种简单修改IF神经元的点火后重置膜电压机制,使得IF神经元可以作为ReLU激活函数的无偏估计器。IF神经元是一种去除了漏电常量的LIF(Leaky Integrate-and-Fire)神经元,其模拟了神经元膜电位的积分和发放过程。

具体来说,基于ANN转SNN的训练算法通常包括以下步骤:

1.转换激活函数: 将ANN中的激活函数(如ReLU)转换为SNN中的IF神经元的点火机制。这可以通过调整IF神经元的参数,使其能够在达到一定阈值时发放脉冲,从而模拟ReLU的非线性激活效果。

2.建立频率编码关系: 将ANN中的激活值与SNN中神经元的发放频率进行对应。通常,较大的激活值对应于较高的脉冲频率,而较小的激活值对应于较低的脉冲频率。

3.迁移权重: 将在ANN中训练得到的权重移植到SNN中来。这可以直接通过将ANN中的权重应用于SNN中对应的连接上,以实现信息的转移。

通过这种方法,可以将已经在ANN上进行训练的模型迁移到SNN上,从而充分利用SNN的优势,如事件驱动、低能耗和生物相似性,而无需重新训练模型。

  • 39
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中实现一个两层神经网络可以按照以下步骤进行: 1. 首先,导入所需的库和数据集。你可以使用Matlab内置的神经网络工具箱来实现神经网络。导入你的训练集和测试集数据。 2. 接下来,定义网络的结构。一个两层的神经网络主要由输入层、隐藏层和输出层组成。定义网络的输入层节点数、隐藏层节点数和输出层节点数。 3. 创建和初始化网络的权重矩阵。权重矩阵是网络中连接不同层的权重参数。可以使用随机初始化或者其他方法来初始化权重矩阵。 4. 定义并选择合适的激活函数。激活函数在神经网络中用于实现非线性映射,常用的激活函数有sigmoid、ReLU、tanh等。 5. 实现前向传播算法。前向传播算法是神经网络中的一种计算方法,用于从输入层到输出层计算网络的输出值。 6. 实现反向传播算法。反向传播算法用于根据网络的输出和期望输出更新权重矩阵,从而减小网络的误差。 7. 训练神经网络。使用训练集数据进行多次迭代训练,通过不断更新权重矩阵,使网络的输出与期望输出更加接近。 8. 验证和测试神经网络。使用测试集数据验证网络的性能和准确度。 请注意,以上只是一个基本的框架,具体的实现方式可能会因为你的具体需求或数据集的特点而有所不同。你可以参考中的推导过程和《简单的二层BP神经网络-实现逻辑与门(Matlab和Python)》一文中的实现方法来详细了解具体的代码实现细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值