フィードフォワードニューラルネットワークで隠れ層とノードの数を選択する方法は?


541

フィードフォワードニューラルネットワークで、レイヤーの数と各レイヤーのノードの数を選択するための標準的で受け入れられている方法はありますか?ニューラルネットワークを構築する自動化された方法に興味があります。


4
すべての素晴らしい答えの中で、私はこの論文が参考になったdstath.users.uth.gr/papers/IJRS2009_Stathakis.pdf
Debpriya Seal

ない@DebpriyaSeal という便利なものの...
DarkCygnus

回答:


468

私はこの質問が回答されたことに気づきましたが、現存の回答が、質問の主題に一般的に関連するリンクを指すことを超えて、質問に本当に関与するとは思いません。特に、リンクはプログラムによるネットワーク構成の1つの手法を説明していますが、これはネットワーク構成の「[a]標準および一般的な方法」ではありません。

明確なルールの小さなセットに従うことにより、有能なネットワークアーキテクチャ(つまり、ニューロン層の数とタイプ、および各層を構成するニューロンの数)をプログラムで設定できます。このスキーマに従えば、これにより適切なアーキテクチャが得られますが、おそらく最適なアーキテクチャではありません。

ただし、このネットワークが初期化されると、いくつかの補助アルゴリズムを使用して、トレーニング中に構成を繰り返し調整できます。これらのファミリの1つは、一定数のトレーニングエポックの後、重みベクトルの(小さな)値に基づいてノードをプルーニングすることによって機能します。

したがって、すべてのNNには、inputhidden、およびoutputの 3つのタイプのレイヤーがあります


したがって、NNアーキテクチャを作成するということは、各タイプのレイヤー数とこれらの各レイヤーのノード数の値を考え出すことを意味します。

入力レイヤー

シンプル-すべてのNNにそれらの1つがあります-私が知っている例外はありません。

この層を構成するニューロンの数に関しては、トレーニングデータの形状がわかれば、このパラメーターは完全かつ一意に決定されます。具体的には、そのレイヤーを構成するニューロンの数は、データ内のフィーチャ(列)の数に等しくなります。一部のNN構成では、バイアス用語にノードを1つ追加します。


出力レイヤー

入力層と同様に、すべてのNNには1つの出力層があります。サイズ(ニューロンの数)の決定は簡単です。選択したモデル構成によって完全に決定されます。

NNはマシンモードまたはリグレッションモードで実行されていますか(統計でも使用されている用語に異なる意味を割り当てるというML規則は非常に混乱しています)。マシンモード:クラスラベル(「プレミアムアカウント」/「基本アカウント」など)を返します。回帰モードは値(例、価格)を返します。

NNがリグレッサーの場合、出力層には単一のノードがあります。

NNが分類器である場合、softmaxが使用されない限り単一ノードも含まれます。その場合、出力層にはモデルのクラスラベルごとに1つのノードがあります。

隠しレイヤー

したがって、これらの少数のルールは、入力レイヤーと出力レイヤーの両方のレイヤー数とサイズ(ニューロン/レイヤー)を設定します。それは隠されたレイヤーを残します。

隠れ層はいくつありますか?データが線形に分離可能な場合(NNのコーディングを開始するまでによく知っています)、隠しレイヤーはまったく必要ありません。もちろん、データを解決するためにNNも必要ありませんが、それでも仕事はできます。

それを超えて、おそらくご存知のように、NNの隠れ層構成の問題に関する解説が山ほどあります(その解説の優れた要約については、非常に徹底的で洞察に満ちたNN FAQを参照してください)。コンセンサスが存在するこの主題内の1つの問題は、追加の隠しレイヤーを追加することによるパフォーマンスの違いです。大部分の問題には1つの隠れ層で十分です。

では、隠れ層のサイズはどうですか?ニューロンはいくつですか?経験的に導き出された経験則がいくつかありますが、最も一般的に依存されるのは、「隠れ層の最適なサイズは通常、入力層サイズと出力層サイズの間です」です。Javaのニューラルネットワーク紹介の著者であるジェフヒートンは、さらにいくつかを提供しています。

