Main Content

traingd

説明

net.trainFcn = 'traingd' は、ネットワークの trainFcn プロパティを設定します。

[trainedNet,tr] = train(net,...) は、traingd を使用してネットワークに学習をさせます。

traingd は、勾配降下法に従って重みとバイアスの値を更新するネットワーク学習関数です。

学習は traingd の学習パラメーターに従って行われます。以下に、学習パラメーターをその既定値と共に示します。

  • net.trainParam.epochs — 学習の最大エポック数。既定値は 1000 です。

  • net.trainParam.goal — 性能目標。既定値は 0 です。

  • net.trainParam.lr — 学習率。既定値は 0.01 です。

  • net.trainParam.max_fail — 検証エラーの最大回数。既定値は 6 です。

  • net.trainParam.min_grad — 性能の勾配の最小値。既定値は 1e-5 です。

  • net.trainParam.show — 表示間のエポック数 (表示なしは NaN)。既定値は 25 です。

  • net.trainParam.showCommandLine — コマンド ライン出力の生成。既定値は false です。

  • net.trainParam.showWindow — 学習 GUI の表示。既定値は true です。

  • net.trainParam.time — 最大学習時間 (秒単位)。既定値は inf です。

入力引数

すべて折りたたむ

入力ネットワーク。ネットワーク オブジェクトとして指定します。ネットワーク オブジェクトを作成するには、feedforwardnetnarxnet などを使用します。

出力引数

すべて折りたたむ

学習済みネットワーク。network オブジェクトとして返されます。

学習記録 (epoch および perf)。フィールドがネットワーク学習関数 (net.NET.trainFcn) によって異なる構造体として返されます。含まれるフィールドには以下のものがあります。

  • 学習、データ分割、性能の関数およびパラメーター

  • 学習セット、検証セット、およびテスト セットのデータ分割インデックス

  • 学習セット、検証セット、およびテスト セットのデータ分割マスク

  • エポックの数 (num_epochs) および最適なエポック (best_epoch)

  • 学習の状態名の一覧 (states)

  • 学習全体を通じて値を記録する各状態名のフィールド

  • 最適なネットワーク性能 (best_perfbest_vperfbest_tperf)

詳細

すべて折りたたむ

ネットワークの利用

traingdfeedforwardnet または cascadeforwardnet を使用する標準的なネットワークを作成できます。traingd を使用して学習が行われるようにカスタム ネットワークを準備するには、以下のようにします。

  1. net.trainFcn'traingd' に設定します。これにより、net.trainParamtraingd の既定のパラメーターに設定されます。

  2. net.trainParam プロパティを目的の値に設定します。

どちらの場合も、結果として得られるネットワークで train を呼び出すことによって、traingd を使用してネットワークの学習を行います。

例については、help feedforwardnet および help cascadeforwardnet を参照してください。

勾配降下法逆伝播

バッチ最急降下学習関数は traingd です。重みとバイアスは、性能関数の負の勾配の方向に更新されます。バッチ最急降下法を使用してネットワークの学習を行う場合は、ネットワーク trainFcntraingd に設定して、関数 train を呼び出します。ある特定のネットワークに関連付けられる学習関数は 1 つだけです。

traingd には、次の 7 つの学習パラメーターが関連付けられています。

  • epochs

  • show

  • goal

  • time

  • min_grad

  • max_fail

  • lr

学習率 lr は、重みとバイアスの変更量を決定する、負の勾配の乗数です。学習率が大きくなるほど、ステップが大きくなります。学習率が大きすぎる場合、アルゴリズムが不安定になります。学習率が小さすぎる場合、アルゴリズムの収束に時間がかかります。学習率の選択については、[HDB96] の 12-8 ページを参照してください。

アルゴリズムが show 回反復されるたびに、学習の状態が表示されます (showNaN に設定されている場合、学習の状態は表示されません)。学習がいつ停止するかは、他のパラメーターによって決定されます。反復回数が epochs を超えた場合、性能関数が goal を下回った場合、勾配の大きさが mingrad を下回った場合、または学習時間が time 秒を超えた場合には、学習が停止します。早期停止手法に関連する max_fail については、汎化の改善で説明します。

次のコードは、入力 p およびターゲット t の学習セットを作成します。バッチ学習の場合、すべての入力ベクトルが 1 つの行列に配置されます。

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];

フィードフォワード ネットワークを作成します。

net = feedforwardnet(3,'traingd');

この簡単な例では、後で紹介する機能をオフにします。

net.divideFcn = '';

この時点で、一部の既定の学習パラメーターの変更が必要な場合もあります。

net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;

既定の学習パラメーターを使用する場合、前のコマンドは不要です。

これでネットワークの学習の準備が整いました。

[net,tr] = train(net,p,t);

学習記録 tr には、学習の進行状況に関する情報が格納されます。

これで、学習済みネットワークのシミュレーションを行って、学習セットの入力に対する応答を取得できるようになりました。

a = net(p)
a =
   -1.0026   -0.9962   1.0010   0.9960

バッチ勾配降下法アルゴリズムの性能の例については、"Neural Network Design" のデモ nnd12sd1 [HDB96] を試してみてください。

アルゴリズム

traingd は、重み関数、正味入力関数、および伝達関数に導関数がある限り、任意のネットワークの学習を行うことができます。

重みとバイアスの変数 X に対する性能 perf の微分の計算には、逆伝播が使用されます。各変数は、勾配降下法に従って調整されます。

dX = lr * dperf/dX

次のいずれかの条件が発生すると、学習が停止します。

  • epochs (反復回数) の最大数に達する。

  • time の最大値を超える。

  • 性能が goal に最小化される。

  • 性能の勾配が min_grad より小さくなる。

  • 検証性能 (検証誤差) が、最後の低下以降、max_fail 回を超えて増加する (検証の使用時)。

バージョン履歴

R2006a より前に導入