1. 时间驱动的Tempotron学习算法
公式
突触前神经元输入一个脉冲会产生一个PSP(突触后电位),神经元的膜电位为所有突触前神经元产生的PSP加权和
V
(
t
)
=
∑
i
w
i
∑
t
i
K
(
t
−
t
i
)
+
V
r
e
s
t
(1.1)
V(t)=\sum_i{w_i}\sum_{t_i}K(t-t_i)+V_{rest} \tag{1.1}
V(t)=i∑witi∑K(t−ti)+Vrest(1.1)
K表示归一化后的PSP核函数
K
(
t
−
t
i
)
=
V
0
(
e
x
p
−
(
t
−
t
i
)
τ
m
−
e
x
p
−
(
t
−
t
i
)
τ
s
)
(1.2)
K(t-t_i)=V_0(exp\frac{-(t-t_i)}{\tau_m}-exp\frac{-(t-t_i)}{\tau_s}) \tag{1.2}
K(t−ti)=V0(expτm−(t−ti)−expτs−(t−ti))(1.2)
学习规则
Δ
w
i
=
{
λ
∑
t
i
<
t
m
a
x
K
(
t
m
a
x
−
t
i
)
,
P
+
误
差
−
λ
∑
t
i
<
t
m
a
x
K
(
t
m
a
x
−
t
i
)
,
P
−
误
差
0
,
其
他
情
况
(1.3)
\Delta w_i=\left\{ \begin{aligned} & \lambda \sum _{t_i<t_{max}}K(t_{max}-t_i),P^+误差\\ & -\lambda \sum _{t_i<t_{max}}K(t_{max}-t_i),P^-误差\\ & 0,其他情况 \end{aligned} \right. \tag{1.3}
Δwi=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧λti<tmax∑K(tmax−ti),P+误差−λti<tmax∑K(tmax−ti),P−误差0,其他情况(1.3)
Tempotron对权重的更新需要神经元膜电位的峰值时刻
t
m
a
x
t_{max}
tmax.编码思想,通过移动时间步,查找当前时刻前输入的全部脉冲,计算每个输入脉冲在当前时刻的PSP,然后对这些PSP根据突触权重进行加权求和,计算出每个时刻神经元的膜电位,从而找到膜电位的峰值时刻。
伪代码
Matlab代码
Vmax=0; tmax=0; %初始化最大膜电位和最大膜电位的时间
fired=false;
T = TTmax(pp);
firedAfferents=find(~cellfun('isempty', ptn(pIdx,:))); %模式pIdx发放脉冲的突触前神经元
for t=dt:dt:T
Vm = 0;
if fired==false
tSearch=t;
else
%若发射脉冲,关闭发射之后的其他输入
tSearch=t_fire;
end
for j=firedAfferents
%查找tSearch时刻之前输入的脉冲
Tsyn=find(ptn{pIdx,j}<=tSearch+0.1*dt); % no cut window
if isempty(Tsyn)
continue;
else
%计算t时刻神经元的膜电位,即所有PSP的加权和
sumK =sum(V0*(exp(-(t-ptn{pIdx,j}(Tsyn))/tau_m)-exp(-(t-ptn{pIdx,j}(Tsyn))/tau_s))); % the sum of kernel for No.j afferent
Vm = Vm + weights(j)*sumK ;
end
end
Vm = Vm + V_rest;
if Vm>=V_thr && fired==false % fire
fired=true;
t_fire=t;
Class_Tr(pp)=true;
end
if Vm>Vmax
Vmax=Vm; tmax=t; %更新峰值和峰值时刻
end
end
结论:计算突触前神经元发放脉冲后的膜电位,并在此过程中记录下 t m a x t_{max} tmax
时间驱动的Tempotron的缺点
- 每次移动一个时间步需要重新查找一遍输入脉冲。
- 对每个满足条件的输入脉冲都要重新计算一次PSP。
2. 时间驱动和事件驱动为什么等价
指数相加可以转化为两个指数的乘法,因此可从上一时刻的电位直接计算当前时刻的电位,而不必从0开始。
将V(t)记作公式如下
V
(
t
)
=
V
m
(
t
)
−
V
s
(
t
)
(2.1)
V(t)=V_m(t)-V_s(t) \tag{2.1}
V(t)=Vm(t)−Vs(t)(2.1)
其中
V
m
(
t
)
=
V
0
∑
i
w
i
∑
t
i
e
x
p
(
−
(
t
−
t
i
)
τ
m
)
(2.2)
V_m(t)=V_0\sum_{i}w_i\sum_{t_i}exp(\frac{-(t-t_i)}{\tau_m} ) \tag{2.2}
Vm(t)=V0i∑witi∑exp(τm−(t−ti))(2.2)
V
s
(
t
)
=
V
0
∑
i
w
i
∑
t
i
e
x
p
(
−
(
t
−
t
i
)
τ
s
)
(2.3)
V_s(t)=V_0\sum_{i}w_i\sum_{t_i}exp(\frac{-(t-t_i)}{\tau_s} ) \tag{2.3}
Vs(t)=V0i∑witi∑exp(τs−(t−ti))(2.3)
若在
Δ
t
\Delta t
Δt的时间间隔内没有新的脉冲输入,那么
V
m
(
t
+
Δ
t
)
V_m(t+\Delta t)
Vm(t+Δt)可表示为
V
m
(
t
+
Δ
t
)
=
V
0
∑
i
w
i
∑
t
i
e
x
p
(
−
(
t
+
Δ
−
t
i
)
τ
m
)
=
V
0
∑
i
w
i
∑
t
i
e
x
p
(
−
(
t
−
t
i
)
τ
m
)
e
x
p
(
−
(
Δ
t
)
τ
m
)
=
V
m
(
t
)
e
x
p
(
−
Δ
t
τ
m
)
(2.4)
\begin{aligned} V_m(t+\Delta t)&=V_0\sum_{i}w_i\sum_{t_i}exp(\frac{-(t+\Delta-t_i)}{\tau_m} )\\ &=V_0\sum_{i}w_i\sum_{t_i}exp(\frac{-(t-t_i)}{\tau_m})exp(\frac{-(\Delta t)}{\tau_m} )\\ &=V_m(t)exp(\frac{-\Delta t}{\tau_m} ) \end{aligned} \tag{2.4}
Vm(t+Δt)=V0i∑witi∑exp(τm−(t+Δ−ti))=V0i∑witi∑exp(τm−(t−ti))exp(τm−(Δt))=Vm(t)exp(τm−Δt)(2.4)
同理
V
s
(
t
+
Δ
t
)
=
V
s
(
t
)
e
x
p
(
−
Δ
t
τ
s
)
(2.5)
V_s(t+\Delta t)=V_s(t)exp(\frac{-\Delta t}{\tau_s} ) \tag{2.5}
Vs(t+Δt)=Vs(t)exp(τs−Δt)(2.5)
当t时刻有新的脉冲从突触i输入时,
V
m
(
t
)
V_m(t)
Vm(t)和
V
s
(
t
)
V_s(t)
Vs(t)可以更新如下:
V
m
(
t
)
=
V
m
(
t
)
+
V
0
w
t
(2.6)
V_m(t)=V_m(t)+V_0w_t \tag{2.6}
Vm(t)=Vm(t)+V0wt(2.6)
V
s
(
t
)
=
V
s
(
t
)
+
V
0
w
t
(2.7)
V_s(t)=V_s(t)+V_0w_t \tag{2.7}
Vs(t)=Vs(t)+V0wt(2.7)
事件驱动的Tempotron学习算法
- 计算每个脉冲输入时刻的神经元膜电位
当t时刻有新的脉冲到来时,先计算新脉冲与上一个脉冲的时间间隔 Δ t = t − t l a s t \Delta t=t-t_{last} Δt=t−tlast, Δ t \Delta t Δt时间内没有新的脉冲输入,用公式 ( 2.4 ) (2.4) (2.4), ( 2.5 ) (2.5) (2.5)计算t时刻前的膜电位,由于t时刻有输入脉冲,用公式 ( 2.6 ) (2.6) (2.6), ( 2.7 ) (2.7) (2.7), ( 2.1 ) (2.1) (2.1)计算膜电位,从而得到每一个脉冲输入时刻的神经元膜电位,而不再是时间驱动方式中每一个dt时刻的神经元膜电位。 - 计算峰值时刻的膜电位
a) 伪脉冲
PSP核函数图像如下
根据公式 ( 1.2 ) (1.2) (1.2),参数 τ m \tau_m τm和参数 τ s \tau_s τs确定,则PSP核形状确定,PSP到达峰值的时间也确定,记做 Δ t s \Delta t_s Δts,神经元膜电位的峰值只有可能出现在某个输入脉冲的PSP达到峰值的时候,所以可以在每个输入脉冲后的 Δ t \Delta t Δt时间处添加一个伪脉冲,起定时作用,只用来标记峰值可能发放的时间。