私は勾配降下法と逆伝播定理を知っています。得られないのは、バイアスを使用することが重要であるときと、それをどのように使用するかです。
たとえば、AND
関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが設定されませんが、3つの入力(うち1つはバイアス)を使用すると正しい重みが設定されます。
バイアスはほとんど常に役立つと思います。実際には、 バイアス値を使用すると、アクティブ化機能を左または右にシフトできます これは、学習を成功させるために重要です。
簡単な例を見るのに役立つかもしれません。偏りのないこの1入力1出力のネットワークを考えます。
ネットワークの出力は、入力(x)に重み(w)を掛けて計算されます。)結果をある種の活性化関数(例えばシグモイド関数)を通して渡す。
これは、wのさまざまな値に対して、このネットワークが計算する関数です。:
重量を変えるw シグモイドの「急峻さ」を本質的に変えます。これは便利ですが、xが2のときにネットワークが0を出力するようにしたいとしたらどうでしょうか。シグモイドの勾配を変更するだけでは、実際にはうまくいきません - 曲線全体を右にシフトできるようにする必要があります 。
それはまさにバイアスがあなたにできることです。そのネットワークにバイアスを追加すると、次のようになります。
...それからネットワークの出力はsig(wになります* x + w1* 1.0)これは、wのさまざまな値に対してネットワークの出力がどのようになるかです。1:
Wの-5の重みを持つ1 曲線を右にシフトするので、xが2のときに0を出力するネットワークを作成できます。
私の2セントを足すだけです。
バイアスが何であるかを理解するためのより簡単な方法:それはどういうわけか線形関数の定数 b に似ています
y = ax + b
予測とデータをよりよく合わせるために、ラインを上下に移動させることができます。 b がなければ、線は常に原点(0、0)を通るため、近似が悪くなる可能性があります。
ANNの訓練中に、2つの異なる種類のパラメータ、重みおよび活性化関数内の値を調整することができる。これは実用的ではなく、パラメータの1つだけを調整すればもっと簡単になります。この問題に対処するために、バイアスニューロンが発明された。バイアスニューロンは1つのレイヤにあり、次のレイヤのすべてのニューロンに接続されていますが、前のレイヤには存在せず、常に1を出力します。活性化関数のt値のように、他の重みの合計(式2.1)。 1
実用的ではないのは、重みと値を同時に調整しているためです。重みを変更すると、前のデータインスタンスに有効だった値への変更が無効になる可能性があります。値を変更せずにバイアスニューロンを追加するあなたはレイヤーの振る舞いを制御します。
さらに、バイアスによって、類似のケースを表すために単一のニューラルネットを使用することができます。次のニューラルネットワークで表されるANDブール関数を考えます。
ANN http://www.aihorizon.com/images/essays/perceptron.gif
単一のパーセプトロンを使用して、多くのブール関数を表すことができます。
たとえば、ブール値を1(true)および-1(false)とした場合、2入力パーセプトロンを使用してAND関数を実装する1つの方法は、重みw0 = -3、w1 = w2 =を設定することです。 .5。このパーセプトロンは、しきい値をw0 = -.3に変更することによって、代わりにOR関数を表すようにすることができます。実際、ANDとORは、m-of-n関数の特殊なケースとして見なすことができます。つまり、パーセプトロンへのn個の入力の少なくともmが真でなければならない関数です。 OR関数はm = 1に対応し、AND関数はm = nに対応します。すべての入力重みを同じ値(例えば、0.5)に設定し、それに応じて閾値w 0を設定することによって、パーセプトロンを使用して任意のm − of − n関数を容易に表すことができる。
パーセプトロンは、すべてのプリミティブブール関数AND、OR、NAND(1 AND)、およびNOR(1 OR)を表すことができます。機械学習 - トムミッチェル)
しきい値はバイアスで、 w0 はバイアス/しきい値ニューロンに関連付けられた重みです。
バイアスのないニューラルネットワーク内のレイヤは、入力ベクトルと行列の乗算に他なりません。 (出力ベクトルは、正規化のため、そして後で多層ANNで使用するためにシグモイド関数を通過するかもしれませんが、それは重要ではありません。)
つまり、線形関数を使用しているため、すべてゼロの入力は常にすべてゼロの出力にマップされます。これはシステムによっては合理的な解決策になるかもしれませんが、一般的には制限が厳しすぎます。
バイアスを使用すると、入力スペースに効果的に別の次元を追加することになります。これは常に値が1になるため、すべてゼロの入力ベクトルを避けることになります。これによって一般性を失うことはありません。トレーニングされたウェイトマトリックスは客観的である必要はないので、以前に可能であったすべての値にマッピングすることができます。
2d ANN:
ANDまたはOR(またはXOR)関数を再現する場合のように、2つの次元を1つの次元にマッピングするANNの場合、ニューロンネットワークは次のように考えることができます。
2次元平面上で入力ベクトルのすべての位置をマークします。そのため、ブール値の場合は、(-1、-1)、(1,1)、(-1,1)、(1、-1)をマークします。あなたのANNが今することは、負の出力値から正の出力を分離して、2d平面上に直線を引くことです。
偏りがなければ、この直線はゼロを通過する必要がありますが、偏りがあれば、自由に配置できます。だから、偏りがなければAND関数の問題に直面していることがわかります。なぜなら、(1、-1) と (-1,1)の両方を負の側に置くことはできないからです。 。 (それらが on 行になることは許されていません。)問題はOR関数でも同じです。ただし、偏りがあると、線を引くのは簡単です。
そのような状況でのXOR関数はバイアスがあっても解決できないことに注意してください。
あなたがANNを使用するとき、あなたが学ぶことを望むシステムの内部について知ることはめったにありません。バイアスがなければいくつかのことを学ぶことはできません。たとえば、次のデータを見てください。(0、1)、(1、1)、(2、1)、基本的に任意のxを1にマッピングする関数。
単層ネットワーク(または線形マッピング)がある場合、解決策を見つけることができません。しかし、偏見があるのならばそれは自明です!
理想的な設定では、バイアスはすべての点をターゲット点の平均にマッピングし、隠れたニューロンがその点との違いをモデル化することもできます。
偏りはNN
の用語ではなく、考慮すべき一般的な代数の用語です。
Y = M*X + C
(直線方程式)
C(Bias) = 0
の場合、ラインは常にOriginを通過します。つまり、(0,0)
で、1つのパラメータ、つまりM
のみに依存します。これは傾きです。
バイアスであるC
は、任意の数を取り、グラフをシフトするためのアクティビティを持っているため、より複雑な状況を表すことができます。
ロジスティック回帰では、ターゲットの期待値はリンク関数によって変換され、その値が単位間隔に制限されます。このようにして、モデル予測は示されるように主要な結果の確率として見ることができます: ウィキペディアのシグモイド関数
これは、ニューロンをオン/オフにするNNマップの最後の活性化層です。ここでもバイアスが果たす役割があり、それはモデルをマッピングするのを助けるために曲線を柔軟にシフトさせます。
ニューロンの重みを変更するだけで、伝達関数の形状/曲率を操作するだけで、その平衡/ゼロ交差点は操作できません。
bias ニューロンを導入することで、形状/曲率を変えずに入力軸に沿って伝達関数曲線を水平(左/右)に移動させることができます。これにより、ネットワークはデフォルトとは異なる任意の出力を生成できるようになります。そのため、特定のニーズに合わせて入出力マッピングをカスタマイズ/シフトできます。
グラフィカルな説明はここを参照してください: http://www.heatonresearch.com/wiki/Bias
これらすべてに足りないものを追加するだけで、残りの部分にはほとんどわかりませんでした。
あなたが画像を使っているなら、あなたは実際には全くバイアスを使わない方が良いかもしれません。理論的には、このようにして、写真が暗いのか、明るく鮮やかなのかのように、ネットワークはデータの大きさからより独立したものになります。そして、ネットはあなたのデータの中の相対性を研究することを通してその仕事をすることを学ぶつもりです。現代の多くのニューラルネットワークはこれを利用しています。
他のデータにはバイアスがあることが重要です。どの種類のデータを扱っているかによって異なります。あなたの情報が絶対値不変であるならば - もし[1,0,0.1]を入力することが[100,0,10]を入力するのと同じ結果をもたらすべきであるならば、あなたはバイアスなしでお勧めするかもしれません。
私の修士論文 (例えば59ページ)での2、3の実験で、私はバイアスが最初の層のために重要かもしれないが、特に最後に完全に接続された層では重要であることがわかりました大きな役割です。
これは、ネットワークアーキテクチャ/データセットに大きく依存している可能性があります。
偏りは、体重をどれだけ回転させるかを決定します。
2次元チャートでは、重みとバイアスによって、出力の決定境界を見つけることができます。 AND関数を構築する必要があるとすると、入力(p) - 出力(t)のペアは次のようになります。
{p = [0,0]、t = 0}、{p = [1,0]、t = 0}、{p = [0,1]、t = 0}、{p = [1,1] 、t = 1}
決定境界を見つける必要があります。アイデア境界は次のようになります。
見る? Wは境界に対して垂直です。したがって、我々はWが境界の方向を決定したと言う。
しかし、最初は正しいWを見つけるのが難しいです。たいてい、私たちはオリジナルのW値をランダムに選びます。したがって、最初の境界は次のようになります。
これで境界はy軸に対して平行になります。
境界を回転させたいのですが、どうですか?
Wを変えることによって.
W '= W + Pは、W' = W + bPと同等であり、一方、b = 1である。
したがって、b(bias)の値を変えることで、W 'とWの間の角度を決めることができます。それが「ANNの学習則」です。
ニューラルネットワークデザイン をMartin T. Hagan/Howard B. Demuth/Mark H. Beale著、第4章「パーセプトロン学習則」で読むこともできます。
@zfyの説明を拡張する... 1つの入力、1つのニューロン、1つの出力に対する式は次のようになります。
y = a * x + b * 1 and out = f(y)
ここで、xは入力ノードからの値、1はバイアスノードの値です。 yは直接出力にすることも、関数、多くの場合シグモイド関数に渡すこともできます。また、バイアスは任意の定数にすることができますが、すべてを簡単にするために、常に1を選択します(@zfyが表示したり説明したりせずにそれを実行したのかもしれません)。
あなたのネットワークはあなたのデータに適応するために係数aとbを学習しようとしています。それで、b * 1
要素を追加することで、より多くのデータにうまく適合させることができる理由がわかります。今度は、slopeとinterceptの両方を変更できます。
複数の入力がある場合、方程式は次のようになります。
y = a0 * x0 + a1 * x1 + ... + aN * 1
方程式は依然として1つのニューロン、1つの出力ネットワークを表していることに注意してください。ニューロンがもっとある場合は、入力をすべてのノードに多重化して各ノードの寄与度を合計するために、係数行列に1次元を追加するだけです。
ベクトル形式で次のように書くことができます。
A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT
つまり、ある配列に係数を入れ、別の配列に(input + bias)を入れると、2つのベクトルの内積として目的の解が得られます(形状を正しくするにはXを転置する必要があります、XT a 「X転置」
そのため、最終的には、実際には入力から独立している出力の一部を表すためのもう1つの入力として、自分のバイアスを見ることもできます。
特に、ネイトの answer 、zfyの answer 、およびPradiの answer は素晴らしいです。
簡単に言えば、バイアスにより、より多くのバリエーションの重みを学習/保存することができます...(side-note :いくつかのしきい値が与えられる場合があります)。とにかく、バリエーションの増加は、バイアスがモデルの学習/保存された重みに入力空間のricher表現を追加することを意味します。(より良い重みがニューラルネットの推測力を高めることができる場合)
たとえば、学習モデルでは、ある種の分類タスクで入力が与えられた場合、仮説/推測はy = 0またはy = 1によって制限されることが望ましい...すなわち、x =(1,1)とy =一部のx =(0,1)に対してy = 1。 (仮説/結果の条件は、上記で述べたしきい値です。私の例では、Xが、コレクションXのNateの単一値x入力ではなく、各x = a doubleまたは2 valued-vectorに設定されることに注意してください).
ignoreバイアスの場合、多くの入力が同じ重みの多くで表されることになります(つまり、学習された重みOrigin(0,0)の近くで発生する場合、モデルは、より多くのより良い重みではなく、より少ない量の良好な重みに制限されます。(学習の重みが不十分な場合、推測が不十分になるか、ニューラルネットの推測力が低下する場合)
したがって、モデルがOriginの近くだけでなく、しきい値/判定境界内のできるだけ多くの場所で学習することが最適です。バイアスを使用すると、Originの近くの自由度を有効にできますが、Originの直近の領域に限定されません。
簡単に考えると、 y = w1 * x の場合 よ あなたの出力は w1 重量は条件を想像する x = 0 それから y = w1 * x は0に等しい、あなたがあなたの体重を更新したいのなら、あなたはどれだけの変化を計算しなければなりません。 delw = target-y この場合targetはあなたのターゲット出力です。 「どうぞ」 それ以来変わらない よ あなたはそれが助けになるでしょう y = w1 * x + w0 * 1 、正しいバイアスを得るために重みを調整することができます。以下の例.
直線に関しては、傾き切片は線形方程式の特定の形式です。
y = mx + b
画像を確認する
ここでbは(0,2)
あなたがそれを(0,3)に増やしたいならば、あなたはあなたのバイアスとなるbの値を変えることによってどのようにそれをするでしょうか
私が調べたすべてのMLの本では、Wは常に2つのニューロン間の結合指数として定義されています。つまり、2つのニューロン間の結合性が高いほど発火ニューロンからターゲットニューロンへ信号が強く伝達されます。ニューロンの生物学的特性を維持するための結果としてX、我々は1> = W> = -1を維持する必要がありますが、実際の回帰では、Wは| W |で終わるでしょう> = 1はニューロンがどのように機能しているかと矛盾します。その結果、私はW = cos(theta)を提案します。 cos(θ)| 、Y = a×X = W×X + bであり、a = b + W = b + cosθ、bは整数である。
バイアスという用語は、y切片と同様に最終出力行列を調整するために使用されます。たとえば、古典的な方程式では、y = mx + cで、c = 0の場合、線は常に0を通ります。バイアス項を追加すると、ニューラルネットワークモデルの柔軟性と一般化が向上します。
ニューラルネットワークでは:
偏りがないと、ニューロンは入力層からの加重和だけを考慮することによって活性化されないかもしれない。ニューロンが活性化されていない場合、このニューロンからの情報は残りのニューラルネットワークを通過しません。
バイアスの価値は学習可能です。
事実上、bias = - しきい値です。バイアスは、ニューロンが1を出力するのが最も簡単であると考えることができます。非常に大きなバイアスでは、ニューロンが1を出力するのは非常に簡単ですが、バイアスが非常に負の場合、難しいです。
要約すると、バイアスは起動関数がトリガする値を制御するのに役立ちます。
詳細についてはこのビデオをフォローしてください 詳細
より有用なリンクはほとんどありません。
言及された答え以外…私はいくつかの他のポイントを追加したいと思います。
バイアスは私たちの錨として機能します。それを下回らないような、ある種のベースラインを得ることが私たちにとっての方法です。グラフに関しては、y = mx + bのように考えてください。これは、この関数のy切片のようなものです。
output = input×weightの値とバイアス値を加算してから、アクティベーション関数を適用します。
一般に、機械学習では次の基本式があります。 バイアス分散トレードオフ NNにはオーバーフィットの問題があります(データの小さな変化がモデル結果に大きな変化をもたらすモデル一般化問題)。そのため、私たちには大きな違いがあります。小さなバイアスを導入することは大いに役立つ可能性があります。上の式を考慮すると、 バイアス - 分散のトレードオフ となります。ここで、バイアスは二乗されています。それで、あなたが大きな変動と過度に適合する危険があるとき、バイアスを導入してください。