多くの人が「あなたのためにそれをググってみよう」へのリンクで応答すると確信しているので、私は理解しようとしたと言いたいこれは理解できないのでご容赦ください。しかし、ニューラルネットワークの実際の実装が実際にどのように機能するのか理解できません。
入力レイヤーとデータの正規化方法を理解し、バイアスユニットも理解していますが、隠れレイヤーに関しては、そのレイヤーでの実際の計算と、それがどのようにマッピングされるかを理解しています。出力は少し曇っています。隠れ層に疑問符が付いた図、AND / OR / XORのようなブール関数、活性化関数、すべての隠れユニットにマップされる入力ノード、およびそれぞれ少数の隠れユニットにのみマップされる入力ノードなどを見てきました。実用的な側面についていくつか質問があります。もちろん、子供に説明するようなニューラルネットワークプロセス全体の簡単な説明は素晴らしいでしょう。
隠れ層でどのような計算が行われるか?
これらの計算は出力レイヤーにどのようにマッピングされますか?
出力レイヤーはどのように機能しますか?非表示レイヤーからのデータを非正規化しますか?
なぜ入力レイヤーの一部のレイヤーは非表示レイヤーに接続されていますか、一部は接続されていませんか?
コメント
- このあたりの人々は素晴らしいです、私は見たことがありません「あなたのためにそれをググってみよう」という答えですが、最初は基本的な質問のように思われたものに対する驚くほど徹底的で洞察に満ちた答えがたくさんあります。残念ながら、私はあなたを助けることができませんw
- コメントと投票Gaelに感謝します、私は’おそらく少しうんざりしていますSOコミュニティは、これらの人々がどのように得ることができるかを知っています:)質問を編集/終了してバッジやポイントを獲得しようとするのではなく、ここでコラボレーションの精神をもっと見ることができてうれしいです。
- 私はそうではありません特にニューラルネットワークの専門家ですが、私はそれらのアプリケーションと方法に関与しています。私のおそらくあまり役に立たない答えは、非表示の特定の計算は、あなたがいる’コスト関数’に依存するということです。あなたの出力、すなわちあなたが達成しようとすることを押し付ける。たとえば、入力要素をクラスター化されたセットにグループ化する場合は、非表示レイヤーの要素間の距離を計算します。これは、プロセスがこのレイヤーを「離れる’」を許可するエラー基準を満たすまで、このレイヤー内でさまざまな反復と最適化サイクルを経る可能性があります。
回答
3文バージョン:
-
各レイヤーは、前のレイヤーに必要な関数を適用できます(通常、線形変換とそれに続く押しつぶし非線形性)。
-
非表示レイヤー」ジョブは、入力を出力レイヤーが使用できるものに変換することです。
-
出力レイヤー隠しレイヤーのアクティベーションを、出力に必要なスケールに変換します。
Like you “re 5:
写真にバスがあるかどうかをコンピューターに知らせたい場合は、適切なツールがあれば、コンピューターの時間が楽になるかもしれません。
つまり、バス検出器は、ホイール検出器(車両であることがわかりやすい)とボックス検出器(バスが大きな箱のような形をしているため)とサイズ検出器(わかりやすい)で構成されている可能性があります。車には大きすぎます。これらは、隠しレイヤーの3つの要素です。これらは「生の画像の一部ではなく」、バスを識別するために設計したツールです。
これら3つの検出器がすべてオンになっている場合(または「特にアクティブである場合)」、目の前にバスがある可能性が高くなります。
ニューラルネットはusefuです。 lたくさんの検出器を構築し、それらをまとめるための優れたツール(バックプロパゲーションなど)があるためです。
あなたのように “大人
フィードフォワードニューラルネットワークは、一連の関数をデータに適用します。正確な関数は、使用しているニューラルネットワークによって異なります。ほとんどの場合、これらの関数はそれぞれ前の層の線形変換を計算し、続いて非線形性を押しつぶします。関数が他のことを行う場合もあります(例の論理関数の計算など)。 、または画像内の隣接するピクセルの平均化)。したがって、さまざまなレイヤーの役割は、計算される関数によって異なる可能性がありますが、「非常に一般的にしようとします。
入力を呼び出します。ベクトル$ x $、隠れ層アクティベーション$ h $、および出力アクティベーション$ y $。$ x $から$ h $にマップする関数$ f $と、$ h $からマップする別の関数$ g $があります。
したがって、隠れ層のアクティブ化は$ f(x)$であり、ネットワークの出力は$ g(f(x))$です。
1つではなく2つの関数($ f $と$ g $)があるのはなぜですか?
関数ごとの複雑さのレベルが制限されている場合、$ g(f(x))$は、$ f $と$ g $が個別に実行できないことを計算できます。
論理関数の例:
たとえば、$ f $のみを許可する場合$ g $は、「AND」、「OR」、「NAND」などの単純な論理演算子であるため、「XOR」などの他の関数を1つだけで計算することはできません。一方、これらの関数を互いに重ねていく場合は、 「XOR」を計算できます。
第1層の関数:
- 少なくとも1つの要素が「TRUE」(ORを使用)であることを確認します
- すべてが「TRUE」(NANDを使用)ではないことを確認します
第2層関数:
- 第1層の両方の基準が満たされていることを確認します(ANDを使用)
ネットワークの出力はこの2番目の関数の結果。第1層は入力を第2層が使用できるものに変換し、ネットワーク全体がXORを実行できるようにします。
画像の例:
このトークのスライド61 -また単一の画像として利用可能なここ-特定のニューラルネットワークのさまざまな隠れ層が何を探しているかを(視覚化する1つの方法で)示します。
最初のレイヤーは画像内の短いエッジを探します。これらは生のピクセルデータから非常に簡単に見つけることができますが、顔やバスを見ているのか、それともバスを見ているのかを判断するのに、それ自体ではあまり役に立ちません。象。
次のレイヤーがエッジを構成します。一番下の隠れレイヤーのエッジが特定の方法で合わさると、左端の列の中央にある目の検出器の1つがオンになる可能性があります。 。生のピクセルから非常に具体的なものを見つけるのに非常に優れた単一のレイヤーを作成するのは難しいでしょう。目の検出器は、生のピクセルからよりもエッジ検出器から構築する方がはるかに簡単です。
次のレイヤーupは、目検出器と鼻検出器を顔に構成します。つまり、前のレイヤーの目検出器と鼻検出器が正しいパターンでオンになると、これらが点灯します。これらは特定の種類の顔を探すのに非常に適しています。1つ以上の顔が点灯している場合、出力レイヤーは顔が存在することを報告する必要があります。
これは、顔検出器は、目検出器と鼻検出器から簡単に構築できますが、ピクセル強度から構築するのは非常に困難です。
各レイヤーは、生のピクセルからどんどん遠ざかり、最終的な目標(顔検出やバス検出など)に近づきます。
回答その他のさまざまな質問
「入力レイヤーの一部のレイヤーが非表示レイヤーに接続されているのに、接続されていないのはなぜですか?」
ネットワーク内の切断されたノードは、「バイアス」ノードと呼ばれます。そこには「本当に素晴らしい説明ここがあります。簡単な答えは「回帰の切片項のようなものです。
」画像の例の「目検出器」の画像は由来していますか?」
リンクした特定の画像を再確認していませんが、一般的に、これらの視覚化は対応するニューロンの活動を最大化する入力層のピクセルしたがって、ニューロンを目の検出器と考えると、これはニューロンが最も目に似ていると見なす画像です。人々は通常、最適化されたこれらのピクセルセットを見つけます(ヒルクライミング)手順。
世界最大のニューラルネットの1つを持つ一部のGoogle関係者による、この論文でこの方法での「顔検出器」ニューロンと「猫検出器」ニューロン、および2番目の方法:これらは、ニューロンを最も強く活性化する実際の画像も表示します(図3、図16)。 2番目のアプローチは、ネットワークの柔軟性と非線形性を示しているため、優れています。これらの高レベルの「検出器」は、ピクセルレベルでは特に類似していない場合でも、これらすべての画像に敏感です。
ここで不明な点がある場合、または他に質問がある場合はお知らせください。
コメント
- 定義されているのは1つだけです特定のレイヤー上のすべてのノードのアルゴリズムと重みによって出力が異なりますか?それとも、レイヤー上のすべてのノードが異なるようにプログラムできますか?
- @GeorgeMcDowdこれは、重要な問題です。ご提案のとおり、ピクセルとバスの識別は困難です。幸い、ピクセルの確認とエッジの検索は簡単です。’は、最初の非表示レイヤーがすべて実行しようとします。次のレイヤーは、エッジに基づいて推論を行うこと。これは、ピクセルに基づいて行うよりもはるかに簡単です。
- SOは、この回答に費やした時間と労力に対して、(ポイントだけでなく)他の報酬を与えるはずです!
- @JoshuaEnfield1980年の論理だと思います’は、人々が脳の働きをどのように考えているかに似ていること、どこでも区別できること、そしてあなたが述べたように値が制限されていることの組み合わせでした。それ以来、人々は
f(x) = max(x, 0)
(”正規化線形ユニット”)を頻繁に発見しています。 ‘これらのプロパティの多くはありませんが、より適切に機能します。 - バスの例と一連の関数がそれを釘付けにしました。 ‘教科書が’この説明にできない理由を理解しないでください。
回答
直感的な操作の説明に追加しようと思います…
ニューラルネットワークについて考える良い直感的な方法は、考えることです。線形回帰モデルが何をしようとしているのかについて線形回帰は、いくつかの入力を受け取り、各入力値にいくつかのモデルの最適な重み係数を掛けたものを取り、それらの結果の合計を出力応答に厳密にマッピングしようとする線形モデルを考え出します。係数は、目的の出力値とモデルによって学習された値の間のエラーメトリックを最小化する値を見つけることによって決定されます。別の言い方をすれば、線形モデルは係数乗数を作成しようとします。各入力について、それらすべてを合計して、(複数の)入力と(通常は単一の)出力値の間の関係を決定しようとします。 ues。その同じモデルは、ニューラルネットワークの基本的な構成要素とほぼ考えることができます。単一ユニットのパーセプトロン。
しかし、単一ユニットのパーセプトロンには、重み付けされたデータの合計を非線形に処理するピースがもう1つあります。通常、これを実現するためにスカッシング関数(シグモイド、またはタン)を使用します。つまり、隠れ層の基本単位があります。これは、重み付き入力のセットを合計するブロックです。次に、合計された応答を非線形関数に渡して、(隠れ層)出力ノード応答を作成します。バイアス単位は線形回帰の場合と同じで、処理される各ノードに追加される一定のオフセットです。非線形処理ブロックのため、(線形回帰モデルのように)線形のみの応答に制限されなくなりました。
わかりました。ただし、単一のパーセプトロンユニットの多くが連携している場合は、それぞれが異なる入力重み乗数と異なる応答を持つことができます(すべてが前述の同じ非線形ブロックで同じ入力のセットを処理する場合でも)。応答が異なるのは、それぞれがトレーニングを介してニューラルネットワークによって学習される異なる係数の重みを持っていることです(一部の形式には勾配降下法が含まれます)。次に、すべてのパーセプトロンの結果が再度処理され、個々のブロックが処理されたのと同じように、出力レイヤーに渡されます。問題は、すべてのブロックの正しい重みをどのように決定するかです。
正しい重みを学習する一般的な方法は、ランダムな重みから始めて、実際の実際の出力と学習した出力の間のエラー応答を測定することです。モデル出力。エラーは通常、ネットワークを介して逆方向に渡され、フィードバックアルゴリズムは、エラーに比例してこれらの重みを個別に増減します。ネットワークは、順方向に渡して出力応答を測定し、次に更新(逆方向の重み調整を渡す)して、満足のいくエラーレベルに達するまで重みを修正することによって繰り返し反復します。その時点で、線形回帰モデルよりも柔軟な回帰モデルができます。これは、一般に普遍関数近似器と呼ばれるものです。
ニューラルネットワークが実際にどのように動作するかを学ぶのに本当に役立った方法の1つは、ニューラルネットワーク実装のコードを研究して構築することです。最も基本的なコードの説明の1つは、(無料で入手できる)「科学者とエンジニアのDSPガイド」のニューラルネットワークの章にあります。 26.ほとんどが非常に基本的な言語で書かれており(Fortranだったと思います)、何が起こっているのかを確認するのに役立ちます。
回答
これについての私の見解を2つのステップで説明します。入力から非表示へのステップと非表示から出力へのステップです。 (私にはあまり面白くないように思われるので、最初に非表示から出力へのステップを実行します。
非表示から出力
非表示レイヤーの出力は異なる可能性がありますが、ここでは、から出力されたと仮定します。シグモイド活性化関数。したがって、これらは0から1の間の値であり、多くの入力では、0と1の場合があります。
これらの隠れたニューロンの出力と出力層の間の変換を単なる翻訳と考えるのが好きです(幾何学的な意味ではなく、言語的な意味で)。これは、変換が
反転可能。そうでない場合、翻訳で何かが失われました。ただし、基本的には、隠れたニューロンの出力が別の視点から見られます。
Input-to-Hidden
3つの入力ニューロンがあるとしましょう(簡単にできるように)ここにいくつかの方程式を書いてください)といくつかの隠れニューロン。各隠れニューロンは入力として入力の加重和を取得します。たとえば、
hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)
これは、hidden_1
の値が、input_2
にはまったく敏感ではなく、input_3
。
つまり、hidden_1
は入力の特定のアスペクトをキャプチャしていると言えます。これは「input_1
は重要な側面です。
hidden_1
からの出力は通常、入力を何らかの関数に渡すことによって形成されます。 sigmoid 関数を使用しているとしましょう。この関数は0から1の間の値を取ります。したがって、input_1
が重要であるか、重要ではないかを示すスイッチと考えてください。
これが、隠れ層の機能です。入力スペースのアスペクトまたは特徴を抽出します。
これで、重みも負になります。つまり、「input_1
は重要ですが、input_2
はその重要性を取り除きます」のような側面を取得できることを意味します:
hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)
またはinput_1
とinput_3
の重要性は「共有」されています:
hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)
その他のジオメトリ
ご存知の場合線形代数では、特定の方向に沿って投影するという観点から幾何学的に考えることができます。上記の例では、input_1
方向に沿って投影しました。
hidden_1
をもう一度見てみましょう。上記。input_1
の値が十分に大きくなると、シグモイド活性化関数の出力は1のままになり、それ以上大きくなることはありません。つまり、input_1
が増えても出力に違いはありません。同様に、反対方向(つまり負の方向)に移動した場合、あるポイントの後、出力は影響を受けません。
わかりました、問題ありません。ただし、特定の方向の無限の方向の感度が必要ではなく、ライン上の特定の範囲に対してのみアクティブ化する必要があるとします。非常に負の値の場合は効果がありません。 、および非常に正の値の場合は効果はありませんが、たとえば5〜16の値の場合は、ウェイクアップする必要があります。ここで、放射基底関数アクティベーション関数用。
概要
非表示レイヤー入力空間の特徴を抽出し、出力層がそれらを目的のコンテキストに変換します。これよりもはるかに多くのことがあり、多層ネットワークなどの場合はそうですが、これは私がこれまでに理解していることです。
編集:すばらしいインタラクティブなグラフを備えたこのページは、上記の長くて面倒な答えよりも優れています。 : http://neuralnetworksanddeeplearning.com/chap4.html
コメント
- OPと同様に、’隠れ層について少し混乱していますニューラルネットワークで。あなたの例では、NNアルゴリズムはどのようにしてhidden_1、hidden_2、hidden_3ニューロンの重みを見つけますか?また、hidden_1、hidden_2、hidden_3は同じ入力変数から派生しているため、’重みは同じ解に収束しませんか?
回答
分類の場合を考えてみましょう。出力層が実行しようとしているのは、サンプルが特定のクラスに属する条件付き確率、つまり、そのサンプルが特定のクラスに属する可能性を推定することです。幾何学的に言えば、しきい値関数を介して非線形にレイヤーを組み合わせると、ニューラルネットワークは最も興味深い問題である非凸問題(音声認識、オブジェクト認識など)を解決できます。言い換えると、出力ユニットは、ここに示されているような非凸決定関数を生成できます。
非表示レイヤーのユニットをデータから複雑な特徴を学習するものとして表示できます。これにより、出力レイヤーは、あるクラスを別のクラスからより適切に識別して、より正確な決定境界を生成できます。 たとえば、顔認識の場合、第1層のユニットはエッジのような特徴を学習し(特定の方向と位置でエッジを検出)、上位層はそれらを組み合わせて鼻、口、目のような顔の特徴の検出器になることを学習します。 各非表示ユニットの重みはそれらの特徴を表し、その出力(シグモイドであると仮定)は、その特徴がサンプルに存在する確率を表します。
一般に、出力との出力の意味 隠れ層は、解決しようとしている問題(回帰、分類)と使用する損失関数(クロスエントロピー、最小二乗誤差など)によって異なります。