Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

trainlm

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

説明

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

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

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

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

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

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

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

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

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

  • net.trainParam.mu — 初期 mu。既定値は 0.001 です。

  • net.trainParam.mu_decmu の減少係数。既定値は 0.1 です。

  • net.trainParam.mu_incmu の増加係数。既定値は 10 です。

  • net.trainParam.mu_maxmu の最大値。既定値は 1e10 です。

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

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

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

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

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

すべて折りたたむ

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

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

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

Figure Neural Network Training (29-Aug-2023 21:16:13) contains an object of type uigridlayout.

y = net(x);

入力引数

すべて折りたたむ

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

出力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

制限

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

詳細

すべて折りたたむ

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

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

H = JTJ(1)

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

g = JTe(2)

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

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

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

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

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

ネットワークの利用

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

  1. NET.trainFcntrainlm に設定します。これにより、NET.trainParamtrainlm の既定のパラメーターに設定されます。

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

どちらの場合も、結果として得られるネットワークで train を呼び出すことによって、trainlm を使用してネットワークの学習を行います。例については、feedforwardnet および cascadeforwardnet を参照してください。

アルゴリズム

ネットワークの 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 より前に導入