当前位置: 编码机 >> 编码机市场 >> 神经网络的时间编码监督学习机器学习人
人工神经网络作为一种学习复杂非线性变换的方法正取得巨大的成功。基于训练实例,简单神经元元素的分布式网络可以自适应调整其连接权值,这一想法部分受到了生物spiking网络的启发。然而,ANN与spiking网络有着本质的区别。与模拟值的ANN神经元不同,spiking神经元使用全有或全无的离散spiking进行交流。一个spiking触发了目标神经元中突触电流的踪迹。随着时间的推移,目标神经元整合突触电流,直到达到一个阈值,然后发出一个峰值并重新设置。Spiking网络是一个动态系统,时间在其中起着至关重要的作用,而在传统的前馈神经网络中,时间是抽象出来的。
人工神经网络通常利用梯度下降技术来解决权值分配问题,即通过改变网络权值来获得期望的网络输出。人工神经网络通常有多重级联的神经元层。在这种情况下,使用反向传播算法可以有效地获得误差函数相对于网络权值的梯度。拥有多层神经元对于人工神经网络使用反向传播进行学习至关重要。
虽然反向传播是一种很成熟的训练前馈人工神经网络的通用技术,但是对于前馈spiking神经网络的训练却没有通用的技术。许多以前的方法,训练spiking神经网络产生特定的spiking模式依赖于输入层直接连接到输出层。目前还不清楚如何使用这些方法来训练多层网络。在时态网络训练中,经常要考虑随机网络公式。在随机公式中,目标是最大化整个输出峰值模式的可能性。需要随机公式“抹去”spiking的离散性,代之以spiking的产生概率,该概率平稳地依赖于网络参数,因此更适合梯度下降学习。虽然使用这种随机方法对多层网络进行了训练,但是由于需要使用时间步进模拟来获得输出峰值时间,因此存在一些可伸缩性问题。
在某些情况下,需要蒙特卡罗模拟来获得不同输出模式的概率。此外,在以前的方法中,目标是学习特定的spiking模式,而这些网络在分类设置中的性能,目标是学习输入-输出关系,可以很好地概括为许多的例子,而不仅仅是噪音污染训练的例子,是有待探索的。
SpikeProp算法可用于训练多层spiking网络在特定时间产生输出峰值。SpikeProp假设两个神经元之间的连接由许多子连接组成,每个子连接具有不同的延迟和可训练的权重。使用一个更传统的网络模型,它不依赖于预先指定的延迟元素的组合来将输入脉冲时间转换为输出脉冲时间,而是依赖于简单的神经和突触动力学。与SpikeProp不同,我们的公式得出了输入和输出峰值时间之间的解析关系。因此,spiking网络不必在训练循环期间进行模拟。。这加速了训练,并允许使用标准的GPU加速的ANN训练包来将训练扩展到更大的数据集。
许多spiking网络的训练方法都是先训练传统的前馈神经网络,然后将训练后的权值转化为spiking网络,使之近似于原始人工神经网络的行为。使用这些方法获得的spiking网络使用速率编码,其中神经元的spiking速率编码与ANN神经元的模拟输出对应的模拟量。随后,高峰值率将掩盖峰值活动的离散性。
在这篇论文中,开发了一种直接训练的方法,它不试图减少传统人工神经网络的spiking网络。相反,把任何一个脉冲的时间与所有对其产生有因果影响的脉冲的时间联系起来。然后可以对网络的spiking时间施加任何可微分的代价函数,并通过梯度下降直接最小化这个代价函数。
使用峰值时间作为携带信息的数量,避免了使用离散的峰值计数或峰值速率,而是使用连续的表示(峰值时间),这是可以进行梯度下降训练的。这种训练方法允许对网络的行为进行详细的控制(在单峰值时间上),这在基于速率编码的训练方法中是不可能实现的。
由于使用的是时间脉冲编码,神经元的放电可能是相当稀疏的,因为每个脉冲的时间都携带着重要的信息。与基于速率的网络相比,提出的网络可以在神经形态结构上更有效地实现,在神经形态结构中,功率消耗随着峰值速率的降低而降低。在传统的神经网络中,每个神经元计算其所有源神经元活动的加权和,然后通过应用静态非线性来产生输出。本网络行为与传统的人工神经网络范式有相当大的差异,因为一层神经元的输出依赖于前一层神经元的一个不同的、动态变化的子集。与基于速率的spiking网络不同,由于时间是主要的编码维数,而不是离散的峰值计数,所提出的网络可以直接使用梯度下降法进行训练。与以前的时间学习方法不同,我们的方法自然地扩展到多层网络,并依赖确定性神经和突触动力学来优化峰值时间,而不是在网络中显式的延迟元素。
我们使用无泄漏的具有指数衰减的突触电流核函数集成体来激发神经元,神经元的膜动力学表示为:
其中vjmem为神经元j的膜电位。方程的右边是突触电流。wji是神经元i到神经元j突触连接的权值,tri是神经元i第r个峰值的时间。k为突触电流核函数:
因此,突触电流在输入脉冲到达时瞬间跳跃,然后随着时间常数指数衰减τsyn。由于τsyn是唯一的时间常数模型,我们将其设置为1。即将所有时间都标准化。当神经元的膜电位超过我们设为1的触发阈值时,神经元即达到峰值。所有突触的权值都是相对于触发阈值标准化的。在一个峰值之后,膜电位被重置为零。如果突触电流的积分是负的,我们就允许膜电位降至零以下。
假设一个神经元有时会收到N个峰值信号{t1,…,tN},权值为{w1,…,w}来自N个源神经元。每个权值可以是正的,也可以是负的。假设神经元在响应时间t时达到峰值。对第一个公式积分,ttout的膜电位表示为:
假设只有一个子集的这些输入峰值与指数C{1,…,N}比tout先到,其中C={i:titout}。只有这些输入脉冲才会影响输出神经元第一次脉冲的时间。我们称这组输入峰值为因果输入峰值。因果输入脉冲的权值之和必须大于1,否则它们不可能导致神经元放电。从上式开始,则将tout隐式定义为
其中1是发射阈值,因此:
峰值时间总是以指数形式出现。因此,我们对变量exp(tx)→zx进行变换,得到一个表达式,该表达式将输入脉冲时间与输出神经元在变换后的第一个脉冲时间联系起来(我们称之为z域)
为了让神经元在第一时间达到峰值,必须有Σ_i∈Cwi1,所以zout是总是正的。它也总是比任何元素{zi:i∈C}都大。即,输出峰值时间总是比任何输入峰值时间的因果设置遵循从因果关系集的定义。我们可以获得一个相似的表达相关的地址的时候输出的神经元,z域中输入峰值时间zQout
其中,CQ是在第Qth个输出峰值之前到达的输入峰值的索引集。上式只有分母为正时才是有效的,即时,有足够的输入峰值,且有足够大的正权值来推动神经元超过触发阈值Q次。我们认为一个神经元的输出值是它第一次达到峰值的时间。此外,一旦一个神经元出现spikes,就不允许它再出现spikes,即,我们假设它进入一个无限长的不应期。我们允许每个神经元在每次输入时最多出现一次spikes,以使spikes活动变得稀疏,并迫使训练算法对每个spikes进行最优利用。在训练过程中,我们使用了一个权重成本术语,以确保神经元接收到足够的输入以达到下一节所述的峰值。
z域内输入和输出峰值时间的线性关系仅在局部区间内有效。当一组因果输入发生变化时,就会产生一种不同的线性关系。由式zout可知,z域中线性输入-输出关系中输入zp的有效权重为
这个有效权重取决于输入峰值因果集中峰值的权重。这个因果变化由于改变从源神经元,高峰时期的有效重量不同的输入峰值,留在的因果变化。对于某些输入模式,某些源神经元可能会在较晚的时候出现峰值,从而使它们的峰值离开输出神经元的因果集,使它们的有效峰值权值变为零。其他源神经元可能会在早期出现峰值,并影响输出神经元峰值的时间,因此它们的峰值获得非零的有效权重。
输入峰值的因果集是根据输入峰值时间及其权重动态确定的。许多早期具有强正权值的峰值会使输出神经元提前spike,从而抵消了以后的峰值对输出神经元第一次spike时间的影响,而不管这些以后的峰值的权值如何。非线性变换从z={z1,…zN}到zout,因此,spiking神经元实现的方法与传统神经网络中只考虑累计加权输入的静态非线性方法有着根本的不同。
在大多数情况下,由脉冲神经元实现的非线性变换是连续的,即,z中的小扰动会导致zout中相应的小扰动。很明显,当扰动不改变因果输入峰值的集合时,同样的线性关系仍然成立。但是,考虑一下在输出峰值之后出现的具有权值wx的输入峰值的情况zx=zout+。一个小的扰动将这个输入脉冲推向时间zx=zout-把它加到因果集合中。通过应用zout,扰动输出时间为:
代入zx
其中C是扰动前的因果集合,因此,输出扰动与输入扰动成正比,但这只是当
否则带负权值的扰动输入峰值在zout–会抵消zout处的原始输出峰值。综上所述,除了在小扰动影响神经元出现峰值的情况下,spiking神经元的输入尖峰时间到输出尖峰时间的转换是连续的。
事实上,我们在z域中得到了输入和输出峰值时间之间的分段线性关系,这是很普遍的现象,而不是我们模型的意外。缩放输入向量z=[z1,…zN]通过一个因子K等于在时域内移动所有的输入脉冲时间{t1,…,tN},向前时间ln(K)。这将转变输出峰值时间tout,向前时间ln(K)因为网络没有内部的时间参考,因此,在时间上移动所有输入峰值将因此将所有输出峰值移动相同的数量。这又会使zout线性增加一个因子K,得到a(局部)线性输入-输出关系。
我们考虑前馈神经网络,其中的神经和突触动力学由第一个和第二个公式来描述。神经元按层状方式排列。一层的神经元以全体对全体的方式投射到下一层的神经元上。一个神经元的输出是它第一次达到峰值的时间,我们只在z区域工作。一旦神经元出现尖峰,它就不允许再出现尖峰,直到网络复位并出现新的输入模式。zr是来自r层中每个神经元的第一个峰值时间的向量。所有的指标都是基于1的,向量是黑体的,向量a的第i项是a[i]。在每一层,每个神经元的因果集都是从get_causal_set函数中获得的。然后根据式zout计算神经元的输出。get_causal_set函数首先对输入尖峰时间进行排序,然后考虑越来越多的早期输入尖峰,直到找到一组导致神经元尖峰的输入尖峰。
输出神经元的尖峰时间必须小于因果集合中任何输入尖峰的时间,否则因果集合就是不完整的。如果不存在这样的集合,即时,输出神经元不会对输入脉冲做出响应,get_causal_set返回空集将神经元的输出峰值时间设为无穷大(执行时的最大值)。
从zout中可知,神经元的第一个尖峰时间对突触权值和输入尖峰时间的导数为:
与spiking神经元的输入-输出关系在因果集改变的点上仍然是连续的不同,神经元的输出对输入和由上面两个式子给出的权值的导数在这些点上是不连续的。对于梯度下降法来说,这不是一个严重的问题。事实上,许多前馈神经网络使用具有不连续一阶导数的激活函数,如整流线性单元,同时仍然可以有效地训练。
可微分的成本函数可以应用于网络中任何地方生成的尖峰时间。通过使用上面两个式子通过标准的反向传播技术,可以通过反向传播误差来评估成本函数相对于较低层中权重的梯度。在培训网络时,我们必须使用以下技术使网络能够学习:
a)突触权值的限制:我们在代价函数中加入一个术语,这个术语会严重惩罚那些输入权值向量的和小于1的神经元。在训练过程中,这一项将每个神经元的输入权向量的权值之和推到1以上,从而确保当所有输入神经元都出现峰值时,神经元也会出现峰值。这一项在成本函数中是至关重要的,否则网络就会变得静止而停止峰值。
这个成本项:
其中,j的总和覆盖了所有神经元i的总和覆盖了所有投射到神经元j的神经元。wji是神经元i与神经元j之间的连接权值。K是一个超参数。K通常选择大于1,以严格执行每个神经元的传入权向量之和大于1的约束。较大的正权值是有问题的,因为它们可以使源神经元几乎单方面地控制目标神经元的峰值时间,从而损害了目标神经元整合来自其所有输入神经元的信息的能力。因此,我们使用L2权值正则化来防止权值变得过大。
b)梯度归一化:我们观察到在训练过程中梯度会变得非常大。这是由于当输入脉冲的因果集的权值之和接近1时,输出脉冲时间与权值之间存在高度非线性关系。从式zout和zout的微分可以看出,小分母会导致输出峰值时间和导数发散。这损害了学习,因为它导致重量做出非常大的跳跃。我们使用梯度归一化来解决这个问题:如果一个权值矩阵的梯度的弗罗比尼乌斯范数大于一个阈值,我们对梯度矩阵进行缩放,使它的弗罗比尼乌斯范数等于梯度下降步骤之前的阈值。为了减少梯度归一化方案对权矩阵大小的依赖,我们首先根据源神经元的数目对权梯度矩阵的弗罗比尼乌斯范数进行归一化(权矩阵中的行数)。
参考文献:SupervisedLearningBasedonTemporalCodinginSpikingNeuralNetworks