城郊要塞里有一批信号兵,任务是发现敌情就发射信号弹。指挥官想给他们做训练反馈:“你这一发打得偏了 0.3 格,下次调整!”信号兵很为难:信号弹要么拉响、要么不拉响,世上没有“半发信号弹”。这正是脉冲神经网络(SNN)训练时遇到的真实困境:神经元的脉冲发射是一个只取 0/1 的不可微事件,而传统反向传播要求每个环节都能给出连续可导的“误差贡献值”。既然梯度在脉冲处断裂,研究者想出了三条路:假装脉冲可以微调(替代梯度)、按时间先后自然磨合(STDP)、以及不盯单个脉冲而盯整条电压曲线(膜电位损失)。这篇文章就用信号兵的故事,把这三条路线逐一拆开,看看它们各自能解决什么问题、又留下什么遗憾。

岗位关联

掌握 SNN 训练算法,是进入神经形态计算与低功耗 AI 的入场券。它直接对应边缘芯片上的实时智能落地,是区别于 GPU 深度学习路线的蓝海方向。

目录
  1. 可视化演示
  2. 训练难点根源
  3. 替代梯度方法
  4. STDP学习规则
  5. 膜电位损失
  6. 训练算法对比
  7. 挑战与发展
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示替代梯度反向传播、STDP监督学习、以及膜电位损失函数设计。

本节配有交互动效(进入视口后自动加载,约 3KB)。

替代梯度 前向阶跃函数 反向平滑近似 前向阶跃/反向平滑 梯度可传

训练难点根源

信号兵的故事从一次复盘会开始。指挥官对一个大嗓门的信号兵说:“你这次信号弹的'发射强度'要再提高三成。”信号兵愣住了——信号弹的拉环只有两种状态:拉响或者不拉响。所谓“强度可调”,在他这里根本不存在。SNN 的神经元就是这种“二值信号兵”:它不断把输入信号累积成膜电位,膜电位一旦超过阈值,就发射一个形状完全相同的脉冲,然后瞬间复位;没超过阈值,它就一言不发。整个过程由阶跃函数描述,没有中间值。

让我们先写出这个“蓄水池”的动力学方程,即最常用的 LIF(Leaky Integrate-and-Fire)模型:

当水位超过阈值,信号兵就发射。发射动作的数学表达是一个阶跃函数:

传统反向传播就像指挥官坚持按“连续可调”的方式点评信号兵,可信号兵的动作天然是二值的。任何想直接套用 ANN 梯度回传的做法都会在脉冲发射这一环撞墙:无穷大的梯度要么冲垮整个网络,要么被截断成零,误差信息根本流不回去。这就是 SNN 训练难点的根源——不是信号兵不努力,而是反馈通道的语言和他做的事不兼容。

