SNN系列|学习算法篇(3)ReSuMe

ReSuMe

原文传送

适用于单层网络或液体状态机,采用精确时间编码,结合了STDP与anti-STDP机制,对多种神经元模型和突触类型均适用,因为权重的调整仅取决于脉冲输出与目标输出序列有关。核心的更新公式如下:
d d t ω o i ( t ) = [ S d ( t ) − S o ( t ) ] [ a d + ∫ 0 ∞ a d i ( s ) S i ( t − s ) d s ] \frac{d}{d t} \omega_{o i}(t)=\left[S_{d}(t)-S_{o}(t)\right]\left[a_{d}+\int_{0}^{\infty} a_{d i}(s) S_{i}(t-s) d s\right] dtdωoi(t)=[Sd(t)So(t)][ad+0adi(s)Si(ts)ds]

Anti-Hebbian

Hebb定律提到"fire together, wire together",Hebb本人也提到突触前后神经元的协同活动会提高突触前神经元的传递效率,这对兴奋性突触时没有问题的,但是对抑制性神经元来说,相关性活动却会造成突触传递效率的降低。与Hebb学习法则一样,anti-Hebb只是多了一个负号
d ω d t = − η x y \frac{d\omega}{dt}=-\eta xy dtdω=ηxy
anti-Hebb通常与Hebb一起使用,比如可以用于侧向神经元的相互抑制。Hebbian学习通常与LTP相关,anti-Hebbian通常与LTD相关,STDP一般也认为与anti-hebb有关。
在这里插入图片描述

A phenomenological model for STDP

该模型认为,除了突触延迟以外,所有的突触权重变化都可以由突触前后神经元脉冲来描述。突触前、突触后、目标脉冲序列分别表示为 S i ( t ) , S o ( t ) , S d ( t ) S_i(t),S_o(t),S_d(t) Si(t),So(t),Sd(t),每个序列都是单个脉冲的叠加 S ( t ) = ∑ f δ ( t − t f ) S(t) = \sum _f \delta(t-t_f) S(t)=fδ(ttf)

突触权重的改变包括三部分:当不考虑 a a a和Non-Hebbian时,同经典STDP。

  • 无脉冲时的自衰减 a a a
  • 突触前脉冲带来的影响
    • Non-Hebbian:无突触后脉冲时的自影响
    • 突触前后脉冲时序的影响
  • 突触后脉冲带来的影响
    • Non-Hebbian:无突触前脉冲时的自影响
    • 突触前后脉冲时序的影响

突触权重的更新如下:
d ω ( t ) d t = a + S i ( t ) [ a i + ∫ 0 ∞ a i d ( s ) S d ( t − s ) d s ] + S d ( t ) [ a d + ∫ 0 ∞ a d i ( s ) S i ( t − s ) d s ] \frac{d \omega(t)}{d t}=a+S_{i}(t)\left[a_{i}+\int_{0}^{\infty} a_{i d}(s) S_{d}(t-s) d s\right]+S_{d}(t)\left[a_{d}+\int_{0}^{\infty} a_{d i}(s) S_{i}(t-s) d s\right] dtdω(t)=a+Si(t)[ai+0aid(s)Sd(ts)ds]+Sd(t)[ad+0adi(s)Si(ts)ds]
在这里插入图片描述

