一、为什么需要脉冲神经网络
脉冲神经网络相比于传统的神经网络更能够模仿生物神经元之间的连接和通信,能够进行复杂的时空信息处理。
二、SNN脉冲的特征
由于SNN模仿的脉冲序列是不连续和非线性的,所以在构建监督学习算法上有一定的困难,SNN算法上可以将监督学习算法分为离线/在线、单脉冲/多脉冲、多层/单层的学习算法。Rober Gutig 2006 Nature Neuroscience发表的文章《The tempotron : a neuron that learns spike timing based decisions》详细介绍了该监督算法的基本概念,代码上的理解也是非常重要的。
三、脉冲神经元工作方式
第一步:将样本数据编码为和时间序列相关的脉冲序列。
第二步:构建一个神经元的模型(基本模型:接收来自前端突触的脉冲,当该神经元的膜电位升高到达设定的阈值,神经元就会发射一个脉冲,发射之后立刻恢复到静息电位,并且维持一段时间(不应期),然后重新接收脉冲输入)
第三步:确定一个算法,对神经网络进行训练。比如Tempotron算法。
四、Tempotron监督算法
算法原理:神经元后突触膜电位(PSPs)是所有跟该神经元相连接的上一层脉冲输入的加权和。
膜电位的计算公式 :
公式中可以看出,膜电位是每个前端突触输入的脉冲在当前时间的大小K(t-ti)加权求和,加上复位电位Vrest.其中K表示核是介于(0-1)的值,代表的是在t时间下,ti时间点传入的脉冲的贡献,K的计算公式如下:
画成图像就是:
由公式可以看出来,K(0-1)在脉冲发出的时间ti时间点处数值最高,在其他点数值相对下降,表示前端突触在这个时间点有最大的脉冲输入,随着(t-ti)的增大,该突触的贡献脉冲输入减小。Vo是正则化函数,作用是将K控制在(0-1)之间,
神经元只有输出1和不输出0这两个状态,当应用于分类任务的时候,采用二进制编码的方式输出不同的类别,比如26位字母,就采用5位二进制表示26个类别,所以脉冲神经网络有5个输出神经元。00000表示A,00001表示B。
当需要该神经元不输出脉冲,而输出脉冲了,比如神经元输出为0,但是目标是输出1,此次更新就会对每个权重增加一个数值,
结果就是增大了输出层神经元的膜电位,最终达到了发出脉冲的目的。
该图为训练之后的输出层神经元的膜电位在时间窗口内的变化。
五、代码实验
MNIST数据集中的图片是28X28 Pixel,所以,每一幅图就是1行784(28X28)列的数据,括号中的每一个值代表一个像素。
如果是黑白的图片,图片中的黑色地方数值为0:有图案的地方,数值为0~255之间的数字,代表其颜色的深度。
如果是彩色的图片,一个像素会由3个值来表示RGB(红、黄、蓝)。