Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

TrainingOptionsSGDM

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

説明

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

作成

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

プロパティ

すべて展開する

プロットと表示

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

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

  • 'training-progress'— 学習の進行状況をプロットします。プロットには、ミニバッチの損失と精度、検証の損失と精度、および学習の進行状況に関する追加情報が表示されます。プロットの右上隅には、停止ボタン があります。そのボタンをクリックすると、学習が停止し、ネットワークの現在の状態が返されます。

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

表示される情報には、エポック数、反復回数、経過時間、ミニバッチの損失、ミニバッチの精度、基本学習率が含まれます。回帰ネットワークの学習を行う場合、精度の代わりに平方根平均二乗誤差 (RMSE) が表示されます。学習中にネットワークを検証する場合、表示される情報には検証損失と検証精度 (または RMSE) も含まれます。

データ型: logical

コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。正の整数として指定します。このプロパティは、Verbose の値が true に等しい場合にのみ有効です。

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

ミニバッチ オプション

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

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

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

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

  • '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' に等しい場合、検証データはネットワークの各検証の前にシャッフルされます。

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

ValidationFrequency の値は、検証メトリクスの評価間の反復回数です。

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

'ValidationPatience' の値は、ネットワークの学習が停止するまでに、検証セットでの損失が前の最小損失以上になることが許容される回数です。

ソルバー オプション

学習に使用される初期学習率。正のスカラーとして指定します。学習率が小さすぎる場合、学習に時間がかかります。学習率が大きすぎる場合、学習結果が準最適になることがあります。

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

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

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

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

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

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

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

データ型: struct

L2 正規化 (重み減衰) の係数。非負のスカラーとして指定します。

学習可能なパラメーターのあるネットワーク層に対して L2 正則化項の乗数を指定できます。

学習における前の反復の勾配ステップから現在の反復への寄与。0 から 1 までのスカラー値として指定します。値 0 は前のステップからの寄与がないことを意味し、値 1 は前のステップからの寄与が最大であることを意味します。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

バッチ正規化層の統計量を評価するモード。次のいずれかとして指定します。

  • 'population' – 母集団の統計量を使用します。学習終了後に学習データが再度渡され、その結果得られる平均と分散を使用して最終的な統計量が決定されます。

  • 'moving' – 学習中、以下の更新ステップで与えられる実行時推定を使用して統計量を近似します。

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

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

勾配クリップ

勾配の正のしきい値。正のスカラーまたは Inf を指定します。勾配が GradientThreshold の値を超えた場合、勾配は GradientThresholdMethod に応じてクリップされます。

勾配のしきい値を超えた勾配の値をクリップするために使用する勾配しきい値法。次のいずれかに指定します。

  • 'l2norm' — 学習可能なパラメーターの勾配の L2 ノルムが GradientThreshold より大きい場合は、L2 ノルムが GradientThreshold に等しくなるように勾配をスケーリングします。

  • 'global-l2norm' — グローバル L2 ノルム L が GradientThreshold より大きい場合は、すべての勾配を GradientThreshold/L 倍にスケーリングします。グローバル L2 ノルムでは、すべての学習可能なパラメーターが考慮されます。

  • 'absolute-value' — 学習可能なパラメーターの勾配に含まれる個々の偏微分の絶対値が GradientThreshold より大きい場合、偏微分の符号を維持したまま、大きさが GradientThreshold に等しくなるように偏微分をスケーリングします。

詳細は、勾配クリップを参照してください。

入力層の正規化をリセットするオプション。次のいずれかに指定します。

  • true – 入力層の正規化統計量をリセットし、学習時に再計算します。

  • false – 正規化統計量が空の場合、学習時に計算します。

シーケンス オプション

入力シーケンスのパディング、切り捨て、または分割を行うオプション。次のいずれかに指定します。

  • 'longest' — 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってネットワークにノイズが生じることがあります。

  • 'shortest' — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。

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

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

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

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

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

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

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

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

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

ハードウェア オプション

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

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

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

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

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

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

さまざまな実行環境をどのような場合に使用するかの詳細は、並列およびクラウドでの深層学習のスケールアップを参照してください。

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

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

長短期記憶ネットワークの学習では、1 つの CPU または 1 つの GPU での学習のみがサポートされます。

trainingOptions を使用して、実行環境を指定します。

データ型: char | string

GPU または CPU のワーカーの負荷分割。0 から 1 までのスカラー、正の整数、または数値ベクトルとして指定します。このプロパティは、ExecutionEnvironment の値が 'multi-gpu' または 'parallel' に等しい場合にのみ有効です。

チェックポイント

チェックポイント ネットワークが保存されるパス。文字ベクトルとして指定します。

データ型: char

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

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

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

出力関数を使用して、進行状況を表示またはプロットするか、学習を停止できます。学習を早期に停止するには、出力関数が true を返すようにします。いずれかの出力関数から 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: ''
            ExecutionEnvironment: 'auto'
                      WorkerLoad: []
                       OutputFcn: []
                           Plots: 'training-progress'
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
            DispatchInBackground: 0
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'population'

R2016a で導入