ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

trainingOptions

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

説明

options = trainingOptions(solverName) は、solverName によって指定されるオプティマイザーの学習オプションを返します。ネットワークに学習させるには、学習オプションを関数 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
    LearnRateScheduleSettings: [1x1 struct]
             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
         DispatchInBackground: 0

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

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

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

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

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

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

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

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

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

学習が終了すると、[Results] に最終検証精度と学習の終了理由が表示されます。最終検証メトリクスには、プロット内で [Final] というラベルが付いています。ネットワークにバッチ正規化層が含まれている場合、通常、最終検証メトリクスは学習中に評価される検証メトリクスとは異なります。これは、最終的なネットワークのバッチ正規化層では、学習中とは異なる処理が実行されるためです。

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

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

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

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);

入力引数

すべて折りたたむ

ネットワークの学習用のソルバー。次のいずれかに指定します。

  • 'sgdm' — モーメンタム項付き確率的勾配降下法 (SGDM) オプティマイザーを使用します。モーメンタム項の値は、名前と値のペアの引数 'Momentum' を使用して指定できます。

  • 'rmsprop' — RMSProp オプティマイザーを使用します。勾配の二乗の移動平均の減衰率は、名前と値のペアの引数 'SquaredGradientDecayFactor' を使用して指定できます。

  • 'adam' — Adam オプティマイザーを使用します。勾配の移動平均の減衰率と勾配の二乗の移動平均の減衰率は、名前と値のペアの引数 'GradientDecayFactor''SquaredGradientDecayFactor' をそれぞれ使用して指定できます。

さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'InitialLearnRate',0.03,'L2Regularization',0.0005,'LearnRateSchedule','piecewise' は、初期学習率を 0.03、L2 正則化係数を 0.0005 に指定し、指定されたエポック数ごとに特定の係数を乗算して学習率を下げるように指定します。

プロットと表示

すべて折りたたむ

ネットワークの学習中に表示するプロット。'Plots' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

例: 'Plots','training-progress'

コマンド ウィンドウに学習の進行状況の情報を表示するかどうかのインジケーター。'Verbose' と、1 (true) または 0 (false) のいずれかで構成されるコンマ区切りのペアとして指定します。

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

分類ネットワーク

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

回帰ネットワーク

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

検証データを指定するには、名前と値のペア 'ValidationData' を使用します。

例: 'Verbose',false

コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。'VerboseFrequency' と正の整数で構成されるコンマ区切りのペアとして指定します。このオプションは、'Verbose' の値が true に等しい場合にのみ有効です。

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

例: 'VerboseFrequency',100

ミニバッチ オプション

すべて折りたたむ

学習に使用するエポックの最大回数。'MaxEpochs' と正の整数で構成されるコンマ区切りのペアとして指定します。

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

例: 'MaxEpochs',20

学習の各反復で使用するミニバッチのサイズ。'MiniBatchSize' と正の整数で構成されるコンマ区切りのペアとして指定します。ミニバッチとは、損失関数の勾配を評価し、重みを更新するために使用される学習セットのサブセットのことです。確率的勾配降下法を参照してください。

例: 'MiniBatchSize',256

データのシャッフルのオプション。'Shuffle' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

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

例: 'Shuffle','every-epoch'

検証

すべて折りたたむ

学習中に検証に使用するデータ。イメージ データストア、2 列の table または 2 列の cell 配列のデータを返すデータストア、table、または cell 配列として指定します。検証データの形式はタスクのタイプによって異なり、関数 trainNetwork への有効な入力に対応します。

イメージ データ

イメージ データの場合、検証データを次のいずれかに指定します。

入力説明詳細
イメージ データストア

categorical ラベル付きの ImageDatastore オブジェクト。

trainNetwork の引数 imds
データストア2 列の table または 2 列の cell 配列のデータを返すデータストア。ここで、2 つの列はそれぞれネットワーク入力と予測される応答を指定します。trainNetwork の引数 ds
table

table。最初の列にイメージ パスまたはイメージのいずれかが含まれ、後続の列に応答が含まれます。

trainNetwork の引数 tbl
cell 配列 {X,Y}X

イメージの数値配列。

trainNetwork の引数 X
Y

ラベルの categorical ベクトル、数値応答の行列、またはイメージの配列。

trainNetwork の引数 Y

シーケンス データおよび時系列データ

シーケンス データおよび時系列データの場合、検証データを次のいずれかに指定します。

入力説明詳細
cell 配列 {C,Y}C

シーケンス データまたは時系列データの cell 配列。

trainNetwork の引数 C
Y

ラベルの categorical ベクトル、categorical シーケンスの cell 配列、数値応答の行列、または数値シーケンスの cell 配列。

trainNetwork の引数 Y
table

シーケンス データまたは時系列データを含む MAT ファイルの絶対ファイル パスまたは相対ファイル パスが含まれる table。

trainNetwork の引数 tbl

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

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

検証データは、'Shuffle' の値に従ってシャッフルされます。'Shuffle' の値が 'every-epoch' に等しい場合、検証データはネットワークの各検証の前にシャッフルされます。

ネットワークの検証の頻度 (反復回数)。'ValidationFrequency' と正の整数で構成されるコンマ区切りのペアとして指定します。

'ValidationFrequency' の値は、検証メトリクスの評価間の反復回数です。検証データを指定するには、名前と値のペアの引数 'ValidationData' を使用します。

例: 'ValidationFrequency',20

ネットワークの学習の検証停止までの待機回数。'ValidationPatience' と、正の整数または Inf で構成されるコンマ区切りのペアとして指定します。

'ValidationPatience' の値は、ネットワークの学習が停止するまでに、検証セットでの損失が前の最小損失以上になることが許容される回数です。自動検証停止をオンにするには、'ValidationPatience' の値として正の整数を指定します。既定値の Inf を使用すると、最大回数のエポックの後に学習が停止します。検証データを指定するには、名前と値のペアの引数 'ValidationData' を使用します。

例: 'ValidationPatience',5

ソルバー オプション

すべて折りたたむ

学習に使用する初期学習率。'InitialLearnRate' と正のスカラーで構成されるコンマ区切りのペアとして指定します。既定値は、'sgdm' ソルバーでは 0.01、'rmsprop' および 'adam' ソルバーでは 0.001 です。学習率が小さすぎる場合、学習に時間がかかります。学習率が大きすぎる場合、最適ではない学習結果となったり、発散したりすることがあります。

例: 'InitialLearnRate',0.03

データ型: single | double

学習中に学習率を下げるオプション。'LearnRateSchedule' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

  • 'piecewise' — 特定のエポック数ごとに特定の係数を乗算して学習率が更新されます。この係数の値を指定するには、名前と値のペアの引数 LearnRateDropFactor を使用します。乗算の間隔のエポック数を指定するには、名前と値のペアの引数 LearnRateDropPeriod を使用します。

例: 'LearnRateSchedule','piecewise'

学習率を下げるまでのエポック数。'LearnRateDropPeriod' と正の整数で構成されるコンマ区切りのペアとして指定します。このオプションは、LearnRateSchedule の値が 'piecewise' の場合にのみ有効です。

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

例: 'LearnRateDropPeriod',3

学習率を下げる係数。'LearnRateDropFactor' と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。このオプションは、LearnRateSchedule の値が 'piecewise' の場合にのみ有効です。

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

例: 'LearnRateDropFactor',0.1

データ型: single | double

L2 正則化 (重み減衰) の係数。'L2Regularization' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。詳細は、L2 正則化を参照してください。

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

例: 'L2Regularization',0.0005

データ型: single | double

モーメンタム項付き確率的勾配降下法における前の反復から現在の反復へのパラメーター更新ステップの寄与。'Momentum' と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。値 0 は前のステップからの寄与がないことを意味し、値 1 は前のステップからの寄与が最大であることを意味します。

'Momentum' の値を指定するには、solverName'sgdm' に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

