多クラス ニューラル ネットワーク
重要
Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。
2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。
- ML Studio (クラシック) から Azure Machine Learning への機械学習プロジェクトの移動に関する情報を参照してください。
- Azure Machine Learning についての詳細を参照してください。
ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
ニューラル ネットワーク アルゴリズムを使用して多クラス分類モデルを作成します
カテゴリ: Machine Learning/ モデルの初期化 / 分類
注意
適用対象: Machine Learning Studio (クラシック) のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) の多クラス ニューラル ネットワーク モジュールを使用して、複数の値を持つターゲットを予測するために使用できるニューラル ネットワーク モデルを作成する方法について説明します。
たとえば、この種のニューラル ネットワークは、数字または文字の認識、ドキュメントの分類、パターン認識などの複雑なコンピューター ビジョン タスクで使用できます。
ニューラル ネットワークを使用する分類は、教師あり学習手法であるため、ラベル列を含む "タグ付けされたデータセット" が必要となります。
モデルとタグ付けされたデータセットをモデルのトレーニングへの入力として指定するか、モデルハイパーパラメーターを調整することで、モデルをトレーニングできます。 その後は、トレーニング済みのモデルを使用して新しい入力例の値を予測することができます。
ニューラル ネットワークの詳細
ニューラル ネットワークは、一連の相互接続された層です。 入力は最初の層であり、重み付きエッジとノードから成る非巡回グラフによって出力層に接続されています。
入力層と出力層の間には、複数の非表示の層を挿入できます。 予測タスクのほとんどは、1 つまたは少数の非表示の層を使用して簡単に行うことができます。 しかし、最近の研究では、多くの層を持つディープ ニューラル ネットワーク (DNN) は、画像や音声認識などの複雑なタスクで非常に効果的である可能性が示されています。 これらの連続する層を使用して、セマンティックの深さのレベルの増加がモデル化されます。
入力と出力の間のリレーションシップは、入力データに関してニューラル ネットワークをトレーニングすることで習得されます。 グラフの方向は入力から、非表示の層を経由して出力層へと進みます。 層内のノードはすべて、重み付きエッジによって次の層内のノードに接続されます。
特定の入力に対してネットワークの出力を計算するには、非表示の層内の各ノードおよび出力層内の各ノードで値を計算します。 この値は、前の層からのノードの値の加重和を計算することで設定されます。 次に、その加重和にアクティブ化関数が適用されます。
多クラス ニューラル ネットワークを構成する方法
Studio ( クラシック) の実験に MultiClass Neural Network モジュールを追加します。 このモジュールは、 [Machine Learning]\(機械学習\) の [Initialize]\(初期化\) の [Classification]\(分類\) カテゴリにあります。
Create trainer mode (トレーナー モードの作成) : このオプションを使用して、モデルのトレーニング方法を指定します。
Hidden layer specification (非表示の層の仕様) : 作成するネットワーク アーキテクチャの種類を選択します。
[完全に接続されたケース]: 既定のニューラル ネットワーク アーキテクチャを使用してモデルを作成するには、このオプションを選択します。 多クラス ニューラル ネットワーク モデルの場合、既定値は次のとおりです。
- 単一の非表示の層
- 出力層は非表示の層に完全結合されます。
- 非表示の層は入力層に完全結合されます。
- 入力層内のノードの数については、トレーニング データ内のフィーチャーの数によって決まります。
- 非表示の層内のノード数はユーザーが設定できます。 既定値は、100 です。
- 出力層内のノードの数は、クラスの数によって異なります。
カスタム定義スクリプト。 Net# 言語を使用してカスタム ニューラル ネットワーク アーキテクチャを作成するには、このオプションを選択します。 非表示レイヤーの数、それらの接続、およびレイヤー間のマッピングの指定などの高度なオプションを定義できます。 Net# の概要については、このトピックで後 の「Net# の詳細 」を参照してください。
ニューラル ネットワーク定義: カスタム アーキテクチャ オプションを選択した場合は、テキスト ボックスを使用して、Net# 言語で記述されたステートメントを入力または貼り付けます。 その他のスクリプト例については、「 Net# ニューラル ネットワーク仕様言語のガイド」を参照してください。
Number of hidden nodes (非表示ノードの数) : このオプションでは、既定のアーキテクチャでの非表示ノードの数をカスタマイズできます。 非表示ノードの数を入力します。 既定値は、100 個のノードを含んだ 1 つの非表示の層となります。
The learning rate (学習率) : 修正の前に各イテレーションで実行されるステップのサイズを定義します。学習率の値を大きくすると、モデルの収束速度は速くなりますが、極小値から離れていってしまう可能性があります。
[学習のイテレーション数]: アルゴリズムがトレーニング ケースを処理する最大回数を指定します。
The initial learning weights diameter (初期学習の重みの直径) : 学習プロセスの開始時のノードの重みを指定します。
The momentum (モーメンタム) : 学習中に以前のイテレーションからノードに適用する重みを指定します。
ノーマライザーの種類: 特徴の正規化に使用するメソッドを選択します。 次の正規化メソッドがサポートされています。
ビン分割ノーマライザー: ビン分割ノーマライザーは、同じサイズのビンを作成し、ビンの総数で除算して各ビンのすべての値を正規化します。
ハウスノーマライザー: ハウスノーマライザーは、各特徴の値を平均 0 と分散 1 に再スケーリングします。 これは、各特徴の平均と分散を計算することで行われます。 インスタンスごとに平均値が減算され、結果が分散の平方根 (標準偏差) で除算されます。
最小最大ノーマライザー: 最小最大ノーマライザーは、すべての特徴を [0,1] 間隔に線形的に再スケーリングします。
最小値が 0 になるように、各機能の値がシフトされ、新しい最大値 (元の最大値と最小値の差) で区切られることで、[0,1] 間隔に縦横比が変更されます。
正規化しない: 正規化は実行されません。
Shuffle examples (例のシャッフル) : イテレーションとイテレーションの間にケースをシャッフルするには、このオプションを選択します。
このオプションをオフにした場合、実験を実行するたびに、まったく同じ順序でケースが処理されます。
乱数シード: 同じ実験の実行全体で再現性を確保する場合は、シードとして使用する値を入力します。
[不明なカテゴリ レベルを許可する]: トレーニング セットと検証セットで不明な値のグループを作成するには、このオプションを選択します。 モデルは既知の値に対する精度は低くなりますが、新しい (不明な) 値に対してより優れた予測を提供します。
このオプションをオフにすると、モデルはトレーニング データに含まれる値のみを受け入れることができます。
Connectデータセットと、トレーニング モジュールの 1 つを作成します。
[Create trainer mode]\(トレーナー モードの作成\) を [Single Parameter]\(単一パラメーター\) に設定した場合は、[Train Model]\(モデルのトレーニング\) を使用します。
[トレーナー モードの作成] を [パラメーター範囲] に設定した場合は、モデルハイパーパラメーターの調整を使用します。
注意
パラメーター範囲を [モデルのトレーニング] に渡すと、パラメーター範囲リストの 1 番目の値のみが使用されます。
[Tune Model Hyperparameters]\(モデルのハイパーパラメーターの調整\) モジュールによって、パラメーターごとに設定の範囲が求められているとき、それに単一のパラメーター値セットを渡した場合、それらの値は無視され、学習器の既定値が使用されます。
[Parameter Range]\(パラメーター範囲\) オプションを選択し、任意のパラメーターに単一の値を入力した場合、指定した単一の値はスイープ全体で使用されます。これは、他のパラメーターが値の範囲の中で変化する場合でも同様です。
結果
トレーニングの完了後:
モデルのパラメーターの概要と、トレーニングから学習した特徴の重み、ニューラル ネットワークのその他のパラメーターを表示するには、[モデルのトレーニング] または [モデルの調整] ハイパーパラメーターの出力を右クリックし、[視覚化] を選択します。
トレーニング済みのモデルのスナップショットを保存するには、[トレーニング済みのモデル] 出力を右クリックし、[トレーニング済みのモデルとして保存] を選択します。 同じ実験を連続で実行しても、このモデルは更新されません。
ラベル付きデータ セットに対してクロス検証を実行するには、トレーニングされていないモデルをクロス検証モデル に接続します。
例
この学習アルゴリズムの使用例については、以下のサンプル実験を参照Azure AI Gallery。 実験はそれぞれ関連しており、1 つのドキュメントで説明されています。基本的な構成から高度な構成へと発展していきます。
テクニカル ノート
このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。
スクリプトを使用したニューラル ネットワークのカスタマイズ
Machine Learning Studio (クラシック) では、Net# 言語を使用してニューラル ネットワーク モデルのアーキテクチャをカスタマイズできます。 Net# 言語でサポートされるカスタマイズは次のとおりです。
- 非表示レイヤーの数と各レイヤーのノード数を指定する
- レイヤー間のマッピングの指定
- 重み付けバンドルと重み共有バンドルの定義
- アクティブ化関数の選択
ニューラル ネットワーク モデルは、次の属性が含まれているグラフの構造によって定義されます。
- 非表示レイヤーの数
- 各非表示レイヤー内のノードの数
- レイヤーの接続方法
- 使用されるアクティブ化関数
- グラフ エッジに対する重み
重要
グラフの全体的な構造とアクティブ化関数は、ユーザーが指定できます。 ただし、エッジの重みを指定することはできません。また、入力データでニューラル ネットワークをトレーニングするときに学習する必要があります。
一般に、ネットワークには次の既定値があります。
- 最初の層は、常に、入力層です。
- 最後の層は、常に、出力層です。
- 出力層のノードの数は、クラスの数と等しくなる必要があります。
任意の数の中間レイヤーを定義できます。これらは、モデル内に含まれているため、非表示レイヤーと呼ばれる場合があります。これらはエンドポイントとして直接公開されません。
構文やネットワーク定義の例については、Net # リファレンス ガイドを参照してください。 Net# を使用して隠れ層を追加する方法や、さまざまな層が互いにやり取りする方法の定義方法が説明されています。
たとえば、次 auto
のスクリプトでは キーワードを使用します。このキーワードは、入力レイヤーと出力レイヤーの特徴の数を自動的に設定し、非表示レイヤーの既定値を使用します。
input Data auto;
hidden Hidden auto from Data all;
output Result auto from Hidden all;
その他のスクリプト例については、「 Net# ニューラル ネットワーク仕様言語のガイド」を参照してください。
ヒント
ニューラル ネットワークは、ハイパーパラメーターの数とカスタム ネットワーク トポロジの導入により、計算コストが高くなります。 多くの場合、ニューラル ネットワークでは他のアルゴリズムよりも良い結果が生成されますが、そのような結果を取得するには大量のハイパーパラメーターをスイープ (繰り返し) 処理する必要があります。
モジュールのパラメーター
名前 | Range | Type | Default | 説明 |
---|---|---|---|---|
隠れ層の仕様 | 一覧 | ニューラル ネットワーク トポロジ | 完全結合ケース | 1 つまたは複数の隠れ層のアーキテクチャを指定します |
初期学習の重みの直径 | >=double.Epsilon | Float | 0.1 | 学習プロセス開始時のノードの重みを指定します |
学習率 | [double.Epsilon;1.0] | Float | 0.1 | 学習プロセスの各ステップのサイズを指定します |
モーメンタム | [0.0;1.0] | Float | 0.0 | 学習中に以前のイテレーションからノードに適用する重みを指定します |
ニューラル ネットワークの定義 | Any | StreamReader | [カスタム定義スクリプト] を選択する場合は、各行に有効なスクリプト式を入力して、カスタム ニューラル ネットワークの層、ノード、および動作を定義します | |
ノーマライザーの種類 | 一覧 | 正規化法 | 最小/最大ノーマライザー | 学習例に適用する正規化の種類を選択します |
学習のイテレーション数 | >=1 | Integer | 100 | 学習中のイテレーション数を指定します |
例のシャッフル | Any | Boolean | True | 学習のイテレーション間でインスタンスの順序を変更するには、このオプションを選択します |
乱数シード | Any | Integer | 乱数の生成に使用する数値シードを指定します。 既定のシードを使用するには空のままにします。 | |
不明なカテゴリ レベルの許可 | Any | Boolean | True | 不明なカテゴリに対して追加のレベルを作成するかどうかを示します。 トレーニング データセット内に存在しないカテゴリがテスト データセットに含まれている場合、該当するカテゴリはこの不明レベルにマップされます。 |
出力
名前 | 型 | 説明 |
---|---|---|
未トレーニング モデル | ILearner インターフェイス | 未トレーニング多クラス分類モデル |