Main Content

浅層の多層ニューラル ネットワークの作成、構成、初期化

このトピックでは、典型的な浅層の多層ネットワークのワークフローの一部について説明します。詳細とその他のステップについては、浅層の多層ニューラル ネットワークと逆伝播学習を参照してください。

データが収集されたら、ネットワークの学習の次のステップは、ネットワーク オブジェクトの作成です。関数 feedforwardnet により、多層フィードフォワード ネットワークが作成されます。この関数が入力引数なしで呼び出された場合、構成されていない既定のネットワーク オブジェクトが作成されます。結果として得られるネットワークは、configure コマンドで構成できます。

例として、ファイル bodyfat_dataset.mat に事前定義された入力ベクトルとターゲット ベクトルのセットが含まれているとします。入力ベクトルは人の身体的属性に関するデータを定義し、ターゲット値はその人の体脂肪率を定義しています。次のコマンドを使用してデータを読み込みます。

load bodyfat_dataset

このファイルを読み込むと、2 つの変数が作成されます。入力行列 bodyfatInputs は 252 人の 13 個の身体的属性変数から成る 252 個の列ベクトルで構成されています。ターゲット行列 bodyfatTargets は、対応する 252 個の体脂肪率で構成されています。

次のステップは、ネットワークの作成です。以下の feedforwardnet の呼び出しにより、隠れ層に 10 個のニューロンがある 2 層ネットワークが作成されます (構成時に、出力層のニューロンの数は 1 に設定されます。これはターゲットの各ベクトルの要素数です)。

net = feedforwardnet;
net = configure(net, bodyfatInputs, bodyfatTargets);

feedforwardnet にはオプションの引数を指定できます。たとえば、最初の引数は、各隠れ層のニューロンの数を含む配列です (既定の設定は 10 で、10 個のニューロンがある 1 つの隠れ層を意味します。一般的に 1 つの隠れ層で優れた結果が得られますが、1 つでの結果が十分でない場合は、2 つの隠れ層を試してみてください。隠れ層のニューロンの数を増やすと、ネットワークの能力が向上しますが、より多くの計算が必要になり、過適合につながる可能性が高くなります)。2 つ目の引数には、使用する学習関数の名前を指定します。どの引数も指定しない場合、層の数の既定値は 2 で、隠れ層のニューロンの数の既定値は 10 です。既定の学習関数は trainlm です。隠れ層の既定の伝達関数は tansig で、出力層の既定は purelin です。

configure コマンドにより、ネットワーク オブジェクトが構成され、ネットワークの重みとバイアスの初期化も行われます。これにより、ネットワークの学習の準備が整います。重みを再初期化したり、カスタムの初期化を実行したりする必要がある場合もあります。重みの初期化 (init)では初期化プロセスの詳細を説明します。構成ステップをスキップし、ネットワークの学習に直接移ることもできます。train コマンドにより、ネットワークが自動的に構成され、重みが初期化されます。

その他の関連アーキテクチャ

2 層フィードフォワード ネットワークは実質的にどのような入出力関係でも学習できますが、多層フィードフォワード ネットワークは複雑な関係をより早く学習できる可能性があります。ほとんどの問題では、2 層で始めて、2 層の性能では十分でない場合に 3 層に増やすことをお勧めします。

関数 cascadeforwardnet により、カスケードフォワード ネットワークが作成されます。これらはフィードフォワード ネットワークに似ていますが、入力から各層へ、また各層から以降の層への重み結合が含まれます。たとえば、3 層ネットワークには層 1 から層 2、層 2 から層 3、層 1 から層 3 への結合があります。この 3 層ネットワークには、入力から 3 つの層すべてへの結合があります。こうした追加の結合によって、ネットワークが目的の関係を学習する速度が向上する場合があります。

関数 patternnet により feedforwardnet によく似たネットワークが作成されます。異なるのは、最後の層で伝達関数 tansig が使用される点だけです。このネットワークは一般的にパターン認識に使用されます。他に、動的関係または時系列関係を学習できるネットワークもあります。

重みの初期化 (init)

フィードフォワード ネットワークに学習させる前に、重みとバイアスを初期化しなければなりません。重みは、configure コマンドにより自動的に初期化されますが、再初期化が必要になる場合があります。これは、init コマンドを用いて実行します。この関数は、入力としてネットワーク オブジェクトを取り、すべての重みとバイアスが初期化されたネットワーク オブジェクトを返します。ネットワークの初期化 (または再初期化) の方法は以下のとおりです。

net = init(net);