例: 'Momentum',0.95

データ型: single | double

Adam ソルバーの勾配の移動平均の減衰率。'GradientDecayFactor' と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。[4] では、勾配の減衰率は β1 で表されています。

'GradientDecayFactor' の値を指定するには、solverName'adam' に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

例: 'GradientDecayFactor',0.95

データ型: single | double

Adam および RMSProp ソルバーの勾配の二乗の移動平均の減衰率。'SquaredGradientDecayFactor' と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。[4] では、勾配の二乗の減衰率は β2 で表されています。

'SquaredGradientDecayFactor' の値を指定するには、solverName'adam' または 'rmsprop' に設定しなければなりません。減衰率の一般的な値は 0.9、0.99、および 0.999 であり、平均化の長さとしては 10、100、および 1000 回のパラメーター更新にそれぞれ対応しています。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

例: 'SquaredGradientDecayFactor',0.99

データ型: single | double

Adam および RMSProp ソルバーの分母のオフセット。'Epsilon' と正のスカラーで構成されるコンマ区切りペアとして指定します。ソルバーは、ネットワーク パラメーターの更新時に分母にオフセットを追加して、ゼロ除算を回避します。

'Epsilon' の値を指定するには、solverName'adam' または 'rmsprop' に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。

例: 'Epsilon',1e-6

データ型: single | double

勾配クリップ

すべて折りたたむ

勾配のしきい値。'GradientThreshold'Inf または正のスカラーで構成されるコンマ区切りのペアとして指定します。勾配が GradientThreshold の値を超えた場合、勾配は GradientThresholdMethod に応じてクリップされます。

例: 'GradientThreshold',6

勾配のしきい値を超えた勾配の値をクリップするために使用する勾配しきい値法。'GradientThresholdMethod' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

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

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

例: 'GradientThresholdMethod','global-l2norm'

シーケンス オプション

すべて折りたたむ

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

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

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

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

シーケンス長を正の整数として指定している場合、連続する反復においてより小さいシーケンスが処理されます。ネットワークは、分割されたシーケンスとシーケンスの間にネットワークの状態を更新します。

パディングと切り捨てはシーケンスの右側に対して行われます。入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

例: 'SequenceLength','shortest'

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

例: 'SequencePaddingValue',-1

ハードウェア オプション

すべて折りたたむ

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

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

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

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

  • 'multi-gpu' — ローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用します。開いているプールがない場合、既定の並列設定に基づいて 1 つのプールが開きます。

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

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

GPU、マルチ GPU、および並列オプションには、Parallel Computing Toolbox™ が必要です。深層学習に GPU を使用するには、Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU も必要です。これらのいずれかのオプションの選択時に Parallel Computing Toolbox または適切な GPU を利用できない場合、エラーが返されます。

並列学習の実行時に性能の改善を確認するには、通信オーバーヘッドをオフセットするために MiniBatchSize 学習オプションを大きくしてみてください。

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

特定の入力データストアは、並列またはマルチ GPU 実行環境でバックグラウンド ディスパッチをサポートしています。これらのデータストアは、augmentedImageDatastorepixelLabelImageDatastoredenoisingImageDatastore、および randomPatchExtractionDatastore です。その他の入力データストアでは、DispatchInBackground の指定時に ExecutionEnvironment'parallel' または 'multi-gpu' 値がサポートされていません。

例: 'ExecutionEnvironment','cpu'

GPU または CPU 間での並列ワーカーの負荷分割。'WorkerLoad' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

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

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

非同期事前取得キューを使用した、データストアからの学習データの読み取り。false または true として指定します。非同期事前取得キューには、Parallel Computing Toolbox が必要です。

特定の入力データストアは、並列またはマルチ GPU 実行環境でバックグラウンド ディスパッチをサポートしています。これらのデータストアは、augmentedImageDatastorepixelLabelImageDatastoredenoisingImageDatastore、および randomPatchExtractionDatastore です。その他の入力データストアでは、DispatchInBackground の指定時に ExecutionEnvironment'parallel' または 'multi-gpu' 値がサポートされていません。

