autodiff

Luna-Flow/autodiff 通过前向模式自动微分计算普通 MoonBit 程序的精确一阶导数。针对 Luna Flow trait 编写的程序在满足 ε2=0\varepsilon^2 = 0 的对偶数 a+bεa + b\varepsilon 上运行,导数就出现在 ε\varepsilon 分量中。本仓库提供对偶数类型、标量驱动函数、除法和平方根的带检查定义域、基于 linear-algebra 向量的梯度和雅可比矩阵,以及 luna-poly 多项式的导数。

本手册对应 MoonBit 0.10 上的 0.2.0 版本。

包

包导入路径作用页面
autodiffLuna-Flow/autodiff一站式门面包:Dual、diff、value_and_diff 以及重新导出的 traitAPI · 教程 · 设计
dualLuna-Flow/autodiff/dualDual[T] 类型及其算术运算、规则和实例API · 教程 · 设计
forwardLuna-Flow/autodiff/forward标量驱动函数 diff 与 value_and_diffAPI · 教程 · 设计
coreLuna-Flow/autodiff/core代数门面包:Dual 与 luna-generic 结构 traitAPI · 教程 · 设计
elementaryLuna-Flow/autodiff/elementary解析门面包:Dual 与 arithmetic 函数 traitAPI · 教程 · 设计
checkedLuna-Flow/autodiff/checked带检查的门面包:DivChecked、SqrtChecked、上下文与错误API · 教程 · 设计
linalgLuna-Flow/autodiff/linalg基于 linear-algebra/immut 的梯度与雅可比矩阵API · 教程 · 设计
polyLuna-Flow/autodiff/polyluna-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