パラメーターの設定と畳み込みニューラル ネットワークの学習
関数 trainnet
の学習オプションを指定するには、関数 trainingOptions
を使用します。結果のオプション オブジェクトを関数 trainnet
に渡します。
たとえば、次を指定する学習オプション オブジェクトを作成するとします。
適応モーメント推定 (Adam) ソルバーを使用して学習させます。
最大 4 エポック学習させます。
学習の進行状況をプロットで監視し、精度メトリクスを監視します。
詳細出力を無効にします。
この場合、次を使用します。
options = trainingOptions("adam", ... MaxEpochs=4, ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
これらの学習オプションを使用してネットワークに学習させるには、次を使用します。
net = trainnet(data,layers,lossFcn,options);
メモ
このトピックでは、一般的に使用されるいくつかの学習オプションについて概説します。ここには一部のオプションのみを示します。一覧については、trainingOptions
を参照してください。
ソルバー
ソルバーは、学習可能なパラメーターを最適化するために学習関数が使用するアルゴリズムです。関数 trainingOptions
の最初の引数を使用してソルバーを指定します。たとえば、Adam オプティマイザーの既定の設定を使用して学習オプション オブジェクトを作成するには、次を使用します。
options = trainingOptions("adam");
詳細については、trainingOptions
を参照してください。
ヒント
どのソルバーがより有効に機能するかはタスクによって異なります。Adam ソルバーは、多くの場合、最初に試すのに適したオプティマイザーです。
監視オプション
学習の進行状況を監視するために、学習メトリクスをプロットに表示できます。たとえば、プロットの精度を監視し、詳細出力を無効にするには、次を使用します。
options = trainingOptions("adam", ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
詳細については、trainingOptions
を参照してください。
データ形式オプション
深層学習のほとんどのネットワークと関数は、入力データの各次元に対して異なる方法で演算を行います。
たとえば、LSTM 演算は入力データの時間次元を反復処理し、バッチ正規化演算は入力データのバッチ次元を正規化します。
ほとんどの場合、学習データをネットワークに直接渡すことができます。データのレイアウトがネットワークの必要とするレイアウトと異なる場合、"データ形式" を使用してデータのレイアウトを指定できます。
データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。
各文字は以下のとおりです。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、シーケンスのバッチを含み、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。この配列の形式を "CBT"
(チャネル、バッチ、時間) として指定できます。
データのレイアウトがネットワークが必要とするレイアウトと異なる場合、通常はデータの形状を変更して前処理するよりもデータ形式情報を提供する方が簡単です。たとえば、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応するシーケンス データがあることを指定するには、次のようにして、入力データが形式 "CBT"
(チャネル、バッチ、時間) をもつことを指定します。
options = trainingOptions("adam", ... InputDataFormats="CBT");
詳細については、trainingOptions
を参照してください。
確率的ソルバーのオプション
確率的ソルバーは、データのミニバッチを反復処理し、ニューラル ネットワークの学習可能なパラメーターを更新することにより、ニューラル ネットワークに学習させます。ミニバッチ、エポック (学習データのフル パス)、学習率などに加え、モーメンタム項付き確率的勾配降下法 (SGDM) ソルバーの運動量などのその他のソルバー固有の設定を制御する確率的ソルバーのオプションを指定できます。たとえば、初期学習率 0.01 でミニバッチ サイズ 16 を指定するには、次を使用します。
options = trainingOptions("adam", ... MiniBatchSiize=16, ... InitialLearnRate=0.01);
詳細については、trainingOptions
を参照してください。
ヒント
学習中にミニバッチの損失が NaN
になる場合、学習率が高すぎると考えられます。学習率をたとえば 3 分の 1 に下げてから、ネットワーク学習を再開してみてください。
L-BFGS ソルバーのオプション
記憶制限 Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) ソルバーは全バッチ ソルバーです。これは、学習セット全体を 1 回の反復で処理することを意味します。反復 (データの学習のフル パス)、直線探索などに加え、その他のソルバー固有の設定を制御する L-BFGS ソルバーのオプションを指定できます。たとえば、L-BFGS を使用して 2000 回の反復で学習させ、強 Wolfe 条件を満たす学習率を見つけるように指定するには、次を使用します。
options = trainingOptions("lbfgs", ... MaxIterations=2000, ... LineSearchMethod="strong-wolfe");
詳細については、trainingOptions
を参照してください。
検証オプション
ホールドアウトされた検証データ セットを使用して、学習の進行状況を監視できます。学習中に一定の間隔で検証を実行すると、ネットワークが学習データに過適合しているかどうかを判断するのに役立ちます。ネットワークが過適合しているかどうかを確認するには、学習メトリクスを対応する検証メトリクスと比較します。学習メトリクスが検証メトリクスよりも極端に良い値を示す場合、ネットワークが過適合している可能性があります。たとえば、検証データ セットを指定し、100 回の反復ごとにネットワークを検証するには、次を使用します。
options = trainingOptions("adam", ... ValidationData={XValidation,TValidation}, ... ValidationFrequency=100);
ネットワークに予測時と学習中で動作が異なる層 (ドロップアウト層など) がある場合、検証メトリクスが学習メトリクスよりも良い値を示す可能性があります。
詳細については、trainingOptions
を参照してください。
正則化と正規化のオプション
正則化と正規化を使用すると、過適合を防止し、収束性を向上させることができます。正則化は、損失関数にペナルティ項を追加することで、過適合を防ぐのに役立ちます。正規化により、入力データが標準範囲にスケーリングされ、収束性と安定性が向上します。たとえば、L2 正則化係数を 0.0002 に指定するには、次を使用します。
options = trainingOptions("adam", ... L2Regularization=0.0002);
詳細については、trainingOptions
を参照してください。
勾配クリップのオプション
大きな勾配によって学習プロセスで誤差が発生することを防ぐために、勾配の大きさを制限することができます。たとえば、大きさが 2 に等しくなるように勾配をスケーリングするには、次を使用します。
options = trainingOptions("adam", ... GradientThresholdMethod="absolute-value", ... GradientThreshold=2);
詳細については、trainingOptions
を参照してください。
シーケンス オプション
ニューラル ネットワークの学習には通常、固定サイズのデータ (チャネル数やタイム ステップ数が同じシーケンスなど) が必要です。シーケンスが同じ長さになるようにシーケンスのバッチを変換するには、パディングと切り捨てのオプションを指定できます。たとえば、各ミニバッチ内のシーケンスが同じ長さになるようにミニバッチを左パディングするには、次を使用します。
options = trainingOptions("adam", ... SequencePaddingDirection="left");
詳細については、trainingOptions
を参照してください。
ハードウェアおよび高速化のオプション
既定では、ソフトウェアはサポートされている GPU が利用可能であれば、それを使用して学習を行います。GPU を使用するには、Parallel Computing Toolbox™ ライセンスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。ハードウェアおよび高速化の追加のオプションを指定できます。たとえば、既定のクラスター プロファイルに基づいてローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用するように指定するには、次を使用します。
options = trainingOptions("adam", ... ExecutionEnvironment="multi-gpu");
詳細については、trainingOptions
を参照してください。
チェックポイント オプション
大規模なネットワークや大規模なデータセットでは、学習の実行に時間がかかることがあります。学習中にネットワークを定期的に保存するために、チェックポイント ネットワークを保存できます。たとえば、チェックポイント ネットワークを 5 エポックごとに "checkpoints"
という名前のフォルダーに保存するには、次を使用します。
options = trainingOptions("adam", ... CheckpointPath="checkpoints", ... CheckpointFrequency=5);
学習が何らかの理由で中断された場合、最後に保存されたチェックポイント ニューラル ネットワークから学習を再開できます。
詳細については、trainingOptions
を参照してください。
参考
trainnet
| trainingOptions
| dlnetwork