LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

自動微分

自動微分(じどうびぶん、アルゴリズム的微分とも)とは、プログラムで定義された関数を解析し、偏導関数の値を計算するプログラムを導出する技術である。自動微分は複雑なプログラムであっても加減乗除などの基本的な算術演算や基本的な関数(指数関数・対数関数・三角関数など)のような基本的な演算の組み合わせで構成されていることを利用し、これらの演算に対して連鎖律を繰り返し適用することによって実現される。自動微分を用いることで偏導関数値を少ない計算量で自動的に求めることができる。自動微分はのどちらとも異なる。数式微分は効率が悪くなりやすく、プログラムで定義された関数から微分表現を導くのは困難であるという問題がある。一方、数値微分では離散化の際の丸め誤差や桁落ちによる精度の低下が問題である。さらに、どちらの手法も計算量や誤差の関係で高次の微分係数を求めることが難しい。また、勾配を用いた最適化で必要となる、多くの入力変数を持つ関数に対する偏微分値の計算を行うには速度が遅い。自動微分はこれらの古典的手法の問題を解決する。英語では Automatic differentiation (あるいは単に AD) と呼ばれる。自動微分の基本原理は連鎖律を用いた微分の分解である。たとえば、簡単な合成関数である に対して連鎖律を適用するとを得る。自動微分は大きく2種類に分けられ、それぞれボトムアップ型自動微分(フォーワードモード、狭義の自動微分)とトップダウン型自動微分(リバースモード、高速自動微分)と呼ばれる。ボトムアップ型自動微分では連鎖律を内側から外側に計算し(を計算した後で を計算する)、トップダウン型自動微分では外側から内側に計算する。ボトムアップ型自動微分では最初に微分を行う入力変数を固定し、それぞれの部分式を再帰的に計算する。手計算においては連鎖律において内側の関数を繰り返し置き換えていくことに相当する。多変数の場合はヤコビ行列の積として一般化できる。トップダウン型自動微分と比較すると、ボトムアップ型自動微分は自然であり、微分に関する情報の流れが計算の順序と一致するため簡単に実行できる。それぞれの変数にその偏導関数値の計算値を保存する領域を付け加えるだけで、変数値の計算と同時に偏導関数値を計算することができる。例として次の関数を考える。簡単のためそれぞれの部分式を としてラベル付けした。どの入力変数で微分するかによって や の初期値が異なる。 に関する微分をそのつど計算する場合の初期値は、となる。初期値が決まったら下の表に示す連鎖律に従って各偏導関数値を順に計算していく。図2はこの処理を計算グラフとして表している。この関数に対する勾配を求めるためにはだけではなくに関する偏導関数値も求める必要がある。そのため、初期値をformula_7 とした同様の計算を追加で行わなければならない。ボトムアップ型自動微分を1回行うのに必要な計算量は、元のプログラムの計算量に比例する。勾配を求める場合に必要なボトムアップ型自動微分の実行回数は入力変数の個数と等しく、トップダウン型自動微分では出力変数の個数に等しい。そのため、微分する関数 が を満たす場合、ボトムアップ型自動微分はトップダウン型自動微分よりも効率的である。トップダウン型自動微分では、はじめに微分される出力変数を固定して、それぞれの部分式に関する偏導関数値を再帰的に計算する。手計算においては部分式を連鎖律における外側の関数の微分で繰り返し置き換えていくことに相当する。トップダウン型自動微分において、求める値は随伴であり、上線()で表す。これは選択された出力変数のに関する微分である。トップダウン型自動微分は連鎖律を外側から内側(図3の計算グラフでは上から下)にたどっていく。例示した関数は1変数関数なので、勾配を計算するには計算グラフを一度たどるだけでよい。これは2回計算グラフをたどる必要があったボトムアップ型自動微分の計算量の半分である。しかし、トップダウン型自動微分は中間変数 を保存するための領域と、1964年に R.E. Wengert が発表した Wengert リスト(テープとも呼ばれる) というデータ構造に中間変数を保存するための命令が必要となるためメモリ使用量の点で不利であり、計算グラフが巨大になるとメモリ使用量が問題となる可能性がある。この問題は保存する中間変数を限定し、必要な中間変数を再計算することによって軽減される。トップダウン型自動微分を用いて偏導関数値を計算するための演算は以下の通りである(関数値を求める時と順番が逆であることに注意)微分する関数 が を満たすとき、トップダウン型自動微分はボトムアップ型自動微分よりも効率的である。機械学習で用いられる多層パーセプトロンのバックプロパゲーション はトップダウン型自動微分の特殊なケースである。ボトムアップ型自動微分は二重数を用いることで計算できる。詳細は英語版を参照のこと。自動微分の実装方法には大きく分けて、ソースコードの変換とオペレータオーバーローディングによる方法の2つがある。関数値を求める関数を記述した元のソースコードから、偏導関数値を計算する処理を含んだプログラムを自動的に生成する手法である。ソースコード変換はあらゆるプログラミング言語で実装でき、コンパイル時の最適化を行いやすいが、自動微分ツールの作成は難しい。この手法は演算子のオーバーロードがサポートされているプログラミング言語で記述されたソースコードに対してのみ適用可能である。元のソースコードの流れを大きく変更することなく実現できるが、基本データ型の変更などの小さな変更は必要である。ボトムアップ型自動微分をオペレータオーバーロードで実現するのは容易である。トップダウン型自動微分についても可能であるが、現状のコンパイラではボトムアップ型自動微分と比べると最適化の面で不利である。自動微分を実装したライブラリなどのソフトウェアが存在する。詳細は英語版を参照のこと。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。