Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

正規化パーセプトロン規則

5 つの入力ベクトルを 2 つのカテゴリに分類するように、2 入力ハード制限ニューロンの学習を行います。1 つの入力ベクトルが他のベクトルよりはるかに大きいとしても、LEARNPN を使用した学習は迅速です。

X の 5 つの列ベクトルのそれぞれによって 2 要素入力ベクトルが定義され、行ベクトル T によってベクトルのターゲット カテゴリが定義されます。PLOTPV を使用してこれらのベクトルをプロットします。

X = [ -0.5 -0.5 +0.3 -0.1 -40; ...
      -0.5 +0.5 -0.5 +1.0 50];
T = [1 1 0 0 1];
plotpv(X,T);

4 つの入力ベクトルの大きさは、プロットの左上にある 5 番目のベクトルよりもずっと小さいことに注意してください。パーセプトロンによって、X の 5 つの入力ベクトルは、T によって定義された 2 つのカテゴリに適切に分類されなければなりません。

PERCEPTRON は LEARPN 学習規則を使用して新しいネットワークを作成します。LEARNP (既定) と比べると、入力ベクトル サイズの大きな変動から受ける影響は小さくなります。

次に、このネットワークは、重みとバイアスの初期値になる入力データおよびターゲット データで構成されます。(通常、構成は ADAPT および TRAIN によって自動的に行われるため不要です)。

net = perceptron('hardlim','learnpn');
net = configure(net,X,T);

ニューロンによる最初の分類試行をプロットに追加します。

初期重みは 0 に設定されているため、任意の入力に対して出力が同じになり、プロットには分類線が表示されません。これで、学習を始めることができます。

hold on
linehandle = plotpc(net.IW{1},net.b{1});

ADAPT は、より優れた分類器として機能する新しいネットワーク オブジェクト、ネットワーク出力、および誤差を返します。このループによってネットワークの適応が可能になり、分類線がプロットされます。ループは誤差が 0 になるまで続けられます。

E = 1;
while (sse(E))
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);
   drawnow;
end

LEARNP での学習は 3 エポックのみでしたが、LEARNPN で同じ問題を解くには 32 エポック必要なことに注意してください。したがって、入力ベクトル サイズに大きな変動がある場合、LEARNP よりも LEARNPN の方が優れています。

これで、SIM を使用して他の任意の入力ベクトルを分類することができます。たとえば、[0.7; 1.2] の入力ベクトルを分類します。

元の学習セットを使用したこの新しい点のプロットは、ネットワーク性能を示します。学習セットと区別するため、赤い色を付けます。

x = [0.7; 1.2];
y = net(x);
plotpv(x,y);
circle = findobj(gca,'type','line');
circle.Color = 'red';

"hold" をオンにして、前のプロットが消去されないようにします。学習セットと分類線をプロットに追加します。

hold on;
plotpv(X,T);
plotpc(net.IW{1},net.b{1});
hold off;

最後に、対象領域を拡大します。

パーセプトロンによって、新しい点 (赤色で表示) が、カテゴリ "1" (プラスで表示) ではなく、カテゴリ "0" (丸で表示) に正しく分類されました。パーセプトロンの学習は、外れ値がある場合でもはるかに短時間で適切に行われます ("外れ値の入力ベクトル" の例と比較してください)。

axis([-2 2 -2 2]);