メインコンテンツ

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

TrainingOptionsSGDM

R2026a

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

説明

TrainingOptionsSGDM オブジェクトを使用して、学習率の情報、L2 正則化係数、ミニバッチのサイズなど、モーメンタム項付き確率的勾配降下法オプティマイザーの学習オプションを設定します。

作成

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

プロパティ

すべて展開する

SGDM

学習に使用するエポックの最大数 (データを一巡する回数)。正の整数として指定します。

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

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

ミニバッチのサイズで学習サンプルの数を割り切ることができない場合、ソフトウェアは、各エポックの最後のミニバッチにちょうど収まらない学習データを破棄します。ミニバッチのサイズが学習サンプルの数より小さい場合、ソフトウェアはいかなるデータも破棄しません。

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

データのシャッフルのオプション。次のいずれかの値として指定します。

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

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

  • "every-epoch" — 各学習エポックの前に学習データをシャッフルし、ニューラル ネットワークの各検証の前に検証データをシャッフルします。ミニバッチのサイズで学習サンプルの数を割り切ることができない場合、ソフトウェアは、各エポックの最後のミニバッチにちょうど収まらない学習データを破棄します。エポックごとに同じデータが破棄されるのを回避するには、Shuffle 学習オプションを "every-epoch" に設定します。

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

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

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

学習率スケジュール。組み込みの学習率スケジュール名の文字ベクトルまたは string スカラー、名前の string 配列、組み込みまたはカスタムの学習率スケジュール オブジェクト、または関数ハンドルとして指定するか、名前、メトリクス オブジェクト、および関数ハンドルから成る cell 配列として指定します。

組み込みの学習率スケジュール名

学習率スケジュールを、string スカラー、文字ベクトル、または次の 1 つ以上の名前から成る string または cell 配列として指定します。

名前説明プロット
"none"学習率スケジュールなし。このスケジュールでは、学習率が一定に保持されます。

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate is constant for each epoch.

"piecewise"区分的学習率スケジュール。このスケジュールでは、10 エポックごとに学習率を 10 分の 1 に下げます。

Plot with x and y axes showing epoch and learning rate, respectively. Every 10 epochs, the learning rate drops by a factor of 10.

"warmup" (R2024b 以降)ウォームアップ学習率スケジュール。このスケジュールでは、5 回の反復で学習率を基本学習率まで上げます。

Plot with x and y axes showing epoch and learning rate, respectively. For 5 iterations, the learning rate ramps up to the base learning rate and then remains constant.

"polynomial" (R2024b 以降)多項式学習率スケジュール。このスケジュールでは、エポックごとに単位指数のべき乗則を使用して学習率を下げます。

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases linearly from the base learning rate towards zero.

"exponential" (R2024b 以降)指数学習率スケジュール。このスケジュールでは、エポックごとに学習率を 10 分の 1 に減衰させます。

Plot with x and y axes showing epoch and learning rate, respectively. Every epoch, the learning rate decays by a factor of 10.

"cosine" (R2024b 以降)余弦学習率スケジュール。このスケジュールでは、エポックごとに余弦定理を使用して学習率を下げます。

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases following a cosine curve from the base learning rate towards zero.

"cyclical" (R2024b 以降)周期的学習率スケジュール。このスケジュールでは、10 エポックの周期において、基本学習率から 5 エポックの間は学習率を増加させ、その後 5 エポックの間は学習率を減少させます。

Plot with x and y axes showing epoch and learning rate, respectively. For periods of 10 epochs, the learning rate increases from the base learning rate for 5 epochs and then decreases for 5 epochs.

組み込みの学習率スケジュール オブジェクト (R2024b 以降)

