TrainingOptionsLBFGS
説明
TrainingOptionsLBFGS オブジェクトを使用して、直線探索方法、勾配とステップの許容誤差など、メモリ制限 BFGS (L-BFGS) オプティマイザーの学習オプションを設定します。
L-BFGS アルゴリズム[1]は、Broyden-Fletcher-Goldfarb-Shanno (BFGS) アルゴリズムを近似する準ニュートン法です。L-BFGS アルゴリズムは、単一のバッチで処理できる小規模なネットワークやデータ セットに使用します。
作成
trainingOptions 関数を使用し、最初の入力引数として "lbfgs" を指定し、TrainingOptionsLBFGS オブジェクトを作成します。
プロパティ
L-BFGS
学習に使用する最大反復回数。正の整数として指定します。
L-BFGS ソルバーは全バッチ ソルバーです。これは、学習セット全体を 1 回の反復で処理することを意味します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
適切な学習率を検出する方法。次の値のいずれかとして指定します。
"weak-wolfe"— 弱 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。"strong-wolfe"— 強 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。"backtracking"— 十分な減少条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持しません。
保存する状態更新の数。正の整数として指定します。ほとんどのタスクには 3 ~ 20 の値が適しています。
L-BFGS アルゴリズムは、勾配計算の履歴を使用してヘッセ行列を再帰的に近似します。詳細については、メモリ制限 BFGSを参照してください。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
逆ヘッセ行列の近似を特徴付ける初期値。正のスカラーとして指定します。
メモリを節約するため、L-BFGS アルゴリズムでは密なヘッセ行列 B の保存や反転は行われません。代わりに、アルゴリズムは近似 を使用します。ここで、m は履歴サイズであり、逆ヘッセ因子 はスカラーです。また、I は単位行列です。このアルゴリズムは、スカラーの逆ヘッセ因子のみを格納します。アルゴリズムは各ステップで逆ヘッセ因子を更新します。
逆ヘッセ因子の初期値は、 の値です。
詳細については、メモリ制限 BFGSを参照してください。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
学習率を決定するための直線探索の反復の最大数。正の整数として指定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
相対勾配の許容値。正のスカラーとして指定します。
相対勾配の許容誤差。次のいずれかの値として指定します。
正のスカラー — 相対勾配が指定した値以下になると、学習を停止します。
0(R2025a 以降) — 相対勾配に基づいて学習を停止しません。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ステップ サイズの許容誤差。次のいずれかの値として指定します。
正のスカラー — アルゴリズムの実行するステップが指定された値以下になると、学習を停止します。
0(R2025a 以降) — ステップ サイズに基づいて学習を停止しません。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
R2024b 以降
初期ステップ サイズ。次のいずれかの値として指定します。
[]— 初期ヘッセ近似の決定に初期ステップ サイズを使用しません。"auto"— 初期ステップ サイズを自動的に決定します。ソフトウェアは、初期ステップ サイズ を使用します。ここで、W0 はネットワークの初期の学習可能なパラメーターです。正の実数スカラー — 指定された値を初期ステップ サイズ として使用します。
InitialStepSize が "auto" または正の実数スカラーの場合、ソフトウェアは を使用して初期逆ヘッセ行列を近似します。ここで、λ0 は初期逆ヘッセ行列係数であり、 は初期の学習可能なパラメーターに関する損失の勾配を示します。詳細については、メモリ制限 BFGSを参照してください。
データ レイアウト
R2025a 以降
categorical 入力の符号化。次のいずれかの値として指定します。
"integer"— categorical 入力を整数値に変換します。この場合、ネットワークは categorical 入力ごとに 1 つの入力チャネルをもたなければなりません。"one-hot"— categorical 入力を one-hot 符号化されたベクトルに変換します。この場合、ネットワークは categorical 入力ごとにnumCategories個のチャネルをもたなければなりません。ここで、numCategoriesは対応する categorical 入力のカテゴリの数です。
R2025a 以降
categorical ターゲットの符号化。次のいずれかの値として指定します。
"auto"—"index-crossentropy"損失関数を使用して学習させる場合は、categorical ターゲットを整数値に変換します。それ以外の場合は、categorical ターゲットを one-hot 符号化されたベクトルに変換します。"integer"— categorical ターゲットを整数値に変換し、整数に符号化された値を損失関数とメトリクス関数に渡します。"one-hot"— categorical ターゲットを one-hot 符号化されたベクトルに変換し、one-hot 符号化された値を損失関数とメトリクス関数に渡します。
入力データの次元の説明。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。
InputDataFormats が "auto" の場合、ソフトウェアは、ネットワークの入力で必要とされる形式を使用します。そうでない場合、ソフトウェアは、該当するネットワーク入力に対して指定された形式を使用します。
データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。
各文字は以下のとおりです。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。
"S" または "U" のラベルが付いた次元については、複数回指定できます。ラベル "C"、"B"、および "T" はそれぞれ 1 回まで使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。
複数の入力をもつニューラル ネットワーク net の場合、入力データ形式の配列を指定します。ここで、InputDataFormats(i) は入力 net.InputNames(i) に対応します。
詳細については、深層学習のデータ形式を参照してください。
データ型: char | string | cell
ターゲット データの次元の説明。次のいずれかの値として指定します。
"auto"— ターゲット データと入力データの次元の数が同じ場合、関数trainnetはInputDataFormatsで指定された形式を使用します。ターゲット データと入力データの次元の数が異なる場合、関数trainnetは損失関数で必要とされる形式を使用します。string 配列、文字ベクトル、または文字ベクトルの cell 配列 — 関数
trainnetはユーザーが指定したデータ形式を使用します。
データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。
各文字は以下のとおりです。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。
"S" または "U" のラベルが付いた次元については、複数回指定できます。ラベル "C"、"B"、および "T" はそれぞれ 1 回まで使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。
詳細については、深層学習のデータ形式を参照してください。
データ型: char | string | cell
監視
ニューラル ネットワークの学習中に表示するプロット。次のいずれかの値として指定します。
"none"— 学習中にプロットを表示しません。"training-progress"— 学習の進行状況をプロットします。
プロットには、学習と検証の損失、Metrics プロパティで指定された学習と検証のメトリクス、および学習の進行状況に関する追加情報が表示されます。
学習後にプログラムで学習の進行状況プロットを開いたり閉じたりするには、関数 trainnet の 2 番目の出力で関数 show および close を使用します。Plots 学習オプションが "none" として指定されている場合でも、関数 show を使用して学習の進行状況を表示できます。
Y 軸のスケールを対数に切り替えるには、座標軸ツール バーを使用します。
プロットの詳細については、深層学習における学習の進行状況の監視を参照してください。
監視するメトリクス。次のいずれかの値として指定します。
組み込みメトリクスまたは損失関数名 — string スカラー、文字ベクトル、または次の 1 つ以上の名前の cell 配列か string 配列としてメトリクスを指定します。
メトリクス:
"accuracy"— 精度 (最上位精度とも呼ばれる)"auc"— ROC 曲線下面積 (AUC)"fscore"— F スコア (F1 スコアとも呼ばれる)"precision"— 適合率"recall"— 再現率"rmse"— 平方根平均二乗誤差"mape"— 平均絶対誤差率 (MAPE) (R2024b 以降)"rsquared"— R2 (決定係数) (R2025a 以降)
損失関数:
"crossentropy"— 分類タスクのクロスエントロピー損失。 (R2024b 以降)"indexcrossentropy"— 分類タスクのインデックス クロスエントロピー損失。 (R2024b 以降)"binary-crossentropy"— バイナリおよびマルチラベル分類タスクのバイナリ クロスエントロピー損失。 (R2024b 以降)"mae"/"mean-absolute-error"/"l1loss"— 回帰タスクの平均絶対誤差。 (R2024b 以降)"mse"/"mean-squared-error"/"l2loss"— 回帰タスクの平均二乗誤差。 (R2024b 以降)"huber"— 回帰タスクの Huber 損失 (R2024b 以降)
損失関数を
"crossentropy"に設定し、メトリクスとして"index-crossentropy"を指定すること、または損失関数を"index-crossentropy"に設定し、メトリクスとして"crossentropy"を指定することはサポートされていないことに注意してください。深層学習のメトリクスと損失関数の詳細については、Deep Learning Metricsを参照してください。
組み込みメトリクス オブジェクト — より高い柔軟性が必要な場合は、組み込みメトリクス オブジェクトを使用できます。ソフトウェアは、次の組み込みメトリクス オブジェクトをサポートします。
MAPEMetric(R2024b 以降)RSquaredMetric(R2025a 以降)
組み込みメトリクス オブジェクトを作成するときは、平均化のタイプ、タスクが単一ラベルか複数ラベルかなどの追加オプションを指定できます。
カスタム メトリクス関数ハンドル — 組み込みメトリクス以外のメトリクスが必要な場合は、関数ハンドルを使用してカスタム メトリクスを指定できます。関数の構文は
metric = metricFunction(Y,T)でなければなりません。ここで、Yはネットワーク予測に対応し、Tはターゲット応答に対応します。複数の出力をもつネットワークの場合、構文はmetric = metricFunction(Y1,…,YN,T1,…TM)でなければなりません。ここで、Nは出力の数、Mはターゲットの数です。詳細については、Define Custom Metric Functionを参照してください。deep.DifferentiableFunctionオブジェクト (R2024a 以降) — カスタム逆方向関数をもつ関数オブジェクト。詳細については、Define Custom Deep Learning Operationsを参照してください。カスタム メトリクス オブジェクト — より詳細なカスタマイズが必要な場合は、独自のカスタム メトリクス オブジェクトを定義できます。カスタム メトリクスの作成方法を示す例については、Define Custom Metric Objectを参照してください。カスタム メトリクスの作成に関する一般的な情報については、Define Custom Deep Learning Metric Objectを参照してください。
trainingOptions関数のMetricsオプションとしてカスタム メトリクスを指定します。
メトリクスを関数ハンドル、deep.DifferentiableFunction オブジェクト、またはカスタム メトリクス オブジェクトとして指定し、trainnet 関数を使用してニューラル ネットワークに学習させる場合、ソフトウェアによってメトリクスに渡されるターゲットのレイアウトは、ターゲットのデータ型、trainnet 関数で指定する損失関数、および指定するその他のメトリクスによって異なります。
ターゲットが数値配列の場合、ソフトウェアはターゲットをメトリクスに直接渡します。
損失関数が
"index-crossentropy"で、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを数値クラス インデックスに自動的に変換し、メトリクスに渡します。その他の損失関数では、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを自動的に one-hot 符号化されたベクトルに変換し、メトリクスに渡します。
例: Metrics=["accuracy","fscore"]
例: Metrics=["accuracy",@myFunction,precisionObj]
R2024a 以降
早期に停止して最適なネットワークを返すのに使用されるオブジェクティブ メトリクスの名前。string スカラーまたは文字ベクトルとして指定します。
このメトリクスの名前は、"loss" であるか、Metrics 引数で指定されたメトリクスの名前と同じでなければなりません。関数ハンドルで指定されたメトリクスはサポートされていません。ObjectiveMetricName の値をカスタム メトリクスの名前として指定するには、カスタム メトリクス オブジェクトの Maximize プロパティの値が空であってはなりません。詳細については、Define Custom Deep Learning Metric Objectを参照してください。
早期に停止するためのオブジェクティブ メトリクスの指定に関する詳細については、ValidationPatience を参照してください。オブジェクティブ メトリクスを使用して最適なネットワークを返すことに関する詳細については、OutputNetwork を参照してください。
データ型: char | string
コマンド ウィンドウに学習の進行状況の情報を表示するためのフラグ。1 (true) または 0 (false) として指定します。
このプロパティが 1 (true) である場合、ソフトウェアは次の情報を表示します。
| 変数 | 説明 |
|---|---|
Iteration | 反復回数。 |
TimeElapsed | 経過時間。時間、分、秒で示されます。 |
TrainingLoss | 学習損失。 |
ValidationLoss | 検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。 |
GradientNorm | 勾配のノルム。 |
StepNorm | ステップのノルム。 |
学習オプションで追加のメトリクスを指定した場合、詳細出力にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、変数 TrainingAccuracy および ValidationAccuracy もこの情報に含まれます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。正の整数として指定します。
学習中にニューラル ネットワークを検証する場合、ソフトウェアは、検証が行われるたびにコマンド ウィンドウにも出力します。
このプロパティを有効にするには、Verbose 学習オプションを 1 (true) に設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
学習中に呼び出す出力関数。関数ハンドル、または関数ハンドルの cell 配列として指定します。ソフトウェアは、学習の開始前、各反復後、および学習の完了時に関数を 1 回呼び出します。
関数の構文は stopFlag = f(info) でなければなりません。ここで、info は学習の進行状況に関する情報が格納される構造体、stopFlag は学習を早期に停止させることを示すスカラーです。stopFlag が 1 (true) の場合、ソフトウェアは学習を停止させます。それ以外の場合、ソフトウェアは学習を続行します。
関数 trainnet は、次のフィールドをもつ構造体 info を出力関数に渡します。
| フィールド | 説明 |
|---|---|
Iteration | 反復回数 |
TimeElapsed | 経過時間 (時間、分、秒) |
TrainingLoss | 学習損失 |
ValidationLoss | 検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。 |
GradientNorm | 勾配のノルム |
StepNorm | ステップのノルム |
State | 反復での学習状態。"start"、"iteration"、または "done" として指定します。 |
学習オプションで追加のメトリクスを指定した場合、学習情報にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、フィールド TrainingAccuracy および ValidationAccuracy もこの情報に含まれます。
フィールドが計算されない、または出力関数の特定の呼び出しに関連していない場合、そのフィールドには空の配列が含まれます。
出力関数の使用方法を示す例については、Custom Stopping Criteria for Deep Learning Trainingを参照してください。
データ型: function_handle | cell
検証
学習中の検証で使用するデータ。[] として指定するか、検証予測子と検証ターゲットを含むデータストア、table、cell 配列、または minibatchqueue オブジェクトとして指定します。
学習中に、ソフトウェアは検証データを使用して検証損失とメトリクス値を計算します。検証頻度を指定するには、ValidationFrequency 学習オプションを使用します。検証データを使用して、検証オブジェクティブ メトリクスが改善されなくなったときに学習を自動的に停止することもできます。既定では、オブジェクティブ メトリクスは損失に設定されます。自動検証停止をオンにするには、ValidationPatience 学習オプションを使用します。
ValidationData が [] の場合、学習中にニューラル ネットワークが検証されません。
ニューラル ネットワークに予測時と学習時で動作が異なる層 (ドロップアウト層など) がある場合、検証損失が学習損失より低くなる可能性があります。
ValidationData が [] の場合、学習中にニューラル ネットワークが検証されません。
データストア、table、minibatchqueue オブジェクト、または cell 配列 {predictors,targets} として検証データを指定します。ここで、predictors には検証予測子を格納し、targets には検証ターゲットを格納します。trainnet 関数でサポートされているいずれかのレイアウトを使用して、検証予測子と検証ターゲットの値を指定します。
詳細については、関数 trainnet の入力引数を参照してください。
反復回数で示されるニューラル ネットワークの検証の頻度。正の整数として指定します。
ValidationFrequency の値は、検証メトリクスの評価間の反復回数です。検証データを指定するには、ValidationData 学習オプションを使用します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ニューラル ネットワークの学習の検証を停止するまでの待機回数。正の整数または Inf として指定します。
ValidationPatience は、ニューラル ネットワークの学習が停止するまでに、検証セットでのオブジェクティブ メトリクスが前の最良値以下になることが許容される回数を指定します。ValidationPatience が Inf の場合、検証メトリクスの値によって学習が早期に停止することはありません。ソフトウェアは、メトリクスの Maximize プロパティの指定に従って、メトリクスを最大化または最小化しようと試みます。オブジェクティブ メトリクスが "loss" の場合、ソフトウェアは損失値を最小化しようと試みます。
返されるニューラル ネットワークは、OutputNetwork 学習オプションによって異なります。検証メトリクス値が最良のニューラル ネットワークを返すようにするには、OutputNetwork 学習オプションを "best-validation" に設定します。
R2024a より前: ソフトウェアは、検証損失値を使用して検証の許容回数を計算します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
学習完了時に返すニューラル ネットワーク。次のいずれかとして指定します。
"auto"–ValidationDataが指定されている場合は"best-validation"を使用します。それ以外の場合は"last-iteration"を使用します。"best-validation"– 検証メトリクス値が最良となる学習反復に対応するニューラル ネットワークを返します。最適化するメトリクスはObjectiveMetricNameオプションで指定します。このオプションを使用するには、ValidationData学習オプションを指定しなければなりません。"last-iteration"– 最後の学習反復に対応するニューラル ネットワークを返す。
正則化と正規化
L2 正則化 (重み減衰) の係数。非負のスカラーとして指定します。詳細については、L2 正則化を参照してください。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
入力層の正規化をリセットするオプション。次のいずれかに指定します。
1(true) — 入力層の正規化統計量をリセットし、学習時に再計算します。0(false) — 正規化統計量が空の場合、学習時に計算します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
バッチ正規化層の統計量を評価するモード。次のいずれかとして指定します。
"population"— 母集団の統計量を使用します。学習終了後に学習データが再度渡され、その結果得られる平均と分散を使用して最終的な統計量が決定されます。"moving"— 学習中、以下の更新ステップで与えられる実行時推定を使用して統計量を近似します。ここで、 と はそれぞれ更新後の平均と分散、 と はそれぞれ平均と分散の減衰値、 と はそれぞれ層入力の平均と分散、 と はそれぞれ移動平均と分散の値の最新値を表します。学習終了後、最後に得られた移動平均と分散の値が使用されます。このオプションは、CPU および単一の GPU による学習のみをサポートします。
"auto"—"moving"オプションを使用します。
勾配クリップ
勾配しきい値。Inf または正のスカラーとして指定します。勾配が GradientThreshold の値を超えた場合、勾配は GradientThresholdMethod 学習オプションに応じてクリップされます。
詳細については、勾配クリップを参照してください。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
勾配しきい値を超えた勾配の値をクリップするために使用する勾配しきい値法。次のいずれかに指定します。
"l2norm"— 学習可能なパラメーターの勾配の L2 ノルムがGradientThresholdより大きい場合は、L2 ノルムがGradientThresholdに等しくなるように勾配をスケーリングします。"global-l2norm"— グローバル L2 ノルム L がGradientThresholdより大きい場合は、すべての勾配をGradientThreshold/L 倍にスケーリングします。グローバル L2 ノルムでは、すべての学習可能なパラメーターが考慮されます。"absolute-value"— 学習可能なパラメーターの勾配に含まれる偏微分のうち、絶対値がGradientThresholdより大きいものについては、偏微分の符号を維持したまま、大きさがGradientThresholdに等しくなるように偏微分をスケーリングします。
詳細については、勾配クリップを参照してください。
シーケンス
入力シーケンスのパディングまたは切り捨てを行うオプション。次のいずれかのオプションとして指定します。
"longest"— 最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってニューラル ネットワークにノイズが生じることがあります。"shortest"— 最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用すると、関数はパディングを追加しなくなりますが、代わりにデータが破棄されます。
入力シーケンスのパディングと切り捨ての効果の詳細については、シーケンスのパディングと切り捨てを参照してください。
パディングまたは切り捨ての方向。次のいずれかのオプションとして指定します。
"right"— シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、ソフトウェアによって各シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。"left"— シーケンスの左側に対してパディングまたは切り捨てを行います。各シーケンスが同じタイム ステップで終わるように、ソフトウェアによって各シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。
再帰層は 1 タイム ステップずつシーケンス データを処理するため、再帰層の OutputMode プロパティが "last" の場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。シーケンス データの左側に対してパディングまたは切り捨てを行うには、名前と値の引数 SequencePaddingDirection を "left" に設定します。
sequence-to-sequence ニューラル ネットワークの場合 (各再帰層について OutputMode プロパティが "sequence" である場合)、最初のタイム ステップでパディングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。シーケンス データの右側に対してパディングまたは切り捨てを行うには、名前と値の引数 SequencePaddingDirection を "right" に設定します。
シーケンスのパディングと切り捨ての効果の詳細については、シーケンスのパディングと切り捨てを参照してください。
入力シーケンスをパディングする値。スカラーとして指定します。
ニューラル ネットワーク全体にエラーが伝播される可能性があるため、NaN でシーケンスをパディングしないでください。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ハードウェアと高速化
ハードウェア リソース。次のいずれかの値として指定します。
"auto"— 利用可能な場合、GPU を使用します。そうでない場合、CPU を使用します。"gpu"— GPU を使用します。GPU を使用するには Parallel Computing Toolbox™ ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスの詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。"cpu"— CPU を使用します。
R2024a 以降
パフォーマンスの最適化。次のいずれかの値として指定します。
"auto"– 入力ネットワークとハードウェア リソースに適した最適化の回数を自動的に適用します。"none"– すべての最適化を無効にします。
"auto" 高速化オプションを使用すると、パフォーマンス上のメリットが得られますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。サイズと形状が同じである異なる入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。
チェックポイント
チェックポイント ニューラル ネットワークの保存用のパス。string スカラーまたは文字ベクトルとして指定します。
パスを指定しない (既定の
""を使用する) 場合、チェックポイント ニューラル ネットワークは保存されません。パスを指定すると、ソフトウェアによってこのパスにチェックポイント ニューラル ネットワークが保存され、各ニューラル ネットワークに一意の名前が割り当てられます。その後、いずれかのチェックポイント ニューラル ネットワークを読み込み、そのニューラル ネットワークから学習を再開できます。
フォルダーが存在していない場合、チェックポイント ニューラル ネットワークを保存するパスを指定する前に、まずフォルダーを作成しなければなりません。指定したパスが存在していない場合、ソフトウェアはエラーをスローします。
データ型: char | string
チェックポイント ニューラル ネットワークを繰り返し保存する頻度。正の整数として指定します。
このオプションは、CheckpointPath が空でない場合にのみ有効です。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
例
L-BFGS オプティマイザーを使用したニューラル ネットワーク学習の一連のオプションを作成します。
"strong-wolfe"直線探索方法を使用して学習率を決定します。相対勾配が
1e-5以下になると、学習を停止します。学習の進行状況プロットをオンにします。
options = trainingOptions("lbfgs", ... LineSearchMethod="strong-wolfe", ... GradientTolerance=1e-5, ... Plots="training-progress")
options =
TrainingOptionsLBFGS with properties:
HistorySize: 10
InitialInverseHessianFactor: 1
InitialStepSize: []
LineSearchMethod: 'strong-wolfe'
MaxNumLineSearchIterations: 20
MaxIterations: 1000
GradientTolerance: 1.0000e-05
StepTolerance: 1.0000e-05
Verbose: 1
VerboseFrequency: 50
ValidationData: []
ValidationFrequency: 50
ValidationPatience: Inf
Metrics: []
ObjectiveMetricName: 'loss'
ExecutionEnvironment: 'auto'
Plots: 'training-progress'
OutputFcn: []
SequenceLength: 'longest'
SequencePaddingValue: 0
SequencePaddingDirection: 'right'
InputDataFormats: "auto"
TargetDataFormats: "auto"
ResetInputNormalization: 1
BatchNormalizationStatistics: 'auto'
OutputNetwork: 'auto'
Acceleration: "auto"
CheckpointPath: ''
CheckpointFrequency: 30
CategoricalInputEncoding: 'integer'
CategoricalTargetEncoding: 'auto'
L2Regularization: 1.0000e-04
GradientThresholdMethod: 'l2norm'
GradientThreshold: Inf
アルゴリズム
L-BFGS アルゴリズム[1]は、Broyden-Fletcher-Goldfarb-Shanno (BFGS) アルゴリズムを近似する準ニュートン法です。L-BFGS アルゴリズムは、単一のバッチで処理できる小規模なネットワークやデータ セットに使用します。
このアルゴリズムは、次で指定される更新ステップを使用し、反復 k+1 で学習可能なパラメーター W を更新します。
ここで、Wk は反復 k における重みを表し、 は反復 k における学習率です。Bk は反復 k におけるヘッセ行列の近似であり、 は反復 k における学習可能なパラメーターに関する損失の勾配を表します。
L-BFGS アルゴリズムは、行列とベクトルの積 を直接計算します。このアルゴリズムでは、Bk の逆行列を計算する必要がありません。
メモリを節約するため、L-BFGS アルゴリズムでは密なヘッセ行列 B の保存や反転は行われません。代わりに、アルゴリズムは近似 を使用します。ここで、m は履歴サイズであり、逆ヘッセ因子 はスカラーです。また、I は単位行列です。このアルゴリズムは、スカラーの逆ヘッセ因子のみを格納します。アルゴリズムは各ステップで逆ヘッセ因子を更新します。
行列とベクトルの積 を直接計算するために、L-BFGS アルゴリズムは次の再帰的アルゴリズムを使用します。
を設定します。ここで、m は履歴サイズです。
について、以下のようにします。
とします。ここで、 および は、それぞれ反復 に対するステップおよび勾配の差分です。
を設定します。ここで、 は、、、および損失関数に対する損失の勾配から導出されます。詳細については、[1]を参照してください。
を返します。
勾配の大きさが指数関数的に増加する場合、学習は不安定になり、数回の反復で発散する場合があります。この "勾配爆発" は、学習損失が NaN または Inf になることによって示されます。勾配クリップは、学習率が大きい場合や外れ値が存在する場合に学習を安定させることによって、勾配爆発を防ぎます[2]。勾配クリップを使用すると、ネットワークの学習が高速になり、通常は学習済みタスクの精度に影響はありません。
勾配クリップは 2 種類あります。
ノルムベースの勾配クリップでは、しきい値に基づいて勾配を再スケーリングし、勾配の方向は変更しません。
GradientThresholdMethodの"l2norm"値と"global-l2norm"値は、ノルムベースの勾配クリップ法です。値ベースの勾配クリップでは、しきい値より大きい任意の偏微分をクリップします。この場合、勾配の方向が任意に変化する可能性があります。値ベースの勾配クリップの動作は予測できないものになる場合がありますが、変化が十分に小さければ、ネットワークが発散することはありません。
GradientThresholdMethodの値"absolute-value"は、値ベースの勾配クリップ法です。
損失関数 への重みの正則化項の追加は、過適合を抑える方法の 1 つです[3]、[4]。正則化項は、"重み減衰" とも呼ばれます。正則化項付きの損失関数は、以下の形式を取ります。
ここで、 は重みベクトル、 は正則化係数です。正則化関数 は以下のようになります。
バイアスは正則化されないことに注意してください[4]。L2Regularization 学習オプションを使用して、正則化係数 を指定できます。setL2Factor 関数を使用して、個々の層と学習可能なパラメーターの正則化係数を指定することもできます。
ネットワーク学習に使用される損失関数には、正則化項が含まれます。ただし、学習中にコマンド ウィンドウと学習の進行状況プロットに表示される損失値はデータのみの損失であり、正則化項は含まれません。
参照
[1] Liu, Dong C., and Jorge Nocedal. "On the limited memory BFGS method for large scale optimization." Mathematical programming 45, no. 1 (August 1989): 503-528. https://doi.org/10.1007/BF01589116.
[2] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.
[3] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.
[4] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.
バージョン履歴
R2023b で導入ニューラル ネットワークに学習させるために categorical 入力と categorical ターゲットを数値に変換する方法を指定するには、それぞれ CategoricalInputEncoding 引数と CategoricalTargetEncoding 引数を使用します。
L-BFGS または LM ソルバーを使用するときに、相対勾配またはステップ サイズの値によって学習が停止しないようにするには、trainingOptions 関数の GradientTolerance 引数と StepTolerance 引数をそれぞれ 0 に設定します。
学習時に R2 メトリクスを監視してプロットします。
このメトリクスを使用して学習時の動作を監視およびプロットするには、Metrics を使用して指定します。"rsquared" を指定することも、より高度なカスタマイズが必要な場合には RSquaredMetric オブジェクトを作成することもできます。
学習時およびテスト時に、新しいメトリクス オブジェクトや更新されたメトリクス オブジェクトを使用します。
MAPEMetric— 平均絶対誤差率 (MAPE)新しい
NumTopKClassesオプション付きのAccuracyMetric— 上位 k 位の精度新しい
Betaオプション付きのFScoreMetric— Fβ スコア
以下の新しい組み込みのメトリクスと損失名を直接指定することもできます。
"mape"— 平均絶対誤差率 (MAPE)"crossentropy"— クロスエントロピー損失"index-crossentropy"— インデックス クロスエントロピー損失"binary-crossentropy"— バイナリ クロスエントロピー損失"mse"/"mean-squared-error"/"l2loss"— 平均二乗誤差"mae"/"mean-absolute-error"/"l1loss"— 平均絶対誤差"huber"— Huber 損失
InitialStepSize 引数を使用して、L-BFGS ソルバーの初期ステップ サイズを指定します。
引数 ValidationData を使用して、検証データを minibatchqueue オブジェクトとして指定します。
パフォーマンスの自動最適化によって、学習が高速化されます。関数 trainnet を使用してネットワークに学習させる場合、パフォーマンスの自動最適化は既定で有効になります。関数 trainingOptions を使用して Acceleration オプションを "none" に設定することで、パフォーマンスの最適化を無効にできます。
メトリクスを deep.DifferentiableFunction オブジェクトとして指定します。
R2024a 以降、OutputNetwork 学習オプションの既定値は "auto" になります。検証データを指定した場合、ソフトウェアは最良の検証メトリクス値に対応するネットワークを返します。検証データを指定しなかった場合、ソフトウェアは最後の学習反復に対応するネットワークを返します。検証データがあるときに以前の既定値を再現するには、OutputNetwork を "last-iteration" に設定します。
この変更は、学習オプションを trainnet と共に使用している場合にのみ適用されます。学習オプションを関数 trainNetwork と共に使用している場合、動作に変更はなく、ソフトウェアは既定で最後の学習反復に対応するネットワークを返します。
OutputNetwork を "best-validation-loss" として指定することは推奨されません。コードで OutputNetwork が "best-validation-loss" に設定されている場合、代わりに "best-validation" を使用してください。ソフトウェアは、ObjectiveMetricName オプションで指定された最良の検証メトリクス値に対応するネットワークを返します。既定では、ObjectiveMetricName の値は "loss" に設定されています。この動作は、学習オプションを関数 trainnet と共に使用した場合にのみ適用されます。
学習オプションを関数 trainNetwork と共に使用し、OutputNetwork を "best-validation" として指定した場合、ソフトウェアは、検証損失値が最良であるネットワークを常に返します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)