ニューラルネットワークの隠れ層は何を計算しますか?


187

多くの人々が「あなたのためにグーグルにさせてください」へのリンクで応答すると確信しているので、私はこれを理解しようとしたと言いたいので、ここでの私の理解不足を許してください、しかし、私はどのようにニューラルネットワークの実際の実装は実際に機能します。

入力レイヤーとデータの正規化方法、バイアスユニットも理解していますが、非表示レイヤーについては、実際の計算はそのレイヤーで行われ、出力にどのようにマッピングされるかは少しぼやけています。非表示レイヤーに疑問符、AND / OR / XORなどのブール関数、アクティベーション関数、すべての非表示ユニットにマップする入力ノード、および各非表示ユニットのみにマップする入力ノードを含む図を見てきました私は実際的な面でいくつか質問があります。もちろん、子供に説明するようなニューラルネットワークプロセス全体の簡単な説明は素晴らしいでしょう。

隠れ層でどのような計算が行われますか?

これらの計算は出力レイヤーにどのようにマッピングされますか?

出力層はどのように機能しますか?非表示層からのデータの非正規化?

入力層の一部の層が非表示層に接続されていて、一部が接続されていない理由


13
この辺りの人々はいい人です。「あなたのためにグーグルを聞かせて」という答えを見たことがありませんが、最初は基本的な質問であると思われたものに対する驚くほど徹底的で洞察に満ちた答えがたくさんあります。残念ながら、私はあなたのお手伝いをすることはできませんが、それはかなり関連があるようですので、喜んで投票しています。
ガラ

4
コメントと投票Gaelのおかげで、バッジを獲得しようとするのではなく、ここでのコラボレーションの精神をもっと見ることができてうれしいです。編集/終了の質問によるポイント。
FAtBalloon

1
私は特にニューラルネットワークの専門家ではありませんが、それらのアプリケーションと方法に関与しています。私の多分あまり役に立たない答えは、非表示の特定の計算は、出力に課している「コスト関数」、つまり、達成しようとするものに依存するということです。たとえば、入力要素をクラスター化されたセットにグループ化する場合、非表示レイヤー内の要素間の距離を計算します。これは、プロセスがこのレイヤーを「残す」ことを許可するエラー基準を満たすまで、このレイヤー内でさまざまな反復および最適化サイクルを経ることがあります。
ルコザード

回答:


230

3文バージョン:

  • 各レイヤーは、必要な任意の機能を前のレイヤーに適用できます(通常、線形変換とそれに続く非直線性の縮小)。

  • 隠れ層の仕事は、入力を出力層が使用できるものに変換することです。

  • 出力レイヤーは、非表示レイヤーのアクティブ化を、出力をオンにするスケールに変換します。

5歳のように:

写真にバスがあるかどうかをコンピューターに通知したい場合、適切なツールがあればコンピューターの方が楽になります。

そのため、バス検出器は、車輪検出器(車両であることを知らせるため)とボックス検出器(バスは大きな箱のような形をしているため)とサイズ検出器(自動車には大きすぎると言うため)で構成されます。 )。これらは隠しレイヤーの3つの要素です。これらは未加工のイメージの一部ではなく、バスを識別するために設計したツールです。

これらの検出器の3つすべてがオンになっている場合(または特にアクティブな場合)、目の前にバスがある可能性が高くなります。

ニューラルネットは、多くの検出器を構築してそれらをまとめるための優れたツール(逆伝播など)があるため便利です。


あなたが大人のように

フィードフォワードニューラルネットワークは、一連の関数をデータに適用します。正確な関数は、使用しているニューラルネットワークに依存します。ほとんどの場合、これらの関数はそれぞれ前の層の線形変換を計算し、その後、非線形性を押しつぶします。場合によっては、関数が別のことを行います(例の論理関数の計算、画像内の隣接するピクセルの平均化など)。そのため、さまざまなレイヤーの役割は、どの関数が計算されるかに依存する可能性がありますが、非常に一般的なものにしようと思います。