string オプションを超える柔軟性が必要な場合は、組み込みの学習率スケジュール オブジェクトを使用できます。

  • piecewiseLearnRate — 区分的学習率スケジュール オブジェクトは、指定された係数を乗算して学習率を定期的に下げます。このオブジェクトを使用して、区分的スケジュールのドロップ係数と期間をカスタマイズします。

    R2024b より前: LearnRateDropFactor 学習オプションと LearnRateDropPeriod 学習オプションをそれぞれ使用して、区分的ドロップ係数と周期をカスタマイズします。

  • warmupLearnRate — ウォームアップ学習率スケジュール オブジェクトは、指定された反復回数だけ学習を強化します。このオブジェクトを使用して、初期学習率係数、最終学習率係数、およびウォームアップ スケジュールのステップ数をカスタマイズします。

  • polynomialLearnRate — 多項式学習率スケジュールでは、べき乗則を使用して学習率を下げます。このオブジェクトを使用して、初期学習率係数、最終学習率係数、指数、および多項式スケジュールのステップ数をカスタマイズします。

  • exponentialLearnRate — 指数学習率スケジュールでは、指定した係数で学習率を減衰させます。このオブジェクトを使用して、指数スケジュールのドロップ係数と周期をカスタマイズします。

  • cosineLearnRate — 余弦学習率スケジュール オブジェクトは、余弦曲線を使用して学習率を下げ、ウォーム リスタートを組み込みます。このオブジェクトを使用して、コサイン スケジュールの初期学習率係数、最終学習率係数、周期、および周期成長係数をカスタマイズします。

  • cyclicalLearnRate — 周期的学習率スケジュールでは、学習率を周期的に増減させます。このオプションを使用して、周期的なスケジュールの最大係数、周期、およびステップ比率をカスタマイズします。

カスタム学習率スケジュール (R2024b 以降)

柔軟性をさらに高めるには、deep.LearnRateSchedule から継承する関数ハンドルまたはカスタム クラスとしてカスタム学習率スケジュールを定義できます。

  • カスタム学習率スケジュール関数ハンドル — 必要な学習率スケジュールが組み込み学習率スケジュールではない場合、関数ハンドルを使用してカスタム学習率スケジュールを指定できます。カスタム スケジュールを指定するには、構文 learningRate = f(baseLearningRate,epoch) で関数ハンドルを使用します。ここで、baseLearningRate は基本学習率、epoch はエポック数です。

  • カスタム学習率スケジュール オブジェクト — 関数ハンドルを超える柔軟性が必要な場合は、deep.LearnRateSchedule から継承するカスタム学習率スケジュール クラスを定義できます。

複数の学習率スケジュール (R2024b 以降)

複数のスケジュールを string または cell 配列として指定することで、複数の学習率スケジュールを組み合わせることができます。次いでソフトウェアは、最初の要素から順番にスケジュールを適用します。スケジュールのうち最大 1 つを無限にすることができます ("cyclical" スケジュールや、NumSteps プロパティを Inf に設定したオブジェクトなど、無期限に継続するスケジュール)。無限スケジュールは、配列の最後の要素でなければなりません。

学習率を下げるまでのエポック数。正の整数として指定します。この引数は、LearnRateSchedule 値が "piecewise" である場合にのみ有効です。

指定したエポック数が経過するたびに、グローバル学習率と低下係数が乗算されます。LearnRateDropFactor 引数を使用して低下係数を指定します。

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

学習率を下げる係数。0 から 1 までのスカラーとして指定します。この引数は、LearnRateSchedule 引数が "piecewise" である場合にのみ有効です。

LearnRateDropFactor は、特定のエポック数が経過するたびに学習率に適用される乗法係数です。LearnRateDropPeriod 引数を使用してエポック数を指定します。

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

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

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

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

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

データ レイアウト

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 符号化された値を損失関数とメトリクス関数に渡します。

R2023b 以降

入力データの次元の説明。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

R2023b 以降

ターゲット データの次元の説明。次のいずれかの値として指定します。

  • "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 軸のスケールを対数に切り替えるには、座標軸ツール バーを使用します。Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

