ドキュメンテーション

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

深層学習のヒントとコツ

このページでは、深層学習ネットワークの精度を改善するための、さまざまな学習オプションや手法について説明します。

ネットワーク アーキテクチャの選択

適切なネットワーク アーキテクチャは、タスクや利用可能なデータによって異なります。どのアーキテクチャを使用するかや、事前学習済みのネットワークを使用するかゼロから学習させるかを決定する際に、以下の推奨事項を検討してください。

データタスクの説明詳細
イメージ自然イメージの分類

さまざまな事前学習済みのネットワークを試してみてください。事前学習済みの深層学習ネットワークの一覧については、事前学習済みの深層ニューラル ネットワークを参照してください。

ディープ ネットワーク デザイナーを使用して転移学習用のネットワークを対話形式で準備する方法については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。

自然イメージの回帰さまざまな事前学習済みのネットワークを試してみてください。事前学習済みの分類ネットワークを回帰ネットワークに変換する方法を示す例については、分類ネットワークの回帰ネットワークへの変換を参照してください。
自然イメージ以外のイメージの分類と回帰 (非常に小さいイメージやスペクトログラムなど)

非常に小さいイメージの分類方法を示す例については、イメージ分類用の残差ネットワークの学習を参照してください。

スペクトログラムの分類方法を示す例については、深層学習を使用した音声コマンド認識を参照してください。

セマンティック セグメンテーションComputer Vision Toolbox™ には、セマンティック セグメンテーション用の深層学習ネットワークを作成するためのツールが用意されています。詳細は、セマンティック セグメンテーションの基礎 (Computer Vision Toolbox)を参照してください。
シーケンス、時系列、および信号sequence-to-label 分類例については、深層学習を使用したシーケンスの分類を参照してください。
sequence-to-sequence 分類と回帰詳細は、深層学習を使用した sequence-to-sequence 分類および深層学習を使用した sequence-to-sequence 回帰を参照してください。
時系列予測例については、深層学習を使用した時系列予測を参照してください。
テキスト分類と回帰Text Analytics Toolbox™ には、テキスト データ用の深層学習ネットワークを作成するためのツールが用意されています。例については、深層学習を使用したテキスト データの分類を参照してください。
テキスト生成例については、深層学習を使用したテキストの生成を参照してください。
Audioオーディオの分類と回帰例については、深層学習を使用した音声コマンド認識を参照してください。

学習オプションの選択

関数 trainingOptions には、深層学習ネットワークに学習させるためのさまざまなオプションがあります。

ヒント詳細
学習の進行状況を監視する学習の進行状況プロットをオンにするには、trainingOptions'Plots' オプションを 'training-progress' に設定します。
検証データを使用する

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

メモ

検証データセットが小さすぎてデータを十分に表していない場合、報告されたメトリクスが役に立たない可能性があります。使用する検証データセットが大きすぎると、学習に時間がかかる可能性があります。

転移学習の場合、新しい層の学習速度を上げて、転移層での学習速度を下げる

たとえば、convolution2dLayerWeightLearnRateFactor プロパティを使用して、新しい層に指定する学習率係数を増やします。

trainingOptions'InitialLearnRate' オプションを使用して、初期学習率を減らします。

転移学習の場合、同じエポック数の学習を行う必要はありません。trainingOptions'MaxEpochs' オプションを使用して、エポック数を減らします。

ディープ ネットワーク デザイナーを使用して転移学習用のネットワークを対話形式で準備する方法については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。

すべてのエポックでデータをシャッフルする

すべてのエポック (データを一巡する完全なパス) でデータをシャッフルするには、trainingOptions'Shuffle' オプションを 'every-epoch' に設定します。

メモ

シーケンス データの場合、シャッフルを行うとパディングや切り捨てられるデータの量が増える可能性があるため、シャッフルが精度に悪影響を与えることがあります。シーケンス データを使用する場合、シーケンス長でデータを並べ替えると役に立つことがあります。詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

さまざまなオプティマイザーを試す

さまざまなオプティマイザーを指定するには、trainingOptions の引数 solverName を使用します。

詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。

学習精度の改善

学習中に問題に気が付いた場合は、以下の考えられる解決策について検討してください。

問題考えられる解決策
損失に NaN または大きなスパイクがある

trainingOptions'InitialLearnRate' オプションを使用して、初期学習率を減らします。

学習率を減らしても効果がない場合は、勾配クリップの使用を試してください。勾配のしきい値を設定するには、trainingOptions'GradientThreshold' オプションを使用します。

