自動微分とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > 自動微分の意味・解説 

自動微分

(Automatic Differentiation から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/07/17 14:02 UTC 版)

自動微分(じどうびぶん、: automatic differentiation, autodiff, AD)やアルゴリズム微分: algorithmic differentiation)とは、プログラム定義された関数解析し、関数の値と同時に偏導関数の値を計算するアルゴリズムである。

自動微分は複雑なプログラムであっても加減乗除などの基本的な算術演算や基本的な関数(指数関数対数関数三角関数など)のような基本的な演算の組み合わせで構成されていることを利用し、これらの演算に対して合成関数の偏微分の連鎖律を繰り返し適用することによって実現される。自動微分を用いることで偏導関数値を少ない計算量で自動的に求めることができる。

他の微分方式との違い

図1: 自動微分と記号微分の関係

自動微分は以下のどちらとも異なる。

記号微分は効率が悪くなりやすく、プログラムで定義された関数から微分表現を導くのは困難であるという問題がある。一方、数値微分では離散化の際の丸め誤差や桁落ちによる精度の低下が問題である。さらに、どちらの手法も計算量や誤差の関係で高次の微分係数を求めることが難しい。また、勾配を用いた最適化で必要となる、多くの入力変数を持つ関数に対する偏微分値の計算を行うには速度が遅い。自動微分はこれらの古典的手法の問題を解決する。[1]

また、自動微分は計算フローを追いかけることで計算できるので、分岐(if文)やループや再帰を含むようなアルゴリズムでも偏微分できる[1]

合成関数の偏微分の連鎖律

自動微分の基本原理は、合成関数の偏微分連鎖律を用いた偏微分の分解である。

合成関数の偏微分の連鎖律とは

図2: ボトムアップ型自動微分の計算グラフの例

例として次の関数を考える。

図3: トップダウン型自動微分の計算グラフの例

トップダウン型自動微分を用いて偏導関数値を計算するための演算は以下の通りである(関数値を求める時と順番が逆であることに注意)。

図4: ソースコード変換の動作例

関数値を求める関数を記述した元のソースコードから、偏導関数値を計算する処理を含んだプログラムを自動的に生成する手法である。ソースコード変換はあらゆるプログラミング言語で実装でき、コンパイル時の最適化を行いやすいが、自動微分ツールの作成は難しい。

オペレータオーバーローディング

図5: オペレータオーバーローディングの動作例

この手法は演算子のオーバーロードがサポートされているプログラミング言語で記述されたソースコードに対してのみ適用可能である。元のソースコードの流れを大きく変更することなく実現できるが、基本データ型の変更などの小さな変更は必要である。

ボトムアップ型自動微分をオペレータオーバーロードで実現するのは容易である。トップダウン型自動微分についても可能であるが、現状のコンパイラではボトムアップ型自動微分と比べると最適化の面で不利である。

ソフトウェア

自動微分を実装したライブラリなどのソフトウェアが多数存在する。2010年代の第3次人工知能ブームの際にディープラーニングに自動微分が必要なため、TensorFlowPyTorchなどトップダウン型の自動微分を含むライブラリが多数作られた。

脚注

  1. ^ a b Automatic Differentiation in Machine Learning: a Survey
  2. ^ 連鎖律(多変数関数の合成関数の微分) | 高校数学の美しい物語
  3. ^ 合成関数の偏微分における連鎖律(チェインルール)とその証明 | 数学の景色
  4. ^ a b R.E. Wengert (1964). “A simple automatic derivative evaluation program”. Comm. ACM 7: 463–464. doi:10.1145/355586.364791. https://dl.acm.org/doi/10.1145/355586.364791. 
  5. ^ Andreas Griewank (2012). “Who Invented the Reverse Mode of Differentiation”. Optimization Stories, Documenta Matematica Extra Volume ISMP: 389–400. https://www.math.uni-bielefeld.de/documenta/vol-ismp/52_griewank-andreas-b.pdf. 
  6. ^ Bartholomew-Biggs, Michael; Brown, Steven; Christianson, Bruce; Dixon, Laurence (2000). “Automatic differentiation of algorithms”. Journal of Computational and Applied Mathematics 124 (1-2): 171-190. doi:10.1016/S0377-0427(00)00422-2. https://www.sciencedirect.com/science/article/pii/S0377042700004222. 
  7. ^ autograd/tutorial.md at master · HIPS/autograd
  8. ^ Derivatives in Theano — Theano 1.1.2+29.g8b2825658.dirty documentation
  9. ^ 2104.00219 Fast Jacobian-Vector Product for Deep Networks
  10. ^ Pearlmutter, Barak A. (1994-01-01). “Fast Exact Multiplication by the Hessian”. Neural Computation 6 (1): 147-160. doi:10.1162/neco.1994.6.1.147. 
  11. ^ HIPS/autograd: Efficiently computes derivatives of numpy code.
  12. ^ Conv2d — PyTorch 2.3 documentation”. pytorch.org. 2024年7月2日閲覧。
  13. ^ MaxPool2d — PyTorch 2.3 documentation”. pytorch.org. 2024年7月6日閲覧。

参考文献

外部リンク




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「自動微分」の関連用語

自動微分のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



自動微分のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの自動微分 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS