当前位置: 首页 > news >正文

SNN(TTFS)论文阅读——LC-TTFS

LC-TTFS: Towards Lossless Network Conversion for Spiking Neural Networks with TTFS Coding

证明目标

论文的最终数学目标是证明:LC−TTFSLC-TTFSLCTTFS 算法的约束下,ANN 和 SNN 之间存在一个完美的、逐层传递的映射关系。

用数学语言来描述这个目标就是:

假设在 l−1l-1l1 层,ANN的激活值 aj(l−1)a_j(l-1)aj(l1) 和 SNN 的脉冲时间 tj(l−1)t_j(l-1)tj(l1) 遵循以下编码关系:
$ t_j^{l-1} = (l-1) + 1 - a_j^{l-1} = l - a_j^{l-1} \quad \cdots \text{(公式 9)} $
那么,我们必须能够证明,在下一层 lll,其激活值 aila_i^lail 和脉冲时间 tilt_i^ltil 也将严格遵循相同的编码关系
$ t_i^l = l + 1 - a_i^l \quad \cdots \text{(公式 19)} $

这个证明本质上是一个数学归纳法:只要证明了这个从 l−1l-1l1 层到 lll 层的传递关系成立,那么整个网络的转换就是无损的,因为这个完美的编码关系在网络中逐层被保持下去了。

证明推导步骤 (The Derivation Steps)

作者的推导过程是一个“从一般到特殊”的过程。他们首先写出SNN神经元发放时间的一般表达式,然后一步步代入他们提出的约束条件,最终将其化简为我们想要的证明目标。

起始点:SNN神经元发放时间的一般表达式

从SNN最基本的物理规则出发:当神经元 iii 的膜电位 Vil(t)V_i^l(t)Vil(t) 第一次达到发放阈值 ϑϑϑ 时,它就会发放一个脉冲,此时的 ttt 就是它的发放时间 tilt_i^ltil

  1. 膜电位公式 (来自公式4):
    Vil(t)=∑jwijl(t−tjl−1)V_i^l(t) = \sum_{j} w_{ij}^l (t - t_j^{l-1}) Vil(t)=jwijl(ttjl1)

  2. 发放条件 (来自公式5):
    Vil(til)=ϑV_i^l(t_i^l) = \vartheta Vil(til)=ϑ

  3. 联立上面两个式子,我们可以解出 tilt_i^ltil一般表达式 (公式8):
    ∑jwijl(til−tjl−1)=ϑ\sum_{j} w_{ij}^l (t_i^l - t_j^{l-1}) = \vartheta jwijl(tiltjl1)=ϑ

    til∑jwijl−∑jwijltjl−1=ϑt_i^l \sum_{j} w_{ij}^l - \sum_{j} w_{ij}^l t_j^{l-1} = \vartheta tiljwijljwijltjl1=ϑ

    til=ϑ+∑jwijltjl−1∑jwijl⋯(这是推导的起点)t_i^l = \frac{\vartheta + \sum_{j} w_{ij}^l t_j^{l-1}}{\sum_{j} w_{ij}^l} \quad \cdots \text{(这是推导的起点)} til=jwijlϑ+jwijltjl1(这是推导的起点)

    • 问题显现:此时的 tilt_i^ltil 表达式非常复杂,它不仅依赖于输入的脉冲时间 tj(l−1)t_j(l-1)tj(l1),还依赖于一个不确定的分母项 ∑w∑ww。这就是作者定义的**“时间扭曲问题”**的数学根源。

    • 以ANN为例,神经元的输出只依赖于:
      ail=f(∑wijlajl−1+bil) a_i^l = f(\sum w_{ij}^l a_j^{l-1} + b_i^l) ail=f(wijlajl1+bil)
      如果两个神经元有相同的加权输入和,它们会有相同的输出(假设相同的偏置和激活函数)。但是SNN中,对于两个得到相同加权和(充电电流)的神经元来说,它们理应表现出相同的特性,但是由于权重和的存在导致它们发放时间并不一致。这就是时空扭曲问题。

步骤一:代入编码关系,连接SNN与ANN

