Machine Morning

機械学習やWebについて学んだことを記録しています。

自動微分とは

自動微分(Automatic Differentiation)とは関数を合成関数に分割し連鎖律(Chain rule)の方法で偏導関数値を求める方法である。複雑な数式も四則演算や指数関数、対数関数、三角関数などの基本的な関数の組み合わせでできているため、それらを分割することで一つ一つの簡単な過程を連鎖律の連続で解いていく。ニューラルネットワークの文脈では誤差逆伝播法(Backpropagation)のことをいう。

まず導関数の定義は以下の数式である。

 f'\left( x\right) =\lim _{h\rightarrow 0}\dfrac {f\left( x+h\right) -f\left( x\right) }{h}

理論上 hが小さければ小さいほど(0に近づけば近づくほど)偏導関数値の予測精度は向上するが、現実にコンピューターでこの問題を解くと、丸め誤差や打切り誤差によってあるところで精度が低下する。また f\left( x\right)の計算に時間がかかる場合は f\left( x+h\right)の計算にも大きな時間を要するため計算負荷が大きい。しかし自動微分では簡単な連鎖律の組み合わせのため計算負荷を小さくすることができる。

自動微分には大きく分けて2種類の方法がある。1つ目は前進法(Forward mode)、2つ目は後進法(Reverse mode)である。

前進法は連鎖律を内側から外側、すなわち入力から出力の方向に計算していく。一方で後進法は外側から内側、つまり出力から内側の方向に計算していく。

ニューラルネットワークでは出力層から入力層に向けて勾配を求めて誤差を逆伝播していくため、後進法で自動微分を行う。これを誤差逆伝搬法(Backpropagation)という。

参考

  1. 自動微分の基礎| GRC/ARCA Viewpoint | PwCあらた有限責任監査法人