要するに、ほとんどの問題について、たった2つのルールを使用して非表示レイヤー構成を設定することで、おそらく適切なパフォーマンスを得ることができます(2番目の最適化ステップがなくても)。(ii)その層のニューロンの数は、入力層と出力層のニューロンの平均です。


ネットワーク構成の最適化

剪定ネットワークサイズ(レイヤーではなくノードによる)をトリミングして、計算パフォーマンスと、場合によっては解像度パフォーマンスを向上させる一連の手法について説明します。これらの手法の要点は、トレーニング中にネットワークからノードを削除することです。これらのノードは、ネットワークから削除してもネットワークのパフォーマンス(データの解像度)に顕著な影響を与えません。(正式なプルーニング手法を使用しなくても、トレーニング後にウェイトマトリックスを見ると、重要ではないノードの大まかなアイデアを得ることができます。ウェイトがゼロに非常に近いことを確認してください。多くの場合、ウェイトの両端のノードです明らかに、トレーニング中にプルーニングアルゴリズムを使用する場合は、過剰な(つまり「プルーナブル」)ノードを持つ可能性が高いネットワーク構成から始めます。つまり、

別の言い方をすれば、トレーニング中にネットワークにプルーニングアルゴリズムを適用することにより、最適なネットワーク構成にアプローチできます。単一の「事前」アルゴリズム(遺伝的アルゴリズムベースのアルゴリズムなど)でそれができるかどうかはわかりませんが、現時点では、この2段階の最適化がより一般的であることを知っています。


31
あなたは、大部分の問題に必要な隠れ層は1つだけだと述べています。おそらく、より多くの隠れ層を持つNNのトレーニングは非常に難しい(方法を知りたい場合は、UofトロントのHintonのグループの出版物「ディープラーニング」を確認してください)層は、ニューラルネットワークによって「解けない」と見なされます。
バイエルジ

13
あなたは書き込みNNが回帰であれば、出力層は、単一のノードを持っています。。なぜ単一のノードだけなのですか?複数の連続出力ができないのはなぜですか?
ヘリット・

5
@gerritターゲット出力がベクトル値である場合、間違いなく複数の連続出力を持つことができます。ただし、ベクトル値の出力に適切な損失関数を定義することは、1つの出力を使用する場合よりも少し難しい場合があります。
lmjohns3

5
私はそれがこれよりも反対だと思った:NNは分類器がある場合はソフトマックスは、出力層は、モデル内のクラスラベルごとに一つのノードを有している場合に使用されていない限り、それはまた、単一のノードを持っています。
viyps 14年

2
@dougこの素晴らしい答えをありがとう。これにより、ANNを3つの隠れ層から1に減らし、適切な数の隠れニューロンを設定することで同じ分類精度を達成できました...合計した入力と出力の平均を使用しました。ありがとう!
rayryeng

129

@dougの答えは私にとってはうまくいきました。教師付き学習の問題に役立つもう1つの経験則があります。通常、ニューロンの数を下に保つと、過剰適合を防ぐことができます。

Nh=Ns(α(Ni+No))

Ni
No
Ns
α

alpha

Ns(Ni+No)α

自動化された手順では、アルファ2(モデルの2倍のトレーニングデータの自由度)で開始し、トレーニングデータセットのエラー(損失)がモデルの2テストデータセット。


7
この式は非常に興味深く有用です。この式の参照はありますか?もっと役立つでしょう。
プラシャンス

2
@prashanth上記のNNデザインテキストでいくつかのアサーションと式を組み合わせました。しかし、私が示す形式で明示的に呼び出されているとは思わない。そして、私のバージョンは、多くの単純化された仮定を持つ非常に粗雑な近似です。だからYMMV。
ホブ

1
最初に、前のコメントでテストセットの代わりにトレーニングセットを書きたいと思いました。「データセットから十分な特徴(あなたが言及したDOF)を学習するには、少なくともその数のニューロンが必要」と読むのであれば、この式は理にかなっているかもしれません。データセットの特徴が母集団を代表しており、モデルがどれほどうまく一般化できるかは、別の質問かもしれません(しかし重要な質問です)。
コンサイク

3
Nh(Ni+No)

2
@mateus、おそらく複数の層の場合のやや優れた経験則は、これに対するN_h(層ごとの隠れニューロンの平均数)解N_s = (N_i + N_o) * N_h ^ N_hidden_layersです。しかし、私はまだこの式を使用しません。他の正則化アプローチを実装する予定がない場合にのみ、非常に基本的な問題(おもちゃの問題)のためです。
ホブ

60

Javaのためのニューラルネットワーク入門 (第2版)によるジェフ・ヒートン -で自由に利用できるプレビューGoogleブックスと以前に著者のウェブサイト

非表示レイヤーの数

隠れ層に関しては、実際に2つの決定を行う必要があります。ニューラルネットワークに実際に持つ隠れ層の数と、これらの各層にいくつのニューロンが含まれるかです。最初に、ニューラルネットワークで使用する隠れ層の数を決定する方法を調べます。

2つの隠れ層を必要とする問題はめったに発生しません。ただし、2つの隠れ層を持つニューラルネットワークは、あらゆる種類の形状の関数を表すことができます。現在、3つ以上の隠れ層を持つニューラルネットワークを使用する理論的な理由はありません。実際、多くの実際的な問題では、複数の隠れ層を使用する理由はありません。表5.1は、さまざまな隠れ層を持つニューラルネットワークアーキテクチャの機能をまとめたものです。

表5.1:隠しレイヤーの数の決定

| 隠しレイヤーの数| 結果|

 0-線形の分離可能な関数または決定のみを表現できます。

 1-連続マッピングを含む関数を近似できます
ある有限空間から別の有限空間へ。

 2-任意の精度で任意の決定境界を表すことができます
合理的な活性化関数で
あらゆる精度へのマッピング。

隠れニューロン層の数を決定することは、問題のほんの一部です。また、これらの各隠れ層に含まれるニューロンの数も決定する必要があります。このプロセスについては、次のセクションで説明します。

隠れ層のニューロン数

隠れ層のニューロン数を決定することは、ニューラルネットワークアーキテクチャ全体を決定する上で非常に重要な部分です。これらのレイヤーは外部環境と直接対話しませんが、最終出力に大きな影響を及ぼします。隠れ層の数とこれらの隠れ層のそれぞれのニューロンの数の両方を慎重に検討する必要があります。

隠れ層で使用するニューロンが少なすぎると、アンダーフィットと呼ばれるものが生じます。複雑なデータセットの信号を適切に検出するには、隠れ層のニューロンが少なすぎる場合にアンダーフィットが発生します。

隠れ層であまりにも多くのニューロンを使用すると、いくつかの問題が発生する可能性があります。まず、隠れ層のニューロンが多すぎると、過剰適合が発生する可能性があります。過剰適合は、ニューラルネットワークの情報処理能力が非常に大きいため、トレーニングセットに含まれる限られた量の情報では、隠れ層のすべてのニューロンをトレーニングするには不十分です。2番目の問題は、トレーニングデータが十分であっても発生する可能性があります。隠れ層のニューロンが異常に多いと、ネットワークのトレーニングにかかる​​時間が長くなる可能性があります。トレーニング時間は、ニューラルネットワークを適切にトレーニングすることが不可能になるまで増加する可能性があります。明らかに、隠れ層のニューロンの数が多すぎても少なすぎても、ある程度の妥協点に到達する必要があります。

次のように、隠れ層で使用するニューロンの正しい数を決定するための経験則の多くの方法があります。

  • 隠れニューロンの数は、入力層のサイズと出力層のサイズの間でなければなりません。
  • 隠れニューロンの数は、入力層のサイズの2/3に出力層のサイズを加えたものでなければなりません。
  • 隠れニューロンの数は、入力層のサイズの2倍未満でなければなりません。

これらの3つのルールは、検討するための出発点となります。最終的に、ニューラルネットワークのアーキテクチャの選択は試行錯誤に委ねられます。しかし、試行錯誤とはどういう意味ですか?ランダムな数のレイヤーとニューロンをネットワークに投入し始めたくありません。そのためには非常に時間がかかります。第8章「ニューラルネットワークのプルーニング」では、ニューラルネットワークの最適な構造を決定するさまざまな方法について説明します。


私はまた、researchgate.net見つけ回答から次のスニペットが好きです。

ステフェンBピーターセン・オールボー大学

[...]

ノードの数を一般化するネットワークの能力を確保するために、可能な限り低く保つ必要があります。過剰なノードがある場合、ネットワークはメモリバンクになり、トレーニングセットを完全に呼び出すことができますが、トレーニングセットの一部ではないサンプルではうまく機能しません。


ステフェンBピーターセンの引用の出典を知っていますか?
セバスチャンニールセン

すみません。検索してみましたが、見つかりませんでした...この記事はウェブから削除されたと思います。たぶん、彼に直接連絡できますか?
jj_

トレーニングセットのサイズを考慮する必要はありませんか?〜300,000個の一意のサンプル(車の価格)を含む表形式のデータセットがあります。入力層には89個のノードがあります。正則化なしのネットワークをトレーニングし、単一の隠れ層に89ノードしかない場合、数エポック後にトレーニング損失がプラトーになります。RMSEは約$ 1,800で横ばいになります(この回帰問題では、単一の出力ノードが価格です)。
ロドリゴシルベイラ

:私はステファンBピーターソンによる引用の源はここにあったと思うresearchgate.net/post/...
TripleAntigen

43

私は現在、これについての実証的研究に取り組んでいます(HPC施設でのプロセッサー世紀のシミュレーションのアプローチ!)。私のアドバイスは、「大規模な」ネットワークと正則化を使用することです。正則化を使用する場合、ネットワークアーキテクチャの重要性は低くなります(キャプチャしたい基になる関数を表すのに十分な大きさであれば)が、正則化を調整する必要がありますパラメータを適切に。

アーキテクチャの選択に関する問題の1つは、それがモデルの複雑さを連続的ではなく離散的に制御するため、特に理想的な複雑さが低い場合には、やや鈍い道具になる可能性があることです。

ただし、これはすべて「無料昼食なし」の定理に従います。ほとんどの場合、正則化は効果的ですが、アーキテクチャの選択がよりうまく機能する場合が常にあり、それが当面の問題に当てはまるかどうかを調べる唯一の方法です両方のアプローチを試し、相互検証することです。

自動ニューラルネットワークビルダーを構築する場合、ラドフォードニールのハイブリッドモンテカルロ(HMC)サンプリングベースのベイジアンアプローチを使用し、単一のネットワークの重みを最適化するのではなく、大規模なネットワークを使用して重みで統合します。しかし、それは計算コストが高く、少し「黒魔術」ですが、ニール教授が達成した結果は、それが価値があることを示唆しています!


「現在、これに関する実証研究に取り組んでいます」-アップデートはありますか?
マーティントーマ

2
いいえ、大丈夫です、私はまだ大規模な(っぽい)ネットワークと正則化をお勧めしますが、特効薬はありません、いくつかの問題は正則化を必要としませんが、いくつかのデータセットは正則化と同様に隠れたレイヤーサイズの調整を必要とします。悲しいことに、校閲者はこの論文が気に入らなかった:-(
Dikran Marsupial

17

私の知る限り、レイヤーの数と各レイヤーのニューロンを自動的に選択する方法はありません。ただし、EANN(Evolutionary Artificial Neural Networks、遺伝的アルゴリズムを使用してトポロジを進化させた)など、トポロジを自動的に構築できるネットワークがあります。

いくつかのアプローチがありますが、良い結果をもたらすと思われる多かれ少なかれモダンなアプローチは、NEAT(拡張トポロジーのニューロ進化)でした。



6

グローバルハイパーパラメーター検索を使用してニューラルネットワークを構築する自動化された方法:

入力および出力レイヤーは固定サイズです。

変化する可能性のあるもの:

  • 層の数
  • 各層のニューロンの数
  • レイヤーのタイプ

この離散的最適化問題には、コスト関数としてネットワークのサンプル誤差を使用して、複数の方法を使用できます。

  • 1)パラメーター空間でのグリッド/ランダム検索、少し良い位置から開始
  • 2)最適なアーキテクチャを見つけるために使用できる多くの方法。(はい、時間がかかります)。
  • 3)いくつかの正則化を行い、すすぎ、繰り返します。

