高速自動微分法

作成日 : 2001-06-26
最終更新日 :

高速自動微分の意味

これから記すことも私自身理解していないことだらけだ。 しかし、「理解していない」と書くことも有意義なのではないかと思っている。

計算機というからには、数値処理が主である、と思う方はもういないだろう。 記号処理、というのも古いだろう。もちろん、図形処理もある。 その他なんでも、とにかくコンピュータで処理できるものをすべて処理してしまう、 処理できる性質の何かを増やそう、そういうどん欲な道を突き進んで来たのが計算機科学・工学の 進歩だったといえる。

ただ、そのような進歩は一つの対象を奥深く極めるという意味では大きかったが、 対象どうしの関連性の追求という意味はあまり結果が得られなかった。 しかし、計算機でいろいろなことができるようになった。そのことが、 複数の対象の関連ということになっている。

別のページで触れた計算幾何学というのは、図形処理と数値処理の見事な融合といえるだろう。 同じように、記号処理と数値処理の見事な融合の例といえるのが、高速自動微分法である。

高速自動微分の話をする前に、自動微分とは何か、まとめておく。 自動微分とは、数値微分に対応することばである。 一般に、関数の微分の値を求めるとき、 明示的かつ機械的に導関数を求めることができない場合がある。このときは、 数値的に求めることになる。すなわち、関数 f(x) の x = a における微分の値を求めるために、 なるべく小さな数 h を定め、(f(a + h) - f(a)) / h を計算する。これを数値微分という。 一方で、自動微分とは、関数を求めるアルゴリズムを解析して微分の値を求めることである。 なお、自動微分、数値微分という分類にはもう一つ、数式微分ということばもある。 これは、数式処理システムを用いて導関数を求めて微分の値を求めることである。

自動微分には2種類ある。ボトムアップ型とトップダウン型である。 ボトムアップ型は、変数の個数に比例する記憶領域で実現できることに特徴がある。 トップダウン型は、関数値だけを計算する量に比例する計算量で計算できることに特徴がある。 トップダウン型の自動微分を、高速自動微分という。高速、という名前の由来は、 時間計算量の手間が関数値計算量の定数倍で押さえられることからきている。

なお、日本国内には自動微分に関する情報が WEB 上では少ない。 英語では自動微分のことを Automatic Differentiation や Computational Differentiation というので、 これらをキーワードとして探してみられることを勧める。

高速自動微分法の実装

では、高速自動微分を実装できればいいのだが、私には難しすぎる。 コロナ社から出ている「アルゴリズムの自動微分と応用」という成書を参考にして、 実装されてみることをお勧めする。期待をされていた方には申し訳ないが、 御寛恕を乞う。

といっただけでお茶を濁すのはよくないので、ごく一部だけ調べてみた結果を示す。 Horner 法による多項式計算に対して高速自動微分法を適用した結果を、 JavaScript のページに載せた。 ここで示すのは、高速化という観点より、 むしろ高速自動微分の副産物である計算の丸め誤差が推定できる、という点である。 場所は 沢口法と高速自動微分にある。 このような実践を通じて、計算の品質という考え方が浸透してくるものと思われる。

まりんきょ学問所品質の部屋 > 高速自動微分法


MARUYAMA Satosi