一个用纯Rust(不用C++)打造的仿Pytorch的玩具型AI框架(目前尚不成熟,请勿使用)。该项目不打算支持GPU--因后期可能要支持安卓等平台,不想受制于某(几)种非CPU设备。但可能会加入NEAT等网络进化的算法。
一部分原因是受到pytorch的影响,希望能写个和pytorch一样甚至更易用的AI框架;另一部分是希望本框架只触及(touch)一些关键的东西:
- only torch Rust --- 只用Rust(不用C++是因为其在复杂逻辑项目中容易写出内存不安全代码);也不打算支持Python接口);亦不用第三方lib(所以排除tch-rs),这样对跨平台支持会比较友好。
- only torch CPU --- 不用GPU,因要照顾多平台也不想被某个GPU厂商制约,且基于NEAT进化的网络结构也不太好被GPU优化(也省得考虑数据从CPU的堆栈迁移到其他设备内存的开销问题了)。
- only torch node --- 没有全连接、卷积、resnet这类先入为主的算子概念,具体模型结构均基于NEAT进化。
- only torch tensor --- 所有的数据类型都是内置类型tensor(实现可能会参考peroxide),不需要第三方处理库,如numpy,array或openBLAS(关于blas的一些说明)。
- only torch f32 --- 网络的参数(包括模型的输入、输出)不需要除了f32外的数据类型。
目前无人性化的文档。可直接看Rust自动生成的Api Doc即可。
- Adaline自适应线性神经元 - 经典二分类算法实现,本例使用了最原始的写来构建计算图、自动微分和参数更新,测试显示1000样本10轮训练可达95%+准确率(运行:
cargo test test_adaline -- --show-output
)
- still need teset
test_duplicate_computation_avoidance
? - (back/forward)pass_id相关的graph测试?
- (最后用AI优化下backward的逻辑)
- 1次, 一次?用哪个?
assert_eq!( graph.backward_nodes(&[input], input), Err(GraphError::InvalidOperation(format!( "输入节点[id=1, name=input, type=Input]不应该有雅可比矩阵" ))) );
添加一个assert_err
的宏,可才参考assert_panic
宏- graph反向传播中有些节点没有值需要过滤怎么添加(如多个output的网络结构)?
- 针对
loss1.backward(retain_graph=True)
和detach()
还有多output输出,还有rnn节点的反向传播,还有多次backward的问题; - 对于Input节点的
set_jacobi
和jacobi
是否可用更好的panic或error取代,毕竟Input节点不该有梯度相关的概念; - 是否需要添加一个sign节点来取代step直接forward输出[-1,1]?
- 直接实现CrossEntropyLoss(训练)和SoftMax(推理),不用LogisticLoss(Sigmoid)了;
- unit test for Graph, and parent/children
- Graph测试中该包含各种pub method的正确及错误测试
- Graph测试中最好添加某个节点后,测试该节点还有其父节点的parents/children属性(又比如:同2个节点用于不同图的add节点,测试其parents/children属性是否正确)(Variable 节点无父节点)、“节点var1在图default_graph中重复”
- add a
graph
for unit test to test the 多层的jacobi计算,就像ada_line那样? - 各种assign类的op(如:add_assign)是否需要重载而不是复用基本算子?
- 在python中仿造ada_Line构造一个复合多节点,然后基于此在rust中测试这种复合节点,已验证在复合多层节点中的反向传播正确性
- jacobi到底该测试对parent还是children?
- how to expose only
in crate::nn
to the nn::Graph`? - should completely hide the NodeHandle?
- Graph/NodeHandle rearrange blocks due to visibility and funciontality
- NodeHandle重命名为Node? 各种
parent/children/node_id
重命名为parents/children/id
? - should directly use
parents
but notparents_ids
? - check other unused methods
- draw_graph(graphvis画图)
- save/load网络模型(已有test_save_load_tensor)
- 也许后期可给Graph添加一个
forward_batch
方法,用于批量forward(参考adaline_batch.py)? - 后期当引入NEAT机制后,可以给已存在节点添加父子节点后,需要把现有节点检测再完善下;
- 当后期(NEAT阶段)需要在一个已经forwarded的图中添加节点(如将已经被使用过的var1、var2结合一个新的未使用的var3构建一个add节点),可能需要添加一个
reset_forward_cnt
方法来保证图forward的一致性。 - NEAT之后,针对图backward的
loss1.backward(retain_graph=True)
和detach()
机制的实现(可在GAN和强化学习算法实例中针对性实现测试),可能须和forward_cnt
机制结合, 还要考虑一次forward后多次backward()后的结果。 - Tensor 真的需要uninit吗?
- 各种命名规范“2维”,“二维”,“二阶”,“2阶”,“一个”,“两个”,“三个”,“需要”,“需”,“须要”,“须”,“值/value”,"变量/variable","node/handle",“注/注意:”,”dim/dimension/rank“,"维/阶",","改为", ","仍然"改为”仍“
- 添加一个表格,说明下本crate中,阶、维、标量、向量、矩阵、张量的概念异同;
- 根据matrixSlow+我笔记重写全部实现!保证可以后期以NEAT进化,能ok拓展至linear等常用层,还有detach,,容易添加edge(如已存在的add节点的父节点),。
- 等ada_line例子跑通后:
Variable
节点做常见的运算重载(如此便不需要用那些丑陋的节点算子了) - 图错误“InvalidOperation” vs “ComputationError”
- Tensor类的index将
[[
优化成[
? - Tensor类的
slice(&[0..m, j..j+1])
是否需要? - use approx::assert_abs_diff_eq; need or not?
- get_node_grad函数优化分析
目前需要先解决有没有的问题,而不是好不好
- [] 实现类似tch-rs中
tch::no_grad(|| {});
的无梯度功能; - [] 常用激活函数,tanh,Softplus,sech
- [] 基于本框架解决XOR监督学习问题
- [] 基于本框架解决Mnist(数字识别)的监督学习问题
- [] 基于本框架解决CartPole(需要openAI Gym或相关crate支持)的深度强化学习问题
- [] 尝试实现下CFC
- 计算图执行机制重构方案 - 阐述了从基于
pass_id
的指令式执行到基于“版本号”和“拓扑排序”的反应式更新模型的重构计划。 - MatrixSlow项目识别文档 - 基于MatrixSlow的Python深度学习框架分析,包含计算图、自动求导、静态图执行等核心概念的详细说明
- 本项目的梯度设计机制说明 - 详细说明了梯度/雅可比矩阵相关的设计决策,包括手动清除梯度的原理、累计机制等的使用模式和最佳实践
- KAN 2.0
- radiate--衍生NEAT的纯Rust库
- neat-rs
- 纯Rust的NEAT+GRU
- Rusty_sr-纯Rust的基于dl的图像超清
- ndarray_glm(可参考下
array!
,分布,以及原生的BLAS) - PyToy--基于MatrixSlow的Python机器学习框架
- MatrixSlow--纯python写的神经网络库
- python:遗传算法(GE)玩FlappyBird
- python包:遗传规划gplearn
- python包:遗传规划deap
- python包:特征自动提取
- NTK网络
(较为成熟的3方库)
- Burn—纯rust深度学习库
- Candle:纯rust较成熟的机器学习库
- 用纯numpy写各类机器学习算法 (自动微分参考)
- 手工微分:Rust-CNN
- neuronika--纯Rust深度学习库(更新停滞了,参考下自动微分部分)
- 基于TinyGrad的python深度学习库的RL示例
- 重点:Rust- ---支持cuda的Rust深度学习库(参考下自动微分部分)
- 重点:基于ndarray的反向autoDiff库
- 前向autoDiff(貌似不成熟)
- []
- 深度学习框架InsNet简介
- C++机器学习库MLPACK
- 经典机器学习算法Rust库
- peroxide--纯Rust的线代及周边库
- C++实现的NEAT+LSTM/GRU/CNN
- pytorch+NEAT
- avalog--基于avatar的Rust逻辑推理库
- scryer-prolog--Rust逻辑推理库
- vampire:自动证明器
- 那迷人的被遗忘的语言:Prolog
- 结合prolog和RL
- prolog与4证人难题
- logic+mL提问
- prolog解决数独问题
- 贝叶斯与逻辑推理
- 用一阶逻辑辅佐人工神经网络
- 二阶逻辑杂谈
- 关于二阶逻辑的概念问题
- PWL:基于贝叶斯的自然语言处理
- Symbolic Learning Enables Self-Evolving Agents
- ASTRID系统(Mind|Construct, 2017)
- 归纳逻辑编程(Inductive Logic Programming, ILP)
- 书:《The Book of Why》
- 书:《Causality:Models,Reasoning,and Inference》
- 知乎:因果推断杂谈
- 信息不完备下基于贝叶斯推断的可靠度优化方法
- 贝叶斯网络中的因果推断
- Sac用以复合Action
- EfficientZero
- EfficientZero Remastered
- EfficientZero V2: Mastering Discrete and Continuous Control with Limited Data
- SpeedyZero
- LightZero系列
- 随机MuZero代码
- Redeeming Intrinsic Rewards via Constrained Optimization
- Learning Reward Machines for Partially Observable Reinforcement Learning
- combo代码
- 2023最新model-based offline算法:MOREC
- 众多model-base/free的offline算法
- model-free offline算法:MCQ解析
- RL论文列表(curiosity、offline、uncertainty,safe)
- 代替Gym的综合库
Formal Verification
├── Theorem Proving(定理证明)
│ ├── Interactive Theorem Proving(交互式)
│ │ ├── Coq
│ │ ├── Lean
│ │ └── Isabelle/HOL
│ └── Automated Theorem Proving(自动式)
└── Model Checking(模型检测)
- 动手学深度学习-李沐著
- openMMLab-Yolo
- GRU解释
- 基于人类语音指挥的AI
- webGPT会上网的gpt
- LeCun的自监督世界模型
- awesome Rust
- 去雾算法
- rust人工智能相关的项目
- 《千脑智能》及相关github项目
本项目遵循MIT协议(简言之:不约束,不负责)。