6

申し訳ありませんが、まだコメントを投稿できませんのでご容赦ください。とにかく、私はこのディスカッションスレッドにぶつかり、最近見た論文を思い出しました。ここに参加している人々にとって興味があるかもしれないと思う:

AdaNet:人工ニューラルネットワークの適応構造学習

コリーナ・コルテス、ザビエル・ゴンサルボ、ヴィタリー・クズネツォフ、メーリャル・モーリ、スコット・ヤン; 第34回機械学習に関する国際会議、PMLR 70:874-883、2017年の議事録。

要約人工ニューラルネットワークを分析および学習するための新しいフレームワークを提示します。私たちのアプローチは、ネットワークの構造とその重みの両方を同時に適応的に学習します。この方法論は、強力なデータ依存の理論的学習保証に基づいており、最終的なネットワークアーキテクチャが特定の問題の複雑さに確実に適応するようになっています。


5

私は修士論文の第3章にトポロジー学習の多くの方法をリストしました。大きなカテゴリは次のとおりです。

  • 成長するアプローチ
  • 剪定アプローチ
  • 遺伝的アプローチ
  • 強化学習
  • 畳み込みニューラルファブリック

3

あまり一般的ではないが、非常に効果的な方法を提案したいと思います。

基本的に、潜在的なオプションの小さなサブセット(レイヤーごとのランダムな数とノード)を試す「遺伝的アルゴリズム」と呼ばれるアルゴリズムのセットを活用できます。次に、このオプションの集団を、生物が進化するように1つまたは複数の親を組み合わせたり変異させたりすることで、子を作成する「親」として扱います。最高の子供たちといくつかのランダムなOKの子供たちは、世代ごとに保持され、世代を超えて、適者は生き残ります。

