STDP:大脑不用反向传播,靠时序也能学习

反向传播需要一条从输出一路反推回输入的错误信号通道。大脑里没有这条线。可它照样能学——靠的只是一条极其朴素的局部规则:谁先谁后。

一、背景与痛点

深度学习依赖反向传播:损失函数对每个参数的梯度,需要把误差一层层往回传。这要求两件事——整条计算图都要存着,而且每个环节都得可微。

生物大脑两条都不满足。突触(连接)只能"看见"它前后两个神经元:突触前神经元什么时候发放、突触后神经元什么时候发放。它不知道整个网络的输出对不对,更不可能算全局梯度。

那大脑凭什么学?1949 年 Hebb 给出直觉:"一起放电的神经元,连接会变强。"但这句话太模糊——"一起"是多久以内?谁先谁后有没有关系?

实验给出了精确答案,而且结果有点反直觉:顺序至关重要。如果突触前先发放、突触后跟着发放(因果),连接增强;反过来,突触前后发放、突触前才发放(反因果),连接反而减弱。这条规则叫 STDP(Spike-Timing-Dependent Plasticity,脉冲时序依赖可塑性)。

它的意义在于:这是一条纯粹的局部规则——每个突触只需知道前后两次发放的时间差,就能更新权重。没有全局误差信号,不需要存计算图,也不需要可微。这正是类脑硬件梦寐以求的学习机制。

二、核心原理

1. 学习窗:一条不对称的指数曲线

STDP 的权重改变量 Δw\Delta wΔw 只取决于时间差 Δt=tpost−tpre\Delta t = t_{\rm post} - t_{\rm pre}Δt=tpost​−tpre​:

