事件驱动的Tempotron算法

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)=iwitiK(tti)+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(tti)=V0(expτm(tti)expτs(tti))(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<tmaxK(tmaxti),P+λti<tmaxK(tmaxti),P0,(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的缺点

  1. 每次移动一个时间步需要重新查找一遍输入脉冲。
  2. 对每个满足条件的输入脉冲都要重新计算一次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)=V0iwitiexp(τm(tti))(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)=V0iwitiexp(τs(tti))(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)=V0iwitiexp(τm(t+Δti))=V0iwitiexp(τm(tti))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学习算法

  1. 计算每个脉冲输入时刻的神经元膜电位
    当t时刻有新的脉冲到来时,先计算新脉冲与上一个脉冲的时间间隔 Δ t = t − t l a s t \Delta t=t-t_{last} Δt=ttlast, Δ 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时刻的神经元膜电位。
  2. 计算峰值时刻的膜电位
    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时间处添加一个伪脉冲,起定时作用,只用来标记峰值可能发放的时间。

伪代码

事件驱动伪代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值