Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

実験マネージャー

深層学習ネットワークの学習および比較に向けた実験の設計と実行

説明

実験マネージャー アプリを使用すると、さまざまな初期条件でネットワークに学習させ、結果を比較するための深層学習実験を作成できます。たとえば、深層学習実験を使用して次のことができます。

  • ハイパーパラメーター値の範囲のスイープ、またはベイズ最適化の使用による最適な学習オプションの検出。ベイズ最適化には、Statistics and Machine Learning Toolbox™ が必要です。

  • さまざまなデータ セットを使用してネットワークに学習させた結果の比較。

  • 複数のネットワークでの同一学習データ セットの再利用による、さまざまな深いネットワークのアーキテクチャのテスト。

実験マネージャーは、学習プロットや混同行列などの可視化ツール、実験結果を絞り込むためのフィルター、および結果を評価するためのカスタム メトリクスを定義する機能を提供します。再現性を向上させるために、実験マネージャーは、実験を実行するたびに、実験定義のコピーを保存します。過去の実験定義にアクセスして、各結果を生成するハイパーパラメーターの組み合わせを継続的に追跡できます。

実験マネージャーは、実験および結果をプロジェクトに整理します。

  • 同じプロジェクトに複数の実験を保存できる。

  • 各実験には、毎回の実験に対する "結果" のセットが含まれる。

  • 結果の各セットは、ハイパーパラメーターのさまざまな組み合わせに対応する 1 つ以上の "試行" で構成される。

既定では、実験マネージャーは一度に 1 つの試行を実行します。Parallel Computing Toolbox™ がある場合は、複数の試行を同時に実行するように実験を構成できます。実験を並列で実行することにより、学習の進行中にも MATLAB® を使用できます。

[実験ブラウザー] ペインには、プロジェクトの実験と結果の階層が表示されます。たとえば、このプロジェクトには 2 つの実験があり、それぞれにいくつかの結果があります。実験の構成を開いてその結果を表示するには、実験の名前または結果のセットをダブルクリックします。

Experiment Browser showing two experiments. Experiment1 has four results. Experiment2 has two results.

Experiment Manager app

実験マネージャー アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [機械学習および深層学習] にあるアプリ アイコンをクリックします。

  • MATLAB コマンド プロンプト: experimentManager と入力します。

すべて展開する

この例では、既定の実験セットアップ関数を使用して、ハイパーパラメーターをスイープしてイメージ分類ネットワークに学習させる方法を示します。実験マネージャーを使用したイメージの分類問題の解決に関するその他の例については、分類用の深層学習実験の作成および実験マネージャーを使用したネットワークの並列学習を参照してください。ハイパーパラメーターをスイープするための代替手法の詳細については、ベイズ最適化を使用した実験ハイパーパラメーターの調整を参照してください。

例を開き、検査と実行が可能な事前構成済みの実験を含むプロジェクトを読み込みます。実験を開くには、[実験ブラウザー] ペインで、実験の名前 (Experiment1) をダブルクリックします。

または、次の手順に従って、自分で実験を構成することもできます。

1.実験マネージャーを開きます。

2.[新規作成][プロジェクト] をクリックし、新しいプロジェクトの場所と名前を選択します。実験マネージャーによって、プロジェクトで新しい実験が開きます。[実験] ペインには、実験を定義する説明、ハイパーパラメーター、セットアップ関数、およびメトリクスが表示されます。

3.[説明] ボックスに、実験の説明を次のように入力します。

Classification of digits, using various initial learning rates.

4.[ハイパーパラメーター] で、myInitialLearnRate の値を 0.0025:0.0025:0.015 に置き換えます。[手法]Exhaustive Sweep に設定されていることを確認します。

5.[セットアップ関数][編集] をクリックします。MATLAB エディターでセットアップ関数が開きます。セットアップ関数では、実験用の学習データ、ネットワーク アーキテクチャ、および学習オプションを指定します。既定では、セットアップ関数のテンプレートに 3 つのセクションがあります。

  • イメージ データの読み込み では、実験用の学習データと検証データを含むイメージ データストアを定義します。実験では、0 ~ 9 の数字から成る 28 x 28 ピクセルのグレースケール イメージ 10,000 個で構成される数字データ セットを使用します。このデータセットの詳細については、イメージ データセットを参照してください。

  • ネットワーク アーキテクチャの定義では、深層学習による分類用のシンプルな畳み込みニューラル ネットワークのアーキテクチャを定義します。

  • 学習オプションの指定では、実験用の trainingOptions オブジェクトを定義します。既定では、テンプレートによって、ハイパーパラメーター テーブルの myInitialLearnRate エントリから学習オプション 'InitialLearnRate' の値が読み込まれます。

