web-dev-qa-db-ja.com

人工ニューラルネットワークのニューロン数と層数の推定

レイヤーの数とレイヤーごとのニューロンの数を計算する方法に関する方法を探しています。入力iには、入力ベクトルのサイズ、出力ベクトルのサイズ、trainigセットのサイズのみがあります。

通常、最適なネットは、さまざまなネットトポロジを試し、エラーが最も少ないトポロジを選択することによって決定されます。残念ながらそれはできません。

73
ladi

これは本当に難しい問題です。

ネットワークの内部構造が多ければ多いほど、そのネットワークは複雑なソリューションを表現するのに適しています。一方、内部構造が多すぎると、トレーニングが分散したり、オーバーフィットにつながる可能性があります。これにより、ネットワークが新しいデータにうまく一般化できなくなります。

人々は伝統的にこの問題にいくつかの異なる方法で取り組んできました。

  1. さまざまな構成を試して、何が最適かを確認してください。トレーニングセットを2つの部分(トレーニング用、評価用)に分割し、トレーニングすることができます。さまざまなアプローチを評価します。残念ながら、あなたの場合、この実験的なアプローチは利用できないようです。

  2. 経験則を使用してください。多くの人々が、何が最も効果的であるかについて多くの推測を思いつきました。隠された層のニューロンの数に関して、人々は(例えば)(a)入力層と出力層のサイズの間に、(b)(入力+出力)* 2/3に近い値に設定する必要があると推測しています(c)入力レイヤーのサイズの2倍を超えないようにします。

    経験則の問題は、それらが重要な情報を常に考慮しないことです問題がいかに「難しい」かなど) 、トレーニングセットとテストセットのサイズ など。そのため、これらのルールは、「何を試してみようか」の大まかな出発点としてよく使用されます。 -ベスト」アプローチ。

  3. ネットワーク構成を動的に調整するアルゴリズムを使用します。Cascade Correlation のようなアルゴリズムは、最小のネットワークから開始し、その後、非表示のノードを追加しますトレーニング。これにより、実験的なセットアップが少し簡単になり、(理論的には)パフォーマンスが向上する可能性があります(誤って不適切な数の非表示ノードを使用しないため).

このテーマについては多くの研究があります。したがって、本当に興味があるなら、読むべきことがたくさんあります。引用を確認してください この要約で 、特に:

102
Nate Kohl

実際には、これは難しくありません(コード化およびトレーニングされた多数のMLPに基づいています)。

教科書の意味では、アーキテクチャを「正しく」取得することは困難です。つまり、アーキテクチャをさらに最適化してもパフォーマンス(解像度)を改善できないようにネットワークアーキテクチャを調整することは困難です。ただし、まれにしかその程度の最適化は必要ありません。

実際には、仕様で要求されるニューラルネットワークの予測精度を満たすか、それを超えるために、ネットワークアーキテクチャで多くの時間を費やす必要はほとんどありません。これが当てはまる3つの理由:

  • ほとんどのパラメータネットワークアーキテクチャの指定に必要are fixe dデータモデルを決定したら(入力ベクトルの特徴の数、目的の応答変数が数値またはカテゴリ、後者の場合は、選択した一意のクラスラベルの数);

  • 実際に調整可能な残りのいくつかのアーキテクチャパラメータは、ほぼ常に(私の経験では100%)高度に制約これらの固定アーキテクチャパラメータによって、つまり、これらのパラメータの値は厳しく制限されています最大値と最小値。そして

  • トレーニングを開始する前に最適なアーキテクチャを決定する必要はありません。実際、ニューラルネットワークコードには、トレーニング中にネットワークアーキテクチャをプログラムで調整する小さなモジュールを含めることが非常に一般的です(通常、重み値がゼロに近づくノードを削除することにより"プルーニング。")

enter image description here

上記の表によると、ニューラルネットワークのアーキテクチャは、sixパラメーター(内部の6つのセルグリッド)。それらのうちの2つ(入力層と出力層の層タイプの数)は常に1つであり、ニューラルネットワークには単一の入力層と単一の出力層があります。 NNには、少なくとも1つの入力層と1つの出力層が必要です。第二に、これらの2つの層のそれぞれを構成するノードの数は固定です-入力層のサイズによって、入力ベクトルのサイズによって-すなわち、入力層のノードの数は、入力ベクトルの長さに等しくなります(実際にはほとんどの場合、もう1つのニューロンがbias node)として入力レイヤーに追加されます。

