【入門】多変量関数の連鎖律②【数値計算】

【入門】多変量関数の連鎖律②【数値計算】 数値計算
【入門】多変量関数の連鎖律②【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

の、

MATLAB,Python,Scilab,Julia比較 第4章 その40【多変量関数の連鎖律④】
MATLAB,Python,Scilab,Julia比較 第4章 その41【多変量関数の連鎖律⑤】
MATLAB,Python,Scilab,Julia比較 第4章 その42【多変量関数の連鎖律⑥】

を書き直したもの。

多変量関数の連鎖律の解説。
今回は以下の話。

  • 多変数関数の連鎖律
  • ニューラルネットワークを意識した場合
  • 学習データの多入力による暗黙的関数追加

【再掲】多変量関数の連鎖律を把握するための知識

とりあえず多変量関数の連鎖律を把握するための知識を再掲。

  • 合成関数(済)
  • 合成関数の微分(連鎖律)(済)
  • 多変数関数の連鎖律
  • 学習データの多入力による暗黙的関数追加

多変数関数の連鎖律とは?

前回、合成関数の微分(連鎖律)をやったので、
それの多変量化の話になる。

やることは一緒。
ただし数が増える。
であるが故に微分が偏微分になる。

偏微分は変な微分なイメージが強いかもしれないが、
複雑なものを簡単に解釈できるツールだと思ってもらった方が良い。
(複雑なものを簡単に解釈できるが故に複雑なシーンで利用されてるだけで・・・。)
とりあえず、ここでは普通の微分のつもりで見ておけばOK。

多変量と言っても、まずは2入力で考える。
実際、今回使用する単純パーセプトロンの入力も2つなので。

多変数関数の連鎖律

まずは、該当関数の構成を図示しよう。

多変量関数の連鎖律の構成図、x、y、u、v、A、∂u/∂x、∂v/∂y、∂A/∂u、∂A/∂v

\(x,y\)が入力で、\(g(),h()\)をて\(u,v\)となる、
\(f(u,v)\)を経て\(A\)になる。
って関数になる。

各所の偏微分がはっきりしていればあとは簡単。
連鎖律の理屈で繋げるだけ。
以下の数式になる。

\(
\begin{eqnarray}
\displaystyle \frac{A}{x}=\frac{A}{u}\frac{u}{x}\\
\displaystyle \frac{A}{y}=\frac{A}{v}\frac{v}{y}\\
\end{eqnarray}
\)

図と数式をセットにしてあると、
そんなもんかって程度になると思う。

というわけで、多変量になっても数が増えるだけってことだ。
ニューラルネットワークを想定した場合はもう少し複雑になるが。

ニューラルネットワーク的な感じで関数構成を書き直す

多変量関数の連鎖律をニューラルネットワークで想定した場合に少し厄介になる。

まずは、想定関数構成を見せよう。

ニューラルネットワークを想定した場合の多変量関数の連鎖律の構成、∂z1/∂w1、∂z2・∂w1、∂z1/∂w2、∂z2・∂w2、∂A/∂z1、∂A/∂z2、A

先ほどの図に似ているが、入力がそれぞれの関数に入ってる感じが違う点。
よって、連鎖律の経路が少し複雑になる。
加えて、ニューラルネットワークの場合、動かしたい値は入力ではなく、重みの方。
よって、重みが連鎖律に於ける入力になる。

と言っても基本的な考え方は変わらない。

ニューラルネットワーク的な感じで関数構成の連鎖律を数式で

先ほどの関数構成を元に連鎖律を書き出すと以下になる。

\(
\begin{eqnarray}
\displaystyle \frac{A}{w_1}=\frac{A}{z_1}\frac{z_1}{w_1}+\frac{A}{z_2}\frac{z_2}{w_1}\\
\displaystyle \frac{A}{w_2}=\frac{A}{z_1}\frac{z_1}{w_2}+\frac{A}{z_2}\frac{z_2}{w_2}\\
\end{eqnarray}
\)

\(w_1,w_2\)ともに\(z_1,z_2\)の経路を通るので、
それぞれの経路の連鎖律を合成すればOK。

「合成すればOK」な理由は、
それぞれの変化が求まるから、変化の合計がトータルの変化だから。

これがニューラルネットワークを想定した場合の多変量関数の連鎖律になる。

次のページへ

次のページでは、「学習データの多入力による暗黙的関数追加」の話

コメント

タイトルとURLをコピーしました