実験を実行すると、実験マネージャーはセットアップ関数で定義されたネットワークに 6 回学習させます。各試行で、ハイパーパラメーター テーブルで指定された学習率の 1 つが使用されます。既定では、実験マネージャーは一度に 1 つの試行を実行します。Parallel Computing Toolbox がある場合は、複数の試行を同時に実行できます。最良の結果を得るには、実験を実行する前に、GPU と同じ数のワーカーで並列プールを起動します。詳細については、実験マネージャーを使用したネットワークの並列学習を参照してください。

  • 一度に 1 つの実験の試行を実行するには、[実験マネージャー] ツールストリップで [実行] をクリックします。

  • 複数の試行を同時に実行するには、[並列の使用][実行] の順にクリックします。現在の並列プールがない場合、実験マネージャーは既定のクラスター プロファイルを使用して並列プールを起動します。次に、実験マネージャーは、使用可能な並列ワーカーの数に応じて、複数の同時試行を実行します。

結果テーブルに、各試行の精度と損失が表示されます。

実験の実行中に [学習プロット] をクリックすると、学習プロットが表示され、各試行の進行状況を追跡できます。MATLAB コマンド ウィンドウで学習の進行状況を監視することもできます。

[混同行列] をクリックし、完了した各試行の検証データの混同行列を表示します。

実験の完了後、列ごとにテーブルを並べ替えたり、[フィルター] ペインを使用して試行をフィルター処理したりできます。詳細については、実験結果の並べ替えとフィルター処理を参照してください。

各試行の性能をテストするには、試行で使用した学習済みネットワークまたは試行の学習情報をエクスポートします。[実験マネージャー] ツールストリップで、[エクスポート][学習済みネットワーク] を選択するか、[エクスポート][学習情報] を選択します。詳細は、netinfoを参照してください。

実験を閉じるには、[実験ブラウザー] ペインでプロジェクトの名前を右クリックし、[プロジェクトを閉じる] を選択します。実験マネージャーによって、プロジェクトに含まれるすべての実験と結果が閉じられます。

この例では、ハイパーパラメーターをスイープしてイメージ回帰ネットワークに学習させるように実験を構成する方法を示します。実験マネージャーを使用した回帰問題の解決に関する他の例については、回帰用の深層学習実験の作成を参照してください。

例を開き、検査と実行が可能な事前構成済みの実験を含むプロジェクトを読み込みます。実験を開くには、[実験ブラウザー] ペインで、実験の名前 (Experiment1) をダブルクリックします。

または、次の手順に従って、自分で実験を構成することもできます。

1.実験マネージャーを開きます。

2.[新規作成][プロジェクト] をクリックし、新しいプロジェクトの場所と名前を選択します。実験マネージャーによって、プロジェクトで新しい実験が開きます。[実験] ペインには、実験を定義する説明、ハイパーパラメーター、セットアップ関数、およびメトリクスが表示されます。

3.[説明] ボックスに、実験の説明を次のように入力します。

Regression to predict angles of rotation of digits, using various initial learning rates.

4.[ハイパーパラメーター] で、myInitialLearnRate の値を 0.001:0.001:0.006 に置き換えます。[手法]Exhaustive Sweep に設定されていることを確認します。

5.[セットアップ関数][編集] をクリックします。MATLAB エディターでセットアップ関数が開きます。

  • 4 つの出力を返すようにセットアップ関数のシグネチャを変更します。これらの出力は、関数trainNetworkを呼び出して、イメージ回帰問題用のネットワークに学習させるために使用されます。

function [XTrain,YTrain,layers,options] = Experiment1_setup1(params)
  • セットアップ関数の [イメージ データの読み込み] セクションを変更して、実験の学習データと検証データを 4 次元配列として定義します。この実験では、学習データと検証データはそれぞれ数字データ セットからの 5000 枚のイメージで構成されています。各イメージは 0 ~ 9 の数字で、特定の角度の回転が付けられています。回帰値は、回転角度に対応しています。このデータセットの詳細については、イメージ データセットを参照してください。セットアップ関数のこのセクションにある既存のコードはすべて削除してください。