学習の終了時に損失がまだ減少しているtrainingOptions'MaxEpochs' オプションを使用してエポック数を増やすことによって、学習時間を延ばします。
損失が横ばいになる

予想外に大きい値で損失が横ばいになる場合は、横ばいになったところで学習率を下げます。学習率のスケジュールを変更するには、trainingOptions'LearnRateSchedule' オプションを使用します。

学習率を下げても効果がない場合は、モデルが適合不足である可能性があります。パラメーターの数または層の数を増やしてみてください。検証損失を監視することによって、モデルが適合不足かどうか確認できます。

検証損失が学習損失をはるかに上回っている

過適合を防止するには、以下の 1 つ以上を試してください。

損失の減少が非常に遅い

trainingOptions'InitialLearnRate' オプションを使用して、初期学習率を増やします。

イメージ データの場合、ネットワークにバッチ正規化層を含めてみてください。詳細は、batchNormalizationLayer を参照してください。

詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。

学習のエラーの修正

ネットワークが少しも学習されない場合は、以下の考えられる解決策について検討してください。

エラー説明考えられる解決策
学習時のメモリ不足エラー利用可能なハードウェアに現在のミニバッチ、ネットワークの重み、および計算した活性化を格納できません。

trainingOptions'MiniBatchSize' オプションを使用してミニバッチ サイズを減らしてみてください。

ミニバッチ サイズを減らしても効果がない場合は、層の数を減らすか層内のパラメーター数またはフィルター数を減らして、小規模なネットワークの使用を試してください。

カスタム層のエラーカスタム層の実装に問題がある可能性があります。

checkLayer を使用してカスタム層の有効性をチェックし、潜在的な問題を見つけます。

checkLayer を使用してテストに失敗した場合、この関数はテスト診断とフレームワーク診断を表示します。テスト診断は層の問題を示しますが、フレームワーク診断は、より詳細な情報を提供します。テスト診断の詳細と考えられる解決策の提案については、診断を参照してください。

学習がエラー 'CUDA_ERROR_UNKNOWN' をスローするGPU が OS からの要求の計算と表示の両方に使用されている場合、このエラーをスローすることがあります。

trainingOptions'MiniBatchSize' オプションを使用してミニバッチ サイズを減らしてみてください。

ミニバッチ サイズを減らしても効果がない場合は、Windows® で、タイムアウト検出と復旧 (TDR) の設定を調整してみてください。たとえば、TdrDelay を 2 秒 (既定の設定) から 4 秒に変更します (レジストリの編集が必要)。

analyzeNetwork を使用して、深層学習ネットワークを解析できます。関数 analyzeNetwork は、ネットワーク アーキテクチャを対話的に可視化して表示し、ネットワークに関するエラーや問題を検出して、ネットワーク層についての詳細情報を提供します。ネットワーク アナライザーを使用して、ネットワーク アーキテクチャを可視化して把握し、アーキテクチャが正しく定義されていることを確認して、学習前に問題を検出します。analyzeNetwork が検出する問題には、層の欠損または切り離し、層入力のサイズの不一致や誤り、層の入力数の誤り、無効なグラフ構造などがあります。

データの準備と前処理

データを前処理して、精度を高めることができます。

クラスの重み付けまたはバランス調整

観測値の数がすべてのクラスで等しいことが理想的です。ただし、タスクによっては、クラスが不均衡である場合があります。たとえば、路上シーンの自動車データセットには、歩行者や自転車運転者のピクセルよりも多くの空、建物、および道路のピクセルが含まれる傾向があります。これは、空、建物、および道路がより広いイメージ領域を占めているためです。学習では上位クラスを優先してバイアスがかけられるため、正しく処理されていない場合は、こうした不均衡が学習プロセスに悪影響を及ぼす可能性があります。

セマンティック セグメンテーション タスクの場合、ClassWeights プロパティを使用して pixelClassificationLayer にクラスの重みを指定できます。イメージ分類タスクの場合、カスタム重み付き分類層の定義に記載されているカスタム分類層の例を使用できます。

または、以下の 1 つ以上を行って、クラスのバランスを調整することもできます。

  • 最も頻度が少ないクラスに新しい観測値を追加します。

  • 最も頻度が多いクラスから観測値を削除します。

  • 類似のクラスをグループ化します。たとえば、クラス "car" および "truck" を単一のクラス "vehicle" にグループ化します。

イメージ データの前処理

イメージ データの前処理の詳細については、イメージの深層学習向け前処理を参照してください。

タスク詳細
イメージのサイズ変更