现在,我们将 l−1l-1l1 层的编码关系
tj(l−1)=l−aj(l−1) t_j(l-1) = l - a_j(l-1) tj(l1)=laj(l1)
(公式9) 代入上述一般表达式中,从而将 tilt_i^ltil 和ANN的激活值 aj(l−1)a_j^(l-1)aj(l1) 联系起来。
til=ϑ+∑jwijl(l−ajl−1)∑jwijlt_i^l = \frac{\vartheta + \sum_{j} w_{ij}^l (l - a_j^{l-1})}{\sum_{j} w_{ij}^l} til=jwijlϑ+jwijl(lajl1)

til=ϑ+l∑jwijl−∑jwijlajl−1∑jwijl⋯(公式 10)t_i^l = \frac{\vartheta + l \sum_{j} w_{ij}^l - \sum_{j} w_{ij}^l a_j^{l-1}}{\sum_{j} w_{ij}^l} \quad \cdots \text{(公式 10)} til=jwijlϑ+ljwijljwijlajl1(公式 10)

这个公式是连接两个世界的桥梁,但形式依然很丑陋。

骤二:施加第一个核心约束——权重正则化

为了解决“时间扭曲问题”,作者引入了第一个关键约束:强制让每个神经元的输入权重总和为1
∑jwijl=1\sum_{j} w_{ij}^l = 1 jwijl=1
将这个约束代入公式(10):
til=ϑ+l(1)−∑jwijlajl−11t_i^l = \frac{\vartheta + l(1) - \sum_{j} w_{ij}^l a_j^{l-1}}{1} til=1ϑ+l(1)jwijlajl1

til=ϑ+l−∑jwijlajl−1t_i^l = \vartheta + l - \sum_{j} w_{ij}^l a_j^{l-1} til=ϑ+ljwijlajl1

分母消失了,“时间扭曲”的根源被消除了。

步骤三:施加第二个核心约束——阈值设定\

进一步设定 ϑ=1ϑ = 1ϑ=1。这既是为了简化计算,也与后面使用的 ReLU1ReLU1ReLU1 激活函数相匹配。代入后得到:
til=1+l−∑jwijlajl−1⋯(公式 15) t_i^l = 1 + l - \sum_{j} w_{ij}^l a_j^{l-1} \quad \cdots \text{(公式 15)} til=1+ljwijlajl1(公式 15)

  • 关键洞察:请注意,这里的 ∑wijlaj(l−1)∑ w_{ij}^l a_j(l-1)wijlaj(l1) 正是ANN中第 lll 层神经元 iii激活函数之前的加权输入和(即预激活值)。
步骤四:施加第三个核心约束——动态阈值与ReLU1的对称性

我们离目标 til=l+1−ailt_i^l = l + 1 - a_i^ltil=l+1ail 已经非常接近了。区别在于,我们现在得到的是预激活值,而目标是后激活值 aila_i^lail

这里的推导非常巧妙,利用了作者设计的动态阈值函数 Fl(t)F^l(t)Fl(t)ReLU1ReLU1ReLU1 激活函数 y(x)y(x)y(x) 之间的数学对称性

论文中的函数 FFF 是一个变换函数 (transformation function),它代表了“动态发放阈值 (dynamic firing threshold)”机制所产生的效果。

