Main Content

ビッグ データを使用した深層学習

通常、深層ニューラル ネットワークの学習では大量のデータが必要となりますが、データがメモリに収まらないことがよくあります。大きすぎてメモリに収まらないデータセットを使用して問題を解決するために、複数のコンピューターは必要ありません。代わりに、データ セットの一部が含まれるミニバッチに学習データを分割します。ミニバッチに対して反復処理を行うことで、すべてのデータを一度にメモリへ読み込ませることなく、大きなデータ セットでネットワークに学習させることができます。

データが大きすぎてメモリに収まらない場合は、データストアを使用してデータのミニバッチを処理し、学習と推論を行います。MATLAB® では、さまざまなアプリケーション向けに調整された多様なデータストアが豊富に用意されています。各種アプリケーション向けのデータストアの詳細については、深層学習用のデータストアを参照してください。

augmentedImageDatastore は、機械学習とコンピューター ビジョン アプリケーションで使用するイメージ データのバッチの前処理と拡張を行うことを目的として設計されています。augmentedImageDatastore を使用して学習時にイメージ データを管理する方法を示す例については、拡張イメージを使用したネットワークの学習を参照してください。

ビッグ データの並列処理

大量のデータを使用してネットワークに学習させる場合、並列学習が有効なことがあります。それにより、同時に複数のミニバッチを使用して学習させることができるため、ネットワークの学習時間が短縮されます。

GPU を使用して学習させることを推奨します。GPU を使用できない場合にのみ、CPU を使用するようにしてください。通常、学習と推論のどちらの場合も GPU と比べて CPU は非常に低速です。一般に、複数の CPU コアで実行するよりも 1 つの GPU で実行する方がはるかに高いパフォーマンスを得られます。

並列学習の詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。

バックグラウンドでのデータの前処理

並列学習を行う際、バックグラウンドでデータを取得して前処理できます。これは、たとえば、関数 transform を使用してデータストアにミニバッチの前処理関数を適用する場合など、学習時にミニバッチを前処理したいときに特に有効です。

関数 trainNetwork を使用してネットワークに学習させるとき、次のように設定してバックグラウンド ディスパッチを有効にすることで、バックグラウンドでデータを取得して前処理できます。

  • データストアの DispatchInBackground プロパティを true に設定します。

  • 関数 trainingOptions を使用して、DispatchInBackground 学習オプションを true に設定します。

学習時に一部のワーカーは、ネットワーク学習計算ではなく、データの前処理に使用されます。関数 trainingOptions を使用して WorkerLoad 学習オプションを指定することで、学習計算とデータ ディスパッチの負荷をワーカー間で微調整できます。高度なオプションを使用すると、並列プール内のワーカー数を変更できます。

augmentedImageDatastoredenoisingImageDatastore (Image Processing Toolbox)、または pixelLabelImageDatastore (Computer Vision Toolbox) といった組み込みのミニバッチ データストアを使用できます。また、バックグラウンド ディスパッチが有効になっているカスタム ミニバッチ データストアを使用できます。カスタム ミニバッチ データストアの作成に関する詳細については、カスタム ミニバッチ データストアの開発を参照してください。

バックグラウンド ディスパッチを使用するためのデータストアの要件に関する詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。

クラウドでのビッグ データの処理

クラウドにデータを保存すると、クラウド リソースを作成するたびに大量のデータをアップロードまたはダウンロードする必要がなくなり、クラウド アプリケーションに簡単にアクセスできるようになります。AWS® と Azure® は、AWS S3 や Azure Blob Storage といったデータ ストレージ サービスをそれぞれ提供しています。

大量のデータを転送するのにかかる時間とコストを節約するため、クラウドへのデータ保存に使用しているのと同じクラウド プロバイダーとリージョンを使用して深層学習アプリケーション用のクラウド リソースを設定することを推奨します。

クラウドに保存されたデータに MATLAB からアクセスするには、マシンにアクセス資格情報を設定する必要があります。環境変数を使用すると、MATLAB 内部からアクセスできるように設定できます。MATLAB クライアントからクラウド データにアクセスできるように環境変数を設定する方法の詳細については、リモート データの操作を参照してください。リモート クラスター内の並列ワーカーに関する環境変数を設定する方法の詳細については、ワーカー上での環境変数の設定 (Parallel Computing Toolbox)を参照してください。

データをクラウドにアップロードする方法を示す例については、クラウドへの深層学習データのアップロードを参照してください。

クラウドでの深層学習の詳細については、Deep Learning in the Cloudを参照してください。

カスタム学習ループのデータの前処理

カスタム学習ループを使用してネットワークに学習させるとき、minibatchqueue を使用してバックグラウンド ディスパッチを有効にすると、バックグラウンドでデータを処理できます。minibatchqueue オブジェクトは、datastore に対して反復処理を行い、カスタム学習ループ用のミニバッチを準備します。ミニバッチの前処理に大きな負荷がかかる場合は、バックグラウンド ディスパッチを有効にします。

バックグラウンド ディスパッチを有効にするには、次のようにしなければなりません。

  • データストアの DispatchInBackground プロパティを true に設定します。

  • minibatchqueueDispatchInBackground プロパティを true に設定します。

このオプションを使用すると、MATLAB では、データを前処理するためのローカルの並列プールが開かれます。カスタム学習ループのデータの前処理は、ローカル リソースを使用して学習を行う場合にのみサポートされます。たとえば、ローカル マシンにある 1 つの GPU を使用して学習させるときに、このオプションを使用します。

バックグラウンド ディスパッチのデータストアの要件に関する詳細については、並列学習およびバックグラウンド ディスパッチへのデータストアの使用を参照してください。

参考

| |

関連するトピック