入力ベクトル、隠れ層の活性化、および出力の活性化呼び出しましょう。からマッピングする関数と、からマッピングする別の関数があります。 h y f x h g h yxhyfxhghy

したがって、非表示層のアクティベーションはあり、ネットワークの出力はです。g f x f(x)g(f(x))

なぜ1つの関数ではなく2つの関数(と)があるのですか?gfg

関数ごとの複雑さのレベルが制限されている場合、はとが個別にできないことを計算できます。 f gg(f(x))fg


論理関数の例:

たとえば、とを「AND」、「OR」、「NAND」のような単純な論理演算子にしか許可しない場合、「XOR」のような他の関数を1つだけで計算することはできません。一方、これらの関数を重ねて使用する場合は、「XOR」を計算できます。gfg

最初の層の機能:

  • 少なくとも1つの要素が「TRUE」であることを確認してください(ORを使用)
  • それらがすべて「TRUE」ではないことを確認します(NANDを使用)

第2層関数:

  • 両方の第1層の基準が満たされていることを確認します(ANDを使用)

ネットワークの出力は、この2番目の関数の結果です。第1層は、ネットワーク全体がXORを実行できるように、入力を第2層が使用できるものに変換します。


画像の例:

この講演のスライド61はここでも単一の画像として利用できますが、特定のニューラルネットワークのさまざまな隠れ層が探しているものを(視覚化する1つの方法)を示しています。

最初のレイヤーは画像内の短いエッジを探します:これらは生のピクセルデータから見つけるのは非常に簡単ですが、顔やバスや象を見ているかどうかを伝えるのにそれ自体ではあまり役に立ちません。

次のレイヤーがエッジを構成します。下の非表示レイヤーのエッジが特定の方法で互いに適合する場合、左端の列の中央にある目検出器の1つがオンになる場合があります。生のピクセルから非常に特殊なものを見つけるのに非常に優れた単一のレイヤーを作成することは困難です。目の検出器は、生のピクセルからよりもエッジ検出器からはるかに簡単に構築できます。

次のレイヤーは、目検出器と鼻検出器を顔に構成します。つまり、前のレイヤーの目検出器と鼻検出器が正しいパターンでオンになると、これらが点灯します。これらは特定の種類の顔を探すのに非常に適しています。1つ以上の顔が点灯している場合、出力レイヤーは顔が存在することを報告する必要があります。

顔検出器は目検出器と鼻検出器から簡単に構築できますが、ピクセル強度から簡単に構築できるため、これは便利です

したがって、各レイヤーは、生のピクセルから遠ざかり、最終的な目標(顔検出やバス検出など)に近づきます。


さまざまな他の質問への回答

「入力レイヤーの一部のレイヤーが非表示のレイヤーに接続されていて、一部が接続されていないのはなぜですか?」

ネットワーク内の切断されたノードは「バイアス」ノードと呼ばれます。ここには本当にいい説明があります。簡単な答えは、回帰の切片項のようなものだということです。

「画像例の「目検出器」の写真はどこから来たのですか?」

リンクした特定の画像を再確認していませんが、一般的に、これらの視覚化は、対応するニューロンの活動を最大化する入力レイヤー内のピクセルのセットを示しています。したがって、ニューロンを目の検出器と考えると、これはニューロンが最も目に似ていると考える画像です。人々は通常、最適化(山登り)手順でこれらのピクセルセットを見つけます。

、この論文は世界最大のニューラルネットの一つといくつかのGoogleの人々によって、彼らはこの方法だけでなく、第二の方法「顔検出」ニューロンと「猫の検出器」ニューロンを示しています。彼らはまた、表示され、実際の画像を活性化させますニューロンが最も強くなります(図3、図16)。2番目のアプローチは、ネットワークが非常に柔軟で非線形であることを示しているため、優れています。これらの高レベルの「検出器」は、ピクセルレベルで特に似ていなくても、これらすべての画像に敏感です。


