想象一座巨大的快递分拣中心。包裹从入口进来,要沿着一条由几十个分拣站串联而成的超长传送带才能抵达出口。每个分拣站都要花时间检查、翻面、贴条——但每过一个站,包裹都可能被压坏、贴错、甚至弄丢。传送带越长,送到终点的包裹越少、越残破。这就是深层神经网络的“退化”困境:信息与梯度一路损耗,深层参数根本学不动。 脉冲神经网络(SNN)是模仿大脑的第三代神经网络,它用“脉冲”传信息,就像分拣中心里只有轻巧的小箱才上得了传送带。SNN同样躲不开深层衰减的问题。人工神经网络ResNet给出过一个天才方案:在传送带旁边加一条“高速直行通道”,让包裹的原件额外复制一份,跳过几个分拣站直达出口。就算分拣站忙得什么都没干,包裹也一件不会少。这条通道,就是残差连接。 本文要把这条“高速直行通道”搬进脉冲神经网络的快递分拣中心——从残差思想起源、脉冲神经元基础,讲到残差连接设计、前向传播与梯度挑战,最后拆解SpikRes与Spikformer两种经典架构,看它们如何让脉冲信号在深网中“不掉链子”。
对AI从业者而言,掌握脉冲残差结构是踏入类脑计算与低功耗神经形态芯片的钥匙:它让超深SNN的训练真正可行,也是读懂Spikformer等新一代类脑Transformer的必修课。
可视化演示
展示SpikRes/Spikformer的脉冲神经元残差结构和脉冲发放时序,直观理解SNN如何用脉冲替代激活函数并保持深度网络训练稳定性。
本节配有交互动效(进入视口后自动加载,约 3KB)。
SpikRes残差结构 脉冲神经元(SN)替代ReLU,橙色跳连接保留梯度,解决SNN深度退化 y=SN(x)+Skip(x) 紫色SN层为脉冲神经元,橙色跳连接绕过SN层直接传递信号
残差思想起源
快递分拣中心刚建成时只有五六个分拣站,效率很高;可老板贪心,把传送带加长到几十个站,结果总包裹量反而变少了——每一个站都会不小心弄丢一点包裹,链路越长,损耗越积越多。深度学习里也一样:网络越深,训练误差不降反升,这叫“深层网络退化”。分拣中心的老板们叫它“梯度消失”:误差信号要从终点一路逆向传回起点,每经过一个站都要经过一次“连乘放大损耗”,传回起点的信号几乎为零,前面的分拣站根本学不到如何改进。
ResNet的发明人何恺明给出的答案是:在传送带旁边修一条高速直行通道。包裹的“原件”被复制一份,从入口直接送到出口附近,与沿途加工后的“加工件”汇合。这样即使加工链全部失效,原始信息也能完好到达。这个思想写成公式,就是著名的残差连接:
回到我们的脉冲分拣中心:SNN 的传送带更长(时间步 × 层数),包裹更娇贵(二值脉冲),梯度消失只会更严重。ResNet 的直行通道思路,正是 SNN 深网自救的第一根救命稻草。
- 残差函数 F表示若干卷积层或全连接层的复合变换,等价于分拣站里“贴条、翻面、重新装箱”的一整套加工流程。
- 恒等项 x把原始输入原封不动地叠加到输出上,就是那条“高速直行通道”,保证原件不丢。
- 整体输出 y加工结果与原件汇合后的最终输出。若 F 学不到有用变换(输出趋近于零),y 依然等于 x,网络性能永不劣于浅层。
脉冲神经元基础
在修建直行通道之前,得先搞清楚脉冲分拣站是怎么工作的。每个分拣站里其实放着一个“蓄水桶”——神经科学家叫它膜电位。上游包裹(输入脉冲)会往桶里注水;桶底有个小洞,水会随时间缓慢泄漏;桶壁有一条刻度线,那就是发放阈值。水位一旦超过刻度线,站内的铃铛就“叮”地响一声——发放一个脉冲——然后桶被迅速倒空,等待下一轮注水。
这种带泄漏、累积、发放、重置的神经元模型,就是大名鼎鼎的 LIF(Leaky Integrate-and-Fire,泄漏积分发放)模型。它最迷人的地方是:输出不是连续的数值,而是“响或不响”的二值脉冲。大脑正是靠亿万神经元这样稀疏地“叮叮当当”,完成所有智能活动;SNN 继承了这套机制,因而功耗极低。
用离散时间步写 LIF 的更新规则,就是:
别小看这个蓄水桶:它只输出 0/1 脉冲,注定了信息是“稀疏”的——绝大多数桶在大多数时刻都是安静的。正因如此,脉冲分拣中心的能耗远低于传统浮点分拣中心;但也因为脉冲是二值的,怎么把残差直行通道接进来,就成了一个棘手的设计题。
- 膜电位 V[t]蓄水桶在第 t 个时间步的水位,也就是神经元的“兴奋程度”。
- 泄漏项代表桶底小洞的持续漏水;λ 介于 0 和 1 之间,λ 越接近 1,水位保持得越久。
- 注入项把每个上游脉冲 s_i 按突触权重 w_i 加权后全部倒进桶里,相当于多个传送带同时往桶里注水。
残差连接设计
高速直行通道听起来简单,但在脉冲分拣中心里有一个大麻烦:传送带上跑的只有“有/无”两种包裹(0/1 脉冲),如果直行通道和加工出口汇合时简单地把两个二值信号相加,结果会是 0、1、2——多出来的“2“在下一站根本无法表示。这好比两条传送带都送来包裹,汇合口却只能识别”有没有货”,两件并成一件,信息立刻混乱。
聪明的工程师们提出了几种方案。最直接的是“脉冲加法”:把直行通道和加工输出都转成脉冲再相加,但二值相加会产生幅值歧义,还需要额外的编码器善后。更优雅的方案来自 SpikRes:为什么不直接让“水位”走直行通道?膜电位是连续量,本来就能承载丰富信息。把残差旁路设计成膜电位加法——加工块的输出膜电位加上输入膜电位,再统一送进下一层的蓄水桶。这样既避开了二值相加的尴尬,又保住了恒等映射的“保底”特性。
写成残差块的形式就是:
当然,直行通道不是随便修的:如果旁路注水太猛,蓄水桶会频繁溢出(脉冲发放失控);如果阈值定得太高,桶又长期静默。因此设计残差时还要做“阈值平衡”——好比给每个汇合口校准刻度线,让直行通道的水量和加工通道的水量处在同一量级。
- 输入 x_l第 l 层蓄水桶的膜电位状态,携带此前所有站点的累积信息。
- 加工变换 F_l由若干脉冲神经元子层组成的加工流水线,输出加工后的新膜电位。
- 逐元素相加加工结果与原始膜电位逐元素相加,对应汇合口让“加工件”与“原件”并流。
- 输出 x_{l+1}融合后的膜电位进入下一层;若加工块什么都不做,x_{l+1} 仍等于 x_l,信息零损耗。
前向传播机制
分拣中心开始运转了。脉冲分拣站的工作是“逐拍”进行的:每个时钟节拍(时间步),所有传送带同时运货,所有蓄水桶同时注水、泄漏、判定是否响铃。这就是 SNN 的前向传播——比普通神经网络多了一个时间维度。残差直行通道就藏在这个节奏里:每一拍,旁路都会把上一层的原始膜电位“复制一份”,直接注入下一层的水桶。
这个机制在数学上可以写成一拍一拍的更新方程。设第 l 层在第 t 拍的状态为 V_l[t],其输入电流来自上一层脉冲 I_l[t],残差旁路再把上一层原始膜电位 x_{l-1}[t] 直接注入:
你可能会问:重置机制会不会把旁路刚注入的水也倒掉?这正是设计巧妙的点——SpikRes 中,旁路注入发生在“重置判定之后”的整合阶段,相当于倒完旧水、新水才进桶,互不干扰。于是一拍接一拍,原件副本沿途不断汇入,即使某些分拣站加工失败,出口处也永远保有一份最初的信息。
- 状态保持项β 是泄漏系数;(1 - s_l[t-1]) 是“重置开关”——若上一拍刚响过铃(s=1),这一项被清零,模拟倒空蓄水桶。
- 突触输入项上层脉冲经权重汇聚出的输入电流,是常规加工通道的来水。
- 残差注入项直行通道送来的原始膜电位副本,与加工来水同时进桶,实现信息融合。
梯度传播挑战
前向畅通了,还有个反向难题:分拣站要改进流程,就得靠“退换货追踪”——把误差从出口逆向传回各站。但在脉冲分拣中心里,蓄水桶的响铃规则(水位超线就响、否则安静)是个“阶跃开关”,它的斜率要么是 0(没超线),要么是无穷大(刚超线那一瞬)。梯度一碰到这个开关就“断线”,退换货包裹根本传不回上游。
工程界的解决办法是“代理梯度”:既然真实开关不可导,就找一个形状相似的光滑函数来代替它做梯度计算。好比追踪退换货时,不纠结于铃铛响的那一刹那,而是用一条平滑曲线描述“水位越接近刻度线,越可能响铃”的概率,梯度就能顺利滑过去了。
除了代理梯度,训练深层 SNN 还要用 BPTT(基于时间的反向传播),在时间和空间两个维度上展开梯度。此时残差直行通道再次立功:误差退换货时,除了走加工链逐层回溯,还可以沿恒等旁路“一键直达”,相当于给退换货开辟了一条高速退货专线。前向保信号、反向保梯度,残差一箭双雕。
- 真实梯度不可导脉冲发放是阶跃函数,在阈值 θ 处左右导数不连续,梯度在反向传播时直接断裂。
- 代理函数 σsigmoid 函数值域 (0,1),形状与阶跃相似但处处光滑,选它作为“替身”。
- 代理梯度用 σ 在 (V - θ) 处的导数代替真实导数,梯度得以穿过脉冲层继续回传。
SpikRes架构
现在我们把所有零件组装起来,得到第一台完整的“脉冲残差分拣中心”——SpikRes。它把 ResNet 的残差块改造为脉冲版本:每个残差块由卷积脉冲层、批归一化层构成加工流水线,旁路则直接把输入膜电位“搭一根线”绕到块输出处相加。只要加一个 1×1 卷积对齐通道数,直行通道就能接入任意深度的网络。
这种设计的最大好处是:SNN 终于可以“叠高楼”了。在没有残差时,SNN 超过 10 层就难以训练;SpikRes 把残差块堆到 30 层、50 层,训练误差依然稳步下降。在 CIFAR-10、ImageNet 等图像分类任务上,SpikRes 用远低于 ANN 的能耗,取得了接近 ResNet 的准确率——好比分拣中心传送带更长,但每一件包裹都完好无损,总吞吐量反而超越短链时代。
残差块的输入输出关系可以紧凑地写成:
值得一提的还有性能对比中的“规矩”:SpikRes 与 ResNet 对比时,通常采用相同的层数与通道数,用“准确率 ÷ 能耗”来算性价比。结果让人兴奋——脉冲分拣中心消耗的能量常常只有浮点分拣中心的几十分之一,而准确率差距被压缩到两三个百分点以内。这正符合类脑计算的终极追求:用极低的功耗,干完需要大机房才能干的活。
- 块输入 x_l进入残差块时的膜电位状态,是旁路的“原件”。
- 子网加工 G卷积层提取特征、批归一化稳定分布、脉冲层完成非线性转换。
- 汇合输出 O加工结果与原件相加得到块输出,随后送入下一个残差块,逐块堆积成深网。
Spikformer架构
如果说 SpikRes 是把 ResNet 搬进脉冲世界,那么 Spikformer 则是更激进的尝试:把注意力机制也变成“脉冲化”的。Transformer 靠自注意力捕捉长程依赖,但标准注意力要算浮点矩阵乘法,在脉冲中心里无异于用天价设备处理小包裹。Spikformer 的灵感是:Q、K、V 三个角色全都由脉冲序列扮演——查询“、键”、值“都化作稀疏的 0/1 脉冲流,注意力分数则通过”共发计数"来近似。
所谓共发计数,是指两组脉冲在 T 个时间步里“同时响铃”的次数:脉冲相乘天然就是逻辑与运算,统计两个神经元一起响了几次,就能近似它们的内积。这好比两个分拣员,谁跟谁配合默契(同步响铃多),谁就获得更高的调度权重。这种计算完全避开浮点乘法,用加法器和与门就能实现,在神经形态芯片上能耗极低。
脉冲自注意力的输出可以写成:
Spikformer 在架构上同样嵌入了残差直行通道——每个注意力块和每个前馈块都有旁路。于是,脉冲分拣中心不仅传送带越来越长,还装上了“智能调度系统”:快递箱能跨站直达,也能按默契程度优先分配线路。这是类脑计算与深度学习的一次漂亮联姻:既有 Transformer 的全局视野,又有脉冲网络的稀疏与低耗。未来,从事件相机到脑机接口,这条“高速直行通道”正在铺向更广阔的应用疆域。
- 脉冲共发项q 与 k 在第 t 拍同时为 1(同时响铃)时乘积为 1,累加 T 拍得到“默契次数”。
- 缩放因子除以 √d 防止内积数值过大,保持后续 softmax 梯度稳定,相当于给计数器加一个校准系数。
- 加权聚合以共发计数为权重,对值脉冲 v_j 做加权求和,得到融合长程信息的输出。
AI 应用场景
场景一:低功耗边缘端的实时图像识别
阶段:模型推理部署
解决的问题:无人机、可穿戴设备等边缘场景要求毫瓦级功耗与实时响应。传统深度网络在端侧跑一次图像分类需数百毫瓦,且深层网络在低算力芯片上延迟高、易掉帧。SpikRes 采用膜电位残差旁路,使 30 层以上的脉冲网络训练稳定,部署到神经形态芯片后,事件驱动方式让大部分神经元保持静默,功耗骤降一个数量级。
具体案例:某低空物流无人机搭载类脑芯片,用 SpikRes 在 1W 功率预算内完成航拍图像实时分类。相比同精度 ANN 方案,续航从 20 分钟提升到 2 小时,且遇到遮挡时依靠残差旁路保留的原始特征,识别鲁棒性更强。
场景二:事件相机驱动的连续动作识别
阶段:数据预处理与模型推理
解决的问题:事件相机以微秒级异步脉冲记录亮度变化,天然适合 SNN 处理,但事件流长度不可控、噪声多。Spikformer 的脉冲自注意力通过“共发计数”在长时序上聚合关键信息,残差连接保证深层的梯度与信息不回退,解决了传统帧式模型无法处理异步稀疏事件、时序建模易遗忘的问题。
具体案例:工业机械臂安装事件相机,用 Spikformer 实时识别操作员手势。系统只对“有变化”的像素发放脉冲,在 50ms 内完成动作分类,受到光照突变干扰时,注意力机制自动聚焦高共发脉冲区域,识别准确率保持 95% 以上。
场景三:脑机接口中的神经信号解码
阶段:算法建模与训练
解决的问题:脑机接口采集的皮层脉冲信号本身就是脉冲序列,传统方法先转成频谱再喂给浮点网络,既丢失时域细节又耗能。SNN 残差网络可以直接消费原始脉冲,用代理梯度端到端训练;残差旁路让深层解码器在有限训练数据下依然收敛稳定。
具体案例:运动想象脑机接口实验中,受试者想象“左手/右手”动作,系统用带残差的深层 SNN 解码运动皮层脉冲,将意图转化为机械手指令。相比传统 CNN 方案,解码延迟从 200ms 降至 80ms,离线准确率提升 8 个百分点,为瘫痪患者提供了更流畅的神经义肢控制体验。
Python 演示
import numpy as np def lif_step(v, x, threshold=1.5, decay=0.5, reset=0.0): """单步 LIF 动力学:膜电位先衰减再累积,超阈值则发放二值脉冲并重置。""" v = decay * v + x spike = (v >= threshold).astype(np.float32) v = np.where(spike > 0, reset, v) return v, spike class LIFLayer: def __init__(self, size, threshold=1.5, decay=0.5): self.size = size self.threshold = threshold self.decay = decay self.state = np.zeros(size, dtype=np.float32) def forward(self, x): """输入连续电流 x,输出 0/1 脉冲。""" self.state, spike = lif_step(self.state, x, self.threshold, self.decay) return spike def build_block(threshold, use_residual): """构造两层脉冲残差块:普通链 F(x) 或带残差 F(x)+x。""" layer_a = LIFLayer(8, threshold, 0.5) layer_b = LIFLayer(8, threshold, 0.5) def block(x): out = layer_b.forward(layer_a.forward(x)) if use_residual: out = out + x return out return block def run_simulation(signal, threshold=1.5, steps=40): """对普通块与残差块分别仿真模拟,统计 T 步平均输出能量。""" plain_block = build_block(threshold, use_residual=False) res_block = build_block(threshold, use_residual=True) plain_sum = np.zeros_like(signal, dtype=np.float32) res_sum = np.zeros_like(signal, dtype=np.float32) for _ in range(steps): plain_sum = plain_sum + plain_block(signal) res_sum = res_sum + res_block(signal) return plain_sum / steps, res_sum / steps def main(): signal = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.2, 0.3, 0.2], dtype=np.float32) plain_out, res_out = run_simulation(signal) print("输入信号 :", signal) print("普通块输出 :", np.round(plain_out, 3)) print("残差块输出 :", np.round(res_out, 3)) print("普通块能量 : %.3f" % np.abs(plain_out).sum()) print("残差块能量 : %.3f" % np.abs(res_out).sum()) if __name__ == "__main__": main()
def lif_step(v, x, threshold=1.5, decay=0.5, reset=0.0):LIF 单步更新:水位衰减、注入、超阈值发放、发放后重置,四个动作一步完成。spike = (v >= threshold).astype(np.float32)把“水位是否超刻度线”的布尔判断转成 0/1 二值脉冲。v = np.where(spike > 0, reset, v)若刚发过脉冲,膜电位立刻归零,模拟蓄水桶倒空。self.state = np.zeros(size, dtype=np.float32)每个脉冲层维护自己的蓄水桶水位,作为神经元状态。out = layer_b.forward(layer_a.forward(x))两层加工链:先经 A 层再经 B 层,构成残差块中的 F(x)。out = out + x残差核心:把输入信号原封不动地加到加工结果上,这是模拟 SpikRes 的膜电位旁路。plain_sum = plain_sum + plain_block(signal)在时间步上累积输出,模拟 T 拍脉冲流的能量统计。np.abs(plain_out).sum()用输出幅值绝对值之和衡量“信号能量”,能量越大说明信息保留得越完整。
常见误区
误区“ResNet 不是 y = F(x) + x 吗?那我也把上一层的 0/1 脉冲和本层输出脉冲直接相加,不就有残差了?”
正解二值脉冲相加会得到 0、1、2 三种取值,而 SNN 下一层认的还是二值脉冲,“2“既不是有也不是无,信息立刻产生歧义。SpikRes 的聪明之处在于让旁路传递连续膜电位(水位)而不传铃铛声,汇合后再统一做脉冲化。残差加的是”水位“,不是”脉冲”。
为何常见:初学者把 ResNet 的公式记成了直觉上的“输出加输入”,忽略了 SNN 中信号形态是二值脉冲这一约束,于是想当然地做脉冲加法。
误区“梯度消失是因为脉冲不可导,那我用代理梯度把梯度弄光滑,深层 SNN 不就能训了吗?还要残差干嘛?”
正解代理梯度解决的是“导数断裂”问题,而残差解决的是“信号与梯度沿深链连乘衰减”问题,两者分工不同。即使导数光滑,超深层网络的梯度依旧会随层数指数级缩小,前向信息也照样逐层衰减。残差旁路提供了一条恒等通道,让梯度与前向信号都能“跳层直达”,这是代理梯度替代不了的。
为何常见:人们习惯把训练困难归因于单一原因,忽略了 SNN 深网同时存在前向衰减与反向衰减两个瓶颈。
误区“ResNet 在 ANN 上那么成熟,我直接把残差块搬进 SNN,改一下激活函数就完事了。”
正解SNN 多了时间维度和重置机制:残差旁路注入的水会不会被“发放后重置”误伤?阈值与旁路幅度如何匹配?批归一化的位置怎么放?这些 ANN 里不存在的问题都需要重新设计。SpikRes 之所以成功,正是因为它在残差块内部仔细安排了 conv-BN-脉冲的顺序,并做了阈值平衡。照搬结构而不做适配,网络很容易异常静默或疯发放。
为何常见:类比思维让初学者觉得“结构相同就能复用”,忽略了神经动力学带来的隐含约束。
误区“Spikformer 就是 Transformer 加了一个脉冲编码层,注意力计算还是 QK^T 矩阵乘法。”
正解Spikformer 的 Q、K、V 全部是脉冲序列,注意力权重通过“共发计数”(统计 Q 和 K 同时响铃的次数)来近似内积,运算本质是逻辑与加加法器,而不是浮点矩阵乘法。它把 attention 的计算复杂度从浮点乘法域搬到了脉冲计数域,兼顾了 Transformer 的长程建模能力与 SNN 的稀疏低耗特性。
为何常见:名字里带"former"让人误以为内部计算与标准 Transformer 无异,忽略了脉冲化改造带来的计算范式革命。
面试题
Q1. 深层人工神经网络难以训练的根本原因是?
- A.参数数量太多导致过拟合严重
- B.梯度沿深链连乘逐层衰减消失← 正确答案
- C.训练数据规模不足以支撑深层
- D.深层网络推理速度过于缓慢
答案:B。深层网络的反向传播要将误差逐层回传,梯度是各层导数的连乘,层数一深连乘结果指数级趋近于零,导致前面层“学不动”,这就是梯度消失。参数多、数据少、推理慢都是问题,但不是“深层难训练”的根本原因。
Q2. ResNet残差连接的核心公式是哪一项?
- A.y = F(x) 端到端直接映射
- B.y = F(x) + x 恒等旁路← 正确答案
- C.y = F(Wx) 线性加权映射
- D.y = x ⊙ F(x) 逐元素相乘
答案:B。残差的核心是“输出 = 加工结果 + 原始输入”,其中的“+ x“就是恒等旁路(高速直行通道),保证信息不衰减、梯度直达。其余选项均丢失了”保底原件”这一关键机制。
Q3. LIF神经元“发放后重置”的主要作用是?
- A.提升单次脉冲的输出幅值
- B.防止膜电位无限累积失控← 正确答案
- C.加快脉冲在层间的传播速度
- D.增大神经元的脉冲发放频率
答案:B。若只累积不重置,水位会持续上涨导致神经元不停响铃,丧失信息选择性。重置相当于倒空蓄水桶,让神经元回到基线、在下轮注入中重新累积,这也是 SNN 时间编码的基础。
Q4. SpikRes残差旁路中通常传递的是什么?
- A.二值脉冲组成的稀疏序列
- B.连续膜电位形式的原始信息← 正确答案
- C.突触连接权重的梯度更新
- D.神经元之间的膜电阻参数
答案:B。二值脉冲相加会产生 0/1/2 的歧义,因此 SpikRes 选择让旁路传递连续膜电位(水位),加工链输出与旁路水位汇合后再统一脉冲化。这既保留了恒等映射的保底能力,又避免了二值相加的语义混乱。
Q5. 代理梯度方法试图解决的核心难题是?
- A.脉冲序列的时间长度过长
- B.脉冲发放函数的不可导性← 正确答案
- C.神经元的数量规模太庞大
- D.训练数据的标签不够丰富
答案:B。脉冲发放是阶跃函数,在阈值处导数不存在或不连续,梯度无法穿过。代理梯度用一个形状相近的光滑函数(如 sigmoid)的导数替代真实导数,让误差信号“平滑滑过”脉冲层,从而支撑端到端训练。
Q6. 在SNN中引入残差连接能够带来哪些收益?
- A.有效缓解深层脉冲网络的梯度消失← 正确答案
- B.通过旁路保持前向信息不衰减← 正确答案
- C.彻底免除时间维度上的累积延迟
- D.改善深层网络的训练收敛稳定性← 正确答案
答案:ABD。残差旁路同时充当“前向保信号、反向保梯度”的双向直达通道,因此 A、B、D 都正确。但 SNN 的时间步迭代是固有机制,残差并不能消除时间延迟,C 错误。
Q7. 脉冲自注意力中Q与K的关系度量方式是?
- A.统计两者脉冲共发的次数近似内积← 正确答案
- B.直接对Q和K做浮点矩阵乘法
- C.解析求解注意力矩阵的闭式解
- D.使用外部预训练模型间接计算
答案:A。Spikformer 中 Q、K 都是二值脉冲序列,两路脉冲“同时响铃”则相乘为 1,统计 T 拍共发次数就近似了两者内积。这用加法器和与门即可实现,避开了昂贵的浮点乘加运算。
Q8. 设计SNN残差块时需要特别留意哪些问题?
- A.阈值过高会使神经元长期静默失活← 正确答案
- B.膜电位累积可能引发异常密集发放← 正确答案
- C.重置机制可能与残差旁路相互干扰← 正确答案
- D.残差块数量越少则网络效果越稳定
答案:ABC。残差旁路额外注水会抬高膜电位,若不调阈值或加归一化,神经元要么静默要么疯发放;重置时机若与旁路注入冲突,还会误伤原始信息,因此 A、B、C 都是真实风险。D 说法本身不成立——残差块数量由任务决定,并非越少越好。
Q9. 深度SNN梯度难以回传的直接原因是?
- A.脉冲发放函数在阈值处不可导← 正确答案
- B.网络层数太少导致表达能力弱
- C.数据集太小导致训练不充分
- D.芯片算力不足导致训练过慢
答案:A。SNN 的脉冲发放是阶跃函数,在阈值点不可导,梯度在此断裂难以继续回传,这是 SNN 特有的训练难题。层数少、数据少、算力弱都不是“梯度难以回传”的直接原因。
Q10. SpikRes与Spikformer共同的设计理念有哪些?
- A.以脉冲形式表达与传递信息← 正确答案
- B.用残差旁路对抗深层退化← 正确答案
- C.保留端到端的梯度训练范式← 正确答案
- D.拒绝任何人工设计的辅助结构
答案:ABC。两者都以二值脉冲为信息载体,都在主体结构中嵌入残差旁路,且都借助代理梯度实现端到端训练,因此 A、B、C 正确。D 错误——代理梯度本身就是人工设计的辅助技巧,类脑计算并不排斥工程方法。