autodiff

Luna-Flow/autodiff は、フォワードモード自動微分によって通常の MoonBit プログラムの正確な 1 階導関数を計算します。Luna Flow のトレイトに対して書かれたプログラムを ε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、再エクスポートされたトレイトAPI · チュートリアル · 設計
dualLuna-Flow/autodiff/dualDual[T] 型とその算術、規則、インスタンスAPI · チュートリアル · 設計
forwardLuna-Flow/autodiff/forwardスカラードライバー diff と value_and_diffAPI · チュートリアル · 設計
coreLuna-Flow/autodiff/core代数的ファサード:Dual と luna-generic の構造トレイトAPI · チュートリアル · 設計
elementaryLuna-Flow/autodiff/elementary解析的ファサード:Dual と arithmetic の関数トレイトAPI · チュートリアル · 設計
checkedLuna-Flow/autodiff/checkedチェック付きファサード:DivChecked、SqrtChecked、コンテキストとエラーAPI · チュートリアル · 設計
linalgLuna-Flow/autodiff/linalglinear-algebra/immut 上の勾配とヤコビ行列API · チュートリアル · 設計
polyLuna-Flow/autodiff/poly密な多項式と 1 変数の疎な多項式(luna-poly)の導関数API · チュートリアル · 設計

さらに 2 つのパッケージにはマニュアルのページがありません。examples には各レイヤーを数行で示す 5 つの小さな関数(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