LIFLayer
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| ResetState | 1 | 重置膜电位与时间缓存。每个样本批次开始前必须调用! |
| ForwardStep | 1 | 单时间步前向:X[t] → S[t] 积分 → 泄漏 → 触发 → 复位,并缓存中间量供 BPTT 使用。 |
| BackwardTime | 1 | 沿时间反向传播。 前向依赖链(ZeroOnSpike 为例): U[t] = β·H[t−1] + X[t]·W S[t] = Θ(U[t] − θ) H[t] = U[t]·(1 − S[t]) 反向递推(从 T−1 到 0): dH[t] = β·dU[t+1]… |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| Weight | 1 | 突触权重矩阵 [InputSize, Units] |
| WeightGrad | 1 | 权重梯度(BackwardTime 中累积)[InputSize, Units] |
| Beta | 1 | 膜电位衰减系数 β ∈ (0,1),越小遗忘越快 |
| Threshold | 1 | 发放阈值 U_thr |
| ResetMode | 1 | 复位模式 |
| SurrogateType | 1 | 替代梯度函数类型 |
| Alpha | 1 | 替代梯度陡度参数 α(fast sigmoid: σ' = 1/(α|u|+1)²) |
| SmoothForward | 1 | 梯度自检开关:前向用光滑函数 f(u) 代替 Heaviside 阶跃。 f'(u) 恰好等于对应的替代导数,因此"解析梯度 == 数值差分梯度" 可用来验证 BPTT 实现的正确性。正常训练/推理必须为 False。 |
| UHistory | 1 | 最近一次前向仿真的膜电位轨迹(可视化用) |
| SHistory | 1 | 最近一次前向仿真的脉冲轨迹(可视化用) |
| Name | 1 | |
| InputSize | 1 | |
| Units | 1 |
04 Fields
| Name | Overloads | Summary |
|---|---|---|
| _H | 1 | 膜电位 H(跨时间步持续)[batch, Units] |
05 Members
Int32)重置膜电位与时间缓存。每个样本批次开始前必须调用!
Tensor)单时间步前向:X[t] → S[t] 积分 → 泄漏 → 触发 → 复位,并缓存中间量供 BPTT 使用。
List(Of Tensor))沿时间反向传播。
前向依赖链(ZeroOnSpike 为例): U[t] = β·H[t−1] + X[t]·W S[t] = Θ(U[t] − θ) H[t] = U[t]·(1 − S[t])
反向递推(从 T−1 到 0): dH[t] = β·dU[t+1] ← H[t] 只经 U[t+1] 影响损失 dS[t] = dS_ext[t] − dH[t]⊙U[t] ← ∂H/∂S = −U dU[t] = dS[t]⊙σ'(U[t]−θ) + dH[t]⊙(1−S[t]) ← 替代梯度 + ∂H/∂U = 1−S dW += X[t]ᵀ·dU[t] ← dL/dI[t] = dL/dU[t] dX[t] = dU[t]·Wᵀ
SubtractThreshold 模式把复位导数换为 ∂H/∂S = −θ、∂H/∂U = 1。
| Name | Type | Description |
|---|---|---|
dS_ext | List(Of Tensor) | 上游对每步脉冲的梯度 dL/dS[t]([batch, Units] × T) |
各时间步的 dL/dX[t](传给更早的层)
突触权重矩阵 [InputSize, Units]
权重梯度(BackwardTime 中累积)[InputSize, Units]
膜电位衰减系数 β ∈ (0,1),越小遗忘越快
发放阈值 U_thr
复位模式
替代梯度函数类型
替代梯度陡度参数 α(fast sigmoid: σ' = 1/(α|u|+1)²)
梯度自检开关:前向用光滑函数 f(u) 代替 Heaviside 阶跃。 f'(u) 恰好等于对应的替代导数,因此"解析梯度 == 数值差分梯度" 可用来验证 BPTT 实现的正确性。正常训练/推理必须为 False。
最近一次前向仿真的膜电位轨迹(可视化用)
最近一次前向仿真的脉冲轨迹(可视化用)
膜电位 H(跨时间步持续)[batch, Units]