最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
深層学習ニューラル ネットワークの学習のオプション
は、options
= trainingOptions(solverName
)solverName
によって指定されるオプティマイザーの学習オプションを返します。ネットワークに学習させるには、学習オプションを関数 trainNetwork
への入力引数として使用します。
は、学習オプションと、1 つ以上の名前と値のペアの引数で指定された追加オプションを返します。options
= trainingOptions(solverName
,Name,Value
)
モーメンタム項付き確率的勾配降下法を使用したネットワーク学習の一連のオプションを作成します。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
深層学習のネットワークに学習させる場合、学習の進行状況を監視すると役に立つことがよくあります。学習中のさまざまなメトリクスのプロットにより、学習の進行状況を知ることができます。たとえば、ネットワークの精度が改善されているかどうか、その改善の速度、さらにネットワークで学習データへの過適合が始まっているかどうかを判定できます。
trainingOptions
で 'Plots'
の値として 'training-progress'
を指定してネットワークの学習を開始すると、trainNetwork
によって Figure が作成され、反復ごとに学習メトリクスが表示されます。各反復は、勾配の推定と、ネットワーク パラメーターの更新で構成されます。trainingOptions
に検証データを指定すると、trainNetwork
によってネットワークが検証されるたびに Figure に検証メトリクスが表示されます。Figure には次がプロットされます。
学習精度 — 個々のミニバッチの分類精度。
平滑化後の学習精度 — 学習精度に平滑化アルゴリズムを適用することによって求められる、平滑化された学習精度。精度を平滑化していない場合よりノイズが少なく、傾向を見つけやすくなります。
検証精度 — (trainingOptions
を使用して指定された) 検証セット全体に対する分類精度。
学習損失、平滑化後の学習損失、検証損失 — それぞれ、各ミニバッチの損失、その平滑化バージョン、検証セットの損失。ネットワークの最後の層が classificationLayer
である場合、損失関数は交差エントロピー損失です。分類問題と回帰問題の損失関数の詳細は、出力層を参照してください。
回帰ネットワークの場合、Figure には精度ではなく平方根平均二乗誤差 (RMSE) がプロットされます。
Figure では、影付きの背景を使用して各学習エポックがマークされます。1 エポックは、データセット全体を一巡することです。
学習中、右上隅の停止ボタンをクリックして学習を停止し、ネットワークの現在の状態を返すことができます。たとえば、ネットワークの精度が横ばい状態に達し、これ以上改善されないことが明確な場合に、学習の停止が必要になることがあります。停止ボタンのクリックの後、学習が完了するまでしばらくかかることがあります。学習が完了すると、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);
solverName
— ネットワークの学習用のソルバー'sgdm'
| 'rmsprop'
| 'adam'
ネットワークの学習用のソルバー。次のいずれかに指定します。
'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'
と次のいずれかで構成されるコンマ区切りのペアとして指定します。
'none'
— 学習中にプロットを表示しません。
'training-progress'
— 学習の進行状況をプロットします。プロットには、ミニバッチの損失と精度、検証の損失と精度、および学習の進行状況に関する追加情報が表示されます。プロットの右上隅には、停止ボタン があります。そのボタンをクリックすると、学習が停止し、ネットワークの現在の状態が返されます。学習の進行状況プロットの詳細は、深層学習における学習の進行状況の監視を参照してください。
例: 'Plots','training-progress'
'Verbose'
— 学習の進行状況の情報を表示するかどうかのインジケーター1
(true
) (既定値) | 0
(false
)コマンド ウィンドウに学習の進行状況の情報を表示するかどうかのインジケーター。'Verbose'
と、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'
を使用します。
例: 'Verbose',false
'VerboseFrequency'
— 詳細出力の頻度コマンド ウィンドウへの表示間の反復回数を示す、詳細出力の頻度。'VerboseFrequency'
と正の整数で構成されるコンマ区切りのペアとして指定します。このオプションは、'Verbose'
の値が true
に等しい場合にのみ有効です。
学習中にネットワークを検証する場合、trainNetwork
でも、検証時に毎回、コマンド ウィンドウへの出力が行われます。
例: 'VerboseFrequency',100
'MaxEpochs'
— エポックの最大回数学習に使用するエポックの最大回数。'MaxEpochs'
と正の整数で構成されるコンマ区切りのペアとして指定します。
反復とは、勾配降下法アルゴリズムでミニバッチを使用して損失関数の最小化を目指して実行される 1 ステップのことです。1 エポックは、データセット全体を一巡することです。
例: 'MaxEpochs',20
'MiniBatchSize'
— ミニバッチのサイズ学習の各反復で使用するミニバッチのサイズ。'MiniBatchSize'
と正の整数で構成されるコンマ区切りのペアとして指定します。ミニバッチとは、損失関数の勾配を評価し、重みを更新するために使用される学習セットのサブセットのことです。確率的勾配降下法を参照してください。
例: 'MiniBatchSize',256
'Shuffle'
— データのシャッフルのオプション'once'
(既定値) | 'never'
| 'every-epoch'
データのシャッフルのオプション。'Shuffle'
と次のいずれかで構成されるコンマ区切りのペアとして指定します。
'once'
— 学習前に 1 回、学習データと検証データをシャッフルします。
'never'
— データをシャッフルしません。
'every-epoch'
— 各学習エポックの前に学習データをシャッフルし、ネットワークの各検証の前に検証データをシャッフルします。ミニバッチのサイズによって学習標本の数が均等に分割されない場合、trainNetwork
は、各エポックの最後の完全なミニバッチに収まらない学習データを破棄します。すべてのエポックで同じデータが破棄されるのを回避するには、'Shuffle'
の値を 'every-epoch'
に設定します。
例: 'Shuffle','every-epoch'
'ValidationData'
— 学習中の検証に使用するデータ学習中に検証に使用するデータ。イメージ データストア、2 列の table または 2 列の cell 配列のデータを返すデータストア、table、または cell 配列として指定します。検証データの形式はタスクのタイプによって異なり、関数 trainNetwork
への有効な入力に対応します。
このオプションは、単一の入力のみがあるネットワークをサポートします。
イメージ データの場合、検証データを次のいずれかに指定します。
入力 | 説明 | 詳細 | |
---|---|---|---|
イメージ データストア |
| trainNetwork の引数 imds | |
データストア | 2 列の table または 2 列の cell 配列のデータを返すデータストア。ここで、2 つの列はそれぞれネットワーク入力と予測される応答を指定します。 | trainNetwork の引数 ds | |
table | table。最初の列にイメージ パスまたはイメージのいずれかが含まれ、後続の列に応答が含まれます。 | trainNetwork の引数 tbl | |
cell 配列 {X,Y} | X | イメージの数値配列。 | trainNetwork の引数 X |
Y | ラベルの categorical ベクトル、数値応答の行列、またはイメージの配列。 | trainNetwork の引数 Y |
シーケンス データおよび時系列データの場合、検証データを次のいずれかに指定します。
入力 | 説明 | 詳細 | |
---|---|---|---|
cell 配列 {sequences,Y} | sequences | シーケンス データまたは時系列データの cell 配列。 | trainNetwork の引数 sequences |
Y | ラベルの categorical ベクトル、categorical シーケンスの cell 配列、数値応答の行列、または数値シーケンスの cell 配列。 | trainNetwork の引数 Y | |
table | シーケンス データまたは時系列データを含む MAT ファイルの絶対ファイル パスまたは相対ファイル パスが含まれる table。 | trainNetwork の引数 tbl |
学習中に、trainNetwork
は検証データの検証精度と検証損失を計算します。検証頻度を指定するには、名前と値のペアの引数 'ValidationFrequency'
を使用します。検証データを使用して、検証損失が減少しなくなったときに学習を自動的に停止することもできます。自動検証停止をオンにするには、名前と値のペアの引数 'ValidationPatience'
を使用します。
ネットワークに予測時と学習中で動作が異なる層 (ドロップアウト層など) がある場合、検証精度が学習 (ミニバッチ) 精度より高くなる可能性があります。
検証データは、'Shuffle'
の値に従ってシャッフルされます。'Shuffle'
の値が 'every-epoch'
に等しい場合、検証データはネットワークの各検証の前にシャッフルされます。
'ValidationFrequency'
— ネットワークの検証の頻度ネットワークの検証の頻度 (反復回数)。'ValidationFrequency'
と正の整数で構成されるコンマ区切りのペアとして指定します。
'ValidationFrequency'
の値は、検証メトリクスの評価間の反復回数です。検証データを指定するには、名前と値のペアの引数 'ValidationData'
を使用します。
例: 'ValidationFrequency',20
'ValidationPatience'
— 検証停止までの待機回数Inf
(既定値) | 正の整数ネットワークの学習の検証停止までの待機回数。'ValidationPatience'
と、正の整数または Inf
で構成されるコンマ区切りのペアとして指定します。
'ValidationPatience'
の値は、ネットワークの学習が停止するまでに、検証セットでの損失が前の最小損失以上になることが許容される回数です。自動検証停止をオンにするには、'ValidationPatience'
の値として正の整数を指定します。既定値の Inf
を使用すると、最大回数のエポックの後に学習が停止します。検証データを指定するには、名前と値のペアの引数 'ValidationData'
を使用します。
例: 'ValidationPatience',5
'InitialLearnRate'
— 初期学習率学習に使用する初期学習率。'InitialLearnRate'
と正のスカラーで構成されるコンマ区切りのペアとして指定します。既定値は、'sgdm'
ソルバーでは 0.01、'rmsprop'
および 'adam'
ソルバーでは 0.001 です。学習率が小さすぎる場合、学習に時間がかかります。学習率が大きすぎる場合、学習結果が準最適になったり、発散したりすることがあります。
例: 'InitialLearnRate',0.03
データ型: single
| double
'LearnRateSchedule'
— 学習中に学習率を下げるオプション'none'
(既定値) | 'piecewise'
学習中に学習率を下げるオプション。'LearnRateSchedule'
と次のいずれかで構成されるコンマ区切りのペアとして指定します。
'none'
— 学習率は学習全体を通じて一定のままです。
'piecewise'
— 特定のエポック数ごとに特定の係数を乗算して学習率が更新されます。この係数の値を指定するには、名前と値のペアの引数 LearnRateDropFactor
を使用します。乗算の間隔のエポック数を指定するには、名前と値のペアの引数 LearnRateDropPeriod
を使用します。
例: 'LearnRateSchedule','piecewise'
'LearnRateDropPeriod'
— 学習率を下げるまでのエポック数学習率を下げるまでのエポック数。'LearnRateDropPeriod'
と正の整数で構成されるコンマ区切りのペアとして指定します。このオプションは、LearnRateSchedule
の値が 'piecewise'
の場合にのみ有効です。
指定したエポック数が経過するたびに、グローバル学習率と低下係数が乗算されます。名前と値のペアの引数 LearnRateDropFactor
を使用して低下係数を指定します。
例: 'LearnRateDropPeriod',3
'LearnRateDropFactor'
— 学習率を下げる係数学習率を下げる係数。'LearnRateDropFactor'
と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。このオプションは、LearnRateSchedule
の値が 'piecewise'
の場合にのみ有効です。
LearnRateDropFactor
は、特定のエポック数が経過するたびに学習率に適用される乗法係数です。名前と値のペアの引数 LearnRateDropPeriod
を使用してエポック数を指定します。
例: 'LearnRateDropFactor',0.1
データ型: single
| double
'L2Regularization'
— L2 正則化の係数L2 正則化 (重み減衰) の係数。'L2Regularization'
と非負のスカラーで構成されるコンマ区切りのペアとして指定します。詳細については、L2 正則化を参照してください。
学習可能なパラメーターのあるネットワーク層に対して L2 正則化の乗数を指定できます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。
例: 'L2Regularization',0.0005
データ型: single
| double
'Momentum'
— 前のステップの寄与モーメンタム項付き確率的勾配降下法における前の反復から現在の反復へのパラメーター更新ステップの寄与。'Momentum'
と 0 から 1 までのスカラーで構成されるコンマ区切りのペアとして指定します。値 0 は前のステップからの寄与がないことを意味し、値 1 は前のステップからの寄与が最大であることを意味します。
'Momentum'
の値を指定するには、solverName
を 'sgdm'
に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。
例: 'Momentum',0.95
データ型: single
| double
'GradientDecayFactor'
— 勾配の移動平均の減衰率Adam ソルバーの勾配の移動平均の減衰率。'GradientDecayFactor'
と 1 未満の非負のスカラーで構成されるコンマ区切りのペアとして指定します。[4]では、勾配の減衰率は β1
で表されます。
'GradientDecayFactor'
の値を指定するには、solverName
を 'adam'
に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。
例: 'GradientDecayFactor',0.95
データ型: single
| double
'SquaredGradientDecayFactor'
— 勾配の二乗の移動平均の減衰率Adam および RMSProp ソルバーの勾配の二乗の移動平均の減衰率。'SquaredGradientDecayFactor'
と 1 未満の非負のスカラーで構成されるコンマ区切りのペアとして指定します。[4]では、勾配の二乗の減衰率は β2
で表されます。
'SquaredGradientDecayFactor'
の値を指定するには、solverName
を 'adam'
または 'rmsprop'
に設定しなければなりません。減衰率の一般的な値は 0.9、0.99、および 0.999 であり、平均化の長さとしては 10、100、および 1000 回のパラメーター更新にそれぞれ対応しています。Adam ソルバーの既定値は 0.999 です。RMSProp ソルバーの既定値は 0.9 です。
さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。
例: 'SquaredGradientDecayFactor',0.99
データ型: single
| double
'Epsilon'
— 分母のオフセットAdam および RMSProp ソルバーの分母のオフセット。'Epsilon'
と正のスカラーで構成されるコンマ区切りペアとして指定します。ソルバーは、ネットワーク パラメーターの更新時に分母にオフセットを追加して、ゼロ除算を回避します。
'Epsilon'
の値を指定するには、solverName
を 'adam'
または 'rmsprop'
に設定しなければなりません。ほとんどの問題において、既定値で良い結果が得られます。さまざまなソルバーの詳細は、確率的勾配降下法を参照してください。
例: 'Epsilon',1e-6
データ型: single
| double
'ResetInputNormalization'
— 入力層の正規化をリセットするオプションtrue
(既定値) | false
入力層の正規化をリセットするオプション。次のいずれかに指定します。
true
– 入力層の正規化統計量をリセットし、学習時に再計算します。
false
– 正規化統計量が空の場合、学習時に計算します。
'GradientThreshold'
— 勾配のしきい値Inf
(既定値) | 正のスカラー勾配のしきい値。'GradientThreshold'
と Inf
または正のスカラーで構成されるコンマ区切りのペアとして指定します。勾配が GradientThreshold
の値を超えた場合、勾配は GradientThresholdMethod
に応じてクリップされます。
例: 'GradientThreshold',6
'GradientThresholdMethod'
— 勾配しきい値法'l2norm'
(既定値) | 'global-l2norm'
| 'absolute-value'
勾配のしきい値を超えた勾配の値をクリップするために使用する勾配しきい値法。'GradientThresholdMethod'
と次のいずれかで構成されるコンマ区切りのペアとして指定します。
'l2norm'
— 学習可能なパラメーターの勾配の L2 ノルムが GradientThreshold
より大きい場合は、L2 ノルムが GradientThreshold
に等しくなるように勾配をスケーリングします。
'global-l2norm'
— グローバル L2 ノルム L が GradientThreshold
より大きい場合は、すべての勾配を GradientThreshold/
L 倍にスケーリングします。グローバル L2 ノルムでは、すべての学習可能なパラメーターが考慮されます。
'absolute-value'
— 学習可能なパラメーターの勾配に含まれる個々の偏微分の絶対値が GradientThreshold
より大きい場合、偏微分の符号を維持したまま、大きさが GradientThreshold
に等しくなるように偏微分をスケーリングします。
詳細は、勾配クリップを参照してください。
例: 'GradientThresholdMethod','global-l2norm'
'SequenceLength'
— 入力シーケンスのパディング、切り捨て、または分割を行うオプション'longest'
(既定値) | 'shortest'
| 正の整数入力シーケンスのパディング、切り捨て、または分割を行うオプション。次のいずれかに指定します。
'longest'
— 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってネットワークにノイズが生じることがあります。
'shortest'
— 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。
正の整数 — 各ミニバッチで、ミニバッチで最長のシーケンスより大きい、指定長の最も近い倍数になるようにシーケンスのパディングを行った後、それらのシーケンスを指定長のより小さなシーケンスに分割します。分割が発生すると、追加のミニバッチが作成されます。シーケンス全体がメモリに収まらない場合は、このオプションを使用します。または、'MiniBatchSize'
オプションをより小さい値に設定して、ミニバッチごとのシーケンス数を減らしてみます。
入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。
例: 'SequenceLength','shortest'
'SequencePaddingDirection'
— パディングまたは切り捨ての方向'right'
(既定値) | 'left'
パディングまたは切り捨ての方向。次のいずれかに指定します。
'right'
— シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。
'left'
— シーケンスの左側に対してパディングまたは切り捨てを行います。シーケンスが同じタイム ステップで終わるように、シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。
LSTM 層は 1 タイム ステップずつシーケンス データを処理するため、層の OutputMode
プロパティが 'last'
の場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。シーケンス データの左側に対してパディングまたは切り捨てを行うには、'SequencePaddingDirection'
オプションを 'left'
に設定します。
sequence-to-sequence ネットワークの場合 (各 LSTM 層について OutputMode
プロパティが 'sequence'
である場合)、最初のタイム ステップでパティングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。シーケンスの右側に対してパディングまたは切り捨てを行うには、'SequencePaddingDirection'
オプションを 'right'
に設定します。
入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。
'SequencePaddingValue'
— 入力シーケンスをパディングする値入力シーケンスをパディングする値。スカラーとして指定します。このオプションは、SequenceLength
が 'longest'
または正の整数の場合にのみ有効です。ネットワーク全体にエラーが伝播される可能性があるため、NaN
でシーケンスをパディングしないでください。
例: 'SequencePaddingValue',-1
'ExecutionEnvironment'
— ネットワークの学習用のハードウェア リソース'auto'
(既定値) | 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
ネットワークの学習用のハードウェア リソース。次のいずれかに指定します。
'auto'
— 利用可能な場合、GPU を使用します。そうでない場合、CPU を使用します。
'cpu'
— CPU を使用します。
'gpu'
— GPU を使用します。
'multi-gpu'
— 既定のクラスター プロファイルに基づいてローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用します。現在の並列プールがない場合、使用可能な GPU の数と等しいプール サイズの並列プールが起動されます。
'parallel'
— 既定のクラスター プロファイルに基づいてローカルまたはリモートの並列プールを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、固有の GPU を持つワーカーのみが学習計算を実行します。プールに GPU がない場合、代わりに使用可能なすべての CPU ワーカーで学習が実行されます。
さまざまな実行環境をどのような場合に使用するかの詳細は、並列およびクラウドでの深層学習のスケールアップを参照してください。
GPU、マルチ GPU、および並列オプションには Parallel Computing Toolbox™ が必要です。深層学習に GPU を使用するには、Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU も必要です。これらのいずれかのオプションの選択時に Parallel Computing Toolbox または適切な GPU を利用できない場合、エラーが返されます。
並列学習の実行時に性能の改善を確認するには、MiniBatchSize
および InitialLearnRate
学習オプションを GPU の数でスケール アップしてみてください。
長短期記憶ネットワークの学習では、1 つの CPU または 1 つの GPU での学習のみがサポートされます。
マルチ GPU での学習または並列学習に使用されるデータストアは分割可能でなければなりません。詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。
'multi-gpu'
オプションを分割可能な入力データストアおよび 'DispatchInBackground'
オプションと共に使用すると、既定のプール サイズと等しいサイズの並列プールが起動されます。固有の GPU を持つワーカーは学習計算を実行します。残りのワーカーはバックグラウンド ディスパッチ用に使用されます。
例: 'ExecutionEnvironment','cpu'
'WorkerLoad'
— 並列ワーカーの負荷分割GPU または CPU 間での並列ワーカーの負荷分割。'WorkerLoad'
と次のいずれかで構成されるコンマ区切りのペアとして指定します。
0 から 1 までのスカラー — ネットワーク学習計算に使用する各マシンのワーカーの割合。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、残りのワーカーはバックグラウンドでデータを取得して処理します。
正の整数 — ネットワーク学習計算に使用する各マシンのワーカー数。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、残りのワーカーはバックグラウンドでデータを取得して処理します。
数値ベクトル — 並列プール内の各ワーカーのネットワーク学習の負荷。ベクトル W
の場合、ワーカー i
は W(i)/sum(W)
の割合の作業 (ミニバッチあたりの例の数) を取得します。バックグラウンド ディスパッチを有効にしたミニバッチ データストアのデータを使用してネットワークの学習を行う場合、ワーカーの負荷を 0 にすることで、そのワーカーをバックグラウンドでのデータ取得に使用できます。指定するベクトルには、並列プール内のワーカーごとに 1 つの値が含まれていなければなりません。
並列プールから GPU にアクセスできる場合、固有の GPU を持たないワーカーは学習計算に使用されません。GPU を持つプールの場合、既定では、固有の GPU を持つすべてのワーカーを学習計算に使用し、残りのワーカーをバックグラウンド ディスパッチに使用します。プールから GPU にアクセスできず、CPU を学習に使用する場合、既定では、マシンあたり 1 つのワーカーをバックグラウンド データ ディスパッチに使用します。
'DispatchInBackground'
— バックグラウンド ディスパッチの使用false
(既定値) | true
バックグラウンド ディスパッチ (非同期事前取得キュー) を使用した、データストアからの学習データの読み取り。false
または true
として指定します。バックグラウンド ディスパッチには Parallel Computing Toolbox が必要です。
DispatchInBackground
は、分割可能なデータストアでのみサポートされます。詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。
'CheckpointPath'
— チェックポイント ネットワークの保存用のパス''
(既定値) | 文字ベクトルチェックポイント ネットワークの保存用のパス。'CheckpointPath'
と文字ベクトルで構成されるコンマ区切りのペアとして指定します。
パスを指定しない (既定の ''
を使用する) 場合、チェックポイント ネットワークは保存されません。
パスを指定すると、trainNetwork
によってエポックの終了ごとにこのパスにチェックポイント ネットワークが保存され、各ネットワークに一意の名前が割り当てられます。その後、いずれかのチェックポイント ネットワークを読み込み、そのネットワークから学習を再開できます。
フォルダーが存在していない場合、チェックポイント ネットワークを保存するパスを指定する前に、まずフォルダーを作成しなければなりません。指定したパスが存在していない場合、trainingOptions
はエラーを返します。
ネットワーク チェックポイントの保存の詳細は、チェックポイント ネットワークの保存と学習の再開を参照してください。
例: 'CheckpointPath','C:\Temp\checkpoint'
データ型: char
'OutputFcn'
— 出力関数学習中に呼び出す出力関数。'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
options
— 学習オプションTrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
学習オプション。TrainingOptionsSGDM
、TrainingOptionsRMSProp
、または TrainingOptionsADAM
オブジェクトとして返されます。ニューラル ネットワークに学習させるには、学習オプションを関数 trainNetwork
への入力引数として使用します。
solverName
が 'sgdm'
、'rmsprop'
、または 'adam'
に等しい場合、学習オプションは TrainingOptionsSGDM
、TrainingOptionsRMSProp
、または TrainingOptionsADAM
オブジェクトとしてそれぞれ返されます。
TrainingOptionsSGDM
オブジェクト、TrainingOptionsADAM
オブジェクト、および TrainingOptionsRMSProp
オブジェクトの学習オプションのプロパティを直接編集できます。たとえば、関数 trainingOptions
を使用した後にミニバッチのサイズを変更するには、MiniBatchSize
プロパティを直接編集します。
options = trainingOptions('sgdm'); options.MiniBatchSize = 64;
ほとんどの深層学習タスクでは、事前学習済みのネットワークを使用して独自のデータに適応させることができます。転移学習を使用して、畳み込みニューラル ネットワークの再学習を行い、新しい一連のイメージを分類する方法を示す例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。または、layerGraph
オブジェクトを関数 trainNetwork
および関数 trainingOptions
と共に使用して、ネットワークを作成してゼロから学習させることができます。
タスクに必要な学習オプションが関数 trainingOptions
に用意されていない場合、自動微分を使用してカスタム学習ループを作成できます。詳細については、カスタム学習ループの定義を参照してください。
畳み込み層と全結合層の場合、重みとバイアスの初期化はそれぞれ層のWeightsInitializer
プロパティと BiasInitializer
プロパティによって与えられます。重みとバイアスの初期化を変更する方法を示す例については、畳み込み層の初期の重みとバイアスの指定および全結合層の初期の重みとバイアスの指定を参照してください。
標準の勾配降下法アルゴリズムは、各反復で損失の負の勾配の方向に小さいステップで進むことによって損失関数を最小化するように、ネットワーク パラメーター (重みとバイアス) を更新します。
ここで、 は反復回数、 は学習率、 はパラメーター ベクトル、 は損失関数を意味します。標準の勾配降下法アルゴリズムでは、損失関数の勾配 は、学習セット全体を使用して評価されます。標準の勾配降下法アルゴリズムでは、データセット全体を一度に使用します。
一方、"確率的" 勾配降下法アルゴリズムは、各反復で学習データのサブセットを使用して勾配を評価し、パラメーターを更新します。各反復ではミニバッチと呼ばれる別のサブセットが使用されます。ミニバッチを使用して、学習セット全体に対する学習アルゴリズムを一巡することを、1 "エポック" と言います。確率的勾配降下が確率的と言われるのは、ミニバッチを使用して計算されたパラメーター更新が、データセット全体を使用して得られるパラメーター更新のノイズを含む推定であるためです。名前と値のペアの引数 'MiniBatchSize'
と 'MaxEpochs'
をそれぞれ使用して、ミニバッチのサイズとエポックの最大回数を指定できます。
確率的勾配降下法アルゴリズムは、最適値への最急降下経路に沿って振動することがあります。パラメーター更新へのモーメンタム項の追加は、この振動を減らす方法の 1 つです [2]。モーメンタム項付き確率的勾配降下法 (SGDM) の更新は、以下のとおりです。
ここで、 は、前の勾配ステップから現在の反復への寄与を決定します。名前と値のペアの引数 'Momentum'
を使用してこの値を指定できます。モーメンタム項付き確率的勾配降下法アルゴリズムを使用してニューラル ネットワークの学習を行うには、solverName
を 'sgdm'
に指定します。学習率 α の初期値を指定するには、名前と値のペアの引数 'InitialLearnRate'
を使用します。層やパラメーターごとに異なる学習率を指定することもできます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。
モーメンタム項付き確率的勾配降下法は、すべてのパラメーターに対して 1 つの学習率を使用します。その他の最適化アルゴリズムでは、パラメーターごとに異なり、最適化対象の損失関数に自動的に適応できる学習率を使用して、ネットワーク学習の改善を試みます。RMSProp (平方根平均二乗伝播) は、そのようなアルゴリズムの 1 つです。これは、パラメーターの勾配について要素単位の二乗の移動平均を維持します。
β2 は移動平均の減衰率です。減衰率の一般的な値は、0.9、0.99、および 0.999 です。対応する勾配の二乗の平均化長は、1/(1-β2) に等しく、それぞれ 10、100、および 1000 回のパラメーター更新です。名前と値のペアの引数 'SquaredGradientDecayFactor'
を使用して β2 を指定できます。RMSProp アルゴリズムでは、この移動平均を使用して各パラメーターの更新を個別に正規化します。
ここで、除算は要素単位で実行されます。RMSProp を使用すると、勾配が大きいパラメーターの学習率は効果的に減少し、勾配が小さいパラメーターの学習率は増加します。ɛ は、ゼロ除算を回避するために追加する小さい定数です。名前と値のペアの引数 'Epsilon'
を使用して、ɛ を指定できますが、通常は既定値で良い結果が得られます。RMSProp を使用してニューラル ネットワークの学習を行うには、solverName
を 'rmsprop'
に指定します。
Adam (adaptive moment estimation、適応モーメント推定) [4] では、RMSProp に似ているが、モーメンタム項が追加されたパラメーター更新を使用します。これは、パラメーターの勾配とそれらの二乗値の両方について要素単位の移動平均を維持します。
減衰率 β1 と β2 は、名前と値のペアの引数 'GradientDecayFactor'
と 'SquaredGradientDecayFactor'
をそれぞれ使用して指定できます。Adam では、移動平均を使用してネットワーク パラメーターを次のように更新します。
多数の反復に対する勾配が類似している場合、勾配の移動平均を使用すると、パラメーター更新で特定方向のモーメンタム項を選択できます。勾配のほとんどがノイズである場合、勾配の移動平均が小さくなり、パラメーター更新も小さくなります。名前と値のペアの引数 'Epsilon'
を使用して ɛ を指定できます。通常は既定値で良い結果が得られますが、特定の問題では、1 に近い大きな値の方がより良い場合があります。Adam を使用してニューラル ネットワークの学習を行うには、solverName
を 'adam'
に指定します。Adam の完全な更新には、学習の最初に現れるバイアスを補正するメカニズムも含まれています。詳細については、[4]を参照してください。
すべての最適化アルゴリズムの学習率 α は、名前と値のペアの引数 'InitialLearnRate'
を使用して指定します。学習率の効果は最適化アルゴリズムによって異なるため、一般的に、最適な学習率も異なります。層やパラメーターごとに異なる学習率を指定することもできます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。
勾配の大きさが指数関数的に増加する場合、学習は不安定になり、数回の反復で発散する場合があります。この "勾配爆発" は、学習損失が NaN
または Inf
になることによって示されます。勾配クリップでは、学習率が大きい場合や外れ値が存在する場合に学習を安定させることによって、勾配爆発を防ぎます [3]。勾配クリップを使用すると、ネットワークの学習が高速になり、通常は学習済みタスクの精度に影響はありません。
勾配クリップは 2 種類あります。
ノルムベースの勾配クリップでは、しきい値に基づいて勾配を再スケーリングし、勾配の方向は変更しません。GradientThresholdMethod
の 'l2norm'
値と 'global-l2norm'
値は、ノルムベースの勾配クリップ法です。
値ベースの勾配クリップでは、しきい値より大きい任意の偏微分をクリップします。この場合、勾配の方向が任意に変化する可能性があります。値ベースの勾配クリップの動作は予測できないものになる場合がありますが、変化が十分に小さければ、ネットワークが発散することはありません。GradientThresholdMethod
の値 'absolute-value'
は、値ベースの勾配クリップ法です。
例については、深層学習を使用した時系列予測と深層学習を使用した sequence-to-sequence 分類を参照してください。
損失関数 への重みの正則化項の追加は、過適合を抑える方法の 1 つです [1]、[2]。正則化項は、"重み減衰" とも呼ばれます。正則化項付きの損失関数は、以下の形式を取ります。
ここで、 は重みベクトル、 は正則化係数です。正則化関数 は以下のようになります。
バイアスは正則化されないことに注意してください [2]。名前と値のペアの引数 'L2Regularization'
を使用して、正則化係数 を指定できます。層やパラメーターごとに異なる正則化係数を指定することもできます。詳細については、畳み込み層と全結合層のパラメーターの設定を参照してください。
ネットワーク学習に使用される損失関数には、正則化項が含まれます。ただし、学習中にコマンド ウィンドウと学習の進行状況プロットに表示される損失値はデータのみの損失であり、正則化項は含まれません。
'ValidationPatience'
学習オプションの既定値は Inf
R2018b での動作変更
R2018b 以降では、'ValidationPatience'
学習オプションの既定値は Inf
になっています。これは、検証による自動停止がオフであることを意味します。これにより、データから十分に学習する前に学習が停止するのを防ぎます。
以前のバージョンの既定値は 5
です。この動作を再現するには、'ValidationPatience'
オプションを 5
に設定します。
R2018b での動作変更
R2018b 以降では、チェックポイント ネットワークを保存すると、net_checkpoint_
で始まるファイル名が割り当てられます。以前のバージョンでは、convnet_checkpoint_
で始まるファイル名が割り当てられます。
チェックポイント ネットワークの保存と読み込みを行うコードがある場合、コードを更新して新しい名前でファイルを読み込みます。
[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).
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.