ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

traingd

構文

net.trainFcn = 'traingd'
[net,tr] = train(net,...)

説明

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

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

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

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

net.trainParam.epochs1000

学習エポックの最大回数

net.trainParam.goal0

性能目標

net.trainParam.showCommandLinefalse

コマンド ライン出力の生成

net.trainParam.showWindowtrue

学習 GUI の表示

net.trainParam.lr0.01

学習率

net.trainParam.max_fail6

検証エラーの最大回数

net.trainParam.min_grad1e-5

性能の勾配の最小値

net.trainParam.show25

表示間のエポック数 (表示なしは NaN)

net.trainParam.timeinf

最大学習時間 (秒単位)

ネットワークの利用

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 より前に導入