Skip to content

JuneDylan/LNN_Github

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Liquid Neural Networks - 从理论到部署的完整实践系列

基于论文 Liquid Time-Constant NetworksClosed-form Continuous-time Neural Networks,结合 ncps 开源库,构建的 9 篇渐进式学习代码。

为什么做这个项目?

液态神经网络(Liquid Neural Networks, LNN)是 MIT CSAIL 于 2020-2021 年提出的新型连续时间循环网络架构,具有动态时间常数非均匀采样鲁棒性极低参数量三大优势。然而,现有学习资料要么停留在论文层面,要么仅展示 API 调用,缺乏从数学原理到工业部署的完整实践路径。

本项目的目标:让每一位有 PyTorch 基础的开发者,都能真正理解 LNN 并将其应用到自己的项目中。

系列路线图

基础理论                    核心架构                    工程实践
─────────────────────────────────────────────────────────────────
01 范式转移 ──┐
02 Neural ODE ─┤
03 LTC原理 ───┼── 04 LTC实现 ── 05 伴随方法 ── 06 求解器对比
              │                                │
              │                                ├── 07 事件驱动
              │                                │
              └── 08 CfC闭式解 ────────────────┴── 09 MCU部署

代码详解

第一阶段:基础理论

编号 文件 核心内容 关键实现
01 01_lnn_paradigm_shift.py 传统RNN vs LNN范式差异 MiniLiquidCell、非均匀采样鲁棒性、动态时间常数τ
02 02_neural_ode.py ODE与Neural ODE 手写Euler/RK4求解器、torchdiffeq实战、向量场可视化
03 03_ltc_from_neural_ode.py Neural ODE → LTC演进 自限制机制(A-h)、动态τ_sys、物理约束注入

第二阶段:核心架构

编号 文件 核心内容 关键实现
04 04_ltc_cell_from_scratch.py 从零搭建LTC细胞 LTCCell/LTCModel完整实现、不规则时间序列处理
05 05_adjoint_method.py 伴随灵敏度算法 BPTT显存墙分析、odeint_adjoint的O(1)内存训练
06 06_ode_solvers_comparison.py 求解器全景对比 Euler/RK4/Dopri5精度与稳定性、NFE分析、三步走策略

第三阶段:工程实践

编号 文件 核心内容 关键实现
07 07_event_driven.py 事件驱动与稀疏计算 变化率门控、自适应时间分片、事件相机模拟
08 08_cfc_architecture.py CfC闭式解架构 CfCCell从零实现、CfC vs LTC速度对比、并行计算
09 09_mcu_deployment.py MCU部署实战 INT8量化、LUT查找表、C代码生成、QAT训练

快速开始

环境配置

# 克隆仓库
git clone https://github.com/<your-username>/LNN-Series.git
cd LNN-Series

# 安装依赖
pip install -r lnn_series/requirements.txt

依赖列表:

  • torch >= 2.0.0 — 深度学习框架
  • numpy >= 1.24.0 — 数值计算
  • ncps >= 1.0.1 — 液态神经网络库(CfC/LTC/AutoNCP)
  • torchdiffeq >= 0.2.3 — Neural ODE求解器
  • matplotlib >= 3.7.0 — 可视化

运行示例

每篇代码均可独立运行,无需按顺序执行:

# 运行任意一篇
python lnn_series/01_lnn_paradigm_shift.py
python lnn_series/04_ltc_cell_from_scratch.py
python lnn_series/08_cfc_architecture.py

# 运行后会:
# 1. 在终端输出实验数据和分析结论
# 2. 在 lnn_series/ 目录下生成可视化图表(PNG)

核心概念速览

液态时间常数网络(LTC)

LTC 的状态演化由微分方程驱动:

dh/dt = -(G_L + Σ w_i·σ_i) · h + Σ w_i·σ_i · A_i
         ─────────────────     ──────────────────
         系统时间常数 τ_sys     稳态目标 S
  • 动态时间常数 τ_sys = 1/(G_L + Σ w_i·σ_i):输入剧烈时τ小(快速响应),平稳时τ大(保留记忆)
  • 自限制机制 (A - h):状态永远被限制在物理合理范围内,不会发散
  • 时间感知 dt 直接参与计算,天然适应非均匀采样

闭式连续时间网络(CfC)

CfC 将 LTC 的微分方程通过数学近似转化为闭式解:

h(t) = exp(-f·t) · I(x,θ) + (1 - exp(-f·t)) · S(x,θ)
       ─────────              ──────────────────
       衰减因子               稳态目标
  • 无需ODE求解器:直接代入 t 即可计算,推理速度提升 10-100 倍
  • 支持并行计算:所有时间点可同时计算,突破时序串行瓶颈
  • 门控机制:天然控制梯度,处理超长时序更稳定

配套博客

本系列代码与 CSDN 博客系列一一对应,建议结合阅读:

编号 博客主题 链接
01 液态神经网络是什么? 阅读
02 常微分方程与Neural ODE 阅读
03 从Neural ODE到LTC 阅读
04 从零搭建LTC细胞 阅读
05 伴随灵敏度算法实战 阅读
06 求解器全景对比 阅读
07 事件驱动与稀疏计算 阅读
08 CfC闭式解架构 阅读
09 MCU部署实战 阅读

博客专栏:液态神经网络(LNN)系列

项目结构

LNN-Series/
├── lnn_series/
│   ├── __init__.py
│   ├── requirements.txt
│   │
│   ├── 01_lnn_paradigm_shift.py       # 范式转移
│   ├── 02_neural_ode.py               # Neural ODE
│   ├── 03_ltc_from_neural_ode.py      # LTC原理
│   ├── 04_ltc_cell_from_scratch.py    # LTC实现
│   ├── 05_adjoint_method.py           # 伴随方法
│   ├── 06_ode_solvers_comparison.py   # 求解器对比
│   ├── 07_event_driven.py             # 事件驱动
│   ├── 08_cfc_architecture.py         # CfC架构
│   ├── 09_mcu_deployment.py           # MCU部署
│   │
│   ├── 01_dynamic_tau.png             # 可视化图表
│   ├── 01_irregular_sampling.png
│   ├── 07_event_driven.png
│   ├── 07_temporal_partition.png
│   ├── 07_event_camera.png
│   ├── 07_computation_savings.png
│   ├── 08_cfc_training.png
│   ├── 09_lut_implementation.png
│   └── 09_qat_training.png
│
└── README.md

参考文献

致谢

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

liquid-neural-networks, neural-ode, pytorch, tutorial

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages