一般回帰ニューラル ネットワーク
ネットワーク アーキテクチャ
一般回帰ニューラル ネットワーク (GRNN) は、関数近似によく使用されます。これには、放射基底層と特殊な線形層があります。
GRNN のアーキテクチャは以下のとおりです。放射基底ネットワークに似ていますが、2 番目の層が多少異なります。
ここで、上に示した nprod ボックス (コード関数 normprod
) は、ベクトル n2 の S2 個の要素を生成します。各要素は、LW2,1 の行と入力ベクトル a1 のドット積であり、a1 の要素の和によってすべて正規化されています。たとえば、以下の場合
LW{2,1}= [1 -2;3 4;5 6]; a{1} = [0.7;0.3];
次になります。
aout = normprod(LW{2,1},a{1}) aout = 0.1000 3.3000 5.3000
最初の層は、newrbe
ネットワークの場合と同様です。P 内の入力ベクトルやターゲット ベクトルと同じ数のニューロンがあります。特に、最初の層の重みは P'
に設定されます。バイアス b1 は 0.8326/SPREAD
の列ベクトルに設定されます。SPREAD
は、ニューロンの重みベクトルから入力ベクトルまでの距離が 0.5 になるように選択しなければなりません。
ここでも、最初の層は前に説明した newrbe
放射基底層と同様に動作します。各ニューロンの重み付けされた入力は、入力ベクトルとその重みベクトル間の距離であり、dist
により計算されます。各ニューロンの正味入力は、その重み付けされた入力とそのバイアスの積であり、netprod
により計算されます。各ニューロンの出力は、その正味入力が radbas
に渡されたものです。ニューロンの重みベクトルが入力ベクトル (転置済み) に等しい場合、その重み付けされた入力は 0、正味入力は 0、出力は 1 です。ニューロンの重みベクトルが入力ベクトルからの距離 spread
である場合、その重み付けされた入力は spread
で、正味入力は sqrt(−log(0.5)) (つまり 0.8326) です。そのため、出力は 0.5 になります。
2 番目の層にも、入力ベクトルやターゲット ベクトルと同じ数のニューロンがありますが、ここでは、LW{2,1}
が T
に設定されます。
層 1 の重みの設計に使用した入力ベクトルとターゲットのペアに含まれる入力ベクトルの 1 つ pi に近い入力ベクトル p があるとします。この入力 p は、層 1 で 1 に近い出力 ai を生成します。これにより、層 2 では、層 2 の重みの形成に使用したターゲットの 1 つ ti に近い出力が得られます。
spread
を大きくすると、層 1 のニューロンが有意な出力で応答する、入力ベクトル周りの領域が大きくなります。したがって、spread
が小さいと、放射基底関数の勾配が急になり、入力に最も近い重みベクトルを持つニューロンが、他のニューロンよりもはるかに大きな出力を持ちます。このネットワークは、最も近い設計入力ベクトルに関連付けられたターゲット ベクトルで応答する傾向があります。
spread
が大きくなるにつれ、放射基底関数の勾配が滑らかになるため、複数のニューロンが入力ベクトルに対して応答できます。このとき、ネットワークは、新しい入力ベクトルに最も近い設計入力ベクトルの、ターゲット ベクトル間の加重平均を取るかのように動作します。spread
が大きくなるにつれ、平均に寄与するニューロンが増え、ネットワーク関数がより滑らかになります。
設計 (newgrnn)
GRNN は関数 newgrnn
を使用して作成できます。たとえば、3 つの入力ベクトルと 3 つのターゲット ベクトルが次のように定義されているとします。
P = [4 5 6]; T = [1.5 3.6 6.7];
ここで、次により GRNN が得られます。
net = newgrnn(P,T);
さらに、次でシミュレートします。
P = 4.5; v = sim(net,P);
GRNN 関数近似も同様に試してみることをお勧めします。