Main Content

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

trainingOptions

深層学習ニューラル ネットワークの学習のオプション

説明

options = trainingOptions(solverName) は、solverName によって指定されるオプティマイザーの学習オプションを返します。ニューラル ネットワークに学習させるには、学習オプションを関数 trainnet または trainNetwork への入力引数として使用します。

options = trainingOptions(solverName,Name=Value) は、学習オプションと、1 つ以上の名前と値の引数で指定された追加オプションを返します。

すべて折りたたむ

モーメンタム項付き確率的勾配降下法を使用したネットワーク学習の一連のオプションを作成します。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
                       MaxEpochs: 20
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                   MiniBatchSize: 64
                         Shuffle: 'once'
                      WorkerLoad: []
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
                  SequenceLength: 'longest'
            DispatchInBackground: 0
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                  CheckpointPath: ''
            ExecutionEnvironment: 'auto'
                       OutputFcn: []
                         Metrics: []
                           Plots: 'training-progress'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
                InputDataFormats: "auto"
               TargetDataFormats: "auto"
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'last-iteration'

この例では、深層学習ネットワークの学習プロセスを監視する方法を示します。

深層学習のネットワークに学習させる場合、学習の進行状況を監視すると役に立つことがよくあります。学習中のさまざまなメトリクスのプロットにより、学習の進行状況を知ることができます。たとえば、ネットワークの精度が改善されているかどうか、その改善の速度、さらにネットワークで学習データへの過適合が始まっているかどうかを判定できます。

この例では、関数 trainNetwork を使用して学習させたネットワークの学習の進行状況を監視する方法を示します。カスタム学習ループを使用して学習させたネットワークの場合は、trainingProgressMonitorオブジェクトを使用して学習中のメトリクスをプロットします。詳細については、Monitor Custom Training Loop Progressを参照してください。

trainingOptionsPlots 学習オプションを "training-progress" に設定してネットワークの学習を開始すると、trainNetwork によって Figure が作成され、反復ごとに学習メトリクスが表示されます。各反復は、勾配の推定と、ネットワーク パラメーターの更新で構成されます。trainingOptions に検証データを指定すると、trainNetwork によってネットワークが検証されるたびに Figure に検証メトリクスが表示されます。Figure には次がプロットされます。

  • 学習精度 — 個々のミニバッチの分類精度。

  • 平滑化後の学習精度 — 学習精度に平滑化アルゴリズムを適用することによって求められる、平滑化された学習精度。精度を平滑化していない場合よりノイズが少なく、トレンドを見つけやすくなります。

  • 検証精度 — (trainingOptions を使用して指定された) 検証セット全体に対する分類精度。

  • 学習損失平滑化後の学習損失検証損失 — それぞれ、各ミニバッチの損失、その平滑化バージョン、検証セットの損失。ネットワークの最後の層が classificationLayer である場合、損失関数は交差エントロピー損失です。分類問題と回帰問題の損失関数の詳細は、出力層を参照してください。

回帰ネットワークの場合、Figure には精度ではなく平方根平均二乗誤差 (RMSE) がプロットされます。

Figure では、影付きの背景を使用して各学習エポックがマークされます。1 エポックは、データ セット全体を一巡することです。

学習中、右上隅の停止ボタンをクリックして学習を停止し、ネットワークの現在の状態を返すことができます。たとえば、ネットワークの精度が横ばい状態に達し、これ以上改善されないことが明確な場合に、学習の停止が必要になることがあります。停止ボタンのクリックの後、学習が完了するまでしばらくかかることがあります。学習が完了すると、trainNetwork が学習済みネットワークを返します。

学習が終了すると、[結果] に最終検証精度と学習の終了理由が表示されます。OutputNetwork 学習オプションが "last-iteration" (既定値) である場合、最終メトリクスは最後の学習反復に対応します。OutputNetwork 学習オプションが "best-validation-loss" である場合、最終メトリクスは検証損失が最小の反復に対応します。最終検証メトリクスが計算される反復には、プロットで "Final" とラベル付けされます。

ネットワークにバッチ正規化層が含まれている場合、最終検証メトリクスは学習中に評価される検証メトリクスと異なる可能性があります。これは、バッチ正規化に使用される平均と分散の値が、学習完了後に変わる可能性があるためです。たとえば、BatchNormalizationStatisics 学習オプションが "population" である場合、学習後に学習データが再度渡され、その結果得られる平均と分散を使用して最終的なバッチ正規化の統計量が決定されます。BatchNormalizationStatisics 学習オプションが "moving" である場合、学習中に実行時推定を使用して統計量が近似され、最新の統計値が使用されます。

右側には、学習の時間と設定に関する情報が表示されます。学習オプションの詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。

学習の進行状況のプロットを保存するには、学習ウィンドウの [学習プロットのエクスポート] をクリックします。プロットは PNG、JPEG、TIFF、または PDF ファイルとして保存できます。座標軸ツール バーを使用して、損失、精度、および平方根平均二乗誤差の個々のプロットを保存することもできます。

学習時の進行状況のプロット

ネットワークに学習させ、学習中にその進行状況をプロットします。

5000 個の数字のイメージが格納されている学習データを読み込みます。ネットワークの検証用に 1000 個のイメージを残しておきます。

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

数字のイメージ データを分類するネットワークを構築します。

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

ネットワーク学習のオプションを指定します。学習中に一定の間隔でネットワークを検証するための検証データを指定します。エポックごとに約 1 回ネットワークが検証されるように、ValidationFrequency の値を選択します。学習中に学習の進行状況をプロットするには、Plots 学習オプションを "training-progress" に設定します。

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

ネットワークに学習をさせます。

net = trainNetwork(XTrain,YTrain,layers,options);

Figure Training Progress (29-Aug-2023 21:11:00) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

入力引数

すべて折りたたむ

ニューラル ネットワークの学習用のソルバー。次のいずれかの値として指定します。

  • "sgdm" — モーメンタム項付き確率的勾配降下法 (SGDM)。SGDM は確率的ソルバーです。その他の学習オプションについては、確率的ソルバーのオプションを参照してください。詳細については、モーメンタム項付き確率的勾配降下法を参照してください。

  • "rmsprop" — 平方根平均二乗伝播 (RMSProp)。RMSProp は確率的ソルバーです。その他の学習オプションについては、確率的ソルバーのオプションを参照してください。詳細については、平方根平均二乗伝播を参照してください。

  • "adam" — 適応モーメント推定 (Adam)。Adam は確率的ソルバーです。その他の学習オプションについては、確率的ソルバーのオプションを参照してください。詳細については、適応モーメント推定を参照してください。

  • "lbfgs" (R2023b 以降) — 記憶制限 Broyden–Fletcher–Goldfarb–Shanno (L-BFGS)。L-BFGS はバッチ ソルバーです。L-BFGS アルゴリズムは、単一のバッチで処理できる小規模なネットワークやデータ セットに最適です。その他の学習オプションについては、L-BFGS ソルバーのオプションを参照してください。詳細については、記憶制限 BFGSを参照してください。このオプションは関数 trainnet のみをサポートします。

関数 trainBERTDocumentClassifier (Text Analytics Toolbox) は、"sgdm""rmsprop"、および "adam" ソルバーのみをサポートします。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: Plots="training-progress",Metrics="accuracy",Verbose=false は、詳細出力を無効にし、学習の進行状況を精度メトリクスも含めてプロットに表示するように指定します。

監視

すべて折りたたむ

ニューラル ネットワークの学習中に表示するプロット。次のいずれかの値として指定します。

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

  • "training-progress" — 学習の進行状況をプロットします。

プロットの内容は、使用する学習関数によって異なります。

関数 trainnet

  • 引数 solverName"sgdm""adam"、または "rmsprop" の場合、プロットには、ミニバッチ損失、検証損失、Metrics オプションで指定された学習ミニバッチと検証のメトリクス、および学習の進行状況に関する追加情報が表示されます。

  • 引数 solverName"lbfgs" の場合、プロットには学習と検証の損失、Metrics オプションで指定された学習と検証のメトリクス、および学習の進行状況に関する追加情報が表示されます。

学習後にプログラムで学習の進行状況プロットを開いたり閉じたりするには、関数 trainnet の 2 番目の出力で関数 show および close を使用します。Plots 学習オプションが "none" として指定されている場合でも、関数 show を使用して学習の進行状況を表示できます。

関数 trainNetwork

プロットには、ミニバッチの損失と精度、検証の損失と精度、および学習の進行状況に関する追加情報が表示されます。trainNetwork の学習の進行状況プロットの詳細については、深層学習における学習の進行状況の監視を参照してください。

R2023b 以降

追跡するメトリクス。組み込みメトリクス名の文字ベクトルまたは string スカラー、名前の string 配列、組み込みまたはカスタムのメトリクス オブジェクト、関数ハンドル (@myMetric) として指定するか、名前、メトリクス オブジェクト、および関数ハンドルの cell 配列として指定します。

  • 組み込みメトリクス名 — 組み込みメトリクス名の string スカラー、文字ベクトル、または string 配列としてメトリクスを指定します。サポートされている値は、"accuracy""fscore""recall""precision""rmse"、および "auc" です。

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

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

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

    メモ

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

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

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

例: Metrics=["accuracy","fscore"]

例: Metrics=["accuracy",@myFunction,precisionObj]

コマンド ウィンドウに学習の進行状況の情報を表示するためのフラグ。1 (true) または 0 (false) として指定します。

詳細出力の内容は、学習に使用する関数によって異なります。

関数 trainnet

関数 trainnet を使用する場合、詳細出力にテーブルが表示されます。テーブルの変数はソルバーのタイプによって異なります。

確率的ソルバー (SGDM、Adam、および RMSProp) の場合、このテーブルには次の変数が含まれます。

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

L-BFGS ソルバーの場合、このテーブルには次の変数が含まれます。

変数説明
Iteration反復回数
TimeElapsed経過時間 (時間、分、秒)
TrainingLoss学習損失
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。
GradientNorm勾配のノルム
StepNormステップのノルム

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

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

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

関数 trainNetwork

関数 trainNetwork を使用する場合、詳細出力にテーブルが表示されます。このテーブルの変数は、ニューラル ネットワークのタイプによって異なります。

分類ニューラル ネットワークの場合、このテーブルには次の変数が含まれます。

変数説明
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) の場合にのみ効果があります。

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

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

学習中に呼び出す出力関数。関数ハンドル、または関数ハンドルの cell 配列として指定します。ソフトウェアは、学習の開始前、各反復後、および学習の完了時に関数を 1 回呼び出します。

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

構造体 info のフィールドは、使用する学習関数によって異なります。

関数 trainnet

関数 trainnet は、出力関数に構造体 info を渡します。

確率的ソルバー (SGDM、Adam、および RMSProp) の場合、info には次のフィールドが含まれます。

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

L-BFGS ソルバーの場合、info には次のフィールドが含まれます。

フィールド説明
Iteration反復回数
TimeElapsed経過時間 (時間、分、秒)
TrainingLoss学習損失
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。
GradientNorm勾配のノルム
StepNormステップのノルム
State反復での学習状態。"start""iteration"、または "done" として指定します。

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

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

出力関数の使用方法を示す例は、深層学習ネットワークの学習時の出力のカスタマイズを参照してください。

関数 trainNetwork

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

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

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

出力関数の使用方法を示す例は、深層学習ネットワークの学習時の出力のカスタマイズを参照してください。

データ型: function_handle | cell

データ形式

すべて折りたたむ

R2023b 以降

入力データの次元の説明。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。

InputDataFormats"auto" の場合、ソフトウェアは、ネットワークの入力で必要とされる形式を使用します。そうでない場合、ソフトウェアは、該当するネットワーク入力に対して指定された形式を使用します。

データの形式は文字列で、各文字はデータ内の対応する次元のタイプを表します。

各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを含み、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列の場合、"CBT" の形式で指定できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。"C""B""T" のラベルについては、1 回のみ使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさ 1 の "U" 次元を無視します。

詳細については、Deep Learning Data Formatsを参照してください。

このオプションは関数 trainnet のみをサポートします。

データ型: char | string | cell

R2023b 以降

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

  • "auto" — ターゲット データと入力データの次元の数が同じ場合、関数 trainnetInputDataFormats で指定された形式を使用します。ターゲット データと入力データの次元の数が異なる場合、関数 trainnet は損失関数で必要とされる形式を使用します。

  • データ形式 (string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定) — 関数 trainnet は指定されたデータ形式を使用します。

