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)}} $$