ニューラルネットワークでバイアスノードが使用される理由


29
  1. ニューラルネットワークでバイアスノードが使用される理由
  2. いくつ使うべきですか?
  3. どのレイヤーで使用する必要があります:すべての非表示レイヤーと出力レイヤー?

1
この質問は、このフォーラムでは少し広範です。パターン認識用の Bishop Neural NetworksやHagan Neural Network Designなど、ニューラルネットワークについて説明している教科書を参照することをお勧めします。
Sycoraxは回復モニカは述べています

2
FTR、これが広すぎるとは思わない。
GUNG -復活モニカ

回答:


24

ニューラルネットワークのバイアスノードは、常に「オン」になっているノードです。つまり、指定されたパターンのデータに関係なく、その値は設定されます。これは、回帰モデルのインターセプトに類似しており、同じ機能を果たします。ニューラルネットワークが特定のレイヤーにバイアスノードを持たない場合、とは異なる次のレイヤーで出力を生成することはできません(線形スケール、または通過時にの変換に対応する値)アクティベーション関数)フィーチャ値が。0 0 01000

ここに画像の説明を入力してください

簡単な例を考えてみましょう。2つの入力ノードx 1x 2、および1つの出力ノードyを持つフィードフォワードパーセプトロンがあります。 x 1およびx 2はバイナリフィーチャであり、参照レベルx 1 = x 2 = 0に設定されます。これらの2 0に任意の重みw 1およびw 2を乗算し、積を合計して、任意のアクティベーション関数に渡します。バイアスノードなしで、1つのみx1x2yx1x2x1=x2=00w1w2出力値が可能です。これにより、非常に低い適合が得られる場合があります。たとえば、ロジスティックアクティベーション関数を使用する場合、.5である必要があり、これはまれなイベントを分類するにはひどいものになります。y.5

バイアスノードは、ニューラルネットワークモデルにかなりの柔軟性を提供します。上記の例では、バイアスノードなしで可能な唯一の予測割合であったが、バイアスノードと、任意に割合0 1 パターンに適合することができ、X 1 = X 2 = 0。各層について、Jバイアスノードが追加されて、バイアスノードが追加され、N個のJ + 1ここで、(推定される追加のパラメータ/重みをN個のJ + 1は、階層内のノードの数であり、J50%(0,1)x1=x2=0jNj+1Nj+1)。適合させるパラメータが多いほど、ニューラルネットワークのトレーニングに比例して時間がかかります。また、学習する重みよりもかなり多くのデータがない場合、過剰適合の可能性が高くなります。 j+1

この理解を念頭に置いて、明示的な質問に答えることができます。

  1. バイアスノードが追加され、データに合わせてモデルの柔軟性が向上します。具体的には、すべての入力フィーチャがに等しい場合にネットワークがデータを近似できるようにし、データ空間の他の場所で近似値のバイアスを減らす可能性が非常に高くなります。 0
  2. 通常、フィードフォワードネットワークの入力層とすべての非表示層に単一のバイアスノードが追加されます。特定のレイヤーに2つ以上を追加することはありませんが、ゼロを追加することはできます。したがって、合計数は主にネットワークの構造によって決まりますが、他の考慮事項も適用できます。(フィードフォワード以外のニューラルネットワーク構造にバイアスノードがどのように追加されるかについてはあまり明確ではありません。)
  3. これはほとんどカバーされていますが、明確にするために、出力ノードにバイアスノードを追加することはありません。それは意味がありません。

この点でCNNは違いますか?convレイヤーにバイアスを追加すると、パフォーマンス(精度)が低下するためです!そして、それらを削除すると、実際には高くなります!
リカ

@Hossein、私が知っていることではありませんが、新しい質問をすることができます。私はそこの専門家ではありません。
GUNG -復活モニカ

入力が0にならない場合でも、バイアスノードは必要ですか?
alec_djinn

1
@alec_djinn、はい。ほぼ確実に、入力値に0がない場合でも、モデルはそれらなしでバイアスされます。たとえば、線形回帰モデルでインターセプトを削除しても大丈夫ですか?
GUNG -復活モニカ

1
@krupeshAnadkat、「ニューラルネットワークのバイアスノードは、常に「オン」になっているノードです。つまり、特定のパターンのデータに関係なく、その値は1に設定されます。」バイアスノードは値が常に1のノードであるため、必要に応じて接続することができます。バイアスの値を乗算する前に、ノードの結果の値を常にに戻すだけです。1
gung-モニカの復職

2

シンプルで短い答え:

  1. 入力機能を変更する/学習機能についてより柔軟になります。
  2. レイヤーごとに1つのバイアスノード。
  3. それらをすべての非表示レイヤーと入力レイヤーに追加します-いくつかの脚注付き

私の修士論文のいくつかの実験(59ページなど)で、バイアスは最初のレイヤーにとって重要である可能性がありますが、特に最後の完全に接続されたレイヤーでは、大きな役割を果たさないようです。したがって、最後のレイヤーではなく、最初のいくつかのレイヤーでそれらを使用できます。単純にネットワークをトレーニングし、バイアスノードの重みの分布をプロットし、重みがゼロに近すぎると思われる場合はそれらを取り除きます。

これは、ネットワークアーキテクチャ/データセットに大きく依存している可能性があります。


バイアスノードには、前のレイヤーから接続する矢印がありますか?または、値「1」にアクティベーションに渡された加重合計の重みを掛けることにより、次のレイヤーに貢献します。これに答えると時間を節約できます。助けてください
krupesh Anadkat

1
バイアスは、次のレイヤーのアクティブ化に追加された数字です。これを視覚化する1つの方法1は、前のレイヤーに一定の値を持ち、次のレイヤーのニューロンごとに1つの重み(1つのバイアス値)を持たせることです。
マーティントーマ

2

ニューラルネットワークのコンテキストでは、現在、バッチ正規化はスマートな「バイアスノード」を作成するためのゴールドスタンダードです。ニューロンのバイアス値をクランプする代わりに、ニューロンの入力の共分散を調整します。したがって、CNNでは、畳み込み層と次の完全に接続された層(たとえば、ReLus)の間にバッチ正規化を適用します。理論的には、完全に接続されたすべてのレイヤーはバッチ正規化の恩恵を受ける可能性がありますが、各バッチ正規化には独自のパラメーターが含まれるため、実際には実装に非常に費用がかかります。

なぜかというと、回答のほとんどは、特に、入力が活性化を極端にすると、ニューロンが飽和勾配の影響を受けやすくなることをすでに説明しています。ReLuの場合、これは左にプッシュされ、勾配が0になります。一般に、モデルをトレーニングするとき、最初にニューラルネットワークへの入力を正規化します。バッチ正規化は、レイヤー間のニューラルネットワークの入力を正規化する方法です。

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