Main Content

浅層ネットワークのデータ構造について

このトピックでは、入力データ構造の形式がネットワークのシミュレーションにどのような影響を与えるかについて説明します。最初に静的ネットワークを取り上げ、次に動的ネットワークに進みます。次の節では、データ構造の形式がネットワークの学習にどのような影響を与えるかについて説明します。

入力ベクトルの基本的なタイプには、"同時に" (同時に、つまり特定の時間列なしで) 発生するタイプと、"逐次的に" 発生するタイプの 2 つがあります。同時ベクトルの場合、順序は重要でなく、また並列実行しているネットワークがいくつもある場合、それぞれのネットワークに 1 つの入力ベクトルを与えることができます。逐次ベクトルの場合、ベクトルが現れる順序が重要です。

静的ネットワークでの同時入力によるシミュレーション

ネットワークのシミュレーションの最も簡単な状況は、シミュレーションするネットワークが静的な (フィードバックや遅延がない) 場合です。この場合、入力ベクトルが特定の時間列で発生するかどうかを考慮する必要がないため、入力を同時に発生するものとして扱うことができます。さらに、ネットワークの入力ベクトルが 1 つのみであると仮定すると、問題がいっそう簡単になります。例として次のネットワークを使用します。

この線形フィードフォワード ネットワークを設定するには、次のコマンドを使用します。

net = linearlayer;
net.inputs{1}.size = 2;
net.layers{1}.dimensions = 1;

簡単にするために、重み行列として W = [1 2] を、バイアスとして b = [0] を割り当てます。

これらの割り当てを行うコマンドは次のとおりです。

net.IW{1,1} = [1 2];
net.b{1} = 0;

ネットワーク シミュレーション データセットが Q = 4 個の同時ベクトルで構成されているとします。

p1=[12],p2=[21],p3=[23],p4=[31]

同時ベクトルは、1 つの行列としてネットワークに与えられます。

P = [1 2 2 3; 2 1 3 1];

これで、ネットワークをシミュレーションできます。

A = net(P)
A =
     5     4     8     5

複数の同時ベクトルから成る 1 つの行列がネットワークに与えられ、ネットワークは、複数の同時ベクトルから成る 1 つの行列を出力として生成します。4 つのネットワークが並列に動作していて、各ネットワークがいずれかの入力ベクトルを受け取り、1 つずつ出力を生成する場合も、同じ結果が得られます。入力ベクトルどうしは互いに影響しないため、入力ベクトルの順序は重要ではありません。

動的ネットワークでの逐次入力によるシミュレーション

ネットワークに遅延が含まれる場合、通常、ネットワークへの入力は、特定の時間順に発生する入力ベクトルのシーケンスです。この場合を説明するために、次の図に、遅延を 1 つ含む簡単なネットワークを示しています。

次のコマンドで、このネットワークを作成できます。

net = linearlayer([0 1]);
net.inputs{1}.size = 1;
net.layers{1}.dimensions = 1;
net.biasConnect = 0;

重み行列として W = [1 2] を割り当てます。

コマンドは次のとおりです。

net.IW{1,1} = [1 2];

入力シーケンスは次のとおりとします。

p1=[1],p2=[2],p3=[3],p4=[4]

逐次入力は、cell 配列の要素としてネットワークに与えられます。

P = {1 2 3 4};

これで、ネットワークをシミュレーションできます。

A = net(P)
A = 
    [1]    [4]    [7]    [10]

入力のシーケンスを含む cell 配列を入力すると、ネットワークは、出力のシーケンスを含む cell 配列を生成します。入力をシーケンスとして与えるときは、入力の順序が重要です。この場合、現在の入力に 1 を、前の入力に 2 をそれぞれ乗算し、結果を合計することで、現在の出力が得られます。入力の順序を変更すると、出力として得られる数値が変化します。

動的ネットワークでの同時入力によるシミュレーション

同じ入力を、入力のシーケンスではなく一連の同時入力として適用した場合、完全に異なる応答が得られます (ただし、これを動的ネットワークで行う理由は明らかになっていません)。これは、個別の並列ネットワークに各入力を同時に適用した場合と同じです。前述の動的ネットワークでの逐次入力によるシミュレーションの例で、一連の同時入力を使用する場合、次のようになります。

p1=[1],p2=[2],p3=[3],p4=[4]

これは、次のコードで作成できます。

P = [1 2 3 4];

同時入力を使用してシミュレーションすると、以下が得られます。

A = net(P)
A =
     1     2     3     4

この結果は、それぞれの入力を個別のネットワークに同時に適用して 1 つの出力を計算した場合と同じです。初期条件をネットワークの遅延に割り当てていなかったため、初期条件が 0 と仮定されていることに注意してください。この場合、現在の入力に乗算される重みは 1 であるため、出力は単に入力の 1 倍です。

特殊なケースでは、複数の異なるシーケンスに対してネットワーク応答を同時にシミュレーションすることが必要になる場合があります。この場合、ネットワークに一連の同時シーケンスを与える必要があります。たとえば、次の 2 つのシーケンスをネットワークに与える必要があるとします。

p1(1)=[1],p1(2)=[2],p1(3)=[3],p1(4)=[4]p2(1)=[4],p2(2)=[3],p2(3)=[2],p2(4)=[1]

入力 P は cell 配列でなければなりません。ここで、配列の各要素には、同時に発生する 2 つのシーケンスの 2 つの要素が含まれています。

P = {[1 4] [2 3] [3 2] [4 1]};

これで、ネットワークをシミュレーションできます。

A = net(P);

結果として得られるネットワーク出力は次のようになります。

A = {[1 4] [4 11] [7 8] [10 5]}

このように、各行列の最初の列は、前述の例で使用したものと同じ最初の入力シーケンスによって生成される出力シーケンスを形成します。各行列の 2 番目の列は、2 番目の入力シーケンスによって生成される出力シーケンスを形成します。2 つの同時シーケンス間に交互作用はありません。これは、並列で動作する個別のネットワークに別々に適用した場合と同じです。

次の図は、タイム ステップが TS 個の同時シーケンスが Q 個ある場合のネットワーク入力 P の一般的な形式を示しています。これは、入力ベクトルが 1 つであるすべてのケースを網羅しています。cell 配列の各要素は、各シーケンスの同じ時点に対応する同時ベクトルの行列です。複数の入力ベクトルがある場合は、cell 配列の行列が複数行になります。

このトピックでは、動的ネットワークに逐次入力と同時入力を適用しました。静的ネットワークでの同時入力によるシミュレーションでは、静的ネットワークに同時入力を適用しました。静的ネットワークに逐次入力を適用することも可能です。ネットワークのシミュレーションによる応答は変化しませんが、ネットワークの学習の仕方が影響を受けることがあります。これは、ニューラル ネットワークの学習の概念で明らかになります。

浅層ニューラル ネットワークの入出力の構成も参照してください。