脉冲神经网络的神经元的实现

本文讨论在SNN中如何设计一个通用的Neuron类,以包含HH、LIF和izhikevich等多种神经元类型,但面临如何处理不同神经元间具有不同超参数的问题,如LIF和izhikevich的更新方程参数差异。
摘要由CSDN通过智能技术生成

在SNN中,脉冲神经网络有很多的神经元类型,包括HH、LIF和izhikevich等,所以在我的设计中,我希望所有的神经元都继承于一个Neuron的总类,这样在创建和使用时比较方便。

但是存在的一个问题就是这些神经元的超参数相同,在创建的过程中,我暂时不清楚用什么方法完成。比如在LIF神经元中,其更新方程为

  1. 膜电位更新(Membrane potential update):
    dv/dt = (-(v - E_leak) + I_syn) / tau_m

    其中:

    • dv/dt 是膜电位v随时间的变化率;
    • v 是膜电位;
    • E_leak 是静息电位(Leakage potential),表示神经元在静息状态下的膜电位;
    • I_syn 是突触输入电流,表示由其他神经元传递过来的突触输入;
    • tau_m 是膜时间常数(Membrane time constant),表示膜电位衰减的速度。
  2. 阈值触发(Firing threshold condition):
    if v >= V_threshold:
    v = V_reset
    发放一个脉冲(Fire a spike)

    其中:

    • V_threshold 是火灵阈值(Firing threshold),当膜电位超过该阈值时,神经元会发放一个脉冲;
    • V_reset 是重置电位(Reset potential),表示神经元在发放脉冲后膜电位被重置的值。

tau_m 是膜时间常数(Membrane time constant),表示膜电位衰减的速度。

而在izhikevich神经元中,其更新方程为:

  1. 膜电位更新(Membrane potential update):
    dv/dt = 0.04v^2 + 5v + 140 - u + I

    其中:

    • dv/dt 是膜电位v随时间的变化率;
    • v 是膜电位;
    • u 是恢复变量,表示膜电位的恢复程度;
    • I 是突触输入电流,表示由其他神经元传递过来的突触输入。
  2. 恢复变量更新(Recovery variable update):
    du/dt = a(bv - u)

    其中:

    • du/dt 是恢复变量u随时间的变化率;
    • a 和 b 是模型参数,控制恢复变量的变化速度和幅度。
  3. 阈值触发(Firing threshold condition):
    if v >= 30:
    v = c
    u = u + d

    其中:

    • 30 是点火阈值,当膜电位超过该阈值时,神经元会发放一个脉冲;
    • c 是脉冲时的膜电位重置值;
    • d 是脉冲时的恢复变量增量。:

明显可以看到三种神经元虽然有着相同的放电机制,但是其内部方程的参数完全不同,至于HH神经元,我觉得他太过于复杂,所以本文不再讨论。我计划设计成如何格式的代码,所有的神经元都继承于Neuron。

这篇文章应该昨天发的,但是因为电脑死机了,突然数据没保留,所及今天补发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值