[XTrain,~,YTrain] = digitTrain4DArrayData;
[XValidation,~,YValidation] = digitTest4DArrayData;
  • セットアップ関数の [ネットワーク アーキテクチャの定義] セクションを変更して、回帰用の畳み込みニューラル ネットワークを定義します。セットアップ関数のこのセクションにある既存のコードはすべて削除してください。

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer(2,'Stride',2)
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer(2,'Stride',2)
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer
    dropoutLayer(0.2)
    fullyConnectedLayer(1)
    regressionLayer];
  • 4 次元配列 XValidation および YValidation の検証データを使用するようにセットアップ関数の [学習オプションの指定] セクションを変更します。セットアップ関数のこのセクションでは、ハイパーパラメーター テーブルの myInitialLearnRate エントリから学習オプション 'InitialLearnRate' の値を読み込みます。

options = trainingOptions('sgdm', ...
    'MaxEpochs',5, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'InitialLearnRate',params.myInitialLearnRate);

実験を実行すると、実験マネージャーはセットアップ関数で定義されたネットワークに 6 回学習させます。各試行で、ハイパーパラメーター テーブルで指定された学習率の 1 つが使用されます。各試行で、ハイパーパラメーター テーブルで指定された学習率の 1 つが使用されます。既定では、実験マネージャーは一度に 1 つの試行を実行します。Parallel Computing Toolbox がある場合は、複数の試行を同時に実行できます。最良の結果を得るには、実験を実行する前に、GPU と同じ数のワーカーで並列プールを起動します。詳細については、実験マネージャーを使用したネットワークの並列学習を参照してください。

  • 一度に 1 つの実験の試行を実行するには、[実験マネージャー] ツールストリップで [実行] をクリックします。

  • 複数の試行を同時に実行するには、[並列の使用][実行] の順にクリックします。現在の並列プールがない場合、実験マネージャーは既定のクラスター プロファイルを使用して並列プールを起動します。次に、実験マネージャーは、使用可能な並列ワーカーの数に応じて、複数の同時試行を実行します。

結果テーブルに、各試行の平方根平均二乗誤差 (RMSE) と損失が表示されます。

実験の実行中に [学習プロット] をクリックすると、学習プロットが表示され、各試行の進行状況を追跡できます。MATLAB コマンド ウィンドウで学習の進行状況を監視することもできます。

実験の完了後、列ごとにテーブルを並べ替えたり、[フィルター] ペインを使用して試行をフィルター処理したりできます。詳細については、実験結果の並べ替えとフィルター処理を参照してください。

各試行の性能をテストするには、試行で使用した学習済みネットワークまたは試行の学習情報をエクスポートします。[実験マネージャー] タブで、[エクスポート][学習済みネットワーク] を選択するか、[エクスポート][学習情報] を選択します。詳細は、netinfoを参照してください。

実験を閉じるには、[実験ブラウザー] ペインでプロジェクトの名前を右クリックし、[プロジェクトを閉じる] を選択します。実験マネージャーによって、プロジェクトに含まれるすべての実験と結果が閉じられます。

この例では、実験マネージャー アプリを使用して実験を設定する方法を示します。

実験の定義は、説明、ハイパーパラメーター テーブル、セットアップ関数、および実験の結果を評価するためのメトリクス関数の集合 (オプション) で構成されます。

[説明] ボックスに、実験の説明を入力します。

