線形ニューラル ネットワーク
この節で説明する線形ネットワークは、パーセプトロンに似ていますが、その伝達関数はハードリミットではなく線形です。これにより、出力は任意の値を取ることができます。一方、パーセプトロンの出力は 0 または 1 に制限されています。線形ネットワークは、パーセプトロンと同様に線形分離可能な問題のみを解くことができます。
ここでは、所定の一連の入力ベクトルが与えられると対応するターゲット ベクトルの出力を生成する線形ネットワークを設計します。各入力ベクトルに対して、ネットワークの出力ベクトルを計算できます。出力ベクトルとそのターゲット ベクトルの差が誤差です。残差平方和が最小になるか特定の値よりも小さくなるように、ネットワークの重みとバイアスの値を求める必要があります。線形システムにおける誤差の最小値は 1 つであるため、これは扱いやすい問題です。多くの場合、与えられた入力ベクトルとターゲット ベクトルに対して誤差が最小になるように、線形ネットワークを直接計算できます。場合によっては、数値的な問題のため直接計算ができないことがあります。幸い、最小平均二乗 (Widrow・Hoff) アルゴリズムを使用することで必ず、誤差が最小になるようにネットワークに学習させることができます。
この節では、線形層を作成する関数 linearlayer
と、特定の目的の線形層を設計する関数 newlind
を紹介します。
ニューロン モデル
以下に、R 個の入力を持つ線形ニューロンを示します。
このネットワークの基本構造はパーセプトロンと同じです。唯一の違いは、線形ニューロンでは線形伝達関数 purelin
を使用する点です。
この線形伝達関数は、ニューロンの出力を計算するとき、渡された値を単純に返します。
このニューロンに、その入力のアフィン関数を学ばせたり、非線形関数の線形近似を求めたりするよう学習させることができます。もちろん、線形ネットワークに非線形計算を実行させることはできません。
ネットワーク アーキテクチャ
以下に示す線形ネットワークには、重み行列 W を介して R 個の入力に結合された S 個のニューロンから成る 1 つの層があります。
右側の図では、長さ S の出力ベクトル a が定義されていることに注意してください。
示しているのは、単層線形ネットワークです。ただし、このネットワークには、多層線形ネットワークと同じ程度の能力があります。どんな多層線形ネットワークについても、それに相当する単層線形ネットワークが存在します。
線形ニューロンの作成 (linearlayer)
2 つの入力を持つ 1 つの線形ニューロンを考えます。次の図はこのネットワークのブロック線図です。
この場合、重み行列 W の行は 1 つだけです。ネットワークの出力は
または
線形ネットワークには、パーセプトロンと同様に、正味入力 n が 0 になる入力ベクトルによって決まる "判定境界" があります。n = 0 の場合、方程式 Wp + b = 0 によってそのような判定境界が、以下に示すように指定されます ([HDB96] からの転用)。
右上のグレーの領域にある入力ベクトルでは出力が 0 より大きくなります。左下の白の領域にある入力ベクトルでは出力が 0 より小さくなります。したがって、線形ネットワークを使用するとオブジェクトを 2 つのカテゴリに分類できます。ただし、この方法で分類できるのは、オブジェクトを線形分離できる場合のみです。そのため、線形ネットワークには、パーセプトロンと同じ制限があります。
このネットワークは linearlayer
を使用して作成でき、その次元は 2 つの値を使用して、入力が 2 つの要素を持ち、出力が 1 つの要素を持つように設定できます。
net = linearlayer; net = configure(net,[0;0],0);
既定では、ネットワークの重みとバイアスは 0 に設定されています。現在の値は次のコマンドにより確認できます。
W = net.IW{1,1} W = 0 0
と
b= net.b{1} b = 0
ただし、重みには次によってそれぞれ 2、3 など必要な値を指定できます。
net.IW{1,1} = [2 3]; W = net.IW{1,1} W = 2 3
バイアスも同じように設定して確認できます。
net.b{1} = [-4]; b = net.b{1} b = -4
特定の入力ベクトルについて、線形ネットワークのシミュレーションを行うことができます。以下を試してみます。
p = [5;6];
関数 sim
を使用してネットワーク出力を求めることができます。
a = net(p) a = 24
まとめると、linearlayer
で線形ネットワークを作成し、必要に応じてその要素の調整を行い、sim
でそれをシミュレートできます。
最小平均二乗誤差
パーセプトロンの学習規則と同様に、最小平均二乗誤差 (LMS) アルゴリズムは教師あり学習の一例で、そこでは学習規則に目的のネットワーク動作の一連の例が提供されます。
ここで、pq はネットワークへの入力であり、tq は対応するターゲット出力です。各入力がネットワークに適用されるたびに、ネットワーク出力がターゲットと比較されます。誤差は、ターゲット出力とネットワーク出力の間の差として計算されます。目標は、これらの誤差を合計した値の平均を最小化することです。
LMS アルゴリズムは、線形ネットワークの重みとバイアスを調整して、この平均二乗誤差を最小化します。
幸い、線形ネットワークの平均二乗誤差性能インデックスは二次関数です。したがって、性能インデックスは入力ベクトルの特性に応じ、1 つの大域的最小または弱い最小をもつか、最小をもたないかのいずれかになります。すなわち、入力ベクトルの特性によって、一意の解が存在するかどうかが決まります。
このトピックの詳細は、[HDB96] の第 10 章を参照してください。
線形システムの設計 (newlind)
他の大部分のネットワーク アーキテクチャとは異なり、入力ベクトルとターゲット ベクトルのペアがわかっている場合、線形ネットワークを直接設計できます。重みとバイアスの具体的なネットワーク値が得られると、関数 newlind
を使用して平均二乗誤差を最小化できます。
入力およびターゲットが次のとおりであるとします。
P = [1 2 3]; T= [2.0 4.1 5.9];
これで、ネットワークを設計できます。
net = newlind(P,T);
ネットワーク動作のシミュレーションを行い、設計が適切に行われたことを確認できます。
Y = net(P) Y = 2.0500 4.0000 5.9500
ネットワーク出力が目的のターゲットにかなり近いことに注意してください。
誤差曲面を示すパターンの関連付けを試してみることをお勧めします。特定の問題の誤差曲面の表示、設計の説明、設計された解のプロットを確認できます。
関数 newlind
を使用すると、入力に遅延のある線形ネットワークを設計することもできます。そのようなネットワークについては、遅延のある線形ネットワークで説明します。ただし、最初に遅延について説明しなければなりません。
遅延のある線形ネットワーク
タップ付き遅延線
線形ネットワークを十分に活用するには、新しいコンポーネントとしてタップ付き遅延線が必要です。以下に、そのような遅延線を示します。入力信号が左から入り、N-1 個の遅延を通過します。タップ付き遅延線 (TDL) の出力は、現在の入力信号や前の入力信号などで構成された N 次元のベクトルです。
線形フィルター
タップ付き遅延線を線形ネットワークと組み合わせると、次のような線形 "フィルター" を作成できます。
このフィルターの出力は、次で与えられます。
示しているネットワークは、デジタル信号処理の分野で有限インパルス応答 (FIR) フィルターと呼ばれています [WiSt85]。このようなネットワークの生成とシミュレートに使用するコードを確認してみましょう。
シーケンス P
および 2 つの初期入力遅延状態 Pi
を与えると、シーケンス T
を出力する線形層が必要であるとします。
P = {1 2 1 3 3 2}; Pi = {1 3}; T = {5 6 4 20 7 8};
関数 newlind
を使用して、遅延があり、入力に対して適切な出力が得られるネットワークを設計できます。以下に示すように、遅延の初期出力は 3 番目の引数として指定します。
net = newlind(P,T,Pi);
設計したネットワークの出力を得るには、次を使用します。
Y = net(P,Pi)
以下が得られます。
Y = [2.7297] [10.5405] [5.0090] [14.9550] [10.7838] [5.9820]
このように、ネットワークの出力はターゲットと厳密に等しくはありませんが近い値であり、平均二乗誤差が最小化されています。
LMS アルゴリズム (learnwh)
LMS アルゴリズム、つまり Widrow・Hoff 学習アルゴリズムは、近似的な最急降下手順に基づきます。ここでもまた、正しい動作の例について線形ネットワークに学習させます。
Widrow と Hoff は、各反復での二乗誤差を使用することで平均二乗誤差を推定できるという洞察を得ました。k 番目の反復における、重みとバイアスについての二乗誤差の偏微分は、以下のようになります。
(j = 1、2、...、R)、および
次に、誤差の偏微分は以下のようになります。
または
ここで、pi(k) は、k 番目の反復における入力ベクトルの i 番目の要素です。
これは次のように簡略化できます。
と
最後に、重み行列を変更すると、バイアスは次のようになります。
2αe(k)p(k)
と
2αe(k)
これらの 2 つの方程式は、Widrow・Hoff (LMS) 学習アルゴリズムの基礎となっています。
これらの結果は、ニューロンが複数の場合に拡張して、行列形式で次のように記述できます。
ここで、誤差 e とバイアス b はベクトルで、α は "学習率" です。α が大きい場合、学習は高速になりますが、大きすぎると学習が不安定になり、誤差が増加する場合もあります。学習を安定させるには、学習率を、入力ベクトルの相関行列 pTp が持つ最大の固有値の逆数より小さくしなければなりません。
LMS アルゴリズムとその収束の詳細は、[HDB96] の第 10 章を参照することをお勧めします。
幸い、ツールボックス関数 learnwh
で、すべての計算が代わりに行われます。重みの変化は次のように計算されます。
dw = lr*e*p'
バイアスの変化は次のようになります。
db = lr*e
数行上に示されている定数 2 は、コードの学習率 lr
に吸収されています。関数 maxlinlr
は、この最大安定学習率 lr
を 0.999 * P'
*P
として計算します。
help learnwh
および help maxlinlr
と入力すると、これら 2 つの関数の詳細を確認できます。
線形分類 (train)
関数 train
を使用して、線形ネットワークに学習させ、線形分類を行うことができます。この関数は、一連の入力ベクトルの各ベクトルに適用され、learnp
に従って、各入力によるネットワークの重みとバイアスの増分を計算します。その後、ネットワークはこれらの修正の総和を使用して調整されます。入力ベクトルを一通り経由するパスは "エポック" と呼ばれます。これは、与えられた各入力ベクトルについて重みを調整する adapt
とは対照的です。
最後に、train
は入力を新しいネットワークに適用して出力を計算し、それらを関連するターゲットと比較して平均二乗誤差を計算します。誤差の目標値を満たしている場合またはエポックの最大数に達した場合、学習は停止し、train
は新しいネットワークと学習記録を返します。それ以外の場合、train
は別のエポックを実行します。幸い、この手順を実行すると、LMS アルゴリズムは収束します。
簡単な問題でこの手順を説明します。前に紹介した線形ネットワークを考えます。
次の分類問題があるとします。
ここでは、4 つの入力ベクトルがあり、そのベクトルが与えられるとそれぞれのベクトルに対応する出力を生成するネットワークが必要であるとします。
train
を使用して、各入力ベクトルに対して正しいターゲットを生成するネットワークの重みとバイアスを取得します。既定では、新しいネットワークの初期の重みとバイアスは 0 です。誤差の目標値は、その既定値の 0 を受け入れずに、0.1 に設定します。
P = [2 1 -2 -1;2 -2 2 1]; T = [0 1 0 1]; net = linearlayer; net.trainParam.goal= 0.1; net = train(net,P,T);
この問題を 64 エポック実行すると、平均二乗誤差が 0.0999 になります。新しい重みとバイアスは次になります。
weights = net.iw{1,1} weights = -0.0615 -0.2194 bias = net.b(1) bias = [0.5899]
次に示すように、新しいネットワークのシミュレーションを行うことができます。
A = net(P) A = 0.0282 0.9672 0.2741 0.4320
誤差を計算することもできます。
err = T - sim(net,P) err = -0.0282 0.0328 -0.2741 0.5680
厳密なターゲットは実現されていないことに注意してください。完全な結果を得ようとして、より小さい誤差の目標値を選択し、この問題をもっと長い時間実行することもできますが、この問題では 0 という目標値には到達できません。このネットワークの機能には制限があります。さまざまな制限の例については、制限と注意事項を参照してください。
サンプル プログラム線形ニューロンの学習では、線形ニューロンの学習について確認し、学習中に重みの軌跡と誤差をプロットできます。
制限と注意事項
線形ネットワークは、入力ベクトルと出力ベクトルの間の線形関係のみを学習できます。そのため、問題によっては解を求めることができません。ただし、完全な解が存在しなくても、学習率 lr
が十分小さい場合、線形ネットワークは残差平方和を最小化します。このネットワークは、ネットワーク アーキテクチャの線形特性を前提として、できるだけ近い解を求めます。この性質が成り立つのは、線形ネットワークの誤差曲面が多次元放物線であるためです。放物線には最小値が 1 つだけあるため、勾配降下アルゴリズム (LMS 規則など) は必ず、その最小値で解を生成します。
線形ネットワークには、ほかにもさまざまな制限があります。以下では、そのいくつかについて説明します。
過決定システム
過決定システムを考えます。4 つの 1 要素入力ベクトルと 4 つのターゲットを使用して、あるネットワークに学習させるとします。4 つの拘束方程式があり、1 つの重みと 1 つのバイアスのみを調整するため、各入力に対する wp + b = t の完全な解は存在しない可能性があります。ただし、この場合も、LMS 規則により、誤差が最小化されます。非線形問題の線形近似を試し、これがどのように行われるか確認することをお勧めします。
劣決定システム
1 つの入力を持つ 1 つの線形ニューロンを考えます。この場合は、劣決定問題で、1 つの 1 要素入力ベクトルとその 1 要素ターゲット ベクトルだけで学習させます。
P = [1.0]; T = [0.5];
入力とターゲットのペア 1 つからの制約は 1 つのみですが、変数は、重みとバイアスの 2 つがあります。制約より多くの変数があるため、これは無限個の解を持つ劣決定問題になります。劣決定問題を試し、このトピックについて調べることができます。
線形従属ベクトル
通常、線形ネットワークで問題を解くことができるかどうかを判断するのは簡単な作業です。一般的に、線形ネットワークの持つ自由度 (S *R + S = 重みとバイアスの数) が制約の数 (Q = 入力ベクトルとターゲット ベクトルのペア数) 以上であれば、そのネットワークで問題を解くことができます。これは、入力ベクトルが線形従属で、それらがバイアスのないネットワークに適用される場合には成り立ちません。この場合、例線形従属問題で説明されているように、ネットワークは誤差 0 で問題を解くことができません。線形従属問題を試してみることをお勧めします。
学習率が大きすぎる場合
学習率が十分小さい限り、Widrow・Hoff 規則を使用して線形ネットワークに学習させ、その重みとバイアスについて誤差が最小の解を必ず求めることができます。例学習率が大きすぎる場合は、maxlinlr
で推奨されている値より大きな学習率で 1 つの入力とバイアスのあるニューロンに学習させると何が起こるかを示しています。2 つの異なる学習率でネットワークに学習させ、大きすぎる学習率を使用したときの結果を確認できます。