这个项目能做什么

NEAT-AI 是一个用 Deno/TypeScript 编写的神经进化库,实现并扩展了 Stanley 和 Miikkulainen 于 2002 年发表的 NEAT(NeuroEvolution of Augmenting Topologies)算法。该项目已发展为一个混合进化与基于梯度的系统,在经典 NEAT 方法之上叠加了现代研究技术。 核心架构围绕“生物”(creatures)展开——基因组在 TypeScript 中变异和繁殖,前向传播在随附的 WebAssembly (WASM) 模块内执行。可选的 Rust 扩展(NEAT-AI-Discovery)通过 Deno FFI 提供 GPU 加速的结构分析,并基于错误引导分析提出新突触。 主要特性包括: 1. **可扩展观测**:输入和输出特征由稳定的 UUID 标识而非位置索引,因此无需重启进化即可添加新观测,并支持多机器重组。 2. **分布式训练**:训练和进化可在多个独立节点上运行,由中央控制器合并最优生物,对应进化算法中的岛屿模型。 3. **终身学习**:专为变化环境中的持续学习设计,支持新数据在数周或数月内陆续到达时的持续学习。 4. **WASM 激活**:库会自动初始化 WASM 后端;调用者只需调用 `activate()` 即可完成一次前向传播。 5. **独有的挤压函数**:除标准选项外,还支持 IF、MAX、MIN 等激活函数。 6. **神经元剪枝**:使用零阶显著性准则,移除训练过程中激活值不发生变化的神经元。 7. **CRISPR**:允许在进化过程中将手工设计的基因(神经元和突触)注入种群,借用该生物学缩写表示种群播种。 8. **嫁接**:允许基因不相容的亲本进行跨岛屿杂交,保持多样性。 9. **模因进化**:记录并利用最适应生物的偏置和权重来微调后续世代,将学习到的权重写回基因组(拉马克式方法)。 10. **错误引导的结构进化(Discovery)**:通过分析神经元激活和误差动态识别并创建新突触。Rust 扩展执行 GPU 加速分析,并通过 FFI 提出结构候选。 11. **自适应变异率**:根据生物大小和适应度进展自动调整变异策略,平衡探索与利用。 12. **迁移学习**:将训练好的生物以带元数据的检查点导出,通过 UUID 映射导入新任务,并使用预训练生物播种种群。 13. **ONNX 导出**:将训练好的生物导出为 ONNX 格式,以便在标准机器学习推理流水线中部署。 14. **MCMC 变异接受**:使用 Metropolis-Hastings 准则决定是否接受变异,并通过自适应温度调整使接受率接近约 23.4%。 15. **高级繁殖策略**:针对基因不相容的生物提供多种策略,包括输入权重余弦相似度、子图移植和多样性驱动繁殖。 16. **合成突触训练**:在反向传播期间临时增加层间连接密度,训练后剪除接近零的突触。 17. **随机移民**:当种群停滞时,用新生成的基因组替换最弱的非精英生物,引入新的遗传材料。 该项目发布到 JavaScript Registry (JSR),无需安装——WASM 后端会在首次使用时自行初始化。它属于一系列仓库的一部分,包括 NEAT-AI-core(共享 Rust 计算 crate)、NEAT-AI-Discovery(用于 GPU 加速结构分析的 Rust FFI 扩展)、NEAT-AI-scorer(Rust 评分应用)、NEAT-AI-Backpropagation(原生 Rust 反向传播)、NEAT-AI-Lamarck(实验性 Rust 优化器)、NEAT-AI-Explore(TypeScript 可视化工具),以及其他几个实验性优化器和工具。 该库专为 DenoJS 环境设计,提供了一套全面的神经进化工具包,涵盖从基本生物创建和激活,到高级分布式训练、结构发现,以及通过 ONNX 导出进行生产部署等能力。