vgvassilev/clad

clad -- automatic differentiation for C/C++

何を解決するか

Clad は C++ 用の自動微分 (AD) を提供し、数学関数の導関数を自動的に C++ コードとして生成できるようにします。これにより、複雑な関数の勾配、ヘッセ行列、ヤコビ行列を手動で導出・コーディングする必要がなくなり、しばしば誤りが生じやすく、面倒な作業を回避できます。

動作方法

Clad は Clang コンパイラのプラグインとして実装されており、LLVM コンパイラインフラストラクチャに基づいています。ソース変換を使用して C++ ソースコードを分析し、導関数に対応する C++ コードを自動生成します。前向きモードと後向きモードの両方の AD をサポートしており、高階導関数の計算には両者の組み合わせも可能です。

対象ユーザー

最適化、機械学習、科学計算において数学関数の導関数を計算する必要がある C++ 開発者や研究者、またプログラム内の浮動小数点誤差を推定したいユーザー向けです。

特徴

  • 複数の AD モード: 勾配、ヘッセ行列、ヤコビ行列の計算に前向きモード、後向きモード、および組み合わせモードをサポート。
  • 包括的な API: clad::differentiate、clad::gradient、clad::hessian、clad::jacobian などの専用関数を提供。
  • 浮動小数点誤差推定: プログラムの浮動小数点誤差を計算する専用ツール (clad::estimate_error) を搭載。
  • コンパイラ統合: Clang プラグインとして動作可能。xeus-cpp カーネルを介して Jupyter Notebook 内でも利用可能。
  • C++ 機能対応: 現代的な C++ 機能の広範なカバーと、堅牢なフォールバックおよび回復システムを備えています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト