回答:
各層のニューロン数と完全に接続されたネットワークの層数の考慮は、問題の特徴空間に依存します。描写するために2次元のケースで何が起こるかを説明するために、2次元空間を使用します。私は科学者の作品からの画像を使用しました。CNN
私のような他のネットを理解するために、ここを見ることをお勧めします。
ニューロンが1つしかないと仮定します。この場合、ネットワークのパラメーターを学習すると、空間を2つの個別のクラスに分離できる線形判定境界が得られます。
次のデータを分離するように求められたとします。d1
どちらが上側の決定境界を指定し、何らかの形でAND
入力データがその左側にあるのか右側にあるのかを判断する操作を行う必要があります。Line d2
はAND
、入力データが上限かどうかを調べる別の操作を実行してd2
います。この場合、d1
入力は、入力を分類するには、行の左側にあるかどうかを理解しようとしているサークル、また、d2
入力として入力を分類するためのラインの右側にあるかどうかを把握しようとしているサークル。今、私たちは別のものが必要ですAND
パラメータをトレーニングした後に構築される2行の結果をまとめる操作。入力がの左側d1
と右側にあるd2
場合、円として分類する必要があります。
ここで、次の問題があり、クラスを分離するように求められたとします。この場合、正当化は上記のものとまったく同じです。
次のデータの場合:
決定境界は凸ではなく、以前の境界よりも複雑です。最初に、内側の円を見つけるサブネットが必要です。次に、長方形の内側にある入力が円形ではなく、外側にある場合は円形であると決定する内側の長方形決定境界を見つける別のサブネットが必要です。これらの後、結果をまとめて、入力データがより大きな長方形の内側で内側の長方形の外側にある場合、それをcircleとして分類する必要があります。このためには別のAND
操作が必要です。ネットワークは次のようになります。
次の丸で囲まれた決定境界を見つけるように求められたとします。
この場合、ネットワークは次のネットワークのようになりますが、最初の隠れ層にはるかに多くのニューロンがあります。
この質問に対する正確な答えはまだ存在しないため、非常に良い質問です。これは活発な研究分野です。
最終的に、ネットワークのアーキテクチャはデータの次元に関連しています。ニューラルネットワークは普遍的な近似器であるため、ネットワークが十分に大きい限り、データに適合することができます。
どのアーキテクチャが最適かを真に知る唯一の方法は、それらすべてを試してから、最適なアーキテクチャを選択することです。しかし、もちろん、ニューラルネットワークでは、各モデルのトレーニングにかなりの時間がかかるため、非常に困難です。一部の人々が行うことは、最初に「大きすぎる」モデルを意図的に訓練し、次にネットワークにあまり寄与しない重みを削除することによってそれを剪定することです。
ネットワークが大きすぎる場合は、過剰に収まるか、収束に苦労する可能性があります。直感的には、ネットワークがデータを必要以上に複雑な方法で説明しようとしていることがわかります。これは、10ページのエッセイで1つの文で答えられる質問に答えようとしているようなものです。このような長い答えを構成するのは難しいかもしれませんし、多くの不必要な事実が投げ込まれるかもしれません。(この質問を参照してください)
一方、ネットワークが小さすぎる場合は、データが不足します。10ページのエッセイを書くべきだったときに、1つの文で答えるようなものです。あなたの答えは良いかもしれませんが、あなたは関連する事実のいくつかを見逃しているでしょう。
データの次元がわかっている場合、ネットワークが十分に大きいかどうかを確認できます。データの次元を推定するには、そのランクを計算してみてください。これは、人々がネットワークのサイズを推定しようとする方法の中心的なアイデアです。
ただし、それほど単純ではありません。確かに、ネットワークを64次元にする必要がある場合、サイズ64の単一の隠れ層を構築しますか、サイズ8の2つの層を構築しますか?ここでは、どちらの場合に何が起こるかについていくつかの直観をお伝えします。
深くなるということは、隠れ層を追加することを意味します。それは、ネットワークがより複雑な機能を計算できるようにすることです。たとえば、畳み込みニューラルネットワークでは、最初のいくつかのレイヤーがエッジなどの「低レベル」機能を表し、最後のレイヤーが顔、体の部分などの「高レベル」機能を表すことがよく示されています。
データが非常に構造化されておらず(画像など)、有用な情報を抽出する前にかなり処理する必要がある場合、通常は深くする必要があります。
より深くなるとは、より複雑な機能を作成することを意味し、「より広く」なるとは、単にこれらの機能をさらに作成することを意味します。問題は非常に単純な機能で説明できるかもしれませんが、多くの機能が必要です。通常、複雑なフィーチャは単純なフィーチャよりも多くの情報を伝達するという単純な理由により、ネットワークの終わりに向かって層が狭くなります。したがって、それほど多くは必要ありません。
短い答え:データの次元とアプリケーションのタイプに非常に関連しています。
適切な数のレイヤーを選択することは、練習をして初めて達成できます。この質問に対する一般的な答えはまだありません。ネットワークアーキテクチャを選択することにより、可能性の空間(仮説空間)を特定の一連のテンソル操作に制限し、入力データを出力データにマッピングします。DeepNNでは、各レイヤーは前のレイヤーの出力にある情報にのみアクセスできます。ある層が手近な問題に関連する何らかの情報を落とした場合、この情報は後の層で回復することはできません。これは通常、「情報ボトルネック」と呼ばれます。
情報のボトルネックは両刃の剣です。
1)少数のレイヤー/ニューロンを使用すると、モデルはデータのいくつかの有用な表現/機能を学習し、重要なものを失います。これは、中間レイヤーの容量が非常に限られているためです(不足)。
2)多数のレイヤー/ニューロンを使用すると、モデルは学習データに固有の表現/機能を学習しすぎて、実世界およびトレーニングセット外のデータに一般化しない(オーバーフィット))。
例やその他の発見に役立つリンク:
[1] https://livebook.manning.com#!/ book / deep-learning-with-python / chapter-3 / point-1130-232-232-0
[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/
2年前からニューラルネットワークを使用しているため、これは新しいシステムをモデル化するたびに常に抱えている問題です。私が見つけた最良のアプローチは次のとおりです。
一般的なアプローチは、さまざまなアーキテクチャを試し、結果を比較し、最適な構成を取ることです。経験は、最初のアーキテクチャの推測でより直感的になります。
前の答えに加えて、トレーニングの一環として、ニューラルネットワークのトポロジが内生的に現れるアプローチがあります。最も顕著なのは、隠れた層のない基本的なネットワークから始めて、遺伝的アルゴリズムを使用してネットワーク構造を「複雑化する」Neuroevolution of Augmenting Topologies(NEAT)です。NEATは多くのMLフレームワークに実装されています。マリオを学習するための実装に関する非常にアクセスしやすい記事を次に示します。CrAIg:マリオを学習するためのニューラルネットワークの使用