数式微分

$f^\prime(x)$ を直接求める手法

自動微分

f(a) を計算すると同時に f’(a) の計算を行うためのアルゴリズム

$f^\prime(a)$ を直接求める手法

$R^n \to R^m$

計算グラフ、DAG

問題設定

入力変数 $x_1, x_2$ に対して以下の関数を考えます。

$$ y = \ln x_1 + x_1x_2 - \sin x_2 $$

このときに、

$$ \left.\frac{\partial y}{\partial x_1} \right|_{x_1=a,~x_2=b} $$

$$ \left.\frac{\partial y}{\partial x_2} \right|_{x_1=a,~x_2=b} $$

の勾配を求めるような問題を考えます。以下では $x_1=2, x_2=5$ とします。

数式微分

まずこれまでの様に数式で導関数を算出し1、そのあとに $x_1=2, x_2=5$ を代入して勾配を求める手法を採ります。この手法は数式微分(記号微分とも、symbolic differentiation)と呼ばれる手法です。

$$ \begin{aligned} \frac{\partial y}{\partial x_1} &= \frac{1}{x_1} + x_2 \\ \frac{\partial y}{\partial x_2} &= x_1 - \cos x_2 \end{aligned} $$

以上より、

$$ \left.\frac{\partial y}{\partial x_1}\right|_{x_1=2,~x_2=5} = 1/2 + 5 = 5.5 $$

$$ \left.\frac{\partial y}{\partial x_2}\right|_{x_1=2,~x_2=5} = 2 - \cos 5 = 1.716 $$

と求まります。

自動微分

以上の数式微分や数値微分をより効率化しようとして研究されているものが自動微分(auto differentiation)と呼ばれる手法です。この手法は forward mode (bottom up) と reverse mode (top down) と呼ばれる二種類の方法があります。

連鎖律 (chain rule)

普段微分計算を行うときには、もはや chain rule を強く意識することはないと思います。

Forward mode

1回の forward pass で、その変数 $x_1$ に対する出力変数の微分 $y_1, …, y_m$ を求めることができる。これを入力変数分繰り返せば、$n$ 回でヤコビ行列を作成することができる。

Reverse mode

参考文献

http://www.kashi.info.waseda.ac.jp/~kashi/lec2021/nad/autodif-slide-j.pdf


  1. 「これまでの」とは人によって定義がかなり異なるとは思いますが、紙とペンで微分計算を行っていたあの頃の延長線を考えます。 ↩︎