プロットの詳細については、深層学習における学習の進行状況の監視を参照してください。

R2023b 以降

監視するメトリクス。次のいずれかの値として指定します。

  • 組み込みメトリクスまたは損失関数名 — string スカラー、文字ベクトル、cell 配列、または次の 1 つ以上の名前の 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を参照してください。

  • 組み込みメトリクス オブジェクト — より高い柔軟性が必要な場合は、組み込みメトリクス オブジェクトを使用できます。ソフトウェアは、次の組み込みメトリクス オブジェクトをサポートします。

    組み込みメトリクス オブジェクトを作成するときは、平均化のタイプ、タスクが単一ラベルか複数ラベルかなどの追加オプションを指定できます。

  • カスタム メトリクス関数ハンドル — 組み込みメトリクス以外のメトリクスが必要な場合は、関数ハンドルを使用してカスタム メトリクスを指定できます。関数の構文は metric = metricFunction(Y,T) でなければなりません。ここで、Y はネットワーク予測に対応し、T はターゲット応答に対応します。複数の出力をもつネットワークの場合、構文は metric = metricFunction(Y1,...,YN,T1,...,TM) でなければなりません。ここで、N は出力の数、M はターゲットの数です。詳細については、Define Custom Metric Functionを参照してください。

    メモ

    ミニバッチにデータが含まれる場合、ソフトウェアは各ミニバッチのメトリクスを計算し、それらの値の平均を返します。メトリクスによっては、この動作のために、データ セット全体を一度に使用してメトリクスを計算する場合とは異なるメトリクス値を取ることがあります。ほとんどの場合は、同様の値になります。データに対してバッチ平均されていないカスタム メトリクスを使用するには、カスタム メトリクス オブジェクトを作成しなければなりません。詳細については、Define Custom Deep Learning Metric Objectを参照してください。

  • deep.DifferentiableFunction オブジェクト (R2024a 以降) — カスタム逆方向関数をもつ関数オブジェクト。categorical ターゲットの場合、ソフトウェアは categorical 値を one-hot 符号化されたベクトルに自動的に変換し、メトリクス関数に渡します。詳細については、カスタム深層学習演算の定義を参照してください。

  • カスタム メトリクス オブジェクト — より詳細なカスタマイズが必要な場合は、独自のカスタム メトリクス オブジェクトを定義できます。カスタム メトリクスの作成方法を示す例については、Define Custom Metric Objectを参照してください。カスタム メトリクスの作成に関する一般的な情報については、Define Custom Deep Learning Metric Objectを参照してください。

メトリクスを関数ハンドル、deep.DifferentiableFunction オブジェクト、またはカスタム メトリクス オブジェクトとして指定し、trainnet 関数を使用してニューラル ネットワークに学習させる場合、ソフトウェアによってメトリクスに渡されるターゲットのレイアウトは、ターゲットのデータ型によって異なります。trainnet 関数で指定する損失関数と、指定するその他のメトリクスは、ソフトウェアに次のような影響を及ぼします。

  • ターゲットが数値配列の場合、ソフトウェアはターゲットをメトリクスに直接渡します。

  • 損失関数が "index-crossentropy" で、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを数値クラス インデックスに自動的に変換し、メトリクスに渡します。

  • その他の損失関数では、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを自動的に one-hot 符号化されたベクトルに変換し、メトリクスに渡します。

このオプションは、関数 trainnet と関数 trainBERTDocumentClassifier (Text Analytics Toolbox) のみをサポートします。

例: 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) として指定します。

関数 trainnet を使用する場合、詳細出力には次の変数を含むテーブルが表示されます。

変数説明
Iteration反復回数。
Epochエポック数。
TimeElapsed経過時間。時間、分、秒で示されます。
LearnRate学習率。
TrainingLoss学習損失。
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。

学習オプションで追加のメトリクスを指定した場合、詳細出力にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、変数 TrainingAccuracy および ValidationAccuracy もこの情報に含まれます。

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

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

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

コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。正の整数として指定します。

学習中にニューラル ネットワークを検証する場合、ソフトウェアは、検証が行われるたびにコマンド ウィンドウにも出力します。

このプロパティを有効にするには、Verbose 学習オプションを 1 (true) に設定します。

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

検証

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

学習中に、ソフトウェアは検証データを使用して検証損失とメトリクス値を計算します。検証頻度を指定するには、ValidationFrequency 学習オプションを使用します。検証データを使用して、検証目的指標が改善されなくなったときに学習を自動的に停止することもできます。既定では、目的指標は損失に設定されます。自動検証停止をオンにするには、ValidationPatience 学習オプションを使用します。

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

ニューラル ネットワークに予測時と学習時で動作が異なる層 (ドロップアウト層など) がある場合、検証損失が学習損失より低くなる可能性があります。

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

サポートされている形式は、使用する学習関数によって異なります。

関数 trainnet

データストア、table、minibatchqueue オブジェクト、または cell 配列 {predictors,targets} として検証データを指定します。ここで、predictors には検証予測子を格納し、targets には検証ターゲットを格納します。trainnet 関数でサポートされているいずれかのレイアウトを使用して、検証予測子と検証ターゲットの値を指定します。

詳細については、関数 trainnet の入力引数を参照してください。

関数 trainBERTDocumentClassifier (Text Analytics Toolbox)

検証データを次のいずれかの値として指定します。

  • cell 配列 {documents,targets}。ここで、documents には入力文書を格納し、targets には文書のラベルを格納する。

  • table。ここで、最初の変数には入力文書を格納し、2 番目の変数には文書のラベルを格納する。

詳細については、関数 trainBERTDocumentClassifier (Text Analytics Toolbox) の入力引数を参照してください。

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

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" – 最後の学習反復に対応するニューラル ネットワークを返す。

正規化と正則化

R2026a 以降

ターゲットを正規化するフラグ。次のいずれかの値として指定します。

  • 1 (true) — ターゲットを正規化します。

  • 0 (false) — ターゲットを正規化しません。

NormalizeTargets が 1 (true) である場合、学習させるニューラル ネットワークには inverseNormalizationLayer オブジェクトがなければなりません。ソフトウェアは、逆正規化層の Normalization プロパティで指定された正規化方式を使用します。

データ型: 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 による学習のみをサポートします。

  • "auto" — "moving" オプションを使用します。

入力層の正規化統計量をリセットするフラグ。次のいずれかの値として指定します。

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

  • 0 (false) — 入力層のプロパティで指定された正規化統計量を学習時に使用します。層のプロパティが [] である場合、ソフトウェアは対応する統計量の既定値で統計量を初期化します。

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

R2026a 以降

逆正規化層の統計量をリセットするフラグ。次のいずれかの値として指定します。

  • 1 (true) — 逆正規化層の統計量をリセットし、学習時に再計算します。

  • 0 (false) — 逆正規化層の統計量が空である場合、学習時に計算します。

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

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

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

勾配クリップ

勾配しきい値。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 を使用します。

  • "cpu" – ローカル CPU を使用します。

  • "gpu" – ローカル GPU を使用します。

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

  • "parallel-auto" – ローカルまたはリモートの並列プールを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、固有の GPU をもつワーカーのみが学習計算を実行し、余ったワーカーはアイドル状態になります。プールに GPU がない場合、代わりに使用可能なすべての CPU ワーカーで学習が実行されます。 (R2024a 以降)

    R2024a より前: 代わりに "parallel" を使用してください。

  • "parallel-cpu" – ローカルまたはリモートの並列プールにある CPU リソースを使用し、GPU は無視します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。 (R2023b 以降)

  • "parallel-gpu" – ローカルまたはリモートの並列プールにある GPU を使用します。余ったワーカーはアイドル状態になります。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。 (R2023b 以降)

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

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

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

