损失函数#

作者: Liuhui & Jiangbo

spikeTime损失#

SNN模型训练的损失函数。考虑网络在时间间隔t∈[0,\(T\)]中的损失函数,定义为:

\[E:= \int_0^T L(S^{(n_l)}(t), \hat{S}(t)) d\textit{t} = \frac{1}{2}\int_0^T (e^{(n_l)}(S^{(n_l)}(t), \hat{S}(t)))^2 d\textit{t}\]

其中:

\(\hat{S}(t)\) 是目标脉冲序列,\(L(S^{(n_l)}(t)\), \(\hat{S}(t))\) 是时间实例 \(t\) 的损失,而 \(e^{(n_l)}(S^{(n_l)}(t), \hat{S}(t))\) 是最后一层的误差,将误差记为 \(e^{(n_l)}(t)\)

为了学习目标脉冲序列 \(\hat{S}(t)\) 的形式的误差信号:

\[e^{(n_l)}(t):= \varepsilon(t) * (S^{(n_l)}(t) - \hat{S}(t))\]

该损失函数类似于van Rossum距离。其中, \(\Theta(t)\) 是阶跃函数。

\[\varepsilon(t) = \frac{t}{\tau_s} e^{1 - \frac{t}{\tau_s}} \Theta(t)\]

numSpikes损失#

对于分类任务,通常基于间隔内输出脉冲的数量而不是脉冲的精确时间来做出决定。为了处理这种情况,可以将时间间隔内的误差信号定义为:

\[e^{(n_l)}(t):= ( \int_{T_{int}} S^{(n_l)}(\tau)d\tau - \int_{T_{int}}\hat{S}(\tau)d\tau), t \in T_{int}\]

并在间隔 \(T_{int}\) 之外为零。