t_wの輪郭

まだ導出途中

Cartesian Genetic Programmingの模式図

準備

記号の準備

入力層の出力:\( x_i \)
中間層の出力:\( y_j = f_j(x_{o(j)}, x_{p(j)}, a_j) \)
出力層の出力:\( z_k = g_k(y_{m(k)}, y_{n(k)}, b_k) \)

\(z_k\)の入力1:\(y_{m(k)}\)
\(z_k\)の入力2:\(y_{n(k)}\)

\(y_j\)の入力1:\(x_{o(j)}\)
\(y_j\)の入力2:\(x_{p(j)}\)

中間層のj番目のノードが持つ関数:\(f_j\)
出力層のk番目のノードが持つ関数:\(g_k\)

中間層のj番目のノードが持つ定数:\(a_j\)
出力層のk番目のノードが持つ定数:\(b_k\)

出力層の出力と教師信号からなる損失関数:\(E\)

ゴール

損失関数について中間層のj番目のノードが持つ定数\(a_j\)と出力層のk番目のノードが持つ定数\(b_k\)で微分


損失関数\(E\)を出力層の入力値で微分

$$ \frac{\partial z_k}{\partial y_{m(k)}} = \frac{\partial g_k(y_{m(k)}, y_{n(k)}, b_k)}{\partial y_{m(k)}} $$
$$ \frac{\partial z_k}{\partial y_{n(k)}} = \frac{\partial g_k(y_{m(k)}, y_{n(k)}, b_k)}{\partial y_{n(k)}}$$
$$ \frac{\partial z_k}{\partial b_k} = \frac{\partial g_k(y_{m(k)}, y_{n(k)}, b_k)}{\partial b_k}$$

$$ \frac{\partial E}{\partial y_{m(k)}} = \frac{\partial E}{\partial z_k} \frac{\partial z_k}{\partial y_{m(k)}}$$
$$ \frac{\partial E}{\partial y_{n(k)}} = \frac{\partial E}{\partial z_k} \frac{\partial z_k}{\partial y_{n(k)}}$$
$$ \frac{\partial E}{\partial b_k} = \frac{\partial E}{\partial z_k} \frac{\partial z_k}{\partial b_k}$$

\( \frac{\partial E}{\partial z_k} \)の値はいい感じにプログラマが計算して与えるものとする。損失関数を数値微分しても良い。

損失関数\(E\)を中間層の入力値で微分

\(j = m(k)\)あるいは\(j = n(k)\)のときの\(\frac{\partial E}{\partial y_j}\)についてはすでに上にて計算済みであり、使いまわすことができる。

$$ \frac{\partial y_j}{\partial x_{o(j)}} = \frac{\partial f_j(x_{o(j)}, x_{p(j)}, a_j)}{\partial x_{o(j)}} $$
$$ \frac{\partial y_j}{\partial x_{p(j)}} = \frac{\partial f_j(x_{o(j)}, x_{p(j)}, a_j)}{\partial x_{p(j)}} $$
$$ \frac{\partial y_j}{\partial x_{o(j)}} = \frac{\partial f_j(x_{o(j)}, x_{p(j)}, a_j)}{\partial a_j} $$
$$ \frac{\partial E}{\partial x_{o(j)}} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial x_{o(j)}} = \frac{\partial E}{\partial y_j} \frac{\partial f_j(x_{o(j)}, x_{p(j)}, a_j)}{\partial x_{o(j)}} $$
$$ \frac{\partial E}{\partial x_{o(j)}} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial x_{o(j)}} $$
$$ \frac{\partial E}{\partial x_{o(j)}} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial x_{o(j)}} $$

あれ

2023/8/26 16:25:00

Cartesian Genetic Programmingにおける誤差逆伝播法の導出は実質的には、ただの一般化した(ニューラルネットワークに特化しない)誤差逆伝播法の導出になりそう。
なので、「Cartesian Genetic Programmingにおける誤差逆伝播法の導出をやるより先に、微分の連鎖律を用いた誤差逆伝播法の導出をやったほうがコスパが良さそう。」と思われたが、一緒にやっても多分大丈夫。

あれ

2023/9/6 2:16:00

Cartesian Genetic Programmingっていう計算のネットワークを自然淘汰によって学習させる手法があるんだけど、それに誤差逆伝播法いれて微調整的に定数を出力するノードを学習させたれとしており、そもそも局所最適解に収束するかどうかすらわからんみたいなところがある。

めちゃくちゃにうまく行けば、これまでの機械学習モデルよりも遥かに小規模なモデルで、CPUでの高速な推論が可能になる。最終的には数式を吐き出す。