Δw(Δt)={A+exp⁡(−Δtτ+),Δt>0(因果→增强 LTP)−A−exp⁡(Δtτ−),Δt<0(反因果→抑制 LTD)\Delta w(\Delta t)= \begin{cases} A_+ \exp\left(-\dfrac{\Delta t}{\tau_+}\right), & \Delta t > 0 \quad (\text{因果} \to \text{增强 LTP})\\[2mm] -A_- \exp\left(\dfrac{\Delta t}{\tau_-}\right), & \Delta t < 0 \quad (\text{反因果} \to \text{抑制 LTD}) \end{cases}Δw(Δt)=⎩⎨⎧​A+​exp(−τ+​Δt​),−A−​exp(τ−​Δt​),​Δt>0(因果→增强 LTP)Δt<0(反因果→抑制 LTD)​

形状像一个"双指数窗口":右侧是增强,左侧是抑制。

2. 为什么是不对称的

这是整条规则能稳定工作的关键:抑制的幅度通常略大于增强(A−>A+A_- > A_+A−​>A+​),而且时间常数也更短。

直观理解:如果两侧完全对称,权重会无限制地在正负之间漂移,或者随机涨落——没有稳态。让抑制稍强一点,就给了权重一个"回到中间"的力。生物学上这个不对称性被反复测量验证过,它和前面几期的稳态可塑性是一套组合拳。

3. 局部性:为什么它重要到能改变硬件

STDP 的更新只需要三样东西:两个神经元的发放时刻、当前权重、一组常数。这使得:

  • 可用寄存器实现:每个突触配一个"迹"变量(trace),记录最近一次发放的衰减指数,就能实现精确的指数窗;
  • 事件驱动:没有发放就没有更新,和脉冲网络的稀疏性天然匹配;
  • 可片上学习:不需要把数据搬回主机算梯度——这正是神经形态芯片做"在线学习"的基础。

4. 它能做什么:从特征学习到奖励调制

  • 无监督特征学习:把 STDP 用在输入层,网络会自动对"有因果关系"的输入更敏感,从而学出方向选择性等特征(视觉皮层的经典现象)。
  • 奖励调制(R-STDP):给 Δw\Delta wΔw 乘上一个全局奖励信号,就从无监督变成强化学习——这是 095 期与强化学习交叉的接口。
  • 与传统方法的差距:STDP 是二阶统计量(时序相关性),没有监督信号,因此精度通常不如反向传播训练的网络。它的优势在能耗与在线性。

三、代码实战

用 numpy 实现 STDP 窗口,做三个实验:窗口形状、重复配对、双输入竞争。

import numpy as np

rng = np.random.default_rng(7)

tau_p, tau_m = 20.0, 20.0
A_p, A_m = 0.010, 0.012


def dW(dt_ms):
    if dt_ms > 0:
        return A_p * np.exp(-dt_ms / tau_p)     # 突触前先发放 → LTP
    if dt_ms < 0:
        return -A_m * np.exp(dt_ms / tau_m)     # 突触前后发放 → LTD
    return 0.0


for dt in [-40, -20, -10, -5, 5, 10, 20, 40]:
    print("Δt = %+4d ms → Δw = %+.5f" % (dt, dW(dt)))

w = 0.5
for _ in range(200):
    w = np.clip(w + dW(+5.0), 0, 1)
print("200 次 Δt=+5ms(因果)配对后 w = %.4f" % w)
w = 0.5
for _ in range(200):
    w = np.clip(w + dW(-5.0), 0, 1)
print("200 次 Δt=-5ms(反因果)配对后 w = %.4f" % w)

w_syn = np.array([0.5, 0.5])       # 输入1、输入2 → 输出神经元
for rep in range(300):
    t_out = rep * 100.0
    t_pre = [t_out - 5.0, t_out + 5.0]     # 输入1 领先 5ms,输入2 滞后 5ms
    for i in range(2):
        w_syn[i] = np.clip(w_syn[i] + dW(t_out - t_pre[i]), 0, 1)
print("输入1(领先输出 5ms,因果)权重 w1 = %.4f" % w_syn[0])
print("输入2(滞后输出 5ms,反因果)权重 w2 = %.4f" % w_syn[1])

运行结果:

Δt =  -40 ms → Δw = -0.00162
Δt =  -20 ms → Δw = -0.00441
Δt =  -10 ms → Δw = -0.00728
Δt =   -5 ms → Δw = -0.00935
Δt =   +5 ms → Δw = +0.00779
Δt =  +10 ms → Δw = +0.00607
Δt =  +20 ms → Δw = +0.00368
Δt =  +40 ms → Δw = +0.00135
200 次 Δt=+5ms(因果)配对后 w = 1.0000(饱和到上界)
200 次 Δt=-5ms(反因果)配对后 w = 0.0000(压到下界)
输入1(领先输出 5ms,因果)权重 w1 = 1.0000
输入2(滞后输出 5ms,反因果)权重 w2 = 0.0000
结论:同一起始权重、同一规则,仅凭 5ms 的先后差异,w1 1.000 > w2 0.000

注意窗口的形状:Δt=±5 ms 时,抑制的绝对值 0.00935 大于增强的 0.00779——不对称性一眼可见。这不是笔误,而是让权重有稳态的必要设计。

第三个实验最能说明问题:两个输入从完全相同的 0.5 出发,唯一差别是它们与输出发放的先后关系(一个领先 5ms,一个滞后 5ms)。300 次重复之后,一个饱和到 1.0、一个掉到 0.0。STDP 不需要任何标签,仅凭时序统计就完成了"选择"。

四、关键经验/避坑

  1. 务必让抑制略强于增强(A−>A+A_- > A_+A−​>A+​ 或 τ−<τ+\tau_- < \tau_+τ−​<τ+​)。否则权重要么发散、要么在网络里随机游走,学不到稳定结构。
  2. 时间常数量级要想清楚。 τ\tauτ 取 20 ms 时,只有 ±50 ms 内的配对有效;取太小(如 2 ms)就几乎学不到东西。
  3. 实现上用"迹变量"而非遍历历史。 给每个突触维护一个按 exp⁡(−dt/τ)\exp(-dt/\tau)exp(−dt/τ) 衰减的 trace,发放时读取、更新 O(1),这才是事件驱动的高效实现。
  4. 权重必须有上下界。 纯 STDP 没有边界约束会无限漂移,工程上用硬截断或软饱和(乘性衰减)。
  5. STDP 学的是相关性,不是正确性。 它会把"经常一起发生"的输入挑出来,但这些输入未必是任务需要的——这就是它需要 R-STDP 或与监督信号结合的原因。
  6. 别指望用它替代反向传播。 在同样的网络规模上,STDP 的精度通常落后;它的价值在线性、局部性和能耗。

五、完整系列推荐

📚 本文选自《类脑计算与脉冲神经网络详解》系统教程(第 022 期:STDP 原理——时序决定增强或抑制),每期配可运行 Python 代码。

完整系列(100 期正文 + 3 篇番外,每期文章+代码)已在 ima 知识号【Kruptos】持续更新:

  • 🗂 72+ 技术知识库:类脑计算与脉冲神经网络、强化学习详解、可微分编程与科学计算、AI 大模型与边缘智能、计算机体系结构、机器人运动学与控制……几乎覆盖全部软硬件技术栈
  • 🧠 8 款 AI 技能:系列生产、知识库管理、CMMI 受管开发、自进化 Agent 等,已在 ima 技能广场上架,即装即用
  • ✅ 全部免费订阅,后续更新自动推送

🔍 订阅方式:打开 ima(腾讯智能工作台)→ 搜索「Kruptos」→ 一键订阅;或在 ima 内直接搜索《类脑计算与脉冲神经网络详解》。


作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研,现深耕 AI 与云原生)
原创内容,转载注明出处。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