R2024a 以降

学習時にデータストアからデータを取得して前処理を行うための環境。次のいずれかの値として指定します。

  • "serial" – データの取得と前処理は逐次実行されます。

  • "background" – バックグラウンド プールを使用してデータの取得と前処理が行われます。

  • "parallel" – 並列ワーカーを使用してデータの取得と前処理が行われます。ローカル プールが開かれていなければ、ソフトウェアは既定のプロファイルを使用して並列プールを開きます。ローカルではない並列プールはサポートされません。このオプションを使用するには、Parallel Computing Toolbox が必要です。並列で学習させる場合 (ExecutionEnvironment オプションが "parallel-auto"、"parallel-cpu"、"parallel-gpu"、または "multi-gpu" の場合)、このオプションはサポートされません。

"background" オプションまたは "parallel" オプションを使用するには、入力データストアがサブセット化可能または分割可能でなければなりません。カスタム データストアには matlab.io.datastore.Subsettable クラスが実装されていなければなりません。

Shuffle オプションが "never" の場合、"background" オプションおよび "parallel" オプションはサポートされません。

"background" オプションおよび "parallel" オプションを使用した場合、deep.gpu.deterministicAlgorithms 関数を使用しても学習は非確定的になります。

ミニバッチに大幅な前処理が必要な場合は、"background" オプションを使用します。前処理がスレッドでサポートされていない場合、またはワーカー数を制御する必要がある場合は、"parallel" オプションを使用します。前処理環境の詳細については、Preprocess Data in the Background or in Parallelを参照してください。

R2024a より前: データを並列で前処理するには、DispatchInBackground 学習オプションを 1 (true) に設定します。

R2024a 以降

パフォーマンスの最適化。次のいずれかの値として指定します。

  • "auto" – 入力ネットワークとハードウェア リソースに適した最適化の回数を自動的に適用します。

  • "none" – すべての最適化を無効にします。

"auto" 高速化オプションを使用すると、パフォーマンス上のメリットが得られますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。サイズと形状が同じである異なる入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。

チェックポイント

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

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

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

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

データ型: 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 配列として指定します。ソフトウェアは、学習の開始前、各反復後、および学習の完了時に関数を 1 回呼び出します。

関数の構文は stopFlag = f(info) でなければなりません。ここで、info は学習の進行状況に関する情報が格納される構造体、stopFlag は学習を早期に停止させることを示すスカラーです。stopFlag が 1 (true) の場合、ソフトウェアは学習を停止させます。それ以外の場合、ソフトウェアは学習を続行します。

関数 trainnet は、次のフィールドをもつ構造体 info を出力関数に渡します。

フィールド説明
Epochエポック数
Iteration反復回数
TimeElapsed学習開始からの時間
LearnRate反復での学習率
TrainingLoss反復での学習損失
ValidationLoss検証損失 (指定されており、反復時に評価される場合)。
State反復での学習状態。"start"、"iteration"、または "done" として指定します。

学習オプションで追加のメトリクスを指定した場合、学習情報にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、フィールド TrainingAccuracy および ValidationAccuracy もこの情報に含まれます。

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

出力関数の使用方法を示す例については、深層学習における学習用のカスタム停止条件を参照してください。

データ型: 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
                       MaxEpochs: 20
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                   MiniBatchSize: 64
                         Shuffle: 'once'
         CheckpointFrequencyUnit: 'epoch'
        PreprocessingEnvironment: 'serial'
                         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
       ResetInverseNormalization: 1
                NormalizeTargets: 0
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'auto'
                    Acceleration: "auto"
                  CheckpointPath: ''
             CheckpointFrequency: 1
        CategoricalInputEncoding: 'integer'
       CategoricalTargetEncoding: 'auto'
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf

アルゴリズム

すべて展開する

参照

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] 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.

バージョン履歴

R2016a で導入

すべて展開する