🔍

数値微分

に公開

数値微分とは 微分の近似値を得る こと。これに対して普通に微分することを 解析的に解く と言い、解析的に解いた微分は「真の微分」という。

なぜ近似値が欲しいか

真の微分値を得ることが難しいから。主な利用シーンは以下。

  • コンピュータで簡易なアルゴリズムで微分したい
    • ソフトウェアアルゴリズムで代数的な(式変形しつつ極限の式を解く)アプローチを実装するのはハード

例えばニューラルネットワークの学習(勾配法)においては、実行時には計算グラフの逆伝播により微分値を計算し、その実装テストとして数値微分を利用するらしい。

数値微分の方法

まず、微分(=導関数を求める)の定義は以下。

\text{定義 :} \quad f(x) \text{ の導関数 } \displaystyle f'(x)=\lim_{h \to 0}\frac{f(x+h)-f(x)}{h}

この式を、わりと力技というかそんな安直でいいの?感のある方法で解く。

  • この極限の式の h に小さい実数を入れて計算しちゃう。
    • コンピュータの場合、浮動小数点による誤差が問題になりにくい範囲で小さい数値を使う。
    • 具体的には 10^{-4} くらいを使うらしい。
  • そのままだと x から x+h の範囲の傾きになってしまう。本来欲しい傾きは x の点なので、 x が中心に来るように x-h から x+h の範囲の傾きを求める。具体的には f(x+h)-f(x) の代わりに f(x+h)-f(x-h) を用いる。
    • xx+h の差分を 前方差分 と呼ぶ。
    • x-hx+h の差分を 中心差分 と呼ぶ。
    • 中心差分の場合、分子(= y の増加量)が前方+後方で倍になっているので、分母(= x の増加量)を h から 2h に変更する。

実際に解く

f(x) = x^2 について x=3 の点の傾きを数値微分で求める。 h=10^{-4} を用いる。

\begin{align*} \frac{f(x+h)-f(x-h)}{2h} &= \frac{(3+10^{-4})^2-(3-10^{-4})^2}{2 \times 10^{-4}} &= 6 \end{align*}

今回は単純な関数のため、真の微分値と一致した。

Discussion