このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
層再帰型ニューラル ネットワークの設計
次に紹介する動的ネットワークは層再帰型ネットワーク (LRN) です。このネットワークの初期の簡略化バージョンは、Elman [Elma90] によって導入されました。LRN では、最後の層を除くネットワークの各層に、1 つの遅延を含むフィードバック ループがあります。元の Elman ネットワークでは、層は 2 つのみで、隠れ層に伝達関数 tansig
が、出力層に伝達関数 purelin
が使われていました。元の Elman ネットワークでは、逆伝播アルゴリズムに近いものを学習に使用しています。layrecnet
コマンドは Elman ネットワークを汎化し、任意の数の層と各層における任意の伝達関数を可能にします。ツールボックスでは、浅い多層ニューラル ネットワークと逆伝播学習で説明した勾配ベースのアルゴリズムの正確なバージョンを使用して LRN に学習させます。次の図は 2 層 LRN を示しています。
LRN 構成は、既に説明したフィルター処理およびモデル化の用途に多く使用されます。その動作を説明するために、この例では、時系列分散型遅延ニューラル ネットワークの設計で説明した "音素" 検出の問題を使用します。データを読み込み、ネットワークを作成して学習させるコードを以下に示します。
load phoneme p = con2seq(y); t = con2seq(t); lrn_net = layrecnet(1,8); lrn_net.trainFcn = 'trainbr'; lrn_net.trainParam.show = 5; lrn_net.trainParam.epochs = 50; lrn_net = train(lrn_net,p,t);
学習後、次のコードを使用して応答をプロットできます。
y = lrn_net(p); plot(cell2mat(y))
プロットは、ネットワークが "音素" を検出できたことを示しています。応答は、TDNN を使用して得られたものと非常に似ています。
ニューラル ネットワークでは、学習を行うたびに異なる解が得られる可能性がありますが、これは初期の重みとバイアスの値が異なり、データの学習セット、検証セット、テスト セットへの分割が異なるためです。このため、別のニューラル ネットワークが同じ問題について学習した場合、入力が同じでも出力が異なる場合があります。ニューラル ネットワークで高い精度が得られるようにするためには、何度か再学習を行います。
高い精度が必要な場合は、初期解を改善するための手法が他にいくつかあります。詳細については、浅層ニューラル ネットワークの汎化の改善と過適合の回避を参照してください。