SNN系列|学习算法篇(2)SpikeProp

SpikeProp

论文传送门

SpikeProp算法可以认为是SNN里BP的最早版本,它可以处理多层神经网络,但只能是单输入单输出,SpikeProp的特点是对脉冲发放的时间进行误差最小化,核心也就是下面的公式,其中 t j a t_j^a tja表示神经元第一次发放脉冲的时间。
E = 1 2 ∑ j ∈ J ( t j a − t j d ) 2 E=\frac{1}{2} \sum_{j \in J}\left(t_{j}^{\mathrm{a}}-t_{j}^{\mathrm{d}}\right)^{2} E=21jJ(tjatjd)2

SRM

SpikeProp算法使用该神经元模型的一个原因是其表现形式是解析的,在以后求解脉冲发放时间与膜电势关系时可以通过数学关系进行求解,而使用LIF等模型无法进行求导等操作。

在这里插入图片描述

原文中使用的SpikeProp算法是多延时模型,即两层神经元之间有多个突触,且时延不同。
x j ( t ) = ∑ i ∈ Γ j ∑ k = 1 m w i j k y i k ( t ) y i k ( t ) = ε ( t − t i − d k ) ε ( t ) = t τ e 1 − t / τ x_{j}(t)=\sum_{i \in \Gamma_{j}} \sum_{k=1}^{m} w_{i j}^{k} y_{i}^{k}(t)\\y_{i}^{k}(t)=\varepsilon\left(t-t_{i}-d^{k}\right)\\\varepsilon(t)=\frac{t}{\tau} \mathrm{e}^{1-t / \tau} xj(t)=iΓjk=1mwijkyik(t)yik(t)=ε(ttidk)ε(t)=τte1t/τ
t i t_i ti为神经元i膜电势第一次越过常数阈值时的时间。

(一度怀疑原文中的模型不能称之为SRM,因为SRM使用的是动态阈值,这里更像是连续形式的LIF模型)

梯度计算

对符号进行说明:输入层H,隐藏层I, 输出层J

类似经典BP算法,这里使用链式求导法则,对输出层权重进行更新
Δ w i j k = − η ∂ E ∂ w i j k = − η ∂ E ∂ t j ∂ t j ∂ w i j k = − η ( t j a − t j d ) ) ∂ t j ∂ w i j k \Delta w_{i j}^{k}=-\eta \frac{\partial E}{\partial w_{i j}^{k}}=-\eta \frac{\partial E}{\partial t_j}\frac{\partial t_j}{\partial w_{i j}^{k}}=-\eta (t_j^a - t_j^d))\frac{\partial t_j}{\partial w_{i j}^{k}} Δwijk=ηwijkE=ηtjEwijktj=η(tjatjd))wijktj
整个算法的难点也就落在了如何求解 ∂ t j ∂ w i j k \frac{\partial t_j}{\partial w_{i j}^{k}} wijktj,因为脉冲发放时刻是在膜电势达到阈值这个条件定义的,我们可以认为 t j t_j tj是膜电势的一个非线性函数,当然它无法写出显式的公式。

  • 线性假设

因为我们关注的是脉冲发放时刻,因此,不妨假设在脉冲发放时刻的小邻域内,二者呈线性关系。当膜电势增加 δ x j \delta x_j δxj时,相应的脉冲发放时间应提前(减小) δ t j a \delta t_j^a δtja。另一方面,观察 x j x_j xj与仿真时间 t t t的关系,在较小邻域内,其斜率为 α = ∂ x j ( t ) ∂ t ( t j a ) \alpha = \frac{\partial x_j (t)}{\partial t}(t_j^a) α=txj(t)(tja)

在这里插入图片描述

