SWAT
SWAT算法最重要的是隐层的滤波器设计,权重的学习在STDP的基础上加入了BCM规则,网络的输出层也比较有特色,就是所有的训练都是在一个训练神经元上,然后将其映射到分配好的输出神经元上。
BCM Rules
BCM起初是一种平衡Hebb学习的规则,根据神经元状态滑动阈值,进而决定突触更新是增强还是抑制,以此来平衡突触活动。在SWAT算法中,BCM规则用于更新STDP的高度。
A
+
(
θ
m
)
=
A
p
1
1
+
θ
m
(
c
t
)
A
−
(
θ
m
)
=
A
p
−
A
+
(
θ
m
)
θ
m
(
ω
t
)
=
(
ω
t
c
o
)
α
ω
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}
A+(θm)=Ap1+θm(ct)1A−(θm)=Ap−A+(θm)θm(ωt)=(coωt)αωt
c
0
c_0
c0和
α
(
=
2
)
\alpha(=2)
α(=2)是常数,
ω
t
\omega_t
ωt用于在每次epoch之初确定STDP的窗口高度。
Topology
SWAT是一个三层网络,输入层根据输入数据的特征数 s s s决定,隐层有 s s s个array,输出层有 n n n个分类神经元以及一个训练神经元。输入层使用泊松编码。
隐层可以看成是一些频率选择滤波器,隐层突触包含兴奋类和抑制两类,并按照输入脉冲频率初始化为固定值,在网络训练过程中不变。
这个滤波的过程没太看懂,其实现的过程主要为了对特定的频率进行响应,通过设置响应频率,在仿真期间每个array里的总有个神经元会进行响应。
神经元采用LIF模型
τ
m
d
v
d
t
=
−
v
(
t
)
+
R
m
I
t
o
t
(
t
)
\tau_m \frac{dv}{dt} = -v(t) + R_mI_{tot}(t)
τmdtdv=−v(t)+RmItot(t)
神经元的阈值是动态更新的,神经元发放脉冲后,其脉冲发放的阈值便会动态变化
V
t
h
r
n
e
w
=
m
×
V
t
h
r
o
l
d
exp
(
−
t
−
t
i
τ
d
e
c
a
y
)
V_{thrnew} = m \times V_{throld}\exp \left( -\frac{t-t_i}{\tau_{decay}}\right)
Vthrnew=m×Vthroldexp(−τdecayt−ti)
Training
1、SWAT在训练时将输入样本按类分成堆,每堆样本的个数为 m n m_n mn;
2、每次迭代开始时,先使用上面提到的BCM规则确定STDP的窗口;
3、输入样本序列,根据训练神经元的脉冲使用STDP法则计算权重变化 δ ω i n \delta \omega_in δωin;
δ ω i n = ∑ 0 r δ ω δ ω = { A + exp ( Δ t τ + ) A − exp ( Δ 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} δωin=0∑rδωδω={A+exp(τ+Δt)A−exp(τ−Δt)
4、将学习到的权重变化映射到输出神经元对应的突触权值。
参考
[1] [SWAT: A Spiking Neural Network Training Algorithm for Classification Problems](