パラメーターが100個以下の場合(レイヤー数、レイヤーの種類、レイヤーごとのニューロン数の選択など)、この方法は非常に効果的です。各世代に多数の潜在的なネットワークアーキテクチャを作成し、学習曲線を推定できるまで部分的にトレーニングすることで使用します(通常、多くのパラメーターに応じて100〜10kのミニバッチ)。数世代後、トレインと検証のエラー率が大幅に異なる(オーバーフィッティング)開始点を、子を選択する目的関数として検討することができます。結論にすばやく到達するために最終モデルを選択するまで、データの非常に小さなサブセット(10〜20%)を使用することをお勧めします。また、ネットワークの初期化に単一のシードを使用して、結果を適切に比較します。

10〜50世代は、まともなサイズのネットワークで素晴らしい結果をもたらすはずです。


もう1つの非常に興味深い方法は、ベイジアン最適化です。これは、比較的少数のパラメーターに対する非常に効果的なブラックボックス最適化手法でもあります。arxiv.org/pdf/1206.2944.pdf
ダン・エレズ

2

隠しレイヤーの数とそれらが達成できること:

0-線形の分離可能な関数または決定のみを表現できます。

1-ある有限空間から別の有限空間への連続マッピングを含む関数を近似できます。

2-合理的な活性化関数を使用して、任意の決定境界を任意の精度で表現でき、スムーズなマッピングを精度で近似できます。

2つ以上-追加のレイヤーは、レイヤーレイヤーの複雑な表現(自動フィーチャエンジニアリングの一種)を学習できます。


8
ソースをお願いします。– レビュアー
ジム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.