ドキュメンテーション

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

traingda

適応学習率を使用した勾配降下法の逆伝播

構文

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

説明

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

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

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

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

net.trainParam.epochs1000

学習エポックの最大回数

net.trainParam.goal0

性能目標

net.trainParam.lr0.01

学習率

net.trainParam.lr_inc1.05

学習率を増加させる比率

net.trainParam.lr_dec0.7

学習率を減少させる比率

net.trainParam.max_fail6

検証エラーの最大回数

net.trainParam.max_perf_inc1.04

性能の最大増加量

net.trainParam.min_grad1e-5

性能の勾配の最小値

net.trainParam.show25

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

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

学習 GUI の表示

net.trainParam.timeinf

最大学習時間 (秒単位)

ネットワークの利用

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

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

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

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

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

詳細

すべて折りたたむ

適応学習率を使用した勾配降下法の逆伝播

標準の最急降下法では、学習率が学習全体を通じて一定に保持されます。アルゴリズムの性能は、学習率が適切に設定されているかどうかに大きく左右されます。学習率が高すぎる場合、アルゴリズムが振動して不安定になることがあります。学習率が小さすぎる場合、アルゴリズムの収束に時間がかかります。学習前に学習率の最適な設定を決定するのは現実的ではありません。実際、アルゴリズムは性能曲面全体を移動するため、最適な学習率は学習プロセス中に変化します。

学習プロセス中に学習率を変更できるようにすると、最急降下法アルゴリズムの性能を改善できます。適応学習率は、学習を安定させたままで、学習ステップ サイズをできるだけ大きく維持しようとします。学習率は、局所的な誤差曲面の複雑度に応答するようになっています。

適応学習率を使用する場合、traingd によって使用される学習手順にいくつかの変更が必要です。まず、ネットワークの初期の出力と誤差が計算されます。エポックごとに、現在の学習率を使用して新しい重みとバイアスが計算されます。その後、新しい出力と誤差が計算されます。

モーメンタムと同様に、古い誤差に対する新しい誤差の超過率が事前定義された比率 max_perf_inc (通常は 1.04) を上回る場合、新しい重みとバイアスは破棄されます。さらに、(通常は、lr_dec = 0.7 で乗算することによって) 学習率が減少します。そうでない場合、新しい重みなどが維持されます。新しい誤差が古い誤差を下回る場合、(通常は、lr_inc = 1.05 で乗算することによって) 学習率が増加します。

この手順では、誤差を大幅に増加させることなくネットワークに学習させることができる範囲に限り、学習率が増加します。そのため、局所的な曲面形状に対して最適に近い学習率が得られます。学習率を大きくしても学習が安定している可能性がある場合には、学習率が増加します。学習率が大きすぎて誤差の減少が保証されない場合には、学習が再度安定するまで学習率が低下します。

可変学習率アルゴリズムの性能の例については、『Neural Network Designのデモ nnd12vl [HDB96] を試してみてください。

適応学習率を使用した逆伝播学習は、関数 traingda に実装されています。この関数は、追加の学習パラメーター max_perf_inclr_dec、および lr_inc があることを除き、traingd と同様に呼び出されます。これを呼び出して前の 2 層ネットワークに学習させる方法は以下のとおりです。

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'traingda');
net.trainParam.lr = 0.05;
net.trainParam.lr_inc = 1.05;
net = train(net,p,t);
y = net(p)

アルゴリズム

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

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

dX = lr*dperf/dX

エポックごとに、性能が目標に向かって減少する場合、学習率が係数 lr_inc で増加します。係数 max_perf_inc を超えて性能が増加する場合、係数 lr_dec で学習率が調整され、性能が増加する変更は行われません。

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

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

  • time の最大値を超える。

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

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

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

R2006a より前に導入