Main Content

TrainingOptionsSGDM

モーメンタム項付き確率的勾配降下法の学習オプション

説明

学習率の情報、L2 正則化係数、ミニバッチのサイズなど、モーメンタム項付き確率的勾配降下法の学習オプション。

作成

trainingOptions を使用し、最初の入力引数に 'sgdm' を指定して、TrainingOptionsSGDM オブジェクトを作成します。

プロパティ

すべて展開する

プロットと表示

ネットワークの学習時に表示するプロット。次のいずれかに指定します。

  • 'none' — 学習中にプロットを表示しません。

  • 'training-progress' — 学習の進行状況をプロットします。プロットには、ミニバッチの損失と精度、検証の損失と精度、および学習の進行状況に関する追加情報が表示されます。プロットの右上隅には、停止ボタン があります。そのボタンをクリックすると、学習が停止し、ネットワークの現在の状態が返されます。[学習プロットのエクスポート] をクリックすると、学習プロットをイメージまたは PDF として保存できます。学習の進行状況プロットの詳細については、深層学習における学習の進行状況の監視を参照してください。

コマンド ウィンドウに学習の進行状況の情報を表示するかどうかのインジケーター。1 (true) または 0 (false) として指定します。

詳細出力には次の情報が表示されます。

分類ネットワーク

フィールド説明
Epochエポック数。1 エポックは、データを一巡することに対応します。
Iteration反復回数。反復は、ミニバッチに対応します。
Time Elapsed経過時間。時間、分、秒で示されます。
Mini-batch Accuracyミニバッチの分類精度。
Validation Accuracy検証データの分類精度。検証データを指定しない場合、このフィールドは表示されません。
Mini-batch Lossミニバッチの損失。出力層が ClassificationOutputLayer オブジェクトの場合、損失は、互いに排他的なクラスを含むマルチクラス分類問題の交差エントロピー損失です。
Validation Loss検証データの損失。出力層が ClassificationOutputLayer オブジェクトの場合、損失は、互いに排他的なクラスを含むマルチクラス分類問題の交差エントロピー損失です。検証データを指定しない場合、このフィールドは表示されません。
Base Learning Rate基本学習率。層の学習率係数とこの値が乗算されます。

回帰ネットワーク

フィールド説明
Epochエポック数。1 エポックは、データを一巡することに対応します。
Iteration反復回数。反復は、ミニバッチに対応します。
Time Elapsed経過時間。時間、分、秒で示されます。
Mini-batch RMSEミニバッチの平方根平均二乗誤差 (RMSE)。
Validation RMSE検証データの RMSE。検証データを指定しない場合、このフィールドは表示されません。
Mini-batch Lossミニバッチの損失。出力層が RegressionOutputLayer オブジェクトの場合、損失は半平均二乗誤差になります。
Validation Loss検証データの損失。出力層が RegressionOutputLayer オブジェクトの場合、損失は半平均二乗誤差になります。検証データを指定しない場合、このフィールドは表示されません。
Base Learning Rate基本学習率。層の学習率係数とこの値が乗算されます。

学習が停止すると、詳細出力に停止の理由が表示されます。

検証データを指定するには、ValidationData 学習オプションを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。正の整数として指定します。このオプションは、Verbose 学習オプションが 1 (true) の場合にのみ効果があります。

学習中にネットワークを検証する場合、trainNetwork でも、検証時に毎回、コマンド ウィンドウへの出力が行われます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ミニバッチ オプション

学習に使用するエポックの最大回数。正の整数として指定します。

反復とは、勾配降下法アルゴリズムでミニバッチを使用して損失関数の最小化を目指して実行される 1 ステップのことです。1 エポックは、データセット全体を一巡することです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習の各反復で使用するミニバッチのサイズ。正の整数として指定します。ミニバッチとは、損失関数の勾配を評価し、重みを更新するために使用される学習セットのサブセットのことです。

ミニバッチのサイズによって学習標本の数が均等に分割されない場合、trainNetwork は、各エポックの最後の完全なミニバッチに収まらない学習データを破棄します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

データのシャッフルのオプション。以下のいずれかに指定します。

  • 'once' — 学習前に 1 回、学習データと検証データをシャッフルします。

  • 'never' — データをシャッフルしません。

  • 'every-epoch' — 各学習エポックの前に学習データをシャッフルし、ネットワークの各検証の前に検証データをシャッフルします。ミニバッチのサイズによって学習標本の数が均等に分割されない場合、trainNetwork は、各エポックの最後の完全なミニバッチに収まらない学習データを破棄します。エポックごとに同じデータが破棄されるのを回避するには、Shuffle 学習オプションを 'every-epoch' に設定します。

