ドキュメンテーション

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

trainlm

レーベンバーグ・マルカート法逆伝播

構文

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

説明

trainlm は、レーベンバーグ・マルカート法の最適化に従って重みとバイアスの値を更新するネットワーク学習関数です。

trainlm は多くの場合、ツールボックスで最も高速な逆伝播アルゴリズムです。他のアルゴリズムより多くのメモリを必要としますが、このアルゴリズムを教師ありアルゴリズムの第 1 候補とすることを強くお勧めします。

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

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

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

net.trainParam.epochs1000

学習エポックの最大回数

net.trainParam.goal0

性能目標

net.trainParam.max_fail6

検証エラーの最大回数

net.trainParam.min_grad1e-7

性能の勾配の最小値

net.trainParam.mu0.001

初期 mu

net.trainParam.mu_dec0.1

mu の減少係数

net.trainParam.mu_inc10

mu の増加係数

net.trainParam.mu_max1e10

最大 mu

net.trainParam.show25

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

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

学習 GUI の表示

net.trainParam.timeinf

最大学習時間 (秒単位)

検証ベクトルは、検証ベクトルに対するネットワーク性能が改善できない、または max_fail エポック連続して変化しない場合に、学習を早期に停止するために使用されます。テスト ベクトルは、ネットワークの汎化が適切に行われていることを詳しく調べるために使用されますが、学習には影響しません。

ネットワークの利用

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

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

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

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

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

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

すべて折りたたむ

この例では、学習関数 trainlm を使用してニューラル ネットワークの学習を行う方法を説明します。

以下では、体脂肪率を予測するように、ニューラル ネットワークに学習させます。

[x, t] = bodyfat_dataset;
net = feedforwardnet(10, 'trainlm');
net = train(net, x, t);
y = net(x);

制限

この関数は、性能が二乗誤差の平均または和であると仮定して、ヤコビアンを計算に使用します。そのため、この関数によって学習するネットワークでは、mse または sse のいずれかの性能関数を使用しなければなりません。

詳細

すべて折りたたむ

レーベンバーグ・マルカート法アルゴリズム

レーベンバーグ・マルカート法アルゴリズムは、準ニュートン法と同様に、ヘッセ行列を計算せずに 2 次の学習速度を実現できるように設計されています。(フィードフォワード ネットワークの学習で一般的であるように) 性能関数が二乗和の形式を取る場合、ヘッセ行列は以下のように近似できます。

H = JTJ

勾配は以下のように計算できます。

g = JTe

ここで、J は重みとバイアスに対するネットワーク誤差の 1 階微分を格納するヤコビ行列であり、e はネットワーク誤差のベクトルです。ヤコビ行列は、標準の逆伝播法を使用して計算できます ([HaMe94] を参照してください)。この方法は、ヘッセ行列の計算よりはるかに簡単です。

レーベンバーグ・マルカート法アルゴリズムでは、以下のニュートン法に似た更新において、この、ヘッセ行列への近似を使用します。

xk+1=xk[JTJ+μI]1JTe

スカラー µ が 0 の場合、これは近似ヘッセ行列を使用するニュートン法になります。µ の値が大きい場合、小さいステップ サイズを使用する勾配降下法になります。ニュートン法は、誤差の最小値付近で高速かつ精度が高いため、できるだけ迅速にニュートン法に移行することが目的となります。そのため、µ は、ステップが成功 (性能関数が減少) するたびに減少し、仮のステップによって性能関数が増加した場合にのみ増加します。この方法では、アルゴリズムの反復のたびに性能関数が減少します。

レーベンバーグ・マルカート法アルゴリズムのもともとの記述については、[Marq63] を参照してください。ニューラル ネットワークの学習へのレーベンバーグ・マルカート法の適用については、[HaMe94]、および [HDB96] の 12-19 ページからで説明されています。このアルゴリズムは、(最大で数百個の重みがある) 中程度のサイズのフィードフォワード ニューラル ネットワークが学習する最も高速な方法であると考えられます。行列方程式の解法は組み込み関数であり、MATLAB 環境でその属性がより顕著になるため、MATLAB® ソフトウェアにも効率的に実装されています。

レーベンバーグ・マルカート法のバッチ アルゴリズムの性能の例については、『Neural Network Designのデモ nnd12m [HDB96] を試してみてください。

アルゴリズム

ネットワークの NET.divideFcn プロパティがデータ分割関数に設定されている場合、trainlm は検証ベクトルおよびテスト ベクトルを使用する学習をサポートします。検証ベクトルは、検証ベクトルに対するネットワーク性能が改善できない、または max_fail エポック連続して変化しない場合に、学習を早期に停止するために使用されます。テスト ベクトルは、ネットワークの汎化が適切に行われていることを詳しく調べるために使用されますが、学習には影響しません。

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

重みとバイアスの変数 X に対する性能 perf のヤコビアン jX の計算には、逆伝播が使用されます。各変数は、レーベンバーグ・マルカート法に従って調整されます。

jj = jX * jX
je = jX * E
dX = -(jj+I*mu) \ je

ここで、E はすべての誤差であり、I は単位行列です。

上記の変更によって性能値が減少するまで、適応値 mumu_inc ずつ増加します。その後、ネットワークに対して変更が行われ、mumu_dec ずつ減少します。

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

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

  • time の最大値を超える。

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

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

  • mumu_max を超える。

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

R2006a より前に導入