自動微分
自動微分は以下のどちらとも異なる。
記号微分・数式微分(symbolic differentiation) - 原関数を表す数式から数式処理により導関数を導出する。数式処理システムで実装されている。
数値微分(numerical differentiation) - 原関数の値から数値的に微分係数を算出する
記号微分は効率が悪くなりやすく、プログラムで定義された関数から微分表現を導くのは困難であるという問題がある。一方、数値微分では離散化の際の丸め誤差や桁落ちによる精度の低下が問題である。さらに、どちらの手法も計算量や誤差の関係で高次の微分係数を求めることが難しい。また、勾配を用いた最適化で必要となる、多くの入力変数を持つ関数に対する偏微分値の計算を行うには速度が遅い。自動微分はこれらの古典的手法の問題を解決する。
また、自動微分は計算フローを追いかけることで計算できるので、分岐(if文)やループや再帰を含むようなアルゴリズムでも偏微分できる。
多変数関数は、方向微分作用素を用いることで、一変数関数の場合と同様の効率と仕組みで取り扱える。つまり、 f : R n → R m {\displaystyle f:\mathbb {R} ^{n}\rightarrow \mathbb {R} ^{m}} の x ∈ R n {\displaystyle x\in \mathbb {R} ^{n}} における x ′ ∈ R n {\displaystyle x'\in \mathbb {R} ^{n}} 方向微分 y ′ = ∇ f ( x ) ⋅ x ′ {\displaystyle y'=\nabla f(x)\cdot x'} を計算したい場合、それは ( ⟨ y 1 , y 1 ′ ⟩ , ... , ⟨ y m , y m ′ ⟩ ) = f ( ⟨ x 1 , x 1 ′ ⟩ , ... , ⟨ x n , x n ′ ⟩ ) {\displaystyle (\langle y_{1},y'_{1}\rangle ,\ldots ,\langle y_{m},y'_{m}\rangle )=f(\langle x_{1},x'_{1}\rangle ,\ldots ,\langle x_{n},x'_{n}\rangle )} を上と同様の算術を使って計算すればよい。もし ∇ f {\displaystyle \nabla f} の全ての要素が望みならば、 n {\displaystyle n} 個の関数評価が要求される。ここで、多くの最適化アプリケーションでは、実際には方向微分があれば十分である。