ここで何か不明な点がある場合や、質問がある場合はお知らせください。


2
それで、与えられたレイヤー上のすべての単一ノードに対して定義されたアルゴリズムが1つだけあり、重みが出力を異なるものにしますか?または、レイヤー上のすべてのノードを異なるようにプログラムできますか?
FAtBalloon

3
@GeorgeMcDowdこれが重要な問題になります。ピクセルを見てバスを識別するのは難しいと思います。幸いなことに、ピクセルを見てエッジを見つけるのは簡単です。これが最初の非表示レイヤーのすべてです。次のレイヤーは、エッジに基づいて推論を試みますが、ピクセルに基づいて推論するよりもはるかに簡単です。
デビッドJ.ハリス

4
SOは、あなたがこの答えに費やした時間と努力に対して、(単なるポイントではなく)他の報酬を与えるべきです!
samsamara 14年

1
@JoshuaEnfield 1980年代の論理は、人々が脳がどのように機能するかを考える方法に似ていること、どこでも微分可能であること、値があなたが言及したように制限されていることの組み合わせだったと思います。それ以来、人々はf(x) = max(x, 0)(「修正された線形ユニット」)それらのプロパティの多くを持っていなくても、しばしばより良く機能することを発見しました。
デビッドJ.ハリス

2
バスの例と一連の関数は、まさにそれを打ち付けました。教科書がこのような説明になれない理由を理解しないでください。
drecute

12

直感的な操作説明に追加してみます...

ニューラルネットワークについて考える直観的な良い方法は、線形回帰モデルが何をしようとしているかを考えることです。線形回帰はいくつかの入力を受け取り、各入力値にいくつかのモデル最適重み係数を掛け、それらの結果の合計を真の出力に密接に一致する出力応答にマッピングしようとする線形モデルを作成します。係数は、目的の出力値とモデルによって学習される値との間のエラーメトリックを最小化する値を見つけることによって決定されます。別の言い方をすると、線形モデルは各入力に対して係数乗数を作成し、それらをすべて合計して(複数の)入力値と(通常は単一の)出力値の関係を決定しようとします。その同じモデルは、ニューラルネットワークの基本的なビルディングブロックとしてほとんど考えることができます。

しかし、単一ユニットのパーセプトロンには、重み付けされたデータの合計を非線形的に処理するもう1つのピースがあります。通常は、これを達成するためにスカッシュ関数(シグモイド、またはtanh)を使用します。したがって、隠されたレイヤーの基本ユニットがあります。これは、加重入力のセットを合計するブロックです。次に、合計された応答を非線形関数に渡し、(隠されたレイヤー)出力ノード応答を作成します。バイアス単位は、線形回帰の場合と同様に、処理される各ノードに追加される一定のオフセットです。非線形処理ブロックのため、(線形回帰モデルのように)線形のみの応答に制限されなくなりました。

わかりましたが、単一のパーセプトロンユニットの多くが連携している場合、それぞれが異なる入力重み乗数と異なる応答を持つことができます(前述の同じ非線形ブロックで同じ入力のセットをすべて処理する場合でも)。応答が異なるのは、それぞれがトレーニングを介してニューラルネットワークによって学習される異なる係数の重みを持っていることです(一部の形式には勾配降下が含まれます)。その後、すべてのパーセプトロンの結果が再び処理され、個々のブロックが処理されたのと同じように、出力層に渡されます。問題は、すべてのブロックの正しい重みをどのように決定するかです。

正しい重みを学習する一般的な方法は、ランダムな重みから始めて、実際の実際の出力と学習したモデル出力の間のエラー応答を測定することです。通常、エラーはネットワークを逆方向に通過し、フィードバックアルゴリズムはそれらの重みをエラーにある程度比例して個別に増減します。ネットワークは、適切なエラーレベルに達するまで、前方に通過し、出力応答を測定し、更新(後方に重み調整を渡す)および重みを修正することにより繰り返しを繰り返します。その時点で、線形回帰モデルよりも柔軟な回帰モデルがあります。これは一般に汎用関数近似と呼ばれています。