τdVdt=−(V−Vrest)+∑iwisi(t)\displaystyle \tau \frac{dV}{dt} = -(V - V_{rest}) + \sum_{i} w_i s_i(t)
  1. 阶跃函数$\Theta(x)$ 像一个只有两个档位的开关:输入电压低于阈值时输出 0,高于或等于阈值时跳变到 1。
    Θ(x)={1,x≥00,x<0\displaystyle \Theta(x) = \begin{cases} 1, & x \ge 0 \\ 0, & x < 0 \end{cases}
  2. 求导困境阶跃函数的导数在跳变点是 Dirac 尖峰(无穷大),其余点全是 0,反向传播需要的“梯度”在这里彻底断裂。
    dΘdx=δ(x)\displaystyle \frac{d\Theta}{dx} = \delta(x)

替代梯度方法

指挥官很快想出一个变通方案:日常演练时,信号兵仍旧利落地拉响信号弹;但事后写评语时,指挥官假装信号兵有一个“缓缓扣动扳机”的过程,并把这个虚构过程中的“扣到一半的位置”当作可调整的变量。学生上课学的是真实动作,考试却按“拟行动作”评分——这种“教学分离”就是替代梯度(Surrogate Gradient)的核心思想。

替代梯度的做法是:前向传播严格保留真实的阶跃发射,保证网络的动力学与部署后完全一致;反向传播时,把阶跃函数的导数替换成一个连续、有界、处处可导的近似函数。最常用的近似之一是矩形窗口:

替代梯度不是对真实梯度的“估计”,而是主动设计的一条“方便之路”。它常与反向传播框架下的膜电位损失或脉冲计数损失搭配使用。信号兵的“模拟成绩单”虽然不真实,但只要每个 batch 都能稳定地告诉他“往哪个方向使劲更接近目标”,训练就能跑起来。在 MNIST、CIFAR 等基准上,替代梯度已经是目前直接训练 SNN 精度最高的主流方法。

∂s∂V≈{1a,Vth−a2<V<Vth+a20,其他\displaystyle \frac{\partial s}{\partial V} \approx \begin{cases} \dfrac{1}{a}, & V_{th} - \dfrac{a}{2} < V < V_{th} + \dfrac{a}{2} \\[6pt] 0, & \text{其他} \end{cases}
  1. 窗口范围只有在膜电位 $V$ 恰好落在阈值 $V_{th}$ 附近宽度为 $a$ 的区间内,才允许梯度通过,等于给“发射”划出一片可微的灰色地带。
    Vth−a2<V<Vth+a2\displaystyle V_{th} - \frac{a}{2} < V < V_{th} + \frac{a}{2}
  2. 伪导数取值窗口内给一个有限常数 $1/a$,既不会像真实导数那样爆炸成无穷大,也不会像窗外那样变成 0。
    ∂s∂V=1a\displaystyle \frac{\partial s}{\partial V} = \frac{1}{a}
  3. 窗口宽度$a$ 是超参数——窗口太窄,梯度仍然稀疏难学;窗口太宽,近似失真,训练出的权重在真实推理时表现打折扣。
    a>0\displaystyle a > 0

STDP学习规则

要塞里还有另一种学习方式,不靠指挥官发成绩单,而是靠信号兵之间的“师徒磨合”。老信号兵先发射了信号弹,新兵在很短时间内也跟着发射,说明这条信息链路确实有用,两人之间的“关系”(突触权重)就应该加深;反过来,新兵先发射、老信号兵很久才反应,说明这条链路传递的信息价值不高,两人之间的“关系”就该降温。这就是脉冲时序依赖可塑性(STDP):神经元之间连接强度的变化,由前后两个脉冲的时间差决定。

写成公式就是:

STDP 的精髓是“局部计算”:调整权重只需要知道前后脉冲的时刻,不需要全局误差,也不依赖标签。这让它天然适合部署在神经形态芯片上做在线自适应。但硬币的另一面是,基础 STDP 属于无监督学习,信号兵们靠经验自然磨合,却没人告诉他们“战场目标是什么”,所以它很难精确完成分类任务——现实中常需要加一个奖励信号做调制(如 R-STDP),才能让训练朝任务方向走。

Δw={A+e−Δt/τ+,Δt=tpost−tpre>0−A−eΔt/τ−,Δt<0\displaystyle \Delta w = \begin{cases} A_{+} e^{-\Delta t / \tau_{+}}, & \Delta t = t_{post} - t_{pre} > 0 \\[6pt] -A_{-} e^{\Delta t / \tau_{-}}, & \Delta t < 0 \end{cases}
  1. 时间差$\Delta t = t_{post} - t_{pre}$ 是徒弟(post)与师父(pre)发射脉冲的时刻差,时间差的正负决定了权重的增减方向。
    Δt=tpost−tpre\displaystyle \Delta t = t_{post} - t_{pre}
  2. 长时程增强 LTP师父(pre)先发射、时间差为正,权重增大 $A_{+} e^{-\Delta t / \tau_{+}}$,且 $\Delta t$ 越小增强越猛。
    Δw=A+e−Δt/τ+>0\displaystyle \Delta w = A_{+} e^{-\Delta t / \tau_{+}} > 0
  3. 长时程减弱 LTD徒弟先发射、时间差为负,权重减小 $A_{-} e^{\Delta t / \tau_{-}}$,同样越近削弱越强。
    Δw=−A−eΔt/τ−<0\displaystyle \Delta w = -A_{-} e^{\Delta t / \tau_{-}} < 0
  4. 时间常数$\tau_{+}, \tau_{-}$ 决定“多近才算近”,窗口太大师徒容易瞎联系,太小则学不到长程依赖。
    τ+,τ−>0\displaystyle \tau_{+}, \tau_{-} > 0

膜电位损失

第三条路线换了一个完全不同的考核指标:不再执着于“发射还是不发射”,而是检查整个作战时间内信号兵的水位曲线是否合理。指挥官给每个信号兵画好一条“标准水位曲线”——正确类别的信号兵应该持续兴奋,甚至稳定发射;错误类别的应该保持安静,水位压低。训练的目标,就是让网络输出的膜电位轨迹去贴合这条标准曲线。这个思路叫膜电位损失(Membrane Potential Loss)。

输出层第 $j$ 个神经元的膜电位轨迹 $V_j[t]$ 与目标轨迹 $V_j^{target}[t]$ 之间的均方误差定义为:

相比“只在最后一刻数脉冲个数”的率编码,膜电位损失把时间维度上的每一个细节都变成了监督信号:哪个时刻该兴奋、哪个时刻该安静,全都清清楚楚。信号兵不再需要憋很久才发出一个统计信号,短时间窗口内也能快速给出判断。当然,误差如何穿过脉冲发射那道坎传回网络内部?答案是配合上一节讲的替代梯度。两者常常组合使用——膜电位损失提供“考什么”,替代梯度解决“怎么传”。

L=12T∑t=1T(Vj[t]−Vjtarget[t])2\displaystyle L = \frac{1}{2T} \sum_{t=1}^{T} \left( V_j[t] - V_j^{target}[t] \right)^{2}
  1. 逐时刻采样把整个观察窗口切成 $T$ 个时间步,每个时刻都把实际膜电位与目标曲线相减,保留“早晚高低”的完整形状信息。
    Vj[t]−Vjtarget[t]\displaystyle V_j[t] - V_j^{target}[t]
  2. 平方与平均每个时刻的差值平方后累加,除以 $2T$ 取平均,让损失有界且梯度更平稳。
    12T∑t=1T(⋅)2\displaystyle \frac{1}{2T} \sum_{t=1}^{T} \left( \cdot \right)^{2}
  3. 目标曲线设计对类别 $c$ 的样本,指定第 $c$ 个输出神经元在观察窗口内目标电压趋近 1,其余神经元趋近 0。
    Vjtarget[t]={1,j=c0,j≠c\displaystyle V_j^{target}[t] = \begin{cases} 1, & j = c \\ 0, & j \neq c \end{cases}

训练算法对比

三条路线都试过之后,要塞举办了一场“小规模军事演习”。对比维度有四:收敛速度、分类精度、能耗效率、数据需求。

收敛速度:替代梯度 + 膜电位损失收敛最快,几十到几百轮迭代即可稳定;STDP 是无监督的,需要大量数据自然磨合,收敛慢且结果不稳。

分类精度:在手写数字识别这样的基准上,替代梯度直接训练的 SNN 能达到 95% 以上的准确率;纯 STDP 通常只能到 85%~92%;而同样规模的 ANN 轻松超过 99%。SNN 与 ANN 之间的精度差距,不是三五个点的事,而是当前直接训练方法的普遍状态。

能耗效率:SNN 的事件驱动特性在推理阶段优势明显——没有脉冲就没有计算,能耗比同规模 ANN 低一到两个数量级。但训练阶段,替代梯度需要构建计算图、保存梯度,资源消耗反而远高于推理,甚至高于 ANN 训练。

数据需求:STDP 是局部规则,不需要梯度计算图,适合在线、逐样本更新,数据需求小但精度妥协;替代梯度对齐了深度学习生态,需要小批量、多轮迭代,吃数据和算力。

| 对比维度 | 替代梯度 | STDP | ANN 参考 |

| --- | --- | --- | --- |

| 收敛速度 | 快 | 慢 | 快 |

| 分类精度 | 中高 | 中低 | 高 |

| 推理能耗 | 极低 | 极低 | 高 |

| 训练开销 | 高 | 低 | 高 |

| 是否需要标签 | 需要 | 无需 | 需要 |

信号兵的故事在这里显露出关键结论:SNN 从来不是“更聪明的 ANN”,而是一条“更省电但有代价”的路线。选哪种训练算法,本质上是选接受哪方面的妥协。

挑战与发展

演习结束,指挥官在总结时会写下三行字:精度仍落后、训练太费劲、硬件不听话。这正是当下 SNN 训练算法面临的三座大山。

第一座山:精度差距。 即使最好的替代梯度方案,在常见分类基准上仍比同规模 ANN 低 1~5 个百分点。脉冲信息的最小单位是一个二值事件,信息容量天然受限,要追平 ANN 往往得用更大的网络或更长的时间窗口来弥补。

第二座山:训练资源。 替代梯度依赖完整的计算图和误差反传,训练过程的算力与内存占用让 SNN“低功耗”的名号只在推理阶段成立。这促使研究者探索片上学习:让 STDP 或轻量规则直接在神经形态芯片上完成在线调整,训练与推理共享同一份低能耗硬件。

第三座山:软硬件协同。 Loihi、TrueNorth 等芯片对推理和局部学习友好,却难以高效执行全局梯度计算;同时缺少统一的训练框架和基准。目前实务中最务实的折中方案是混合训练:先用成熟工具把 ANN 转换/蒸馏成 SNN 权重,再用少量替代梯度微调,兼顾精度与效率。未来的方向包括更贴近生物真实的替代函数、更高效的可微仿真器(如 SpikingJelly、Norse),以及把 SNN 推向视频理解、机器人实时控制等真正吃时序信息的场景。信号兵体系迟早要上岗,只不过现在还在从“能训练”走向“训得好”的路上。

AI 应用场景

低功耗语音关键词唤醒

阶段:模型训练与边缘部署

解决的问题:传统云端语音唤醒需要时刻联网传输音频,功耗高、延迟大;SNN 事件驱动,只在有声事件时产生脉冲,配合替代梯度训练可在极低功耗芯片上实现本地识别。

具体案例:智能耳机厂商在 MCU(微控制器)上部署脉冲神经网络,输入为 MFCC 特征脉冲序列,输出为膜电位损失训练的分类器。目标是让“你好助手”唤醒词在 10mW 以内功耗下实时响应,准确率约 90%。

神经形态芯片上的在线自适应

阶段:在线学习与自适应微调

解决的问题:工厂电机在运行一段时间后振动特征会漂移,传统方案必须回传数据到服务器重新训练;STDP 是局部时序规则,能在芯片上按脉冲先后自动调整突触权重,让模型随环境变化持续自愈。

具体案例:工业传感器节点使用 Intel Loihi 芯片,传感器输出的振动脉冲流直接送入 STDP 层学习正常基线。当特征漂移时,权重自动重组,无需联网、无需标签,功耗控制在毫瓦级。

时序异常检测

阶段:模型设计与训练

解决的问题:设备故障的征兆往往藏在一段波形的高低起伏顺序里,而不只是统计均值;膜电位损失把每个时间步的膜电位都变成监督信号,适合这种“早一拍、晚一拍都算错”的时序对齐任务。

具体案例:风电齿轮箱的姿态传感器输出 500 点振动序列,用膜电位损失训练 SNN 判断“健康/磨损/断裂”三态,短时间窗内即可给出判断,推理延迟低于 5ms,为预维护争取时间。

Python 演示

python43 行
import numpy as np rng = np.random.default_rng(42) def make_patterns(n_each=8, T=12):    data, labels = [], []    for kind in (0, 1):        for _ in range(n_each):            seq = np.zeros(T)            start = 0 if kind == 0 else T // 2            seq[start:start + T // 2] = 1.0            rng.shuffle(seq)            data.append(seq)            labels.append(kind)    return np.array(data), np.array(labels) def forward(w, seq, tau=3.0, v_th=2.5):    v = 0.0    for x in seq:        v = v * (1 - 1.0 / tau) + w * x        if v >= v_th:            v = 0.0    return v def surrogate_grad(seq, tau=3.0):    alpha = 1 - 1.0 / tau    T = len(seq)    return sum(seq[t] * alpha ** (T - 1 - t) for t in range(T)) def train(data, labels, lr=0.02, epochs=40):    w = 0.5    for _ in range(epochs):        for seq, y in zip(data, labels):            v_out = forward(w, seq)            target = 3.0 if y == 1 else 0.0            w -= lr * (v_out - target) * surrogate_grad(seq) * 0.02    return w data, labels = make_patterns()w = train(data, labels)preds = [1 if forward(w, seq) >= 1.5 else 0 for seq in data]acc = np.mean(np.array(preds) == labels)print("w=%.3f  accuracy=%.2f%%" % (w, acc * 100))
目的:用一个 LIF 神经元实现“脉冲前密后疏 vs 前疏后密”的二分类,展示“真实发射 + 直通替代梯度”的训练流程。
  1. seq[start:start + T // 2] = 1.0在序列前半段或后半段放置脉冲,制造两类可区分的时间模式。
  2. rng.shuffle(seq)把脉冲位置打乱,增加识别难度,防止模型只靠“第几个时刻”硬记。
  3. v = v * (1 - 1.0 / tau) + w * xLIF 膜电位更新:上一时刻的水位按时间常数泄漏,再加当前输入。
  4. if v >= v_th: v = 0.0超过阈值就发射并复位,这是前向传播中真实存在的不可微动作。
  5. return sum(seq[t] * alpha ** (T - 1 - t) for t in range(T))直通估计器:忽略发射复位,把膜电位看成连续递推,算出 $\partial V_T / \partial w$。
  6. target = 3.0 if y == 1 else 0.0设计膜电位目标:类别 1 想让它发射(目标电压 3.0),类别 0 想让它安静(目标电压 0.0)。
  7. w -= lr * (v_out - target) * surrogate_grad(seq) * 0.02用替代梯度做反向更新,这正是“前向真实、反向拟真”的落地写法。
  8. preds = [1 if forward(w, seq) >= 1.5 else 0 for seq in data]推理时用膜电位阈值 1.5 作为分类边界。

常见误区

误区脉冲不也就是“越过阈值就激活、没越过就抑制”吗?我觉得把发射当成 ReLU 的变体,直接用反向传播训练就行。

正解ReLU 在零点是“不可导但可定义次梯度”,而脉冲发射是严格的阶跃函数,其导数在阈值处是 Dirac 尖峰(无穷大),其余均为零。直接套用 BP 会得到无穷大或为零的梯度,训练必然失效。替代梯度的本质是“换一条可导的便道”,而不是默认脉冲本来就连续。

为何常见:很多入门材料把神经元简化成“阈值 0/1 开关”,与 ReLU 图形有几分神似,小白就容易把两者混为一谈。

误区听说 STDP 可以训练 SNN,我以为它和反向传播一样,喂入标注数据就能把分类精度做到很高。

正解基础 STDP 是无监督的时序 Hebbian 规则,它只根据两个脉冲的时间先后调权重,没有显式的任务目标、没有损失函数。它能学到输入中的统计结构和特征,但学不出清晰的分类边界;R-STDP 等监督变体也只是用奖励信号调制方向,精度上限依然有限。

为何常见:论文标题常出现“STDP 监督训练”,新手容易忽略其局部、无梯度的本质,误以为它和 BP 是同一种东西。

误区SNN 模仿生物神经元,我觉得它的分类精度应该远超传统人工神经网络。

正解当前 SNN 直接训练在常见分类基准上普遍比同规模 ANN 低 1~5 个百分点。SNN 的优势不在精度,而在事件驱动的低功耗、时序信息表达和神经形态硬件友好性;“更接近生物”不等于“计算能力更强”。

为何常见:科普语境下“仿生=高级”的观念根深蒂固,让大家忽略了工程实现与理论优势之间的落差。

误区膜电位损失不就是预测值和目标值求个距离吗?和 ANN 里的交叉熵/均方误差没有本质区别。

正解膜电位损失把误差定义在时间轴上每一个时刻的电压值上,目标是整条电压轨迹,而不是一个类别标量;它对“哪个时刻兴奋、哪个时刻安静”敏感,必须配合替代梯度才能穿越脉冲发射点完成反向传播。

为何常见:两者在函数形态上都像“误差的加和”,新手只盯数学式,忽略了误差到底作用在什么对象上。

面试题

Q1. SNN 中神经元发射脉冲的基本条件是什么?

单选题 · easy

  • A.膜电位超过发射阈值← 正确答案
  • B.输入电流恰好降到零
  • C.突触权重变为负数值
  • D.时间步长被固定住

答案:A。LIF 模型把膜电位看作蓄水池,只有水位(膜电位)越过阈值,神经元才发射脉冲,发射后水位归零。其余选项与生物物理机制无关。像信号兵只看水位,不看别的。

Q2. 传统反向传播难以直接训练 SNN 的根本原因是什么?

单选题 · mid

  • A.神经元数量规模太大
  • B.脉冲发射函数不可微← 正确答案
  • C.训练数据规模不够大
  • D.网络中缺少损失函数

答案:B。脉冲发射是 0/1 阶跃事件,其导数在阈值处为无穷大,梯度无法沿时间与网络层次回传。这与网络规模、数据量无关,SNN 本身也有损失函数可用,损失函数不是瓶颈。

Q3. 替代梯度方法的核心思路是什么?

单选题 · easy

  • A.用连续函数近似脉冲导← 正确答案
  • B.让神经元完全不发脉冲
  • C.用随机噪声替代梯度
  • D.把脉冲网络全改全连接

答案:A。替代梯度是“教学分离”:前向保持真实阶跃发射,反向把不可导的阶跃替换成矩形、sigmoid 等连续函数,让误差信息有路可走。不是消灭脉冲,也不是随机猜测。

Q4. 按 STDP 规则,突触前(pre)在突触后(post)之前发射脉冲,会导致什么?

单选题 · mid

  • A.突触权重会显著减弱
  • B.突触权重会增强加深← 正确答案
  • C.突触权重会置为零值
  • D.突触权重会保持不变

答案:B。STDP 是师徒磨合规则:师父先发、徒弟很快跟着发,说明链路有效,权重增强(LTP);顺序反过来则减弱(LTD)。时间差越小,变化幅度越大。

Q5. 基础 STDP 本质上是哪一类学习算法?

单选题 · mid

  • A.严格的监督学习
  • B.无监督的时序学习← 正确答案
  • C.基于回报的元学习
  • D.完全随机的启发学习

答案:B。基础 STDP 不需要标签,只按前后脉冲的时间邻近性调整权重,属于无监督的 Hebbian 时序规则;R-STDP 等加了奖励信号才会向监督方向靠拢。

Q6. 相比“只统计脉冲总数”的率编码,膜电位损失的优势是什么?

单选题 · mid

  • A.不需要任何阈值参数
  • B.保留时间信息收敛快← 正确答案
  • C.分类精度必然更高
  • D.就完全绕开了梯度

答案:B。膜电位损失逐时刻对齐目标电压曲线,把“哪个时刻该兴奋”也变成监督信号,保留完整时间信息,短时间窗内即可收敛。它仍需替代梯度传误差,也无法保证精度必然更高。

Q7. 当前同规模 SNN 与 ANN 在常见分类任务上的精度关系通常是?

单选题 · easy

  • A.SNN 精度远高于 ANN
  • B.SNN 精度略低于 ANN← 正确答案
  • C.两者精度完全相同
  • D.SNN 无法处理分类

答案:B。虽然 SNN 能耗低、时序表达强,但直接训练精度普遍低 1~5 个百分点。SNN 的卖点是低功耗与神经形态硬件适配,而不是精度碾压。

Q8. 针对脉冲不可微问题,可行的训练思路包括哪些?

多选题 · hard

  • A.替代梯度方法← 正确答案
  • B.STDP 时序学习← 正确答案
  • C.膜电位损失监督← 正确答案
  • D.完全舍弃时间信息

答案:ABC。替代梯度修一条可导便道,STDP 绕开梯度只用时间差,膜电位损失把监督信号放到电压轨迹上,三者都正面回应了不可微问题。完全舍弃时间信息等于丢掉 SNN 的核心语义,不是可行思路。

Q9. 关于替代梯度的正确说法有哪些?

多选题 · hard

  • A.前向仍用真实阶跃← 正确答案
  • B.反向用连续近似求梯度← 正确答案
  • C.替代函数可灵活选择← 正确答案
  • D.替代后梯度完全精确

答案:ABC。替代梯度的关键是“前向真实、反向拟真”,矩形、sigmoid 等都可以作为替代函数。但它是工程近似,不是真实梯度的精确估计,不能保证梯度完全精确。

Q10. 替代梯度中矩形窗口 $a$ 过宽会导致什么?

单选题 · hard

  • A.梯度平滑但近似失真← 正确答案
  • B.梯度变成精确无误差
  • C.脉冲发射次数会增多
  • D.神经元阈值会自适应

答案:A。窗口越宽,越多“远离阈值”的膜电位也能拿到伪梯度,训练过程更平滑,但伪梯度与真实差异变大,训练出的权重在真实推理时表现下降。窗口不影响发射次数,也不改变阈值。