显然我们可以得得到
∂ t j ∂ x j ( t ) ( t j a ) = ∂ t j ( x j ) ∂ x j ( t ) ∣ x j = ϑ = − 1 α = − 1 ∂ x j ( t ) / ∂ t ( t j a ) = − 1 ∑ i , l w i j l ( ∂ y i l ( t ) / ∂ t ) ( t j a ) \frac{\partial t_{j}}{\partial x_{j}(t)}\left(t_{j}^{a}\right)=\left.\frac{\partial t_{j}\left(x_{j}\right)}{\partial x_{j}(t)}\right|_{x_{j}=\vartheta}=\frac{-1}{\alpha}=\frac{-1}{\partial x_{j}(t) / \partial t\left(t_{j}^{a}\right)}=\frac{-1}{\sum_{i, l} w_{i j}^{l}\left(\partial y_{i}^{l}(t) / \partial t\right)\left(t_{j}^{a}\right)} xj(t)tj(tja)=xj(t)tj(xj)xj=ϑ=α1=xj(t)/t(tja)1=i,lwijl(yil(t)/t)(tja)1

  • 数学推导

文献[3]证明了即使不使用线性假设,上述公式也是正确的。

求解 ∂ t j ∂ w i j k \frac{\partial t_j}{\partial w_{i j}^{k}} wijktj,其实可以看成是当 ω i j k \omega_{ij}^k ωijk变化 δ ω i j k \delta \omega_{ij}^k δωijk时,脉冲发放时刻如何变化。权重变化势必造成膜电势变化
δ x j ( t ) = δ ω i j ϵ ( t − t i d − d i k ) \delta x_j(t) = \delta \omega _{ij} \epsilon(t-t_i^d-d_i^k) δxj(t)=δωijϵ(ttiddik)
再来看看权重变化前后的脉冲发放时刻的定义
b e f o r e : x ( t j a ) = ϑ a f t e r : x j ( t j a + δ t j a ) + δ x j ( t j a + δ t j a ) = ϑ before:\quad x(t_j^a) = \vartheta\\after:\quad x_j(t_j^a + \delta t_j^a) + \delta x_j(t_j^a + \delta t_j^a)=\vartheta before:x(tja)=ϑafter:xj(tja+δtja)+δxj(tja+δtja)=ϑ
由上述公式其实也能看出要写出 t j t_j tj x j x_j xj的显式关系是不可能的。因为神经元模型的定义是连续的,一阶可导的,上述公式可以展开
x j ( t j a ) + δ t j a ∂ x j ∂ t ( t j a ) + δ x j ( t j a ) + δ t j a ∂ δ x j ∂ t ( t j a ) + o ( δ t j a ) = ϑ    ⟹    δ t j a ∂ x j ∂ t ( t j a ) + δ x j ( t j a ) + δ t j a ∂ δ x j ∂ t ( t j a ) + o ( δ t j a ) = 0 x_{j}\left(t_{j}^{a}\right)+\delta t_{j}^{a} \frac{\partial x_{j}}{\partial t}\left(t_{j}^{a}\right)+\delta x_{j}\left(t_{j}^{a}\right)+\delta t_{j}^{a} \frac{\partial \delta x_{j}}{\partial t}\left(t_{j}^{a}\right)+o\left(\delta t_{j}^{a}\right)=\vartheta\\\implies \delta t_{j}^{a} \frac{\partial x_{j}}{\partial t}\left(t_{j}^{a}\right)+\delta x_{j}\left(t_{j}^{a}\right)+\delta t_{j}^{a} \frac{\partial \delta x_{j}}{\partial t}\left(t_{j}^{a}\right)+o\left(\delta t_{j}^{a}\right)=0 xj(tja)+δtjatxj(tja)+δxj(tja)+δtjatδxj(tja)+o(δtja)=ϑδtjatxj(tja)+δxj(tja)+δtjatδxj(tja)+o(δtja)=0
由本节第一个公式可知,当 δ ω i j → 0 \delta \omega_{ij}\rightarrow 0 δωij0时, ∂ δ x j ∂ t ( t j a ) → 0 \frac{\partial \delta x_{j}}{\partial t}\left(t_{j}^{a}\right)\rightarrow 0 tδxj(tja)0,因变量 δ t j a → 0 \delta t_j^a \rightarrow 0 δtja0,于是上式可简化如下:
δ t j a ∂ x j ∂ t ( t j a ) + δ x j ( t j a ) = 0    ⟹    lim ⁡ δ w i j → 0 δ x j ( t j a ) δ t j a = − ∂ x j ∂ t ( t j a ) \delta t_{j}^{a} \frac{\partial x_{j}}{\partial t}\left(t_{j}^{a}\right)+\delta x_{j}\left(t_{j}^{a}\right)=0\\\implies \lim _{\delta w_{i j} \rightarrow 0 } \frac{\delta x_{j}\left(t_{j}^{a}\right)}{\delta t_{j}^{a}}=-\frac{\partial x_{j}}{\partial t}\left(t_{j}^{a}\right) δtjatxj(tja)+δxj(tja)=0δwij0limδtjaδxj(tja)=txj(tja)
进而我们可以得到同样的结论
∂ t j a ∂ w i j = lim ⁡ δ w i j → 0 δ t j a δ w i j = ∂ x j ∂ w i j ( t j a ) ( − { ∂ x j ∂ t ( t j a ) } − 1 ) \frac{\partial t_{j}^{a}}{\partial w_{i j}}=\lim _{\delta w_{i j} \rightarrow 0} \frac{\delta t_{j}^{a}}{\delta w_{i j}}=\frac{\partial x_{j}}{\partial w_{i j}}\left(t_{j}^{a}\right)\left(-\left\{\frac{\partial x_{j}}{\partial t}\left(t_{j}^{a}\right)\right\}^{-1}\right) wijtja=δwij0limδwijδtja=wijxj(tja)({txj(tja)}1)

  • 反向传播