検証

学習中の検証で使用するデータ。[] として指定するか、検証予測子と検証応答を含むデータストア、table、または cell 配列として指定します。

関数 trainNetwork でサポートされているのと同じ形式を使用して、検証予測子と検証応答を指定できます。検証データは、データストア、table、または cell 配列 {predictors,responses} として指定できます。ここで、predictors には検証予測子を格納し、responses には検証応答を格納します。

詳細については、関数 trainNetwork の入力引数 imagessequences、および features を参照してください。

学習中に、trainNetwork は検証データの検証精度と検証損失を計算します。検証頻度を指定するには、ValidationFrequency 学習オプションを使用します。検証データを使用して、検証損失が減少しなくなったときに学習を自動的に停止することもできます。自動検証停止をオンにするには、ValidationPatience 学習オプションを使用します。

ネットワークに予測時と学習中で動作が異なる層 (ドロップアウト層など) がある場合、検証精度が学習 (ミニバッチ) 精度より高くなる可能性があります。

検証データは、Shuffle 学習オプションに従ってシャッフルされます。Shuffle'every-epoch' の場合、検証データはネットワークの各検証の前にシャッフルされます。

ValidationData[] の場合、学習中にネットワークが検証されません。

反復回数で示されるネットワークの検証の頻度。正の整数として指定します。

ValidationFrequency の値は、検証メトリクスの評価間の反復回数です。検証データを指定するには、ValidationData 学習オプションを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ネットワークの学習の検証を停止するまでの待機回数。正の整数または Inf として指定します。

ValidationPatience は、ネットワークの学習が停止するまでに、検証セットでの損失が前の最小損失以上になることが許容される回数を指定します。ValidationPatienceInf の場合、検証損失の値によって学習が早期に停止することはありません。

返されるネットワークは、OutputNetwork 学習オプションによって異なります。検証損失が最小のネットワークを返すようにするには、OutputNetwork 学習オプションを "best-validation-loss" に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習完了時に返すネットワーク。次のいずれかとして指定します。

  • 'last-iteration' – 最後の学習反復に対応するネットワークを返す。

  • 'best-validation-loss' – 検証損失が最小となる学習反復に対応するネットワークを返す。このオプションを使用するには、ValidationData 学習オプションを指定しなければなりません。

ソルバー オプション

学習に使用される初期学習率。正のスカラーとして指定します。

学習率が小さすぎる場合、学習に時間がかかることがあります。学習率が大きすぎる場合、学習結果が準最適になったり、発散したりすることがあります。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

このプロパティは読み取り専用です。

学習率のスケジュールの設定。構造体として指定します。LearnRateScheduleSettings にはフィールド Method があります。このフィールドは、学習率を調整するメソッドのタイプを指定します。以下のメソッドを指定できます。

  • 'none' — 学習率は学習全体を通じて一定です。

  • 'piecewise' — 学習中に学習率を定期的に下げます。

Method'piecewise' の場合、LearnRateScheduleSettings にさらに 2 つのフィールドが含まれます。

  • DropRateFactor — 学習中の学習率を低下させる乗法係数

  • DropPeriod — 学習中の各学習率調整の合間で通過するエポック数

学習率スケジュールの設定は、trainingOptions を使用して指定します。

データ型: struct

L2 正則化 (重み減衰) の係数。非負のスカラーとして指定します。詳細については、L2 正則化を参照してください。

学習可能なパラメーターのあるネットワーク層に対して L2 正則化の乗数を指定できます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

モーメンタム項付き確率的勾配降下法における前の反復から現在の反復へのパラメーター更新ステップの寄与。0 から 1 までのスカラーとして指定します。

0 は前のステップからの寄与がないことを意味し、値 1 は前のステップからの寄与が最大であることを意味します。ほとんどのタスクにおいて、既定値で良い結果が得られます。

詳細については、モーメンタム項付き確率的勾配降下法を参照してください。

データ型: 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' – 学習中、以下の更新ステップで与えられる実行時推定を使用して統計量を近似します。

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    ここで、μ*σ2* はそれぞれ更新後の平均と分散、λμλσ2 はそれぞれ平均と分散の減衰値、μ^σ2^ はそれぞれ層入力の平均と分散、μσ2 はそれぞれ移動平均と分散の最新値を表します。学習終了後、最後に得られた移動平均と分散の値が使用されます。このオプションは、CPU および単一の GPU による学習のみをサポートします。

勾配クリップ

