web-dev-qa-db-ja.com

記号微分と自動微分の違いは?

その違いが理解できないようです。私にとっては、どちらも式を通過してチェーンルールを適用するだけのように見えます。何が欠けていますか?

17
Moody

導関数を計算するには、3つの一般的な方法があります。

  1. 数値微分
  2. 象徴的な差別化
  3. 自動微分

数値微分 は導関数の定義に依存します: enter image description here 、ここで非常に小さいhを配置し、2つの場所で関数を評価します。これは最も基本的な式であり、実際には推定誤差が少ない他の式を使用します。この導関数の計算方法は、関数がわからず、サンプリングしかできない場合に適しています。また、高次元関数の計算には多くの時間が必要です。

記号による微分 数式を操作します。これまでにmatlabまたはmathematicaを使用したことがある場合、あなたは このようなものを見たenter image description here

ここでは、すべての数式について導関数を知っており、さまざまな規則(積規則、連鎖規則)を使用して結果の導関数を計算します。次に、終了式を単純化して、結果の式を取得します。

自動微分 コンピュータプログラムのブロックを操作します。微分器には、プログラムの各要素の導関数を取るためのルールがあります(コアTFで演算を定義するときは、この演算に対して 勾配を登録 する必要があります)。また、チェーンルールを使用して、複雑な式をより単純な式に分解します。これが 実際のTFプログラムでどのように機能するかを示す良い例です .


自動微分はシンボリック微分と同じであると考えるかもしれません(ある場所では数式で演算し、別の場所ではコンピュータープログラムで演算します)。そして、はい、それらは時々非常に似ています。しかし、制御フローステートメント( `if、while、ループ)の場合、結果は非常に大きくなる可能性があります 異なる

記号による区別は、コードを非効率的にし(注意深く行わない限り)、コンピュータープログラムを単一の式に変換することが困難に直面します。

15
Salvador Dali

自動微分と記号微分は異なるというのが一般的な主張です。ただし、これは正しくありません。フォワードモードの自動微分と記号微分は、実際には同等です。こちらをご覧ください

つまり、どちらも式グラフの入力変数から出力変数への連鎖規則を適用します。シンボリック微分は、数式とコンピュータプログラムの自動微分に作用するとよく言われます。結局、それらは実際には両方とも式グラフとして表されます。

一方、自動微分はさらに多くのモードを提供します。たとえば、出力変数から入力変数にチェーンルールを適用する場合、これは逆モード自動微分と呼ばれます。

6
Soeren

"私にとっては、式を実行してチェーンルールを適用するように見えます。何が欠けているのですか?"

不足しているのはADが数値を処理するであるのに対し、記号微分はそれらの値を表す記号を処理することです。これを具体化する簡単な例を見てみましょう。

式y = x ^ 2の導関数を計算するとします。

記号による微分を行っている場合は、記号xから始めて、それを2乗してy = x ^ 2を取得します。次に、連鎖規則を使用して、派生dy/dx = 2xであることを確認します。ここで、x = 5の導関数が必要な場合、それを式にプラグインして、導関数を取得できます。しかし、導関数の式があるので、チェーンルールの計算を繰り返さなくても、xの任意の値を接続して導関数を計算できます。

自動微分を行っている場合は、x = 5の値から始めて、y = 5 ^ 2 = 25を計算し、導関数をdy/dx = 2 * 5 = 10として計算します。値を計算し、デリバティブ。しかし、私はx = 4での微分の値について何も知りません。 x = 4で微分を取得するには、x = 4でプロセスを繰り返す必要があります。

0
Nick McGreivy