SNN系列|学习算法篇(4)SWAT

SWAT

SWAT算法最重要的是隐层的滤波器设计,权重的学习在STDP的基础上加入了BCM规则,网络的输出层也比较有特色,就是所有的训练都是在一个训练神经元上,然后将其映射到分配好的输出神经元上。

BCM Rules

BCM起初是一种平衡Hebb学习的规则,根据神经元状态滑动阈值,进而决定突触更新是增强还是抑制,以此来平衡突触活动。在SWAT算法中,BCM规则用于更新STDP的高度。
A+(θm)=Ap11+θm(ct)A(θm)=ApA+(θm)θm(ωt)=(ωtco)αωt A_{+}\left(\theta_{m}\right)=A_{p} \frac{1}{1+\theta_{m}\left(c_{t}\right)}\\A_{-}\left(\theta_{m}\right)=A_{p}-A_{+}\left(\theta_{m}\right)\\\theta_{m}\left(\omega_{t}\right)=\left(\frac{\omega_{t}}{c_{o}}\right)^{\alpha} \omega_{t}
c0c_0α(=2)\alpha(=2)是常数,ωt\omega_t用于在每次epoch之初确定STDP的窗口高度。

Topology

SWAT是一个三层网络,输入层根据输入数据的特征数ss决定,隐层有ss个array,输出层有nn个分类神经元以及一个训练神经元。输入层使用泊松编码。

SNN系列|学习算法篇(4)SWAT

隐层可以看成是一些频率选择滤波器,隐层突触包含兴奋类和抑制两类,并按照输入脉冲频率初始化为固定值,在网络训练过程中不变。

SNN系列|学习算法篇(4)SWAT

这个滤波的过程没太看懂,其实现的过程主要为了对特定的频率进行响应,通过设置响应频率,在仿真期间每个array里的总有个神经元会进行响应。

SNN系列|学习算法篇(4)SWAT

神经元采用LIF模型
τmdvdt=v(t)+RmItot(t) \tau_m \frac{dv}{dt} = -v(t) + R_mI_{tot}(t)
神经元的阈值是动态更新的,神经元发放脉冲后,其脉冲发放的阈值便会动态变化
Vthrnew=m×Vthroldexp(ttiτdecay) V_{thrnew} = m \times V_{throld}\exp \left( -\frac{t-t_i}{\tau_{decay}}\right)

Training

1、SWAT在训练时将输入样本按类分成堆,每堆样本的个数为mnm_n
2、每次迭代开始时,先使用上面提到的BCM规则确定STDP的窗口;
3、输入样本序列,根据训练神经元的脉冲使用STDP法则计算权重变化δωin\delta \omega_in
δωin=0rδωδω={A+exp(Δtτ+)Aexp(Δtτ) \delta \omega_{in} = \sum \limits _0^r \delta \omega\\\delta \omega = \begin{cases}A_+\exp (\frac{\Delta t}{\tau_+})\\A_-\exp (\frac{\Delta t}{\tau_-}) \end{cases}
4、将学习到的权重变化映射到输出神经元对应的突触权值。

参考

[1] [SWAT: A Spiking Neural Network Training Algorithm for Classification Problems](