自動微分
📂機械学習自動微分
정의
自動微分automatic differentiationとは、コンピュータプログラムのコードで定義された関数の導関数を求める方法のことを指す。AD、autodiffなどと略されることもある。
説明
自動微分とは、すでに導関数が知られている関数の合成関数の導関数を連鎖律を利用して求めることを指す。簡単に言えば、連鎖律そのものである。連鎖律をプログラムコードで実装したのが自動微分であり、したがって自動微分は微分を数値的に近似する方法とは異なり、微分係数を正確に計算する。ディープラーニングでは誤差逆伝播を用いてニューラルネットワークを最適化する際に使われる。以下の説明を見ると分かるように、自動微分は実際には導関数を計算しない。ただ、すでに知っている導関数を順次加算したり乗算したり、合成するだけである。
計算方法に応じて、大きく前進モードforward modeと後退モードreverse modeに分けられる。
f:Rn→Rについて
次のような二変数関数fが与えられたとしよう。
f(x1,x2)=x1x2+sin(x1)+2(x1)2
偏導関数∂x1∂fは次のように計算される。
∂x1∂f=∂x1∂(x1x2)+∂x1∂sin(x1)+2(x1)2
このとき各項は以下のようにすでに知っている値である。
∂x1∂(x1x2)=x2,∂x1∂sin(x1)=cos(x1),∂x1∂2(x1)2=4x1
つまり、x1とx2の値が決まれば微分係数はすぐに決定されるのであり、これをプログラムコードで実装しようとすると次のようになる。
前進モード
w1=x1、w2=x2とおいて(x1,x5)=(2,5)のとき、fの微分係数∂x1∂f(2,5)を求めてみよう。加算したり乗算したり、ある関数に適用するたびに導関数を記録していけばいい。∂x1∂w=w˙と表記しよう。
Forward calulationsw1=x1=2w2=x2=5w3=w1w2=10w4=sin(w1)=sin2w5=(w1)2=4w6=2w5=8w7=w3+w4+w6=10+sin2+8=yDerivativesw˙1=1w˙2=0w˙3=w2=5w˙4=cos2w˙5=2w1=4w˙6=2w˙5=8w˙7=w˙3+w˙4+w˙6=5+cos2+8=y˙
したがって∂x1∂f(2,5)=y˙=cos2+13となる。w7を計算する過程でx2に対する微分も記録しておけば、勾配∇f=[∂x1f∂x2f]Tを得ることができる。
関連項目