SWAT
SWAT算法最重要的是隐层的滤波器设计,权重的学习在STDP的基础上加入了BCM规则,网络的输出层也比较有特色,就是所有的训练都是在一个训练神经元上,然后将其映射到分配好的输出神经元上。
BCM Rules
BCM起初是一种平衡Hebb学习的规则,根据神经元状态滑动阈值,进而决定突触更新是增强还是抑制,以此来平衡突触活动。在SWAT算法中,BCM规则用于更新STDP的高度。
A+(θm)=Ap1+θm(ct)1A−(θm)=Ap−A+(θm)θm(ωt)=(coωt)αωt
c0和α(=2)是常数,ωt用于在每次epoch之初确定STDP的窗口高度。
Topology
SWAT是一个三层网络,输入层根据输入数据的特征数s决定,隐层有s个array,输出层有n个分类神经元以及一个训练神经元。输入层使用泊松编码。

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

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

神经元采用LIF模型
τmdtdv=−v(t)+RmItot(t)
神经元的阈值是动态更新的,神经元发放脉冲后,其脉冲发放的阈值便会动态变化
Vthrnew=m×Vthroldexp(−τdecayt−ti)
Training
1、SWAT在训练时将输入样本按类分成堆,每堆样本的个数为mn;
2、每次迭代开始时,先使用上面提到的BCM规则确定STDP的窗口;
3、输入样本序列,根据训练神经元的脉冲使用STDP法则计算权重变化δωin;
δωin=0∑rδωδω={A+exp(τ+Δt)A−exp(τ−Δt)
4、将学习到的权重变化映射到输出神经元对应的突触权值。
参考
[1] [SWAT: A Spiking Neural Network Training Algorithm for Classification Problems](