简单来说,FFF 的作用是将一个计算出的、理论上的脉冲发放时间,映射(或“限制”)到一个预先为该层神经元分配好的、允许的时间窗口内

  1. 要解决的问题: 论文指出了在将 ANN (人工神经网络) 转换为 SNN (脉冲神经网络) 时存在一个“时间动态问题 (temporal dynamics problem)”,即脉冲可能会过早或过晚发放,导致信息处理出错。为了解决这个问题,作者提出了一种“动态发放阈值”机制。

  2. FFF 的具体映射关系: 这个机制的效果等同于应用了函数 FFF。根据论文中的公式 (12) 和图 3(b),对于第 lll 层的神经元,其允许的发放时间窗口是 [Tl,T(l+1))[Tl, T(l+1))[Tl,T(l+1))

    • 如果一个计算出的脉冲时间 ttt 早于这个窗口的起始时间 TlTlTlFFF 会将其映射为窗口的起始时间 TlTlTl
    • 如果 ttt 恰好在允许的时间窗口内,FFF 不会改变它。
    • 如果 ttt 晚于这个窗口的结束时间 T(l+1)T(l+1)T(l+1)FFF 会将其映射为窗口的结束时间 T(l+1)T(l+1)T(l+1)

    本质上,FFF 是一个**“裁剪”或“钳位”(clamping)函数**,它确保了无论计算出的脉冲时间是多少,最终实际的脉冲时间都必须落在为该层分配的特定时间段内。

  3. 最终目的: 通过这种映射,该算法保证了 SNN 的每一层都在一个独立的、不重叠的时间窗口内完成计算。前一层的所有脉冲都发放完毕后,后一层才开始发放脉冲。这解决了“时间动态问题”,确保了从 ANN 的激活值到 SNN 的脉冲时间的转换是稳定和“近乎无损”的,从而实现了高精度的网络转换。

  1. ANN中的关系是:
    ail=y(∑jwijlajl−1) a_i^l = y(\sum_{j} w_{ij}^l a_j^{l-1}) ail=y(jwijlajl1)

  2. 作者在论文中给出了一个关键的恒等式(公式17):
    Fl(x)=l+1−y(l+1−x) F^l(x) = l+1 - y(l+1-x) Fl(x)=l+1y(l+1x)

  3. 我们在步骤三得到的 tilt_i^ltil 是一个“理论计算出的”时间,它可能超出允许的范围。实际的脉冲时间是经过动态阈值函数 FlF^lFl 钳位后的结果,即
    Actualtil=Fl(til) Actual t_i^l = F^l(t_i^l) Actualtil=Fl(til)

现在,我们将步骤三得到的 tilt_i^ltil (公式15) 代入 Fl(x)F^l(x)Fl(x)xxx 中:
Actualtil=Fl(1+l−∑jwijlajl−1) \text{Actual} t_i^l = F^l(1 + l - \sum_{j} w_{ij}^l a_j^{l-1}) Actualtil=Fl(1+ljwijlajl1)
利用上面的恒等式
Fl(x)=l+1−y(l+1−x) F^l(x) = l+1 - y(l+1-x) Fl(x)=l+1y(l+1x)
,我们得到:
Actualtil=(l+1)−y((l+1)−(1+l−∑jwijlajl−1))\text{Actual} t_i^l = (l+1) - y \left( (l+1) - (1 + l - \sum_{j} w_{ij}^l a_j^{l-1}) \right) Actualtil=(l+1)y((l+1)(1+ljwijlajl1))
化简括号内的部分:
(l+1)−(1+l−∑jwijlajl−1)=l+1−1−l+∑jwijlajl−1=∑jwijlajl−1(l+1) - (1 + l - \sum_{j} w_{ij}^l a_j^{l-1}) = l+1-1-l + \sum_{j} w_{ij}^l a_j^{l-1} = \sum_{j} w_{ij}^l a_j^{l-1} (l+1)(1+ljwijlajl1)=l+11l+jwijlajl1=jwijlajl1
所以,上式变为:
Actualtil=(l+1)−y(∑jwijlajl−1)\text{Actual} t_i^l = (l+1) - y(\sum_{j} w_{ij}^l a_j^{l-1}) Actualtil=(l+1)y(jwijlajl1)
我们知道
ail=y(∑jwijlajl−1) a_i^l = y(\sum_{j} w_{ij}^l a_j^{l-1}) ail=y(jwijlajl1)
,代入进去:
Actualtil=l+1−ail \text{Actual} t_i^l = l+1 - a_i^l Actualtil=l+1ail

证明完成! 我们成功地从 l−1l-1l1 层的编码关系和SNN的基本物理规则出发,通过应用作者提出的三个核心约束(权重和为1,阈值为1,动态阈值/ReLU1),严格推导出了 lll 层的编码关系。

为什么文章强调不能使用BN,BN会破坏对权重的归一化?

普通的BN会引入一个新的、可学习的缩放因子(γ),这个因子会破坏(或者说“覆盖”)掉∑w=1这个约束,从而让整个数学推导功亏一篑。