解决了 ∂ t j ∂ w i j k \frac{\partial t_j}{\partial w_{i j}^{k}} wijktj的问题,对输出层
δ j ≡ ∂ E ∂ t j a ∂ t j a ∂ x j ( t j a ) = ( t j d − t j a ) ∑ i ∈ Γ j ∑ l w i j l ( ∂ y i l ( t j a ) / ∂ t j a ) Δ w i j k ( t j a ) = − η y i k ( t j a ) ( t j d − t j a ) ∑ i ∈ Γ j ∑ l w i j l ( ∂ y i l ( t j a ) / ∂ t j a ) \delta_{j} \equiv \frac{\partial E}{\partial t_{j}^{\mathrm{a}}} \frac{\partial t_{j}^{\mathrm{a}}}{\partial x_{j}\left(t_{j}^{\mathrm{a}}\right)}=\frac{\left(t_{j}^{\mathrm{d}}-t_{j}^{\mathrm{a}}\right)}{\sum \limits_{i \in \Gamma_{j}} \sum \limits_{l} w_{i j}^{l}\left(\partial y_{i}^{l}\left(t_{j}^{\mathrm{a}}\right) / \partial t_{j}^{\mathrm{a}}\right)}\\\Delta w_{i j}^{k}\left(t_{j}^{\mathrm{a}}\right)=-\eta \frac{y_{i}^{k}\left(t_{j}^{\mathrm{a}}\right)\left(t_{j}^{\mathrm{d}}-t_{j}^{\mathrm{a}}\right)}{\sum\limits_{i \in \Gamma_{j}} \sum\limits_{l} w_{i j}^{l}\left(\partial y_{i}^{l}\left(t_{j}^{\mathrm{a}}\right) / \partial t_{j}^{\mathrm{a}}\right)} δjtjaExj(tja)tja=iΓjlwijl(yil(tja)/tja)(tjdtja)Δwijk(tja)=ηiΓjlwijl(yil(tja)/tja)yik(tja)(tjdtja)
对隐藏层有
δ i = ∂ t i a ∂ x i ( t i a ) ∂ E ∂ t i a = ∂ t i a ∂ x i ( t i a ) ∑ j ∈ Γ i ∂ E ∂ t j a ∂ t j a ∂ x j ( t j a ) ∂ x j ( t j a ) ∂ t i a = ∂ t i a ∂ x i ( t i a ) ∑ j ∈ Γ i δ j ∂ x j ( t j a ) ∂ t i a = ∂ t i a ∂ x i ( t i a ) ∑ j ∈ Γ i δ j ∑ k w i j k ∂ y i k ( t j a ) ∂ t i a = ∑ j ∈ Γ i δ j { ∑ k w i j k ( ∂ y i k ( t j a ) / ∂ t i a ) } ∑ h ∈ Γ i ∑ l w h i l ( ∂ y h l ( t i a ) / ∂ t i a ) Δ w h i k = − η y h k ( t i a ) δ i = − η y h k ( t i a ) ∑ j { δ j ∑ k w i j k ( ∂ y i k ( t j a ) / ∂ t i a ) } ∑ n ∈ Γ i ∑ l w n i l ( ∂ y n l ( t i a ) / ∂ t i a ) \delta_{i} = \frac{\partial t_{i}^{\mathrm{a}}}{\partial x_{i}\left(t_{i}^{\mathrm{a}}\right)} \frac{\partial E}{\partial t_{i}^{\mathrm{a}}} =\frac{\partial t_{i}^{\mathrm{a}}}{\partial x_{i}\left(t_{i}^{\mathrm{a}}\right)} \sum_{j \in \Gamma^{i}} \frac{\partial E}{\partial t_{j}^{\mathrm{a}}} \frac{\partial t_{j}^{\mathrm{a}}}{\partial x_{j}\left(t_{j}^{\mathrm{a}}\right)} \frac{\partial x_{j}\left(t_{j}^{\mathrm{a}}\right)}{\partial t_{i}^{\mathrm{a}}} =\frac{\partial t_{i}^{\mathrm{a}}}{\partial x_{i}\left(t_{i}^{\mathrm{a}}\right)} \sum_{j \in \Gamma^{i}} \delta_{j} \frac{\partial x_{j}\left(t_{j}^{\mathrm{a}}\right)}{\partial t_{i}^{\mathrm{a}}}\\=\frac{\partial t_{i}^{\mathrm{a}}}{\partial x_{i}\left(t_{i}^{\mathrm{a}}\right)} \sum_{j \in \Gamma^{i}} \delta_{j}\sum_{k} w_{i j}^{k} \frac{\partial y_{i}^{k}\left(t_{j}^{\mathrm{a}}\right)}{\partial t_{i}^{\mathrm{a}}}=\frac{\sum \limits_{j \in \Gamma^{i}} \delta_{j}\left\{\sum\limits_{k} w_{i j}^{k}\left(\partial y_{i}^{k}\left(t_{j}^{\mathrm{a}}\right) / \partial t_{i}^{\mathrm{a}}\right)\right\}}{\sum\limits_{ h \in \Gamma_{i}} \sum\limits_{l} w_{h i}^{l}\left(\partial y_{h}^{l}\left(t_{i}^{\mathrm{a}}\right) / \partial t_{i}^{\mathrm{a}}\right)}\\\Delta w_{h i}^{k}=-\eta y_{h}^{k}\left(t_{i}^{\mathrm{a}}\right) \delta_{i}=-\eta \frac{y_{h}^{k}\left(t_{i}^{\mathrm{a}}\right) \sum\limits_{j}\left\{\delta_{j} \sum\limits_{k} w_{i j}^{k}\left(\partial y_{i}^{k}\left(t_{j}^{\mathrm{a}}\right) / \partial t_{i}^{\mathrm{a}}\right)\right\}}{\sum\limits_{n \in \Gamma_{i}} \sum\limits_{l} w_{n i}^{l}\left(\partial y_{n}^{l}\left(t_{i}^{\mathrm{a}}\right) / \partial t_{i}^{\mathrm{a}}\right)} δi=xi(tia)tiatiaE=xi(tia)tiajΓitjaExj(tja)tjatiaxj(tja)=xi(tia)tiajΓiδjtiaxj(tja)=xi(tia)tiajΓiδjkwijktiayik(tja)=hΓilwhil(yhl(tia)/tia)jΓiδj{kwijk(yik(tja)/tia)}Δwhik=ηyhk(tia)δi=ηnΓilwnil(ynl(tia)/tia)yhk(tia)j{δjkwijk(yik(tja)/tia)}
算法更新过程如下:

在这里插入图片描述

编码

对于较大的数据集,为了保证每个输入只有一个脉冲,SpikeProp使用GRF编码,详见SNN系列编码部分。

代码

参考

[1] Error-backpropagation in temporally encoded networks ofspiking neurons

[2] 脉冲时序编码的有监督脉冲神经网络算法研究

[3] A remark on the error-backpropagation learning algorithm for spiking neural networks

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值