ドキュメンテーション

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

trainrp

構文

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

説明

trainrp は、弾性逆伝播法アルゴリズム (Rprop) に従って重みとバイアスの値を更新するネットワーク学習関数です。

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

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

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

net.trainParam.epochs1000

学習エポックの最大回数

net.trainParam.show25

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

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

学習 GUI の表示

net.trainParam.goal0

性能目標

net.trainParam.timeinf

最大学習時間 (秒単位)

net.trainParam.min_grad1e-5

性能の勾配の最小値

net.trainParam.max_fail6

検証エラーの最大回数

net.trainParam.lr0.01

学習率

net.trainParam.delt_inc1.2

重みの変化のインクリメント

net.trainParam.delt_dec0.5

重みの変化のデクリメント

net.trainParam.delta00.07

初期の重みの変化

net.trainParam.deltamax50.0

重みの最大変化

ネットワークの利用

trainrpfeedforwardnet または cascadeforwardnet を使用する標準的なネットワークを作成できます。

trainrp を使用して学習が行われるよう、カスタム ネットワークを以下のように準備します。

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

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

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

ここでは、入力 p およびターゲット t で構成される問題を、ネットワークを使用して解きます。

p = [0 1 2 3 4 5];
t = [0 0 0 1 1 1];

2 つの隠れニューロンおよびこの学習関数を持つ 2 層フィードフォワード ネットワークが作成されます。

ネットワークを作成してテストします。

net = feedforwardnet(2,'trainrp');

ネットワークの学習と再テストが行われます。

net.trainParam.epochs = 50;
net.trainParam.show = 10;
net.trainParam.goal = 0.1;
net = train(net,p,t);
a = net(p)

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

詳細

すべて折りたたむ

弾性逆伝播法

多層ネットワークでは、シグモイド伝達関数が隠れ層で一般的に使用されます。これらの関数は無限の入力範囲を有限の出力範囲に圧縮するため、通常 "スカッシング" 関数と呼ばれます。シグモイド関数には、入力が大きくなるにつれて勾配が必ず 0 に近づくという特徴があります。このことは、最急降下法を使用してシグモイド関数が含まれる多層ネットワークに学習させる場合に、問題の原因となります。勾配の大きさが非常に小さくなることによって、重みとバイアスが最適値から離れていても、重みとバイアスの変化が小さくなる可能性があるためです。

弾性逆伝播法 (Rprop) 学習アルゴリズムの目的は、偏微分の大きさによるこのような悪影響を排除することです。重み更新の方向は、微分の符号のみによって決まります。微分の大きさは重み更新に影響しません。重みの変化のサイズは、個別の更新値によって決まります。それぞれの重みとバイアスの更新値は、その重みについての性能関数の微分が 2 つの連続する反復に対して同じ符号であれば常に、係数 delt_inc で増加します。更新値は、その重みについての微分の符号が前の反復から変化していれば常に、係数 delt_dec で減少します。微分が 0 の場合、更新値は同じままです。重みが振動している場合は常に、重みの変化が減少します。複数の反復で重みが同じ方向に変化し続ける場合、重みの変化の大きさが増加します。Rprop アルゴリズムの詳細な説明は [RiBr93] を参照してください。

次のコードは、前のネットワークを再作成して、Rprop アルゴリズムを使用して学習を行います。trainrp の学習パラメーターは、epochsshowgoaltimemin_gradmax_faildelt_incdelt_decdelta0、および deltamax です。最初の 8 個のパラメーターについては前述しています。最後の 2 つは、それぞれ初期ステップ サイズと最大ステップ サイズです。Rprop の性能は、学習パラメーターの設定にはあまり左右されません。以下の例では、学習パラメーターは既定値のままです。

p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'trainrp');
net = train(net,p,t);
y = net(p)

rprop は一般的に、標準の最急降下法アルゴリズムよりはるかに高速です。必要メモリ量があまり増加しないという優れた特性もあります。必要なのは、それぞれの重みとバイアスの更新値を格納することであり、これは勾配の格納に相当します。

アルゴリズム

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

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

dX = deltaX.*sign(gX);

ここで、deltaX の要素はすべて delta0 に初期化されており、gX は勾配です。各反復で、deltaX の要素が変更されます。gX の要素によって、ある反復から次の反復までに符号が変化した場合、deltaX の対応する要素が delta_dec ずつ減少します。gX の要素によって、ある反復から次の反復まで符号が変化しなかった場合、deltaX の対応する要素が delta_inc ずつ増加します。Riedmiller, M.、および H. Braun ("A direct adaptive method for faster backpropagation learning: The RPROP algorithm," Proceedings of the IEEE International Conference on Neural Networks,1993, pp. 586–591) を参照してください。

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

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

  • time の最大値を超える。

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

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

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

参照

Riedmiller, M., and H. Braun, "A direct adaptive method for faster backpropagation learning: The RPROP algorithm," Proceedings of the IEEE International Conference on Neural Networks,1993, pp. 586–591.

R2006a より前に導入