基于BP的有监督脉冲学习算法:SpikeProp

在前面的工作中[http://jacoxu.com/tempotron/]已经介绍过脉冲神经元的基本特性。脉冲神经网络难以进行有监督学习的原因是其脉冲的离散特性和脉冲神经元的不可连续和微分性。文献[1]采用误差反向传播[2]进行多层脉冲神经网络模型(Multilayer SNNs)的训练,该方法假定神经元内部状态值在神经元发放脉冲时是在一个极短时间内线性增加的过程,通过这种近似,避免了脉冲无可微分的问题。后续的各种变种工作,甚至包括二值神经网络[3,4]和量化网络模型[5]均是采用近似的方式解决有监督训练过程中不可微分的问题。

首先,文献[1]中给出神经元的内部状态变量\({x_j}(t)\):

\[{x_j}(t) = \sum\limits_{i \in {\Gamma _j}} {{w_{ij}}\varepsilon (t - {t_i})} \]

其中,\(\varepsilon (t)\)为脉冲响应函数,\({w_{ij}}\)为突触连接权重。突触响应函数的定义如下:

\[\varepsilon (t) = \frac{t}{\tau }{e^{1 - t/\tau }}\]

如果考虑两个神经元之间有多个不同延时\({d^k}\)的突触连接,如下图所示。

图(A)前馈的脉冲神经网络模型;(B)多延时突触末梢的连接示例。

那么,考虑了多延时突触末梢连接的神经元内部状态变量重新定义如下:

\({x_j}(t) = \sum\limits_{i \in {\Gamma _j}} {\sum\limits_{k = 1}^m {w_{ij}^ky_i^k(t)} } \)         (1)

其中,第\(i\)突触前神经元的第\(k\)个突触末梢在\(t_i\)时刻发放脉冲的响应函数为:

\[y_i^k(t) = \varepsilon (t - {t_i} - {d^k})\]

第\(k\)个突触末梢发放脉冲的响应延时\(d^k\)定义了突触前神经元发放脉冲和突触后神经元膜电位开始提升的时间差值。而突触后神经元的膜电位首次超过阈值电位时 \({x_j}(t) \ge \vartheta \),发放脉冲。阈值\(\vartheta \)在整个脉冲神经网络中是一个统一的常数。

其次,开始推导误差反向传播

文献[1]有监督学习算法的目的是:给定一个输入脉冲模式\(\{ P[{t_1},...,{t_h}]\} \)学习第\(j \in J\)个输出神经元的目标脉冲发放时间\(\{ t_j^d\} \)。这里输入脉冲模式\(\{ P[{t_1},...,{t_h}]\} \)是指每个输入神经元\(h \in H\)的单脉冲输入时间。这里选用最小均方误差做为误差函数(当然其他如熵函数也是可以的),给定输出神经元的期望脉冲发放时间\(\{ t_j^d\} \)和实际脉冲发放时间\(\{ t_j^a\} \),那么误差函数定义如下:

\(E = \frac{1}{2}\sum\limits_{j \in J} {{{(t_j^a – t_j^d)}^2}} \)         (2)

在误差反向传播过程中,我们将神经元之间不同连接末梢看成独立的连接,因而我们需要计算:

\(\Delta w_{ij}^k = – \eta \frac{{\partial E}}{{\partial w_{ij}^k}}\)         (3)

其中,\(\eta \)是学习率,\(w_{ij}^k\)是第\(i\)个突触前神经元到第\(j\)个突触后神经元之间第\(k\)个突触末梢的连接权重。由于\(t_j\)是\(x_i\)的函数,而后者又基于\(w_{ij}^k\)。那么上式中右边部分可以扩展为:

\(\frac{{\partial E}}{{\partial w_{ij}^k}} = \frac{{\partial E}}{{\partial {t_j}}}(t_j^a)\frac{{\partial {t_j}}}{{\partial {x_j}(t)}}(t_j^a)\frac{{\partial {x_j}(t)}}{{\partial w_{ij}^k}}(t_j^a)\)         (4)

上式中,\(t_j\)表示突触后神经元膜电位\({x_j}(t)\)在阈值\(t = t_j^a\)附近的脉冲发放时间函数。为了解决上式第二项不可微的问题,对其脉冲发放时间函数的微分进行近似。接下来的描述会比较绕,好好理一下:
假定脉冲响应过程在脉冲发放时间附近较小时间范围内,其膜电位\({x_j}(t)\)与时间\(t\)呈线性相关性,如下图所示:


图 脉冲发放时间和神经元膜电位在脉冲发放时间附近极小范围内的线性关系

如上图中,根据膜电位和时间的线性关系曲线,正向移动较小的脉冲发放时间\(\delta t_j^a\),则膜电位超进行负向线性较小移动\(\delta {x_j}\)。其线性关系为:\(\delta {t_j}({x_j}) = – \delta {x_j}({t_j})/\alpha \)。这里\(\alpha \)为膜电位\({x_j}(t)\)对于时间\(t\)在脉冲发放时刻\(t = t_j^a\)附近的局部导数,即\(\alpha = \partial {x_j}(t)/\partial t\)。

那么,公式(4)中的第二项可以近似为:

\(\frac{{\partial {t_j}}}{{\partial {x_j}(t)}}(t_j^a) = \frac{{\partial {t_j}({x_j})}}{{\partial {x_j}(t)}}{|_{{x_j} = \vartheta }} = \frac{{ – 1}}{\alpha } = \frac{{ – 1}}{{\partial {x_j}(t)/\partial t(t_j^a)}} = \frac{{ – 1}}{{\sum\nolimits_{i,l} {w_{ij}^l(\partial y_i^l(t)/\partial t)(t_j^a)} }}\)         (5)

根据公式(2)中定义的目标函数,公式(4)中的第一项为:

\(\frac{{\partial E(t_j^a)}}{{\partial t_j^a}} = (t_j^a – t_j^d)\)         (6)

同时,根据公式(1),可以得到公式(4)中第三项:

\(\frac{{\partial {x_j}(t_j^a)}}{{\partial w_{ij}^k}} = \frac{{\partial \{ \sum\nolimits_{i \in {\Gamma _j}} {\sum\nolimits_l {w_{nj}^ly_n^l(t_j^a)} } \} }}{{\partial w_{ij}^k}} = y_i^k(t_j^a)\)         (7)

整合公式(5)(6)(7)的结果,可求得公式(3)突触连接权重的更新为:

\(\Delta w_{ij}^k(t_j^a) = – \eta \frac{{y_i^k(t_j^a)(t_j^d – t_j^a)}}{{\sum\nolimits_{i \in {\Gamma _j}} {\sum\nolimits_l {w_{ij}^l(\partial y_i^l(t_j^a)/\partial t_j^a)} } }}\)        (8)

为了表示方便,定义\({\delta _j}\):

\({\delta _j} \equiv \frac{{\partial E}}{{\partial {t_j}}}(t_j^a)\frac{{\partial {t_j}}}{{\partial {x_j}(t)}}(t_j^a) = \frac{{(t_j^d – t_j^a)}}{{\sum\nolimits_{i \in {\Gamma _j}} {\sum\nolimits_l {w_{ij}^l(\partial y_i^l(t_j^a)/\partial t_j^a)} } }}\)         (9)

则:

\(\Delta w_{ij}^k(t_j^a) = – \eta y_i^k(t_j^a){\delta _j}\)         (10)

至此,推导出了输出层神经元的突触连接权重的更新函数,那么,隐层神经元的突触连接权重如何更新呢?设定第\(I\)个隐含层中第\(i\)个神经元的脉冲发放时间为\(t_i^a\),则定义\({\delta _i}\):

\({\delta _i} \equiv \frac{{\partial t_i^a}}{{\partial {x_i}(t_i^a)}}\frac{{\partial E}}{{\partial t_i^a}} = \frac{{\partial t_i^a}}{{\partial {x_i}(t_i^a)}}\sum\limits_{j \in {\Gamma ^i}} {\frac{{\partial E}}{{\partial t_j^a}}\frac{{\partial t_j^a}}{{\partial {x_j}(t_j^a)}}\frac{{\partial {x_j}(t_j^a)}}{{\partial t_i^a}}} = \frac{{\partial t_i^a}}{{\partial {x_i}(t_i^a)}}\sum\limits_{j \in {\Gamma ^i}} {{\delta _j}\frac{{\partial {x_j}(t_j^a)}}{{\partial t_i^a}}} \)         (11)

其中,\({\Gamma ^i}\)表示在当前第\(i\)个神经元在输出层\(J\)的所有后继神经元集合(注意当\(i\)为下标时,\({\Gamma _i}\)为前继神经元集合)。第一项可参考公式(5),第二项:

\(\frac{{\partial {x_j}(t_j^a)}}{{\partial t_i^a}} = \frac{{\partial \sum\nolimits_{l \in I} {\sum\nolimits_k {w_{lj}^ky_l^k(t_j^a)} } }}{{\partial t_i^a}} = \sum\limits_k {w_{ij}^k\frac{{\partial y_i^k(t_j^a)}}{{\partial t_i^a}}} \)         (12)

因而,

\({\delta _i} = \frac{{\sum\nolimits_{j \in {\Gamma ^i}} {{\delta _j}\{ \sum\nolimits_k {w_{ij}^k(\partial y_i^k(t_j^a)/\partial t_i^a)} \} } }}{{\sum\nolimits_{h \in {\Gamma _i}} {\sum\nolimits_l {w_{hi}^l(\partial y_h^l(t_i^a)/\partial t_i^a)} } }}\)         (13)

最终,可得到隐层的突触连接更新值:

\(\Delta w_{hi}^k(t_i^a) = – \eta y_h^k(t_i^a){\delta _j}\)         (14)

由如上公式,通过误差反传可以在多个隐层\(I = J – 1,…,2\)中进行权重更新。定义该学习方法为SpikeProp,其算法流程如下:
步骤1:根据公式(9)计算输出层的\({\delta _j}\);
步骤2:循环遍历每个隐层\(I = J – 1,…,2\):
根据公式(13)计算隐层神经元的\({\delta _i}\);
步骤3:根据公式(10)计算输出层突触连接的更新值\(\Delta w_{ij}^k(t_j^a)\);
步骤4:循环遍历每个隐层\(I = J – 1,…,2\):
根据公式(14)计算隐层突触连接的更新值\(\Delta w_{hi}^k\);

可见,2002年这篇最初的SpikeProp算法[1]只能解决单脉冲输入单脉冲输出的有监督学习。后续继续介绍多脉冲输入至多脉冲输出的学习算法。

本文出自[http://jacoxu.com/?p=2130]

[1] Bohte, S. M., Kok, J. N., & La Poutré, J. A. (2002). Error-backpropagation in temporally encoded networks of spiking neurons. Neurocomputing, 48, 17–37.
[2] D.E. Rumelhart, G.E. Hinton, R.J. Williams, Learning representations by back-propagating errors, Nature 323 (1986) 533–536.
[3] Courbariaux M, Hubara I, Soudry D, et al. Binarized neural networks: Training deep neural networks with weights and activations constrained to+ 1 or-1[J]. arXiv preprint arXiv:1602.02830, 2016.
[4] Hubara I, Courbariaux M, Soudry D, et al. Binarized neural networks[C]//Advances in neural information processing systems. 2016: 4107-4115.
[5] Hubara I, Courbariaux M, Soudry D, et al. Quantized neural networks: Training neural networks with low precision weights and activations[J]. arXiv preprint arXiv:1609.07061, 2016.

基于BP的有监督脉冲学习算法:SpikeProp》上有 1 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>