勾配のしきい値。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" — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。

  • 正の整数 — 各ミニバッチで、ミニバッチで最長のシーケンスより大きい、指定長の最も近い倍数になるようにシーケンスのパディングを行った後、それらのシーケンスを指定長のより小さなシーケンスに分割します。分割が発生すると、追加のミニバッチが作成されます。シーケンス全体がメモリに収まらない場合は、このオプションを使用します。または、MiniBatchSize オプションをより小さい値に設定して、ミニバッチごとのシーケンス数を減らしてみます。

入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

パディングまたは切り捨ての方向。次のいずれかに指定します。

  • "right" — シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。

  • "left" — シーケンスの左側に対してパディングまたは切り捨てを行います。シーケンスが同じタイム ステップで終わるように、シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。

再帰層は 1 タイム ステップずつシーケンス データを処理するため、再帰層の OutputMode プロパティが 'last' の場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。シーケンス データの左側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection オプションを "left" に設定します。

sequence-to-sequence ネットワークの場合 (各再帰層について OutputMode プロパティが 'sequence' である場合)、最初のタイム ステップでパティングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。シーケンスの右側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection オプションを "right" に設定します。

入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

入力シーケンスをパディングする値。スカラーとして指定します。

このオプションは、SequenceLength"longest" または正の整数の場合にのみ有効です。ネットワーク全体にエラーが伝播される可能性があるため、NaN でシーケンスをパディングしないでください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ハードウェア オプション

ネットワークの学習用のハードウェア リソース。次のいずれかに指定します。

  • 'auto' — 利用可能な場合、GPU を使用します。そうでない場合、CPU を使用します。

  • 'cpu' — CPU を使用します。

  • 'gpu' — GPU を使用します。

  • 'multi-gpu' — 既定のクラスター プロファイルに基づいてローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用します。現在の並列プールがない場合、使用可能な GPU の数と等しいプール サイズの並列プールが起動されます。

  • 'parallel' — 既定のクラスター プロファイルに基づいてローカルまたはリモートの並列プールを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、固有の GPU を持つワーカーのみが学習計算を実行します。プールに GPU がない場合、代わりに使用可能なすべての CPU ワーカーで学習が実行されます。

さまざまな実行環境をどのような場合に使用するかの詳細は、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。

'gpu''multi-gpu'、および 'parallel' のオプションを使用するには、Parallel Computing Toolbox™ が必要です。深層学習に GPU を使用するには、サポートされている GPU デバイスもなければなりません。サポートされているデバイスについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。これらのいずれかのオプションの選択時に Parallel Computing Toolbox または適切な GPU を利用できない場合、エラーが返されます。

並列学習の実行時に性能の改善を確認するには、MiniBatchSize および InitialLearnRate 学習オプションを GPU の数でスケール アップしてみてください。

'multi-gpu' オプションと 'parallel' オプションは、状態パラメーターをもつカスタム層や学習時にステートフルである組み込みの層を含むネットワークをサポートしていません。次に例を示します。

  • SequenceLength 学習オプションが正の整数の場合の LSTMLayer オブジェクト、BiLSTMLayer オブジェクト、GRULayer オブジェクトなどの再帰層

  • BatchNormalizationStatistics 学習オプションが 'moving' に設定されている場合の BatchNormalizationLayer オブジェクト

GPU 間または CPU 間での並列ワーカーの負荷分割。次のいずれかとして指定します。

  • 0 から 1 までのスカラー — ネットワーク学習計算に使用する各マシンのワーカーの割合。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、残りのワーカーはバックグラウンドでデータを取得して処理します。

  • 正の整数 — ネットワーク学習計算に使用する各マシンのワーカー数。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、残りのワーカーはバックグラウンドでデータを取得して処理します。

  • 数値ベクトル — 並列プール内の各ワーカーのネットワーク学習の負荷。ベクトル W の場合、ワーカー iW(i)/sum(W) の割合の作業 (ミニバッチあたりの例の数) を取得します。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、ワーカーの負荷を 0 にすることで、そのワーカーをバックグラウンドでのデータ取得に使用できます。指定するベクトルには、並列プール内のワーカーごとに 1 つの値が含まれていなければなりません。

並列プールから GPU にアクセスできる場合、固有の GPU を持たないワーカーは学習計算に使用されません。GPU を持つプールの場合、既定では、固有の GPU を持つすべてのワーカーを学習計算に使用し、残りのワーカーをバックグラウンド ディスパッチに使用します。プールから GPU にアクセスできず、CPU を学習に使用する場合、既定では、マシンあたり 1 つのワーカーをバックグラウンド データ ディスパッチに使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