データの形式は文字列で、各文字はデータ内の対応する次元のタイプを表します。

各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを含み、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列の場合、"CBT" の形式で指定できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。"C""B""T" のラベルについては、1 回のみ使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさ 1 の "U" 次元を無視します。

詳細については、Deep Learning Data Formatsを参照してください。

このオプションは関数 trainnet のみをサポートします。

データ型: char | string | cell

確率的ソルバーのオプション

すべて折りたたむ

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

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

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

solverName"sgdm" の場合、既定値は 0.01 です。solverName"rmsprop" または "adam" の場合、既定値は 0.001 です。

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

学習中に学習率を下げるオプション。次の値のいずれかとして指定します。

  • "none" — 学習全体を通じて学習率を一定に保ちます。

  • "piecewise" — 学習率にドロップ係数を乗算して周期的に更新します。周期を指定するには、LearnRateDropPeriod 学習オプションを使用します。ドロップ係数を指定するには、LearnRateDropFactor 学習オプションを使用します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

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

このオプションは、SGDM ソルバーのみをサポートします (引数 solverName"sgdm" の場合)。

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

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

Adam ソルバーの勾配の移動平均の減衰率。1 未満の非負のスカラーとして指定します。勾配の減衰率は、適応モーメント推定の節で β1 で表されます。

このオプションは、Adam ソルバーのみをサポートします (引数 solverName"adam" の場合)。

詳細については、適応モーメント推定を参照してください。

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

Adam ソルバーおよび RMSProp ソルバーの勾配の二乗の移動平均の減衰率。1 未満の非負のスカラーとして指定します。勾配の二乗の減衰率は、[4]β2 として表されます。

減衰率の一般的な値は 0.90.99、および 0.999 であり、平均化の長さとしては 10 回、100 回、および 1000 回のパラメーター更新にそれぞれ対応しています。

このオプションは、Adam ソルバーおよび RMSProp ソルバーのみをサポートします (引数 solverName"adam" または "rmsprop" の場合)。

Adam ソルバーの既定値は 0.999 です。RMSProp ソルバーの既定値は 0.9 です。

詳細については、適応モーメント推定および平方根平均二乗伝播を参照してください。

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

Adam および RMSProp ソルバーの分母のオフセット。正のスカラーとして指定します。

ソルバーは、ニューラル ネットワーク パラメーターの更新時に分母にオフセットを追加して、ゼロ除算を回避します。ほとんどのタスクにおいて、既定値で良い結果が得られます。

このオプションは、Adam ソルバーおよび RMSProp ソルバーのみをサポートします (引数 solverName"adam" または "rmsprop" の場合)。

詳細については、適応モーメント推定および平方根平均二乗伝播を参照してください。

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

L-BFGS ソルバーのオプション

すべて折りたたむ

R2023b 以降

学習に使用する最大反復回数。正の整数として指定します。

L-BFGS ソルバーは全バッチ ソルバーです。これは、学習セット全体を 1 回の反復で処理することを意味します。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

R2023b 以降

適切な学習率を検出する方法。次の値のいずれかとして指定します。

  • "weak-wolfe" — 弱 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。

  • "strong-wolfe" — 強 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。

  • "backtracking" — 十分な減少条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持しません。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

R2023b 以降

保存する状態更新の数。正の整数として指定します。ほとんどのタスクには 3 ~ 20 の値が適しています。

L-BFGS アルゴリズムは、勾配計算の履歴を使用してヘッセ行列を再帰的に近似します。詳細については、Limited-Memory BFGSを参照してください。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

R2023b 以降

逆ヘッセ行列の近似を特徴付ける初期値。正のスカラーとして指定します。

メモリを節約するため、L-BFGS アルゴリズムでは密なヘッセ行列 B の保存や反転は行われません。代わりに、アルゴリズムは近似 Bkm1λkI を使用します。ここで、m は履歴サイズであり、逆ヘッセ因子 λk はスカラーです。また、I は単位行列であり、スカラーの逆ヘッセ因子のみを格納します。アルゴリズムは各ステップで逆ヘッセ因子を更新します。

逆ヘッセ因子の初期値は、λ0 の値です。

詳細については、Limited-Memory BFGSを参照してください。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

