ニューラルネットワークは「汎用関数近似器」であると言われたことがあるかもしれません。本質的に、サイベンコの定理によれば、実数を実数にマッピングする関数については、シグモイド活性化関数を持つニューラルネットワークで近似することができます。実際、ニューラルネットワークを使用すると、チューリングマシンで計算可能な任意の関数(つまり、計算するアルゴリズムを記述できるもの)を計算できることがわかります。残念ながら、これらの証明は、ニューロンと重みのいくつかの有限構成については、任意の関数を近似できるとのみ述べています。
理論はすばらしく巧妙ですが、あなたの質問は、ある関数の計算をニューロンと重みのセットに実際にエンコードする方法に沿っているようです。説明のために、単純な例-排他的ORを考えてみましょう。XORは2つの入力を受け取り、それらの入力を渡します。入力の1つだけがアクティブ化されると、出力ノードがアクティブ化されます。両方の入力がアクティブ化されているか、アクティブ化されていない場合、出力ノードはアクティブ化されません。
3つの非表示ノードが異なることを行うことに注意してください。左端と右端のノードは、入力ノードのアクティベーションを尊重するだけで通過します。中間のニューロンは2つの入力を受け取り、両方がオンの場合は何らかの方法でそれらを無効にします。入力のこの巧妙な結合と再結合は、基本的にニューラルネットワークでの作業の実行方法です。
明らかに、より複雑な関数の場合、結合と再結合はより巧妙で複雑な方法で実行する必要がありますが、これは本質的に低レベルで行われることです。クレイジーなことは、これが計算可能な関数を計算するために本当に必要なすべてであるということです!繰り返しますが、チューリングマシンも一見シンプルになります...
問題は、任意の関数を計算するニューラルネットワークを魔法のように生成する方法が実際にはないことです。証明は、それを実行できるネットワークがあることを示しています。ニューラルネットワークをトレーニングするとき、単に非常に近いネットワークを見つけようとしています。
画像認識のコンテキストでは、ネットワークへのエンコードパターンを想像できます。たとえば、番号「1」を認識するために、ピクセルの列がほとんどまたはすべてアクティブになり、隣接するピクセルがオフになることを期待する非表示のノードを想像できます。この隠されたノードは、その特定の列の直線を認識するのにかなり適している可能性があります。これらを十分に組み合わせて、すぐに画像の十分な場所でそれを行うノードの束を手に入れ、ネットワークを表示すると、十分な直線の非表示ノードがアクティブになり、「1」を示します。問題は、ネットワークを一般化して、さまざまな入力セットを認識できるようにすることです。
ニューラルネットワークが計算を実行する方法の概念を多かれ少なかれ理解するのに役立つことを願っています。ただし、ニューラルネットワークについてかなり重要な点にぶつかった:一般に、ネットワークが特定の出力を吐き出す理由を理解することは一般的によくない。特に画像認識のようなものについては、ネットワークは一般に人間が機械の各可動部分を理解するのに苦労するのに十分な大きさです。さらに問題を複雑にしているのは、一般に、ほとんどのニューラルネットワークには、実際にネットワークがデータについて学習できる小さな機能ごとに1つの隠れノードがないことです。代わりに、数字の「1」を分類するために直線のようなものを検出することは、多くの隠されたノード上で非集中的な方法で行われます。その他のアルゴリズム、
もっと読みたい場合は、ai junkieでこのチュートリアルを読むことを強くお勧めします。ニューラルネットワークの仕組みの基本を説明し、ニューラルネットワークを使用してタンクを目標に向かって動かす簡単なコード例を示します。ただし、このチュートリアルでは、ニューラルネットワークをトレーニングする最も一般的な方法である逆伝播については説明しません。代わりに、単純な遺伝的アルゴリズムを使用します。彼が遺伝学について話し始めたら、読むのをやめることができると思います...