[ハイパーパラメーター] で、実験に使用する手法を選択します。

  • ハイパーパラメーター値の範囲をスイープするには、[手法][網羅的なスイープ] に設定します。ハイパーパラメーター テーブルで、実験で使用されるハイパーパラメーターの値を指定します。ハイパーパラメーター値は、数値、logical 値、または string 値をもつスカラーまたはベクトルとして指定できます。たとえば、以下のようなハイパーパラメーターの指定が有効です。

    • 0.01

    • 0.01:0.01:0.05

    • [0.01 0.02 0.04 0.08]

    • ["sgdm" "rmsprop" "adam"]

    実験を実行すると、実験マネージャーは、テーブルで指定されたハイパーパラメーター値のすべての組み合わせを使用してネットワークに学習させます。

  • ベイズ最適化を使用して最適な学習オプションを見つけるには、[手法][ベイズ最適化] に設定します。ハイパーパラメーター テーブルで、実験で使用される次のハイパーパラメーターのプロパティを指定します。

    • 範囲 — 実数値または整数値のハイパーパラメーターの下限と上限を示す 2 要素のベクトル、または categorical ハイパーパラメーターが取り得る値をリストする string 配列または cell 配列を入力します。

    • [実数] (実数値のハイパーパラメーター)、[整数] (整数値のハイパーパラメーター)、または [categorical] (categorical ハイパーパラメーター) を選択します。

    • 変換[なし] (変換なし) または [対数] (対数変換) を選択します。[対数] の場合、ハイパーパラメーターは [実数] または [整数] で正でなければなりません。ハイパーパラメーターが検索され、対数スケールでモデル化されます。

    実験を実行すると、実験マネージャーはハイパーパラメーターの最適な組み合わせを検索します。実験の各試行では、前の試行の結果に基づいてハイパーパラメーター値の新しい組み合わせが使用されます。実験の期間を指定するには、[ベイズ最適化オプション] で、実行する最大時間 (秒単位) と最大試行回数を入力します。ベイズ最適化には、Statistics and Machine Learning Toolbox が必要です。詳細については、ベイズ最適化を使用した実験ハイパーパラメーターの調整を参照してください。

[セットアップ関数] は、実験用の学習データ、ネットワーク アーキテクチャ、および学習オプションを構成します。セットアップ関数への入力は、ハイパーパラメーター テーブルのフィールドをもつ struct です。セットアップ関数の出力は、関数 trainNetwork の入力と一致しなければなりません。以下の表は、セットアップ関数でサポートされているシグネチャの一覧です。

実験の目的セットアップ関数のシグネチャ
入力イメージ データを格納するイメージ データストア imds を使用して、イメージ分類の問題用のネットワークに学習させる。
function [imds,layers,options] = Experiment_setup(params)
...
end
データストア ds を使用してネットワークに学習させる。
function [ds,layers,options] = Experiment_setup(params)
...
end
予測子変数を格納する数値配列 X、カテゴリカル ラベルまたは数値応答を格納する Y を使用して、イメージ分類問題およびイメージ回帰問題用のネットワークに学習させる。
function [X,Y,layers,options] = Experiment_setup(params)
...
end
シーケンスまたは時系列予測子を格納する sequences、応答を格納する Y を使用して、シーケンス分類問題およびシーケンス回帰問題用のネットワークに学習させる。
function [sequences,Y,layers,options] = Experiment_setup(params)
...
end
数値データまたはデータへのファイル パスを格納する table tbl を使用して、分類問題および回帰問題用のネットワークに学習させる。
function [tbl,layers,options] = Experiment_setup(params)
...
end
tbl で応答変数を指定する responseNames を使用して、分類問題と回帰問題用のネットワークに学習させる。
function [tbl,responseNames,layers,options] = Experiment_setup(params)
...
end

メモ

学習オプション'ExecutionEnvironment''multi-gpu' または 'parallel' に設定するか、学習オプション'DispatchInBackground'を有効にした場合、実験マネージャーは並列実行をサポートしません。詳細については、実験マネージャーを使用したネットワークの並列学習を参照してください。

[メトリクス] セクションは、実験結果を評価するための関数を指定します。メトリクス関数への入力は、以下の 3 つのフィールドをもつ struct です。

  • trainedNetwork は、関数 trainNetwork によって返される SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトです。詳細については、学習済みネットワークを参照してください。

  • trainingInfo は、関数 trainNetwork によって返される学習情報を含む struct です。詳細については、学習に関する情報を参照してください。

  • parameters は、ハイパーパラメーター テーブルのフィールドをもつ struct です。

メトリクス関数の出力は、スカラー数、logical 値、または string でなければなりません。

実験でベイズ最適化を使用する場合は、[最適化] リストから最適化するメトリクスを選択します。[方向] リストで、このメトリクスの [最大化] または [最小化] を指定します。実験マネージャーは、このメトリクスを使用して、実験に最適なハイパーパラメーターの組み合わせを決定します。学習または検証の標準的メトリクス (精度、RMSE、損失など) を選択することも、テーブルからカスタム メトリクスを選択することもできます。