R2023b 以降

学習率を決定するための直線探索の反復の最大数。正の整数として指定します。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

R2023b 以降

相対勾配の許容値。正のスカラーとして指定します。

相対勾配が GradientTolerance 以下になると、ソフトウェアは学習を停止します。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

R2023b 以降

ステップ サイズの許容値。正のスカラーとして指定します。

ステップが StepTolerance 以下になると、ソフトウェアは学習を停止します。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName"lbfgs" の場合)。

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

検証

すべて折りたたむ

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

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

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

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

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

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

関数 trainnet

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

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

関数 trainNetwork

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

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

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

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

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

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

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

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

正則化と正規化

すべて折りたたむ

L2 正則化 (重み減衰) の係数。非負のスカラーとして指定します。詳細については、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" — 学習中、以下の更新ステップで与えられる実行時推定を使用して統計量を近似します。

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

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

  • "auto" — 関数 trainnet の場合は "moving" オプションを使用し、関数 trainNetwork の場合は "population" オプションを使用します。

勾配クリップ

すべて折りたたむ

勾配のしきい値。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 オプションをより小さい値に設定して、ミニバッチごとのシーケンス数を減らしてみます。

    • このオプションは関数 trainNetwork のみをサポートします。

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

データ型: 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" に設定します。

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

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

ニューラル ネットワーク全体にエラーが伝播される可能性があるため、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 ワーカーで学習が実行されます。

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

  • このオプションは関数 trainnet のみをサポートします。

"parallel-cpu"
  • ローカルまたはリモートの並列プールにある CPU リソースを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、GPU は使用されません。

  • このオプションは関数 trainnet のみをサポートします。

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

  • このオプションは関数 trainnet のみをサポートします。

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

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

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

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

"multi-gpu""parallel""parallel-auto""parallel-cpu"、および "parallel-gpu" オプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

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

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

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

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

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

このオプションは関数 trainNetwork のみをサポートします。

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

バックグラウンド ディスパッチを有効にするフラグ。0 (false) または 1 (true) として指定します。

バックグラウンド ディスパッチでは、並列ワーカーを使用して、学習の際にデータストアからデータを取得し、前処理します。ミニバッチに大幅な前処理が必要な場合は、このオプションを使用します。バックグラウンド ディスパッチをどのような場合に使用するかの詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。

DispatchInBackgroundtrue に設定されている場合、ローカル プールが開かれていなければ、ソフトウェアは既定のプロファイルを使用してローカル並列プールを開きます。ローカルではない並列プールはサポートされません。

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

並列で学習させる場合、このオプションは関数 trainnet をサポートしません。

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

チェックポイント

すべて折りたたむ

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

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

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

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

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

データ型: char | string

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

solverName"lbfgs" であるか CheckpointFrequencyUnit"iteration" である場合、CheckpointFrequency 回の反復ごとにチェックポイント ニューラル ネットワークが保存されます。それ以外の場合、ソフトウェアは CheckpointFrequency エポックごとにチェックポイント ニューラル ネットワークを保存します。

solverName"sgdm""adam"、または "rmsprop" の場合、既定値は 1 です。solverName"lbfgs" の場合、既定値は 30 です。

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

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

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

CheckpointFrequencyUnit"epoch" の場合、ソフトウェアは CheckpointFrequency エポックごとにチェックポイント ニューラル ネットワークを保存します。

CheckpointFrequencyUnit"iteration" の場合、ソフトウェアは CheckpointFrequency 回の反復ごとにチェックポイント ニューラル ネットワークを保存します。

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

このオプションは、確率的ソルバーのみをサポートします (引数 solverName"sgdm""adam"、または "rmsprop" の場合)。

出力引数

すべて折りたたむ

学習オプション。TrainingOptionsSGDMTrainingOptionsRMSPropTrainingOptionsADAM、または TrainingOptionsLBFGS オブジェクトとして返されます。ニューラル ネットワークに学習させるには、関数 trainNetwork または trainnet への入力引数として学習オプションを使用します。TrainingOptionsLBFGS オブジェクトは、関数 trainnet のみをサポートします。