同様に、出力層のサイズは応答変数(数値応答変数の単一ノード、および(応答変数がクラスラベルの場合、softmaxが使用されると仮定すると、出力層のノードの数は単に一意の数と等しい)クラスラベル)。

just twoパラメータがすべて自由裁量です-隠れ層の数とそれらの層のそれぞれを構成するノードの数。

非表示レイヤーの数

データが線形に分離可能な場合(NNのコーディングを開始するまでによく知っています)、隠しレイヤーはまったく必要ありません。 (実際にそうである場合、この問題にNNを使用しません。より単純な線形分類器を選択します)。これらの最初の-隠れ層の数-は、ほとんど常に1です。この推定の裏には多くの経験的重みがあります。実際には、1つの隠れ層では解決できない問題はほとんどなく、別の隠れ層を追加することで解決できます。同様に、追加の隠れ層を追加することによるパフォーマンスの違いは一致しています。2番目(または3番目など)の隠れ層でパフォーマンスが向上する状況はごくわずかです。大部分の問題には1つの隠れ層で十分です。

あなたの質問では、何らかの理由で試行錯誤して最適なネットワークアーキテクチャを見つけることができないと述べました。 (試行錯誤を使用せずに)NN構成を調整する別の方法は、「 プルーニング 」です。このテクニックの要点は、トレーニング中にネットワークからノードを削除することです。これらのノードは、ネットワークから削除してもネットワークパフォーマンス(データの解像度)に顕著な影響を与えません。 (正式なプルーニング手法を使用しなくても、トレーニング後にウェイトマトリックスを調べることにより、重要ではないノードの大まかなアイデアを得ることができます。ゼロに非常に近いウェイトを探します-ウェイトの両端にあるノードは明らかに、トレーニング中にプルーニングアルゴリズムを使用する場合は、過剰な(つまり「プルーナブル」)ノードを持つ可能性が高いネットワーク構成で開始すること、つまり、ネットワークアーキテクチャを決定するときに、プルーニングステップを追加すると、より多くのニューロンの側でエラーが発生します。

別の言い方をすれば、トレーニング中にネットワークにプルーニングアルゴリズムを適用することにより、先験的な理論では得られない可能性のある最適化されたネットワーク構成にはるかに近づけることができます。

非表示レイヤーを構成するノードの数

しかし、隠れ層を構成するノードの数はどうでしょうか?この値には、多少の制約がありません。つまり、入力レイヤーのサイズよりも小さい場合も大きい場合もあります。それを超えて、おそらくご存知のように、NNの隠しレイヤーの構成の問題に関する解説が山ほどあります(その解説の優れた要約については、有名な NN FAQ を参照してください)。経験的に導き出された経験則は数多くありますが、これらのうち、最も一般的に依存されるのは非表示層のサイズは入力層と出力層の間にあります =。 「 Javaのニューラルネットワークの紹介 」の著者であるジェフヒートンは、リンク先のページに列挙されている、さらにいくつかを提供しています。同様に、アプリケーション指向のニューラルネットワークの文献をスキャンすると、隠されたレイヤーサイズが通常between入力および出力レイヤーサイズであることがほぼ確実に明らかになります。しかし、betweenは中間を意味するわけではありません。実際、通常、非表示レイヤーのサイズを入力ベクトルのサイズに近い値に設定することをお勧めします。その理由は、隠れ層が小さすぎると、ネットワークの収束が困難になる可能性があるためです。初期構成では、サイズが大きいほどエラーが発生します。隠れ層が大きいと、ネットワークの容量が大きくなり、小さい隠れ層に比べて収束しやすくなります。実際、この正当化は、入力レイヤーの隠しレイヤーサイズより大きい(より多くのノード)を推奨するためによく使用されます。つまり、迅速な収束を促進する初期アーキテクチャから始めます。 「過剰な」ノード(非常に低いウェイト値で非表示レイヤーのノードを識別し、リファクタリングされたネットワークからそれらを削除します)。

43
doug

ノードが1つしかない隠れ層が1つしかない商用ソフトウェアにMLPを使用しました。入力ノードと出力ノードが固定されているため、非表示レイヤーの数を変更し、達成された一般化で遊ぶしかありませんでした。隠されたレイヤーの数を変更することで、1つの隠されたレイヤーと1つのノードだけで達成していることに大きな違いはありませんでした。 1つのノードで1つの非表示レイヤーを使用しました。それは非常にうまく機能し、また、ソフトウェアの前提では計算の削減も非常に魅力的でした。

0
Pooja Narayan