ニューラルネットワークが実際にどのように動作するかを学ぶのに本当に役立った方法の1つは、ニューラルネットワーク実装のコードを調べて構築することです。最高の基本的なコードの説明の1つは、(無料で入手できる)「DSPの科学者およびエンジニアガイド」のニューラルネットワークの章にあります。26.何が起こっているのかを実際に見るのに本当に役立つ非常に基本的な言語で書かれています(私はそれがfortranだったと思います)。


12

このビューについて、入力から非表示へのステップと非表示から出力へのステップの2つのステップで説明します。(私にとっては)面白くないと思われるため、最初にhidden-to-outputステップを実行します。

非表示から出力

隠れ層の出力は異なるものになる可能性がありますが、ここではS字型のアクティベーション関数から出力されると仮定します。したがって、それらは0から1の間の値であり、多くの入力では、それらは0と1だけである場合があります。

私は、これらの隠れたニューロンの出力と出力層の間の変換を、単なる幾何学的な意味ではなく、言語的な意味での翻訳と考えています。変換が可逆的である場合、これは確かに当てはまります。そうでない場合、翻訳で何かが失われました。しかし、基本的には、異なる視点から見た隠されたニューロンの出力があります。

入力から非表示

3つの入力ニューロン(ここで簡単にいくつかの方程式を書くことができるように)といくつかの隠されたニューロンがあるとします。各隠れニューロンは、入力として入力の重み付き合計を取得するため、たとえば

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

これは、の値がの値にhidden_1非常に敏感input_1であり、にまったく敏感ではなく、input_2わずかに敏感であることを意味しますinput_3

したがって、入力のhidden_1特定の側面をキャプチャしていると言うことができます。これは「input_1重要」側面と呼ばれる場合があります。

からの出力hidden_1は通常、何らかの関数を介して入力を渡すことによって形成されるため、シグモイド関数を使用しているとしましょう。この関数は、0〜1の値を取ります。そのため、input_1重要であるかそうでないかを示すスイッチと考えてください。

それが隠されたレイヤーがすることです!入力空間のアスペクトまたは特徴を抽出します。

重みも負になります!これは、「input_1重要input_2ですが、その重要性をなくす」などの側面を得ることができることを意味します。

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

またはinput_1input_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


1
OPのように、ニューラルネットワークの隠れ層について少し混乱しています。あなたの例では、NNアルゴリズムは、hidden_​​1、hidden_​​2、およびhidden_​​3ニューロンの重みをどのように見つけますか?また、hidden_​​1、hidden_​​2、およびhidden_​​3は同じ入力変数から派生しているため、重みは同じ解に収束しませんか?
ロバートF

5

分類の場合を考えてみましょう。出力層がやろうとしているのは、サンプルが特定のクラスに属する条件付き確率、つまり、そのサンプルが特定のクラスに属する可能性を推定することです。幾何学的に言えば、しきい値関数を介して非線形にレイヤーを組み合わせると、ニューラルネットワークは最も興味深い問題である非凸問題(音声認識、オブジェクト認識など)を解決できます。言い換えれば、出力ユニットは、ここに描かれているような非凸決定関数を生成することができます

隠れ層のユニットは、データから複雑な特徴を学習するものとして表示できます。これにより、出力層は、あるクラスを別のクラスからより識別し、より正確な決定境界を生成できます。たとえば、顔認識の場合、最初のレイヤーのユニットはエッジのような特徴を学習し(特定の向きと位置でエッジを検出)、上位レイヤーはそれらを組み合わせて鼻、口、目のような顔の特徴の検出器になります。各非表示ユニットの重みはそれらの特徴を表し、その出力(シグモイドであると仮定)は、その特徴がサンプルに存在する確率を表します。

一般に、出力層と隠れ層の出力の意味は、解決しようとしている問題(回帰、分類)および使用する損失関数(クロスエントロピー、最小二乗誤差など)に依存します。

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