評価関数を階層型にしたい

タツでいつのまにか寝てた。喉が痛い(^^;


ニューラルネットワークの可能性
http://www.thinkit.co.jp/article/30/2/2.html
一般向けの記事なので読みやすい


階層型を学習するための学習則がバックプロゲーション


おさらいすると、ニューラルネットは、


z=f[Σwx]

とすると、発火敷居値(θ)として
※fはシグモイド関数


一層目、
H=f[Σwx-θ]
一層目を使って2層目、
O=f[ΣwH-θ]


E=1/2・Σ(t(i)-O)^2
2層目の出力と、教師信号t(eacher)の差の二乗が
EがErrorとして、二乗平均誤差となる


なお、
⊿w=-係数・dE/dw


誤差をwで微分した値をwから引いていけば、段々Eを少なくするwに収束していく
(誤差が減ると微分値も減るので)


2層目のwの収束は
⊿w(kj)=係数(t(k)-O(k))(k)O(1-O(k))H(j)
↑O(1-O)はOがシグモイドならシグモイドの微分のインパルス関数。教師と出力の差にインパルスと1層目の出力を乗算している
Hを除けばボナメソの微分値と似た構造(d(t-o)/dw(1-f(t-o))f(t-o)なのでちょっと違う)


1層目
⊿w(ji)=係数・X(i)H(j)(1-H(j))Σw(kj)(t(k)-O(k))O(k)(1-O(k))


要は、教師信号は出力層に対してしかないけど、
2層目の出力と教師信号の差の情報を利用して、1層目も遡って学習できる


2層あるおかげでXorみたいな非線形な出力も学習できる
00=0
01=1
10=1
11=0


ボナメソはJ=ΣΣf[Σwx-teacher]
Jは誤差とも考えられると思う。減ればいいんだし


もし評価関数が2層の場合は、
E=Σf[O-teacher]
ただし
O=ΣwH
H=Σwx
(従来は E=Σf[H-teacher])


Eを微分すると
dE/dw=Σdf/dx[O-teacher]・d(O-teacher)/dw
O=ΣwH
だからさらに
dE/dw=Σdf/dx[O-teacher]・d(O-teacher)/dw
わからん(汗
合成関数だから置き換えよう


E=a(b(c))の微分が判ればいい。
E2=a(b)なら
E2'=da/dx(b)・db/dx


E'=da/dx(b(c))・d(b(c))/dx
わからん(汗
3重の合成関数の微分の公式をぐぐってこよう(^^;
はてな質問で質問するか?(^^;