autodiff
Luna-Flow/autodiff 通过前向模式自动微分计算普通 MoonBit 程序的精确一阶导数。针对 Luna Flow trait 编写的程序在满足 的对偶数 上运行,导数就出现在 分量中。本仓库提供对偶数类型、标量驱动函数、除法和平方根的带检查定义域、基于 linear-algebra 向量的梯度和雅可比矩阵,以及 luna-poly 多项式的导数。
本手册对应 MoonBit 0.10 上的 0.2.0 版本。
包
| 包 | 导入路径 | 作用 | 页面 |
|---|---|---|---|
autodiff | Luna-Flow/autodiff | 一站式门面包:Dual、diff、value_and_diff 以及重新导出的 trait | API · 教程 · 设计 |
dual | Luna-Flow/autodiff/dual | Dual[T] 类型及其算术运算、规则和实例 | API · 教程 · 设计 |
forward | Luna-Flow/autodiff/forward | 标量驱动函数 diff 与 value_and_diff | API · 教程 · 设计 |
core | Luna-Flow/autodiff/core | 代数门面包:Dual 与 luna-generic 结构 trait | API · 教程 · 设计 |
elementary | Luna-Flow/autodiff/elementary | 解析门面包:Dual 与 arithmetic 函数 trait | API · 教程 · 设计 |
checked | Luna-Flow/autodiff/checked | 带检查的门面包:DivChecked、SqrtChecked、上下文与错误 | API · 教程 · 设计 |
linalg | Luna-Flow/autodiff/linalg | 基于 linear-algebra/immut 的梯度与雅可比矩阵 | API · 教程 · 设计 |
poly | Luna-Flow/autodiff/poly | luna-poly 稠密多项式与一元稀疏多项式的导数 | API · 教程 · 设计 |
另有两个包没有手册页面。examples 包含五个小函数(basic_diff_example、square_diff_example、gradient_example、jacobian_example、polynomial_derivative_example),用几行代码展示每一层;请阅读 src/examples/examples.mbt。tests 是所有包的黑盒测试套件,其中包括 linear-algebra 和 luna-poly 的集成测试。架构指南 展示了各包之间的依赖关系,仓库约定 记录了本手册的命名规则。
阅读路径
初次接触自动微分。 从 autodiff 教程 开始,然后阅读 dual 教程,其中将对偶数与有限差分进行了比较。
使用本库。 导入 Luna-Flow/autodiff,并将 autodiff API 和 dual API 放在手边;涉及向量和多项式时再阅读 linalg 教程 或 poly 教程,需要把失败作为值处理时阅读 checked 教程。
参与贡献。 阅读 dual 设计,了解每个新运算都必须遵守的代数结构、求导规则和误差界,然后阅读 架构指南 以及你要修改的包的设计页面。
安装
moon add Luna-Flow/autodiff@0.2.0
桥接包还需要相应的库:linalg 需要 moon add Luna-Flow/linear-algebra,poly 需要 moon add Luna-Flow/luna-poly。
工具链
本手册中的代码和示例需要 MoonBit moonc 0.10 或更高版本,以及 moon.mod / moon.pkg 清单格式。测试套件在 wasm-gc、wasm、js 和 native 目标上运行。
验证
moon check --target all
./run_test.sh
moon info