ニューラル ネットワーク回帰
重要
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 (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
"ニューラル ネットワーク アルゴリズムを使用して回帰モデルを作成する"
Category: Machine Learning/初期化モデル/回帰
注意
適用対象: Machine Learning Studio (クラシック)のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) のニューラルネットワーク回帰モジュールを使用して、カスタマイズ可能なニューラルネットワークアルゴリズムを使用して回帰モデルを作成する方法について説明します。
ニューラル ネットワークは、ディープ ラーニングと複雑な問題 (画像認識など) のモデル化における使用が広く知られていますが、回帰問題にも簡単に適応することができます。 適応型荷重を使用していて、かつ入力の非線形関数を近似することができるあらゆる種類の統計モデルは、ニューラル ネットワークと呼ぶことができます。 そのためニューラル ネットワーク回帰は、従来型の回帰モデルでは解に適合できない問題に適しています。
ニューラル ネットワーク回帰は教師あり学習手法であるため、ラベル列を含む "タグ付けされたデータセット" が必要となります。 回帰モデルで予測するのは数値であるため、ラベル列は数値データ型であることが必要です。
モデルとタグ付きデータセットを入力として指定し、モデルを トレーニング したり、 モデルのハイパーパラメーターを調整したりすることによって、モデルをトレーニングできます。 その後は、トレーニング済みのモデルを使用して新しい入力例の値を予測することができます。
ニューラルネットワーク回帰を構成する方法
ニューラル ネットワークは、広範なカスタマイズが可能です。 このセクションでは、2 つの方法を使用して、モデルを作成する方法について説明します。
既定のアーキテクチャを使用してニューラル ネットワーク モデルを作成する
既定のニューラル ネットワーク アーキテクチャをそのまま使用する場合、隠れ層のノード数、学習率、正規化など、ニューラル ネットワークの動作を制御するパラメーターを [プロパティ] ウィンドウを使用して設定します。
ニューラル ネットワークを初めて利用する方は、ここから始めてください。 ニューラル ネットワークについての深い知識がなくても、このモジュールが多数のカスタマイズとモデルのチューニングをサポートします。
ニューラル ネットワークのカスタム アーキテクチャを定義する
隠れ層を余分に追加したり、ネットワーク アーキテクチャとその結合、アクティブ化関数を完全にカスタマイズしたりすることが必要な場合は、この方法を使用します。
この方法は、既にニューラル ネットワークについてある程度の知識がある方に最適です。 ネットワークアーキテクチャを定義するには、 Net # 言語 を使用します。
既定のアーキテクチャを使用してニューラル ネットワーク モデルを作成する
Studio (クラシック) で、 ニューラルネットワーク回帰 モジュールを実験に追加します。 このモジュールは、[Machine Learning]\(機械学習\) の [初期化] の [回帰] カテゴリにあります。
[Create trainer mode]\(トレーナー モードの作成\) オプションを設定して、モデルのトレーニング方法を指定します。
Single Parameter (単一パラメーター) : モデルを構成する方法が既にわかっている場合は、このオプションを選択します。
パラメーターの範囲: 最適なパラメーターがわからない場合は、このオプションを選択します。 次に、値の範囲を指定し、 チューニングモデルハイパーパラメーター モジュールを使用して、組み合わせを反復処理し、最適な構成を見つけます。
[ 非表示層の指定] で、[ 完全接続のケース] を選択します。 このオプションでは、既定のニューラル ネットワーク アーキテクチャを使用してモデルが作成されます。これは、ニューラル ネットワーク回帰モデルに関して、次の属性を備えます。
- このネットワークには隠れ層が 1 つだけ存在します。
- 出力層は隠れ層に全結合され、隠れ層は入力層に全結合されます。
- 隠れ層のノード数はユーザーが設定できます (既定値は 100)。
入力層のノード数はトレーニング データ内の特徴数によって決まるため、回帰モデルでは、出力層に設定できるノード数は 1 つだけです。
[Number of hidden nodes]\(隠れノードの数\) に、隠れノードの数を入力します。 既定値は、100 個のノードを含んだ 1 つの非表示の層となります。 (Net# を使用してカスタム アーキテクチャを定義する場合、このオプションは選択できません。)
訂正前に、各イテレーションで行われるステップを定義する値を [Learning rate]\(学習率\) に入力します。 学習速度の値を大きくすると、モデルの収束速度は速くなりますが、極小値から離れていってしまう可能性があります。
[Number of learning iterations]\(学習イテレーション数\) に、トレーニング ケースをアルゴリズムで処理する最大回数を指定します。
最初の学習の重みの直径には、学習プロセスの開始時のノードの重みを決定する値を入力します。
学習中に前のイテレーションからノードへの重みとして適用する値を [The momentum]\(慣性項\) に入力します。
ノーマライザー種類として、次のいずれかの方法を選択して、機能の正規化に使用します。
ビン分割: ビン分割により、同じサイズのグループが作成され、各グループのすべての値がグループの合計数で除算されます。
ガウス正規化: ガウス正規化再スケールは、平均0と分散1を持つ各特徴の値を表します。 これを行うには、各特徴の平均と分散を計算してから、各インスタンスについて平均値を減算し、分散の平方根 (標準偏差) で除算します。
最小値と最大値: 最小値の正規化では、すべての機能が [0, 1] の間隔に線形的に再スケールされます。
最小値が 0 になるように、各機能の値がシフトされ、新しい最大値 (元の最大値と最小値の差) で区切られることで、[0,1] 間隔に縦横比が変更されます。
正規化しない: 正規化は実行されません。
イテレーション間でケースの順序を変更するには、[Shuffle examples]\(例のシャッフル\) オプションを選択します。 このオプションをオフにした場合、実験を実行するたびに、まったく同じ順序でケースが処理されます。
[Random number seed]\(乱数シード\) には、シードとして使用する値を必要に応じて入力できます。 同じ実験を繰り返したときの再現性を確保したい場合は、シード値を指定すると効果的です。
[ 不明なカテゴリレベルを許可 する] オプションを選択して、不明な値のグループを作成します。 モデルは既知の値に対して正確ではありませんが、新しい (不明な) 値に対してより良い予測を提供します。
このオプションの選択を解除すると、モデルはトレーニングデータに含まれる値のみを受け入れることができます。
トレーニングデータセットとトレーニングモジュールのいずれかを Connect します。
[Create trainer mode]\(トレーナー モードの作成\) を [Single Parameter]\(単一パラメーター\) に設定した場合は、[Train Model]\(モデルのトレーニング\) を使用します。
[ トレーナーモードの作成 ] を [ パラメーター範囲] に設定した場合は、[ モデルのチューニング] ハイパーパラメーターを使用します。
警告
パラメーター範囲を [モデルのトレーニング] に渡すと、パラメーター範囲リストの 1 番目の値のみが使用されます。
[Tune Model Hyperparameters]\(モデルのハイパーパラメーターの調整\) モジュールによって、パラメーターごとに設定の範囲が求められているとき、それに単一のパラメーター値セットを渡した場合、それらの値は無視され、学習器の既定値が使用されます。
[Parameter Range]\(パラメーター範囲\) オプションを選択し、任意のパラメーターに単一の値を入力した場合、指定した単一の値はスイープ全体で使用されます。これは、他のパラメーターが値の範囲の中で変化する場合でも同様です。
実験を実行します。
カスタムアーキテクチャを定義する
ニューラルネットワーク回帰モジュールを実験に追加します。
[Create trainer mode]\(トレーナー モードの作成\) オプションを設定して、モデルのトレーニング方法を指定します。
Single Parameter (単一パラメーター) : モデルを構成する方法が既にわかっている場合は、このオプションを選択します。
パラメーターの範囲: 最適なパラメーターがわからない場合は、このオプションを選択します。 次に、値の範囲を指定し、 チューニングモデルハイパーパラメーター モジュールを使用して、組み合わせを反復処理し、最適な構成を見つけます。
[ 非表示層の指定] で、[ カスタム定義スクリプト] を選択します。 Net #言語を使用してカスタムニューラルネットワークアーキテクチャを定義する場合は、このオプションを選択する必要があります。
[ カスタム定義スクリプト ] オプションを選択すると、[ ニューラルネットワークの定義 ] テキストボックスが表示されます。 Net # スクリプトに貼り付けて、非表示層の数、接続、およびレイヤー間のマッピングを指定するなどの高度なオプションを含む、ニューラルネットワークのカスタムアーキテクチャを定義できます。
訂正前に、各イテレーションで行われるステップを定義する値を [Learning rate]\(学習率\) に入力します。 学習速度の値を大きくすると、モデルの収束速度は速くなりますが、極小値から離れていってしまう可能性があります。
[Number of learning iterations]\(学習イテレーション数\) に、トレーニング ケースをアルゴリズムで処理する最大回数を指定します。
最初の学習の重みの直径には、学習プロセスの開始時のノードの重みを決定する値を入力します。
学習中に前のイテレーションからノードへの重みとして適用する値を [The momentum]\(慣性項\) に入力します。
ノーマライザー種類として、次のいずれかの方法を選択して、機能の正規化に使用します。
ビン分割: ビン分割は、同じサイズのグループを作成し、グループの合計数で除算することによって、各グループのすべての値を正規化します。
ガウス正規化: ガウス正規化再スケールは、平均0と分散1を持つ各特徴の値を表します。 これを行うには、各特徴の平均と分散を計算してから、各インスタンスについて平均値を減算し、分散の平方根 (標準偏差) で除算します。
最小値と最大値: 最小値の正規化では、すべての機能が [0, 1] の間隔に線形的に再スケールされます。
最小値が 0 になるように、各機能の値がシフトされ、新しい最大値 (元の最大値と最小値の差) で区切られることで、[0,1] 間隔に縦横比が変更されます。
正規化しない: 正規化は実行されません。
イテレーション間でケースの順序を変更するには、[Shuffle examples]\(例のシャッフル\) オプションを選択します。 このオプションをオフにした場合、実験を実行するたびに、まったく同じ順序でケースが処理されます。
[Random number seed]\(乱数シード\) には、シードとして使用する値を必要に応じて入力できます。 同じ実験を繰り返したときの再現性を確保したい場合は、シード値を指定すると効果的です。
[不明なカテゴリ レベル を許可する] オプションを 選択して、不明な値のグループを作成します。 テスト データ セット内の不明な値は、この不明なカテゴリにマップされます。 このオプションを使用すると、既知の値に対するモデルの精度が若干低くなりますが、新しい (不明な) 値に対する予測が向上します。
このオプションをオフにすると、モデルはトレーニング データに含まれる値についてのみ予測を行います。
Connectデータセットとトレーニング モジュールの 1 つを作成します。
[Create trainer mode]\(トレーナー モードの作成\) を [Single Parameter]\(単一パラメーター\) に設定した場合は、[Train Model]\(モデルのトレーニング\) を使用します。
[トレーナー モードの作成] を [パラメーター範囲] に設定した場合は、モデルハイパーパラメーターの調整を使用します。
警告
モデルのトレーニングにパラメーター範囲を渡 した場合、パラメーター範囲リストの最初の値だけが使用されます。
単一のパラメーター値のセットを Tune Model Hyperparameters モジュールに渡した場合、各パラメーターの設定範囲が必要な場合、その値は無視され、学習器の既定値が使用されます。
[パラメーター 範囲] オプション を選択し、任意のパラメーターに 1 つの値を入力した場合、他のパラメーターが値の範囲にわたって変更された場合でも、指定した 1 つの値がスイープ全体で使用されます。
実験を実行します。
結果
トレーニングの完了後:
モデルのパラメーターの概要と、トレーニングから学習した特徴の重み、ニューラル ネットワークのその他のパラメーターを表示するには、[モデルのトレーニング] または [モデルの調整] ハイパーパラメーターの出力を右クリックし、[視覚化] を選択します。
トレーニング済みのモデルのスナップショットを保存するには、[トレーニング済みのモデル] 出力を右クリックし、[トレーニング済みのモデルとして保存] を選択します。 同じ実験を連続で実行しても、このモデルは更新されません。
ラベル付きデータ セットに対してクロス検証を実行するには、トレーニングされていないモデルをクロス検証モデル に接続します。
例
このアルゴリズムを実験で使用する方法の例については、次のサンプルを参照Azure AI Gallery。
- 複数のリグレッサの比較: いくつかの回帰アルゴリズムの使用を示し、それらの結果を比較します。
実験は Net# に関するより多くのヘルプを提供します。 実験は、基本構成から高度な構成に関連し、進行します。
テクニカル ノート
このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。
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;0.01] | Float | 0.005 | 学習プロセスの各ステップのサイズを指定します |
モーメンタム | [0.0;1.0] | Float | 0.0 | 学習中に以前のイテレーションからノードに適用する重みを指定します |
ニューラル ネットワークの定義 | Any | StreamReader | "カスタム定義スクリプト" を選択する場合は、各行に有効なスクリプト式を入力して、カスタム ニューラル ネットワークの層、ノード、および動作を定義します | |
ノーマライザーの種類 | 一覧 | 正規化法 | 最小最大ノーマライザー | 学習例に適用する正規化の種類を選択します |
隠しノード数 | Any | String | 100 | 隠れ層内のノードの数を入力します。 隠れ層が複数の場合は、コンマ区切りの一覧を入力します。 |
学習のイテレーション数 | >=1 | Integer | 100 | 学習中のイテレーション数を指定します |
例のシャッフル | Any | Boolean | true | 学習のイテレーション間でインスタンスの順序を変更するには、このオプションを選択します |
乱数シード | Any | Integer | 乱数の生成に使用する数値シードを指定します。 既定のシードを使用するには空のままにします。 このパラメーターは省略可能です |
|
不明なカテゴリ レベルの許可 | Any | Boolean | true | 不明なカテゴリに対して追加のレベルを作成するかどうかを示します。 トレーニング データセット内に存在しないカテゴリがテスト データセットに含まれている場合、該当するカテゴリはこの不明レベルにマップされます。 |
出力
名前 | 型 | 説明 |
---|---|---|
未トレーニング モデル | ILearner インターフェイス | 未トレーニング回帰モデル |