一个标准的BN层,作用在预激活值zzz上,执行以下两个步骤:

  1. 归一化 (Normalize)
    z^=z−μBσB2+ϵ\hat{z} = \frac{z - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} z^=σB2+ϵzμB
    它将一批数据(a batch)的zzz值调整为均值为0,方差为1的分布。μBμ_BμBσBσ_BσB是这批数据的均值和方差。

  2. 缩放和偏移 (Scale and Shift)
    zBN=γz^+βz_{BN} = \gamma \hat{z} + \beta zBN=γz^+β
    这是最关键的一步!BN层会用两个可学习的参数 γγγ (gamma, 缩放) 和 βββ (beta, 偏移) 对归一化后的 hat(z)hat(z)hat(z) 进行处理,得到最终的输出 zBNz_{BN}zBN。这个zBNz_{BN}zBN才是真正送入激活函数(如ReLU)的值。

冲突点就在这里:

  • 神经网络在训练时,为了降低损失,会自由地学习γγγβββ的值γγγ几乎不可能是1,βββ也几乎不可能是0。
  • 现在,进入激活函数的不再是zzz,而是zBNz_{BN}zBN
  • 那么,我们之前推导出的tspike=(l+1)−zt_{spike} = (l+1) - ztspike=(l+1)z这个公式,就必须被替换成 tspike=(l+1)−zBNt_{spike} = (l+1) - z_{BN}tspike=(l+1)zBN

我们把zBNz_{BN}zBN的完整形式代进去:
tspike=(l+1)−(γ∑wa−μBσB+β)t_{spike} = (l+1) - (\gamma \frac{\sum w a - \mu_B}{\sigma_B} + \beta) tspike=(l+1)(γσBwaμB+β)

这完全是一场灾难

  1. γγγ的破坏性:我们费尽心机通过权重正则化让∑w=1∑w=1w=1,但现在又凭空出现了一个新的缩放因子γγγ。这个γγγ是网络自己学到的,我们无法控制它等于1。它重新引入了我们想要消除的“时间扭曲问题”。γγγ就像一个不可预测的乘数,彻底破坏了zzztspiket_{spike}tspike之间干净的线性关系。

  2. βββμBμ_BμB的破坏性βββμBμ_BμB引入了偏移量,同样也破坏了原始的线性关系。

http://www.dtcms.com/a/561662.html

相关文章:

  • dw网站建设的数据库电子商务网站有哪几种
  • Spring相关API
  • 基于W55MH32的WAV音频播放终端
  • 网站排名如何上升游戏网站开发计划书案例目录
  • 公司制作网站网络服务提供者知道网络用户利用其网络服务侵害
  • 谷歌网站收录入口三亚招聘网
  • Python游戏开发入门:Pygame实战
  • 识别H265
  • 建设工程项目在哪个网站查询室内展厅设计公司
  • 怎么做招聘网站赚钱广州网站app制作公司
  • 比特币市场机构化浪潮 XBIT Wallet MEXC钱包打破区域交易壁垒
  • Chainlink: 架起链上链下计算的桥梁
  • 在网上帮做图片的网站南宁电子推广网站
  • 同一家公司可以做几个网站吗自己电脑做网站要下载
  • Ubuntu20.04中如何更换为清华的镜像源
  • Linux之Shell脚本--字符串的拼接
  • ubuntu对docker的常用命令
  • 手表网站免费设计惠州做网站的公司哪家好
  • 基于Llama3.2与LlamaIndex:实现简单的文档检索RAG系统
  • 关于解决hexo博客中无法使用特定letax公式的问题
  • LLVM专栏目录页
  • 做游戏网站需要哪些许可华为外包一般能干多久
  • C++—string(2):string类的模拟实现及底层剖析
  • 建个大型网站要多少钱模板网字体库
  • 上海网站建设服务多少钱没有网站 淘宝客
  • 如何查看网站的死链接中企动力提供网站建设
  • 你的第一个 Linux 系统程序:从进度条开始
  • 企业网站域名在哪申请网站搭建徐州百都网络搭建
  • Linux同步机制:POSIX 信号量 与 SystemV信号量 的 对比
  • Vim实用技巧补充1