放射基底ニューラル ネットワーク
ニューロン モデル
R 個の入力を持つ放射基底ネットワークは次のようになります。
radbas
ニューロンの正味入力の式が他のニューロンの場合と異なることに注意してください。この場合、伝達関数 radbas
の正味入力は、その重みベクトル w と入力ベクトル p 間のベクトル距離にバイアス b を乗算したものです (この図の ||
dist
||
ボックスは、入力ベクトル p と単一行の入力重み行列を受け入れ、それらのドット積を生成します)。
放射基底ニューロンに対する伝達関数は、次のとおりです。
次に伝達関数 radbas
のプロットを示します。
放射基底関数は、入力が 0 のときに最大値 1 を取ります。w と p の間の距離が減少するにつれて出力は増加します。そのため、放射基底ニューロンは、入力 p が重みベクトル w と同じになると必ず 1 を生成する検出器として機能します。
バイアス b により、radbas
ニューロンの感度を調整できます。たとえば、ニューロンのバイアスが 0.1 の場合、その重みベクトル w からのベクトル距離が 8.326 (0.8326/b) の入力ベクトル p に対して、0.5 が出力されます。
ネットワーク アーキテクチャ
放射基底ネットワークは、S1 個のニューロンから成る隠れ放射基底層と S2 個のニューロンから成る出力線形層の 2 つの層で構成されます。
この図の ||
dist
||
ボックスは入力ベクトル p と入力重み行列 IW1,1 を受け入れ、S1 個の要素を持つベクトルを生成します。この要素は、入力ベクトルと、入力重み行列の行から形成されるベクトル iIW1,1 との間の距離です。
バイアス ベクトル b1 と ||
dist
||
の出力が、要素ごとの乗算を行う MATLAB® 演算 .* で結合されます。
フィードフォワード ネットワーク net
の最初の層による出力は、次のコードを使用して得られます。
a{1} = radbas(netprod(dist(net.IW{1,1},p),net.b{1}))
幸い、このようなコード行を書く必要はありません。このネットワークの設計の詳細のすべては設計関数 newrbe
および newrb
に組み込まれており、sim
によってそれらの出力を得ることができます。
このネットワークの中で入力ベクトル p を出力 a2 まで追うことで、このネットワークの動作を理解できます。入力ベクトルをこのようなネットワークに与えた場合、放射基底層の各ニューロンは、入力ベクトルが各ニューロンの重みベクトルにどの程度近いかに応じて値を出力します。
たとえば、入力ベクトル p とまったく異なる重みベクトルを持つ放射基底ニューロンは 0 に近い値を出力します。このような小さい出力は、線形出力ニューロンに対してごくわずかの影響しかありません。
一方、入力ベクトル p に近い重みベクトルをもつ放射基底ニューロンは 1 に近い値を出力します。ニューロンの出力が 1 の場合、2 番目の層の出力重みは、その値を 2 番目の層の線形ニューロンに渡します。
実際、1 つの放射基底ニューロンの出力だけが 1 で、他のニューロンの出力がすべて 0 の場合 (または 0 に非常に近い場合)、線形層の出力は活性化しているニューロンの出力重みになります。ただし、これは極端なケースです。一般的に、複数のニューロンがさまざまな度合いで常に活性化しています。
ここで、最初の層がどのように動作するか詳しく見てみましょう。各ニューロンの重み付けされた入力は、入力ベクトルとその重みベクトル間の距離であり、dist
により計算されます。各ニューロンの正味入力は、その重み付けされた入力とそのバイアスの要素ごとの積であり、netprod
により計算されます。各ニューロンの出力は、その正味入力が radbas
に渡されたものです。ニューロンの重みベクトルが入力ベクトル (転置済み) に等しい場合、その重み付けされた入力は 0、正味入力は 0、出力は 1 です。ニューロンの重みベクトルが入力ベクトルからの距離 spread
である場合、その重み付けされた入力は spread
で、正味入力は sqrt(−log(0.5)) (つまり 0.8326) であるため、その出力は 0.5 です。
厳密な設計 (newrbe)
放射基底ネットワークは関数 newrbe
によって設計できます。この関数では、学習ベクトルに対して誤差 0 のネットワークを生成できます。これは次によって呼び出されます。
net = newrbe(P,T,SPREAD)
関数 newrbe
は、入力ベクトルの行列 P
およびターゲット ベクトルの行列 T
、放射基底層の広がり定数 SPREAD
を取り、入力が P
のときに出力が正確に T
になるような重みとバイアスを持つネットワークを返します。
この関数 newrbe
によって、P
にある入力ベクトルの数と同じ数の radbas
ニューロンが作成され、最初の層の重みが P'
に設定されます。つまり、各ニューロンが異なる入力ベクトルの検出器として機能する radbas
ニューロンの層があります。Q 個の入力ベクトルがある場合、ニューロンの数は Q 個になります。
最初の層の各バイアスは、0.8326/SPREAD
に設定されます。これにより、重み付けされた入力が +/− SPREAD
のときに 0.5 となる放射基底関数が得られます。これによって、各ニューロンが応答する入力空間の領域の幅が決まります。SPREAD
が 4 の場合、それぞれの radbas
ニューロンは、重みベクトルからのベクトル距離が 4 以内の任意の入力ベクトルに対して、0.5 以上の応答を返します。入力空間内の重なる領域に対してニューロンが強く応答するように、SPREAD
は十分に大きくする必要があります。
2 番目の層の重み IW 2,1 (つまりコードの IW{2,1}
) およびバイアス b2 (つまりコードの b{2}
) は、最初の層の出力 a1 (A{1}
) をシミュレートし、次の 1 次式を解くことにより求められます。
[W{2,1} b{2}] * [A{1}; ones(1,Q)] = T
2 番目の層への入力 (A{1}
) およびターゲット (T
) は既知であり、層は線形です。次のコードを使用して、残差平方和を最小化するような、2 番目の層の重みとバイアスを計算できます。
Wb = T/[A{1}; ones(1,Q)]
ここで、Wb
は、重みとバイアスの両方を含み、バイアスが最後の列にあります。以下で説明するように、残差平方和は常に 0 です。
問題には制約 (入力とターゲットのペア) が C 個あり、各ニューロンには C +1 個の変数 (C 個の radbas
ニューロンの C 個の重みと 1 つのバイアス) があります。制約が C 個で、変数が C 個を超える線形問題には、誤差 0 の解が無数にあります。
そのため、newrbe
は、学習ベクトルに対して誤差 0 のネットワークを作成します。必要な唯一の条件は、radbas
ニューロンの有効な入力領域が十分に重なるほど SPREAD
が十分大きく、任意の時点で複数の radbas
ニューロンが必ずかなり大きな出力を持つようにすることです。これにより、ネットワーク関数が滑らかになり、設計に使用する入力ベクトル間で発生する新しい入力ベクトルに対して、より適切な汎化が得られます。(ただし、SPREAD
をあまり大きくして、各ニューロンが実質的に入力空間の同じ大領域で応答している状態にはしないでください)。
newrbe
の欠点は、入力ベクトルと同じ数の隠れニューロンを含むネットワークを生成することです。そのため、通常そうであるように、ネットワークを適切に定義するために多数の入力ベクトルが必要な場合、newrbe
は許容可能な解を返しません。
より効率的な設計 (newrb)
関数 newrb
は、放射基底ネットワークを一度に 1 ニューロンずつ反復的に作成します。残差平方和が誤差の目標値を下回るか、ニューロンの最大数に達するまで、ニューロンがネットワークに追加されます。この関数は以下で呼び出します。
net = newrb(P,T,GOAL,SPREAD)
関数 newrb
は、入力ベクトルの行列 P
とターゲット ベクトルの行列 T
、設計パラメーター GOAL
、および SPREAD
を取り、目的のネットワークを返します。
newrb
の設計法は newrbe
の場合と似ています。違いは、newrb
ではニューロンを 1 つずつ作成する点です。各反復では、ネットワーク誤差を最も小さくする入力ベクトルを使用して radbas
ニューロンが作成されます。新しいネットワークの誤差を確認し、誤差が十分小さくなると、newrb
は終了します。そうでない場合、次のニューロンが追加されます。誤差の目標値が満たされるか、ニューロンの最大数に達するまで、この手順が繰り返されます。
newrbe
の場合と同様に、radbas
ニューロンが入力空間内の重なる領域に応答するように、ただし、すべてのニューロンが実質的に同じように応答することがない程度に、広がりパラメーターを大きくすることが重要です。
標準的なフィードフォワード ネットワークの代わりに、常に放射基底ネットワークを使用しないのはなぜでしょうか。放射基底ネットワークでは、newrbe
を使用して効率的に設計した場合でも、隠れ層に tansig
または logsig
ニューロンを含む同等のフィードフォワード ネットワークよりも何倍も多くのニューロンが含まれる傾向があります。
これは、シグモイド ニューロンは入力空間内の大きな領域にわたって出力できますが、radbas
ニューロンは入力空間内の比較的小さい領域に対してのみ応答するためです。その結果、入力空間 (入力の数およびそれらの入力が変化する範囲) が大きいほど、より多くの radbas
ニューロンが必要になります。
一方、放射基底ネットワークの設計は多くの場合、シグモイドまたは線形ネットワークの学習よりもはるかに短い時間で終了し、次の例からわかるように、使用するニューロンが少なくなる場合もあります。
例
例放射基底近似では、放射基底ネットワークを使用して関数に当てはめる方法を説明しています。この場合、わずか 5 つのニューロンで問題を解くことができます。
例放射基底アンダーラッピング ニューロンおよび放射基底オーバーラッピング ニューロンでは、広がり定数が放射基底ネットワークの設計プロセスにどのように影響を与えるかを調べます。
放射基底アンダーラッピング ニューロンでは、放射基底ネットワークを設計して放射基底近似と同じ問題を解きます。ただし、このときに使用する広がり定数は 0.01 です。そのため、各放射基底ニューロンは、その重みベクトルから 0.01 以上の距離にある入力ベクトルに対して 0.5 以下を返します。
学習入力は 0.1 の間隔で発生するため、与えられた入力に対して 2 つの放射基底ニューロンが強い出力を持つことはありません。
放射基底アンダーラッピング ニューロンは、広がり定数が小さすぎると、設計に使用された入力/ターゲット ベクトルから汎化していない解になる可能性を示しています。例放射基底オーバーラッピング ニューロンは逆の問題を示します。広がり定数が十分に大きい場合、放射基底ニューロンは、ネットワークの設計に使用されたすべての入力に対して大きな (1.0 に近い) 値を出力します。
すべての放射基底ニューロンが常に 1 を出力する場合、ネットワークに与えられたすべての情報が失われます。入力がどのような値でも、2 番目の層は 1 を出力します。関数 newrb
を使用してネットワークを見つけようと試みても、この状況で発生する数値的な問題のため失敗します。
この例から得られる教訓は、適切な汎化を得るために隣接する入力ベクトル間の距離より大きい、ただし、入力空間全体の距離よりも小さい広がり定数を選択するということです。
この問題の場合、入力どうしの間隔 0.1 より大きく、左端と右端の入力間の距離 2 よりも小さい広がり定数を選ぶことを意味します。