solverName"sgdm""rmsprop""adam"、または "lbfgs" である場合、学習オプションは TrainingOptionsSGDM オブジェクト、TrainingOptionsRMSProp オブジェクト、TrainingOptionsADAM オブジェクト、または TrainingOptionsLBFGS オブジェクトとしてそれぞれ返されます。

ヒント

アルゴリズム

すべて折りたたむ

初期の重みとバイアス

畳み込み層と全結合層の場合、重みとバイアスの初期化はそれぞれ層のWeightsInitializer プロパティと BiasInitializer プロパティによって与えられます。重みとバイアスの初期化を変更する方法を示す例については、畳み込み層の初期の重みとバイアスの指定および全結合層の初期の重みとバイアスの指定を参照してください。

確率的勾配降下法

標準の勾配降下法アルゴリズムは、各反復で損失の負の勾配の方向に小さいステップで進むことによって損失関数を最小化するように、ネットワーク パラメーター (重みとバイアス) を更新します。

θ+1=θαE(θ),

ここで、 は反復回数、α>0 は学習率、θ はパラメーター ベクトル、E(θ) は損失関数を意味します。標準の勾配降下法アルゴリズムでは、損失関数の勾配 E(θ) は、学習セット全体を使用して評価されます。標準の勾配降下法アルゴリズムでは、データ セット全体を一度に使用します。

一方、"確率的" 勾配降下法アルゴリズムは、各反復で学習データのサブセットを使用して勾配を評価し、パラメーターを更新します。各反復ではミニバッチと呼ばれる別のサブセットが使用されます。ミニバッチを使用して、学習セット全体に対する学習アルゴリズムを一巡することを、1 "エポック" と言います。確率的勾配降下が確率的と言われるのは、ミニバッチを使用して計算されたパラメーター更新が、データセット全体を使用して得られるパラメーター更新のノイズを含む推定であるためです。

モーメンタム項付き確率的勾配降下法

確率的勾配降下法アルゴリズムは、最適値への最急降下経路に沿って振動することがあります。パラメーター更新へのモーメンタム項の追加は、この振動を減らす方法の 1 つです[2]。モーメンタム項付き確率的勾配降下法 (SGDM) の更新は、以下のとおりです。

θ+1=θαE(θ)+γ(θθ1),

ここで、学習率 α とモーメンタム項の値 γ は、前の勾配ステップから現在の反復への寄与を決定します。

平方根平均二乗伝播

モーメンタム項付き確率的勾配降下法は、すべてのパラメーターに対して 1 つの学習率を使用します。その他の最適化アルゴリズムでは、パラメーターごとに異なり、最適化対象の損失関数に自動的に適応できる学習率を使用して、ネットワーク学習の改善を試みます。平方根平均二乗伝播 (RMSProp) はそのようなアルゴリズムの 1 つです。これは、パラメーターの勾配について要素単位の二乗の移動平均を維持します。

v=β2v1+(1β2)[E(θ)]2

β2 は、移動平均の二乗勾配減衰係数です。減衰率の一般的な値は、0.9、0.99、および 0.999 です。対応する勾配の二乗の平均化長は、1/(1-β2) に等しく、それぞれ 10、100、および 1000 回のパラメーター更新です。RMSProp アルゴリズムでは、この移動平均を使用して各パラメーターの更新を個別に正規化します。

θ+1=θαE(θ)v+ϵ

ここで、除算は要素単位で実行されます。RMSProp を使用すると、勾配が大きいパラメーターの学習率は効果的に減少し、勾配が小さいパラメーターの学習率は増加します。ɛ は、ゼロ除算を回避するために追加する小さい定数です。

適応モーメント推定

適応モーメント推定 (Adam) [4]では、RMSProp に似ているが、モーメンタム項が追加されたパラメーター更新を使用します。これは、パラメーターの勾配とそれらの二乗値の両方について要素単位の移動平均を維持します。

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

減衰率 β1 と β2 は、それぞれ勾配減衰係数および二乗勾配減衰係数です。Adam では、移動平均を使用してネットワーク パラメーターを次のように更新します。

θ+1=θαmlvl+ϵ

値 α は学習率です。多数の反復に対する勾配が類似している場合、勾配の移動平均を使用すると、パラメーター更新で特定方向のモーメンタム項を選択できます。勾配のほとんどがノイズである場合、勾配の移動平均が小さくなり、パラメーター更新も小さくなります。Adam の完全な更新には、学習の最初に現れるバイアスを補正するメカニズムも含まれています。詳細については、[4]を参照してください。