事前学習済みのネットワークを使用するには、ネットワークの入力サイズに合わせてイメージのサイズを変更しなければなりません。イメージのサイズを変更するには、augmentedImageDatastore を使用します。たとえば、この構文はイメージ データストア imds 内のイメージのサイズを変更します。

auimds = augmentedImageDatastore(inputSize,imds);

ヒント

イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore を使用します。

imageDatastorereadFcn オプションは通常、速度が大幅に低下するため、使用しないでください。

イメージ拡張

過適合を避けるには、イメージ変換を使用します。詳細は、拡張イメージを使用したネットワークの学習を参照してください。

回帰ターゲットの正規化

ネットワークに入力する前に予測子を正規化します。学習の前に応答を正規化する場合、学習済みネットワークの予測を変換して、元の応答の予測を求めなければなりません。

詳細は、回帰用の畳み込みニューラル ネットワークの学習を参照してください。

シーケンス データの前処理

LSTM ネットワークの使用方法の詳細については、長短期記憶ネットワークを参照してください。

タスク詳細
シーケンス データの正規化

シーケンス データを正規化するには、まず、すべてのシーケンスについて特徴あたりの平均値と標準偏差を計算します。次に、各学習観測値について、平均値を減算し、標準偏差で除算します。

詳細は、シーケンス データの正規化を参照してください。

シーケンスのパディングと切り捨ての削減

シーケンスのパディングまたは切り捨ての際に、パディングまたは破棄するデータの量を減らすには、シーケンス長でデータを並べ替えてみてください。

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

予測のためのミニバッチのサイズとパディングのオプションの指定

長さが異なるシーケンスで予測を行うと、ミニバッチのサイズが、入力データに追加されるパディングの量に影響し、異なる予測値が得られることがあります。さまざまな値を使用して、ネットワークに最適なものを確認してください。

ミニバッチのサイズとパディングのオプションを指定するには、関数 classifypredictclassifyAndUpdateState、および predictAndUpdateState'MiniBatchSize' および 'SequenceLength' オプションを使用します。

利用可能なハードウェアの使用

実行環境を指定するには、trainingOptions'ExecutionEnvironment' オプションを使用します。

問題詳細
CPU での学習が遅い単一の CPU での学習が非常に遅い場合、事前学習済みの深層学習ネットワークを特徴抽出器として使用して、機械学習モデルに学習させてみてください。たとえば、Extract Image Features Using Pretrained Networkを参照してください。
GPU での LSTM の学習が遅い

CPU は、シーケンスが短いミニバッチを使用する LSTM ネットワークの学習に適しています。CPU を使用するには、trainingOptions'ExecutionEnvironment' オプションを 'cpu' に設定します。

利用可能な GPU で使用されないものがある複数の GPU があるマシンにアクセスできる場合は、単に trainingOptions'ExecutionEnvironment' オプションを 'multi-gpu' に設定します。詳細は、複数の GPU での深層学習を参照してください。

詳細は、並列およびクラウドでの深層学習のスケールアップを参照してください。

MAT ファイルからの読み込みに関するエラーの修正

MAT ファイルから層またはネットワークを読み込むことができず、次のような形式の警告が表示される場合があります。

Warning: Unable to load instances of class layerType into a 
heterogeneous array.  The definition of layerType could be
missing or contain an error.  Default objects will be
substituted. 
Warning: While loading an object of class 'SeriesNetwork':
Error using 'forward' in Layer nnet.cnn.layer.MissingLayer. The
function threw an error and could not be executed. 
その場合、MAT ファイル内のネットワークに、使用できない層が含まれている可能性があります。これには以下のような原因が考えられます。

  • ファイルに、パスにないカスタム層が含まれている – カスタム層が含まれるネットワークを読み込むには、カスタム層ファイルを MATLAB® パスに追加します。

  • ファイルにサポート パッケージのカスタム層が含まれている – サポート パッケージの層を使用するネットワークを読み込むには、対応する関数 (resnet18 など) を使用するか、アドオン エクスプローラーを使用して、コマンド ラインで必要なサポート パッケージをインストールします。

  • ファイルに、パスにないドキュメンテーションの例のカスタム層が含まれている – ドキュメンテーションの例のカスタム層が含まれるネットワークを読み込むには、例をライブ スクリプトとして開いて、例のフォルダーから作業ディレクトリに層をコピーします。

  • ファイルに、インストールされていないツールボックスの層が含まれている – Computer Vision Toolbox や Text Analytics Toolbox など、他のツールボックスの層にアクセスするには、対応するツールボックスをインストールします。

推奨されている解決策を試した後、MAT ファイルを再度読み込みます。

参考

| | |

関連するトピック