注意积分时从0开始的,也就是说当突触前脉冲到来的时候,只看在此之前的突触后脉冲,按照经典STDP,此时应该是抑制作用;反之为增强作用。对于突触前后脉冲时序 s = t i f − t d f s=t_i^f -t_d^f s=tiftdf的影响, a i d , a d i a_{id},a_{di} aid,adi定义窗口函数如下:
W ( s ) = { A + exp ⁡ [ s / τ + ] for  s < 0 A − exp ⁡ [ − s / τ − ] for  s > 0 W(s)=\left\{\begin{array}{cl}A_{+} \exp \left[s / \tau_{+}\right] & \text {for } s<0 \\A_{-} \exp \left[-s / \tau_{-}\right] & \text {for } s>0\end{array}\right. W(s)={A+exp[s/τ+]Aexp[s/τ]for s<0for s>0
a i d ( s ) a_{id}(s) aid(s)对应 s > 0 s>0 s>0 a d i ( s ) a_{di}(s) adi(s)对应 s < 0 s<0 s<0

在这里插入图片描述

ReSuMe

该算法在上述基础上,将STDP与Anti-STDP相结合,即突触权重的更新满足
d ω o i ( t ) d t = X d i ( t ) + X o i ( t ) \frac{d \omega_{o i}(t)}{d t} =X_{d i}(t)+X_{o i}(t) dtdωoi(t)=Xdi(t)+Xoi(t)
其中, X d i ( t ) , X o i ( t ) X_{di}(t),X_{oi}(t) Xdi(t),Xoi(t)分别表示突触前脉冲序列与目标序列的STDP过程以及突触前脉冲序列与实际序列的anti-STDP过程,根据上一节的描述,二者可形式化给出
X d i ( t ) = a + S i ( t ) [ a i + ∫ 0 ∞ a i d ( s ) S d ( t − s ) d s ] + S d ( t ) [ a d + ∫ 0 ∞ a d i ( s ) S i ( t − s ) d s ] X o i ( t ) = b + S i ( t ) [ b i + ∫ 0 ∞ b i o ( s ) S o ( t − s ) d s ] + S o ( t ) [ b o + ∫ 0 ∞ b o i ( s ) S i ( t − s ) d s ] X_{d i}(t)=a+S_{i}(t)\left[a_{i}+\int_{0}^{\infty} a_{i d}(s) S_{d}(t-s) d s\right]+S_{d}(t)\left[a_{d}+\int_{0}^{\infty} a_{d i}(s) S_{i}(t-s) d s\right]\\X_{o i}(t)=b+S_{i}(t)\left[b_{i}+\int_{0}^{\infty} b_{i o}(s) S_{o}(t-s) d s\right]+S_{o}(t)\left[b_{o}+\int_{0}^{\infty} b_{o i}(s) S_{i}(t-s) d s\right] Xdi(t)=a+Si(t)[ai+0aid(s)Sd(ts)ds]+Sd(t)[ad+0adi(s)Si(ts)ds]Xoi(t)=b+Si(t)[bi+0bio(s)So(ts)ds]+So(t)[bo+0boi(s)Si(ts)ds]
当输出脉冲序列与目标脉冲序列完全一致时,应满足如下条件
X d i ( t ) + X o i ( t ) = 0 ⇔ S o ( t ) = S d ( t )    ⟹    { − b = a , − b i = a i , − b o = a d A o i = A d i , A i o = A i d τ o i = τ d i , τ i o = τ i d X_{d i}(t)+X_{o i}(t)=0 \Leftrightarrow S_{o}(t)=S_{d}(t)\\\implies \left\{\begin{array}{l}-b=a,-b_{i}=a_{i},-b_{o}=a_{d} \\A_{o i}=A_{d i}, A_{i o}=A_{i d} \\\tau_{o i}=\tau_{d i}, \tau_{i o}=\tau_{i d}\end{array}\right. Xdi(t)+Xoi(t)=0So(t)=Sd(t)b=a,bi=ai,bo=adAoi=Adi,Aio=Aidτoi=τdi,τio=τid
使用上述条件化简公式
d d t ω o i ( t ) = S i ( t ) ∫ 0 ∞ a i d ( s ) [ S d ( t − s ) − S o ( t − s ) ] d s + [ S d ( t ) − S o ( t ) ] [ a d + ∫ 0 ∞ a d i ( s ) S i ( t − s ) d s ] \begin{aligned}\frac{d}{d t} \omega_{o i}(t)&= S_{i}(t) \int_{0}^{\infty} a_{i d}(s)\left[S_{d}(t-s)-S_{o}(t-s)\right] d s \\&+\left[S_{d}(t)-S_{o}(t)\right]\left[a_{d}+\int_{0}^{\infty} a_{d i}(s) S_{i}(t-s) d s\right]\end{aligned} dtdωoi(t)=Si(t)0aid(s)[Sd(ts)So(ts)]ds+[Sd(t)So(t)][ad+0adi(s)Si(ts)ds]
实验发现, a i d ( s ) = 0 a_{id}(s)=0 aid(s)=0能获得更好的收敛性和学习效果,因此,ReSuMe的学习规则如下:
d d t ω o i ( t ) = [ S d ( t ) − S o ( t ) ] [ a d + ∫ 0 ∞ a d i ( s ) S i ( t − s ) d s ] \frac{d}{d t} \omega_{o i}(t)=\left[S_{d}(t)-S_{o}(t)\right]\left[a_{d}+\int_{0}^{\infty} a_{d i}(s) S_{i}(t-s) d s\right] dtdωoi(t)=[Sd(t)So(t)][ad+0adi(s)Si(ts)ds]
在这里插入图片描述

代码

参考

[1] Spike-timing dependent synaptic plasticity: a phenomenological framework

[2] Encyclopedia of Computianal Neuroscience

[3] Supervised Learning in Spiking Neural Networks with ReSuMe: Sequence Learning, Classification, and Spike Shifting

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是一个简单的Spike Response Model (SRM)的Matlab实现代码: ``` % SRM model parameters tau_m = 10; % Membrane time constant (ms) theta = -50; % Membrane threshold (mV) tau_s = 2; % Synaptic time constant (ms) w = 1; % Synaptic weight % Simulation parameters dt = 0.1; % Time step (ms) T = 1000; % Simulation time (ms) t = 0:dt:T; % Time vector % Input spike train spikes = zeros(size(t)); spikes(1:100:end) = 1; % Membrane potential and spike train v = zeros(size(t)); spike_train = zeros(size(t)); % Simulation loop for i = 2:length(t) dvdt = (-v(i-1) + w*spikes(i-1))/tau_m; v(i) = v(i-1) + dt*dvdt; if v(i) > theta spike_train(i) = 1; v(i) = 0; end end % Plot results figure; subplot(2,1,1); plot(t, spikes); title('Input spike train'); xlabel('Time (ms)'); ylabel('Spike train'); subplot(2,1,2); plot(t, spike_train); title('Output spike train'); xlabel('Time (ms)'); ylabel('Spike train'); ``` 在上面的代码中,我们首先设置了SRM模型的参数,包括膜时间常数tau_m、膜阈值theta、突触时间常数tau_s和突触权重w。然后,我们设置了模拟的参数,包括时间步长dt、模拟时间T和时间向量t。接下来,我们创建了一个输入脉冲列spikes。我们使用一个简单的方法,在每100个时间步长之间设置一个脉冲,以模拟一个周期为100ms的输入信号。然后,我们使用模拟循环来计算SRM模型的膜电位v和输出脉冲列spike_train。如果膜电位v超过了阈值theta,我们就会发射一个脉冲,并将膜电位v重置为0。最后,我们绘制了输入脉冲列和输出脉冲列。 希望这个代码能够帮助你更好地理解SRM模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值