チェックポイント

すべて折りたたむ

チェックポイント ネットワークの保存用のパス。'CheckpointPath' と文字ベクトルで構成されるコンマ区切りのペアとして指定します。

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

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

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

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

例: 'CheckpointPath','C:\Temp\checkpoint'

データ型: char

学習中に呼び出す出力関数。'OutputFcn' と、関数ハンドルまたは関数ハンドルの 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

出力引数

すべて折りたたむ

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

solverName'sgdm''rmsprop'、または 'adam' に等しい場合、学習オプションは TrainingOptionsSGDMTrainingOptionsRMSProp、または TrainingOptionsADAM オブジェクトとしてそれぞれ返されます。

アルゴリズム

すべて折りたたむ

初期の重みとバイアス

初期重みの既定値は、平均 0、標準偏差 0.01 のガウス分布に従います。初期バイアス値の既定値は 0 です。重みとバイアスの初期化は手動で変更できます。畳み込み層の初期の重みとバイアスの指定および全結合層の初期の重みとバイアスの指定を参照してください。

確率的勾配降下法

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

θ+1=θαE(θ),

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

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

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

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

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

ここで、γ は、前の勾配ステップから現在の反復への寄与を決定します。名前と値のペアの引数 'Momentum' を使用してこの値を指定できます。モーメンタム項付き確率的勾配降下法アルゴリズムを使用してニューラル ネットワークの学習を行うには、solverName'sgdm' に指定します。学習率 α の初期値を指定するには、名前と値のペアの引数 'InitialLearnRate' を使用します。層やパラメーターごとに異なる学習率を指定することもできます。詳細は、畳み込み層と全結合層のパラメーターの設定を参照してください。

RMSProp

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

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

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

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

ここで、除算は要素単位で実行されます。RMSProp を使用すると、勾配が大きいパラメーターの学習率は効果的に減少し、勾配が小さいパラメーターの学習率は増加します。ɛ は、ゼロ除算を回避するために追加する小さい定数です。名前と値のペアの引数 'Epsilon' を使用して、ɛ を指定できますが、通常は既定値で良い結果が得られます。RMSProp を使用してニューラル ネットワークの学習を行うには、solverName'rmsprop' に指定します。

Adam

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

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

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

減衰率 β1 と β2 は、名前と値のペアの引数 'GradientDecayFactor''SquaredGradientDecayFactor' をそれぞれ使用して指定できます。Adam では、移動平均を使用してネットワーク パラメーターを次のように更新します。

θ+1=θαmlvl+ϵ

多数の反復に対する勾配が類似している場合、勾配の移動平均を使用すると、パラメーター更新で特定方向のモーメンタム項を選択できます。勾配のほとんどがノイズである場合、勾配の移動平均が小さくなり、パラメーター更新も小さくなります。ɛ は、名前と値のペアの引数 'Epsilon' を使用して指定できます。通常は既定値で良い結果が得られますが、特定の問題では、1 に近い大きな値の方がより良い場合があります。Adam を使用してニューラル ネットワークの学習を行うには、solverName'adam' に指定します。Adam の完全な更新には、学習の最初に現れるバイアスを補正するメカニズムも含まれています。詳細は、[4]を参照してください。

すべての最適化アルゴリズムの学習率 α は、名前と値のペアの引数 'InitialLearnRate' を使用して指定します。学習率の効果は最適化アルゴリズムによって異なるため、一般的に、最適な学習率も異なります。層やパラメーターごとに異なる学習率を指定することもできます。詳細は、畳み込み層と全結合層のパラメーターの設定を参照してください。

勾配クリップ

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

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

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

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

例については、深層学習を使用した時系列予測深層学習を使用した sequence-to-sequence 分類を参照してください。

L2 正則化

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

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

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

Ω(w)=12wTw.

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

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

互換性の考慮事項

すべて展開する

R2018b での動作変更

R2018b での動作変更

参照

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

R2016a で導入