この例では、実験の実行結果を比較する方法を示します。

実験を実行すると、実験マネージャーはセットアップ関数で定義されたネットワークに複数回学習させます。試行ごとに、ハイパーパラメーターの異なる組み合わせが使用されます。実験が終了すると、各試行の学習メトリクスおよび検証メトリクス (精度、RMSE、損失など) がテーブルに表示されます。実験の結果を比較するには、学習メトリクスおよび検証メトリクスを使用して、結果テーブルを並べ替えたり、試行をフィルター処理したりできます。

結果テーブルで試行を並べ替えるには、学習メトリクスまたは検証メトリクスに対応する列のドロップダウン メニューを使用します。

  1. 並べ替える列のヘッダーをポイントします。

  2. 三角形のアイコンをクリックします。

  3. [昇順で並べ替え] または [降順で並べ替え] を選択します。

    Results table showing drop down menu for the Validation Accuracy column.

結果テーブルから試行をフィルター処理するには、[フィルター] ペインを使用します。

  1. [実験マネージャー] ツールストリップで、[フィルター] を選択します。

    [フィルター] ペインに、結果テーブルの数値メトリクスのヒストグラムが表示されます。[フィルター] ペインからヒストグラムを削除するには、結果テーブルで、対応する列のドロップダウン メニューを開き、[フィルターの表示] チェック ボックスをオフにします。

  2. フィルター処理する学習メトリクスまたは検証メトリクスのヒストグラムの下にあるスライダーを調整します。

    Histogram for Validation Loss, with filter sliders set to 1.45 and 1.55.

    結果テーブルには、選択した範囲のメトリクス値をもつ試行のみが表示されます。

    Results table showing only trials with Validation Loss between 1.45 and 1.55.

  3. 結果テーブルのすべての試行を復元するには、[Experiment Result] ペインを閉じ、[実験ブラウザー] ペインから結果を再度開きます。

この例では、特定の結果を生成した実験の構成を検査する方法を示します。

実験を実行した後、[Experiment ソース] ペインを開いて、実験の説明とハイパーパラメーター テーブルの読み取り専用コピー、および実験によって呼び出されたセットアップ関数とメトリクス関数へのリンクを表示できます。このペインの情報を使用して、各結果を生成するデータ、ネットワーク、および学習オプションの構成を追跡できます。

たとえば、実験を複数回実行するとします。実験を実行するたびに、セットアップ関数の内容を変更しますが、名前は常に同じものを使用します。最初に実験を実行するときは、セットアップ関数テンプレートによって提供される既定の分類ネットワークを使用します。2 回目に実験を実行するときは、セットアップ関数を変更して、事前学習済みの GoogLeNet ネットワークを読み込み、最終層を転移学習用の新しい層に置き換えます。これら 2 つのネットワーク アーキテクチャを使用する例については、分類用の深層学習実験の作成を参照してください。

最初の [Experiment Result] ペインで、[実験のソースの表示] リンクをクリックします。実験マネージャーは、最初の結果セットを生成した実験の定義を含む [Experiment ソース] ペインを開きます。ペインの下部にあるリンクをクリックして、最初の実験の実行時に使用したセットアップ関数を開きます。このセットアップ関数をコピーし、シンプルな分類ネットワークを使用して実験を再実行できます。

2 番目の [Experiment Result] ペインで、[実験のソースの表示] リンクをクリックします。実験マネージャーは、2 番目の結果セットを生成した実験の定義を含む [Experiment ソース] ペインを開きます。ペインの下部にあるリンクをクリックして、2 回目の実験の実行時に使用したセットアップ関数を開きます。このセットアップ関数をコピーし、転移学習を使用して実験を再実行できます。

使用するセットアップ関数とカスタム メトリクス関数のコピーが実験マネージャーによって保存されるため、実験を変更して再実行するときに、これらの関数の名前を手動で変更する必要はありません。

関連する例

ヒント

ハイパーパラメーターをスイープせずにネットワークの可視化、構築、学習を行うには、ディープ ネットワーク デザイナー アプリを試してください。

R2020a で導入