記憶制限 BFGS

L-BFGS アルゴリズム[5]は、Broyden-Fletcher-Goldfarb-Shanno (BFGS) アルゴリズムを近似する準ニュートン法です。L-BFGS アルゴリズムは、単一のバッチで処理できる小規模なネットワークやデータ セットに最適です。

このアルゴリズムは、次で指定される更新ステップを使用し、反復 k+1 で学習可能パラメーター W を更新します。

Wk+1=WkηkBk1J(Wk),

ここで、Wk は反復 k における重みを表し、ηk は反復 k における学習率です。Bk は反復 k におけるヘッセ行列の近似であり、J(Wk) は反復 k における学習可能なパラメーターに関する損失の勾配を表します。

L-BFGS アルゴリズムは、行列とベクトルの積 Bk1J(Wk) を直接計算します。このアルゴリズムでは、Bk の逆行列を計算する必要がありません。

メモリを節約するため、L-BFGS アルゴリズムでは密なヘッセ行列 B の保存や反転は行われません。代わりに、アルゴリズムは近似 Bkm1λkI を使用します。ここで、m は履歴サイズであり、逆ヘッセ因子 λk はスカラーです。また、I は単位行列であり、スカラーの逆ヘッセ因子のみを格納します。アルゴリズムは各ステップで逆ヘッセ因子を更新します。

行列とベクトルの積 Bk1J(Wk) を直接計算するために、L-BFGS アルゴリズムは次の再帰的アルゴリズムを使用します。

  1. r=Bkm1J(Wk) を設定します。ここで、m は履歴サイズです。

  2. i=m,,1 について、以下のようにします。

    1. β=1skiykiykir とします。ここで、ski および yki は、それぞれ反復 ki に対するステップおよび勾配の差分です。

    2. r=r+ski(akiβ) を設定します。ここで、a は、sy、および損失関数に対する損失の勾配から導出されます。詳細については、[5]を参照してください。

  3. Bk1J(Wk)=r を返します。

勾配クリップ

勾配の大きさが指数関数的に増加する場合、学習は不安定になり、数回の反復で発散する場合があります。この "勾配爆発" は、学習損失が NaN または Inf になることによって示されます。勾配クリップは、学習率が大きい場合や外れ値が存在する場合に学習を安定させることによって、勾配爆発を防ぎます[3]。勾配クリップを使用すると、ネットワークの学習が高速になり、通常は学習済みタスクの精度に影響はありません。

勾配クリップは 2 種類あります。

  • ノルムベースの勾配クリップでは、しきい値に基づいて勾配を再スケーリングし、勾配の方向は変更しません。GradientThresholdMethod"l2norm" 値と "global-l2norm" 値は、ノルムベースの勾配クリップ法です。

  • 値ベースの勾配クリップでは、しきい値より大きい任意の偏微分をクリップします。この場合、勾配の方向が任意に変化する可能性があります。値ベースの勾配クリップの動作は予測できないものになる場合がありますが、変化が十分に小さければ、ネットワークが発散することはありません。GradientThresholdMethod の値 "absolute-value" は、値ベースの勾配クリップ法です。

L2 正則化

損失関数 E(θ) への重みの正則化項の追加は、過適合を抑える方法の 1 つです[1][2]。正則化項は、"重み減衰" とも呼ばれます。正則化項付きの損失関数は、以下の形式を取ります。

ER(θ)=E(θ)+λΩ(w),

ここで、w は重みベクトル、λ は正則化係数です。正則化関数 Ω(w) は以下のようになります。

Ω(w)=12wTw.

バイアスは正則化されないことに注意してください[2]L2Regularization 学習オプションを使用して、正則化係数 λ を指定できます。層やパラメーターごとに異なる正則化係数を指定することもできます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。

ネットワーク学習に使用される損失関数には、正則化項が含まれます。ただし、学習中にコマンド ウィンドウと学習の進行状況プロットに表示される損失値はデータのみの損失であり、正則化項は含まれません。

参照

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

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

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

バージョン履歴

R2016a で導入

すべて展開する