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=21j∈J∑(tja−tjd)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∈Γj∑k=1∑mwijkyik(t)yik(t)=ε(t−ti−dk)ε(t)=τte1−t/τ
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=−η∂wijk∂E=−η∂tj∂E∂wijk∂tj=−η(tja−tjd))∂wijk∂tj
整个算法的难点也就落在了如何求解
∂
t
j
∂
w
i
j
k
\frac{\partial t_j}{\partial w_{i j}^{k}}
∂wijk∂tj,因为脉冲发放时刻是在膜电势达到阈值这个条件定义的,我们可以认为
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) α=∂t∂xj(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}}
∂wijk∂tj,其实可以看成是当
ω
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ϵ(t−tid−dik)
再来看看权重变化前后的脉冲发放时刻的定义
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)+δtja∂t∂xj(tja)+δxj(tja)+δtja∂t∂δxj(tja)+o(δtja)=ϑ⟹δtja∂t∂xj(tja)+δxj(tja)+δtja∂t∂δxj(tja)+o(δtja)=0
由本节第一个公式可知,当
δ
ω
i
j
→
0
\delta \omega_{ij}\rightarrow 0
δωij→0时,
∂
δ
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
δtja→0,于是上式可简化如下:
δ
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)
δtja∂t∂xj(tja)+δxj(tja)=0⟹δwij→0limδtjaδxj(tja)=−∂t∂xj(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)
∂wij∂tja=δwij→0limδwijδtja=∂wij∂xj(tja)(−{∂t∂xj(tja)}−1)
解决了
∂
t
j
∂
w
i
j
k
\frac{\partial t_j}{\partial w_{i j}^{k}}
∂wijk∂tj的问题,对输出层
δ
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)}
δj≡∂tja∂E∂xj(tja)∂tja=i∈Γj∑l∑wijl(∂yil(tja)/∂tja)(tjd−tja)Δwijk(tja)=−ηi∈Γj∑l∑wijl(∂yil(tja)/∂tja)yik(tja)(tjd−tja)
对隐藏层有
δ
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)∂tia∂tia∂E=∂xi(tia)∂tiaj∈Γi∑∂tja∂E∂xj(tja)∂tja∂tia∂xj(tja)=∂xi(tia)∂tiaj∈Γi∑δj∂tia∂xj(tja)=∂xi(tia)∂tiaj∈Γi∑δjk∑wijk∂tia∂yik(tja)=h∈Γi∑l∑whil(∂yhl(tia)/∂tia)j∈Γi∑δj{k∑wijk(∂yik(tja)/∂tia)}Δwhik=−ηyhk(tia)δi=−ηn∈Γi∑l∑wnil(∂ynl(tia)/∂tia)yhk(tia)j∑{δjk∑wijk(∂yik(tja)/∂tia)}
算法更新过程如下:
编码
对于较大的数据集,为了保证每个输入只有一个脉冲,SpikeProp使用GRF编码,详见SNN系列编码部分。
代码
略
参考
[1] Error-backpropagation in temporally encoded networks ofspiking neurons
[3] A remark on the error-backpropagation learning algorithm for spiking neural networks