データストアから学習データを読み取るためにバックグラウンド ディスパッチ (非同期事前取得キュー) を有効にするフラグ。0 (false) または 1 (true) として指定します。バックグラウンド ディスパッチには Parallel Computing Toolbox が必要です。

DispatchInBackground は、分割可能なデータストアでのみサポートされます。詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

チェックポイント

チェックポイント ネットワークの保存用のパス。文字ベクトルまたは string スカラーとして指定します。

  • パスを指定しない (既定の "" を使用する) 場合、チェックポイント ネットワークは保存されません。

  • パスを指定すると、trainNetwork によってこのパスにチェックポイント ネットワークが保存され、各ネットワークに一意の名前が割り当てられます。その後、いずれかのチェックポイント ネットワークを読み込み、そのネットワークから学習を再開できます。

    フォルダーが存在していない場合、チェックポイント ネットワークを保存するパスを指定する前に、まずフォルダーを作成しなければなりません。指定したパスが存在していない場合、trainingOptions はエラーを返します。

CheckpointFrequency オプションおよび CheckpointFrequencyUnit オプションは、チェックポイント ネットワークを保存する頻度を指定します。

ネットワーク チェックポイントの保存の詳細は、チェックポイント ネットワークの保存と学習の再開を参照してください。

データ型: char | string

チェックポイント ネットワークを保存する頻度。正の整数として指定します。

CheckpointFrequencyUnit'epoch' の場合、CheckpointFrequency エポックごとにチェックポイント ネットワークが保存されます。

CheckpointFrequencyUnit'iteration' の場合、CheckpointFrequency エポックごとにチェックポイント ネットワークが保存されます。

このオプションは、CheckpointPath が空でない場合にのみ有効です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

チェックポイントの頻度の単位。'epoch' または 'iteration' として指定します。

CheckpointFrequencyUnit'epoch' の場合、CheckpointFrequency エポックごとにチェックポイント ネットワークが保存されます。

CheckpointFrequencyUnit'iteration' の場合、CheckpointFrequency エポックごとにチェックポイント ネットワークが保存されます。

このオプションは、CheckpointPath が空でない場合にのみ有効です。

学習中に呼び出す出力関数。関数ハンドルまたは関数ハンドルの cell 配列として指定します。trainNetwork は、学習の開始前に 1 回、各反復後、学習の終了後に 1 回、指定された関数を呼び出します。trainNetwork は、次のフィールドに情報を格納する構造体を渡します。

フィールド説明
Epoch現在のエポック数
Iteration現在の反復回数
TimeSinceStart学習を開始してからの時間 (秒単位)
TrainingLoss現在のミニバッチの損失
ValidationLoss検証データの損失
BaseLearnRate現在の基本学習率
TrainingAccuracy 現在のミニバッチの精度 (分類ネットワーク)
TrainingRMSE現在のミニバッチの RMSE (回帰ネットワーク)
ValidationAccuracy検証データの精度 (分類ネットワーク)
ValidationRMSE検証データの RMSE (回帰ネットワーク)
State現在の学習の状態 (可能な値は "start""iteration"、または "done")

フィールドが計算されない、または出力関数の特定の呼び出しに関連していない場合、そのフィールドには空の配列が含まれます。

出力関数を使用して、進行状況を表示またはプロットするか、学習を停止できます。学習を早期に停止するには、出力関数が 1 (true) を返すようにします。いずれかの出力関数から 1 (true) が返されると、学習が終了し、trainNetwork から最新のネットワークが返されます。出力関数の使用方法を示す例は、深層学習ネットワークの学習時の出力のカスタマイズを参照してください。

データ型: function_handle | cell

すべて折りたたむ

モーメンタム項付き確率的勾配降下法を使用したネットワーク学習の一連のオプションを作成します。5 エポックごとに 0.2 ずつ学習率を下げます。学習のエポックの最大回数を 20 に設定し、反復ごとに 64 個の観測値があるミニバッチを使用します。学習の進行状況プロットをオンにします。

options = trainingOptions("sgdm", ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.2, ...
    LearnRateDropPeriod=5, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress")
options = 
  TrainingOptionsSGDM with properties:

                        Momentum: 0.9000
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                       MaxEpochs: 20
                   MiniBatchSize: 64
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Shuffle: 'once'
                  CheckpointPath: ''
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
            ExecutionEnvironment: 'auto'
                      WorkerLoad: []
                       OutputFcn: []
                           Plots: 'training-progress'
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
            DispatchInBackground: 0
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'population'
                   OutputNetwork: 'last-iteration'

アルゴリズム

すべて展開する

バージョン履歴

R2016a で導入