2 クラス ニューラル ネットワーク
ニューラル ネットワーク アルゴリズムを使用して二項分類器を作成します
カテゴリ: Machine Learning/ モデルの初期化 / 分類
注意
適用対象: Machine Learning Studio (クラシック) のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) の 2 クラス ニューラル ネットワーク モジュールを使用して、2 つの値のみを持つターゲットを予測するために使用できるニューラル ネットワーク モデルを作成する方法について説明します。
ニューラル ネットワークを使用する分類は、教師あり学習手法であるため、ラベル列を含む "タグ付けされたデータセット" が必要となります。 たとえば、このニューラル ネットワーク モデルを使用して、患者が特定の病気を持っているかどうか、または指定した時間枠内にコンピューターが失敗する可能性があるかどうかなどのバイナリ結果を予測することができます。
モデルを定義した後、タグ付けされたデータセットとモデルをモデルのトレーニングまたはモデルハイパーパラメーターの調整への入力として指定してトレーニングします。 その後は、トレーニング済みのモデルを使用して、新しい入力の値を予測することができます。
ニューラル ネットワークの詳細
ニューラル ネットワークは、一連の相互接続された層です。 入力は最初の層であり、重み付きエッジとノードから成る非巡回グラフによって出力層に接続されています。
入力層と出力層の間には、複数の非表示の層を挿入できます。 予測タスクのほとんどは、1 つまたは少数の非表示の層を使用して簡単に行うことができます。 しかし、最近の研究では、多くの層を持つディープ ニューラル ネットワーク (DNN) は、画像や音声認識などの複雑なタスクで非常に効果的である可能性が示されています。 これらの連続する層を使用して、セマンティックの深さのレベルの増加がモデル化されます。
入力と出力の間のリレーションシップは、入力データに関してニューラル ネットワークをトレーニングすることで習得されます。 グラフの方向は入力から、非表示の層を経由して出力層へと進みます。 層内のノードはすべて、重み付きエッジによって次の層内のノードに接続されます。
特定の入力に対してネットワークの出力を計算するには、非表示の層内の各ノードおよび出力層内の各ノードで値を計算します。 この値は、前の層からのノードの値の加重和を計算することで設定されます。 次に、その加重和にアクティブ化関数が適用されます。
ニューラル ネットワークTwo-Class構成する方法
Studio ( クラシック) の実験に 2 クラス ニューラル ネットワーク モジュールを追加します。 このモジュールは、 [Machine Learning]\(機械学習\) の [Initialize]\(初期化\) の [Classification]\(分類\) カテゴリにあります。
[Create trainer mode]\(トレーナー モードの作成\) オプションを設定して、モデルのトレーニング方法を指定します。
[隠れ層の仕様] には、作成するネットワーク アーキテクチャの種類を選択します。
完全に接続されたケース: 次のように 2 クラス ニューラル ネットワーク用に定義された既定のニューラル ネットワーク アーキテクチャを使用します。
単一の隠れ層があります。
出力層は隠れ層に全結合され、隠れ層は入力層に全結合されます。
入力層内のノードの数は、トレーニング データ内のフ特徴の数と等しくなります。
隠れ層内のノード数はユーザーによって設定されます。 既定値は 100 です。
ノードの数は、クラスの数と等しくなります。 2 クラス ニューラル ネットワークの場合、これは、すべての入力が、出力層内の 2 つのノードのいずれかにマップされている必要があることを意味します。
カスタム定義スクリプト: Net# 言語を使用してカスタム ニューラル ネットワーク アーキテクチャを作成するには、この オプションを選択 します。 このオプションを使用すると、非表示レイヤーの数、それらの接続、およびレイヤー間のマッピングを定義できます。
カスタム スクリプト オプションを選択した後、[ ニュー ラル ネットワーク定義] テキスト ボックスに、ネットワークを定義する Net# ステートメントを入力するか貼り付けます。 例については、「 Net# ニューラル ネットワーク仕様言語のガイド」を参照してください。
スクリプト オプションを使用していない場合は、非表示ノードの数 を使用し、非表示ノードの数を入力します。 既定値は、100 個のノードを含んだ 1 つの非表示の層となります。
[学習速度] には、訂正前に各イテレーションで行うステップのサイズを定義します。 学習速度の値を大きくすると、モデルの収束速度は速くなりますが、極小値から離れていってしまう可能性があります。
[学習のイテレーション数] には、アルゴリズムがトレーニング ケースを処理する最大回数を指定します。
[初期学習の重みの直径] には、学習プロセスの開始時点におけるノードの重みを指定します。
[モーメンタム] には、学習中に以前のイテレーションからノードに適用する重みを指定します。
[ ノーマライザーの種類] で、特徴の正規化に使用するメソッドを選択します。 次の正規化メソッドがサポートされています。
ビン分割ノーマライザー: ビン分割ノーマライザーは、同じサイズのビンを作成し、各ビンのすべての値をビンの総数で除算して正規化します。
ハウスノーマライザー: ハウスノーマライザーは、各特徴の値を平均 0 と分散 1 に再スケーリングします。 これは、各特徴の平均と分散を計算することで行われます。 インスタンスごとに平均値が減算され、結果が分散の平方根 (標準偏差) で除算されます。
最小最大ノーマライザー: 最小最大ノーマライザーは、すべての特徴を [0,1] 間隔に線形的に再スケーリングします。
最小値が 0 になるように、各機能の値がシフトされ、新しい最大値 (元の最大値と最小値の差) で区切られることで、[0,1] 間隔に縦横比が変更されます。
正規化しない: 正規化は実行されません。
イテレーションとイテレーションの間にケースをシャッフルするには、 [例のシャフル] オプションを選択します。 このオプションをオフにした場合、実験を実行するたびに、まったく同じ順序でケースが処理されます。
[乱数シード] には、シードとして使用する値を入力します。
同じ実験を繰り返したときの再現性を確保したい場合は、シード値を指定すると効果的です。 そうしないと、システム クロック値がシードとして使用され、実験を実行するごとに結果がわずかに異なる可能性があります。
[不明な カテゴリ レベルを許可 する] オプションを選択して、トレーニング セットと検証セット内の不明な値のグループを作成します。 モデルは既知の値に対する精度は低くなりますが、新しい (不明な) 値に対してより優れた予測を提供します。
このオプションをオフにすると、モデルはトレーニング データに含まれる値のみを受け入れることができます。
タグ付けされたデータセットを実験に追加し、いずれかのトレーニング モジュールを接続します。
[Create trainer mode]\(トレーナー モードの作成\) を [Single Parameter]\(単一パラメーター\) に設定した場合は、モデルのトレーニング モジュールを使用します。
[Create trainer mode]\(トレーナー モードの作成\) を [Parameter Range]\(パラメーター範囲\) を設定する場合は、[Tune Model Hyperparameters]\(モデルのハイパーパラメーターの調整\) モジュールを使用します。
注意
パラメーター範囲を [モデルのトレーニング] に渡すと、パラメーター範囲リストの 1 番目の値のみが使用されます。
[Tune Model Hyperparameters]\(モデルのハイパーパラメーターの調整\) モジュールによって、パラメーターごとに設定の範囲が求められているとき、それに単一のパラメーター値セットを渡した場合、それらの値は無視され、学習器の既定値が使用されます。
[パラメーター 範囲] オプション を選択し、任意のパラメーターに 1 つの値を入力した場合、他のパラメーターが値の範囲にわたって変更された場合でも、その 1 つの値がスイープ全体で使用されます。
実験を実行します。
結果
トレーニングの完了後:
モデルのパラメーターの概要と、トレーニングから学習した特徴の重み、ニューラル ネットワークのその他のパラメーターを表示するには、[モデルのトレーニング] または [モデルの調整] ハイパーパラメーターの出力を右クリックし、[視覚化] を選択します。
トレーニング済みのモデルのスナップショットを保存するには、[トレーニング済みのモデル] 出力を右クリックし、[トレーニング済みのモデルとして保存] を選択します。 同じ実験を連続で実行しても、このモデルは更新されません。
ラベル付きデータ セットに対してクロス検証を実行するには、トレーニングされていないモデルをクロス検証モデル に接続します。
例
この学習アルゴリズムの使用例については、次のページを Azure AI Gallery。 これらの実験は、基本的な構成から高度な構成に進む 1 つのドキュメントに関連して記述されています。
テクニカル ノート
このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。
Net の詳細#
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 | 学習プロセス開始時のノードの重みを指定します |
Learning rate (学習率) | [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 インターフェイス | 未トレーニング二項分類モデル |