勾配降下法と逆伝播アルゴリズムを知っています。私が得られないのは、バイアスを使用することが重要で、それをどのように使用するかです。
たとえば、AND
関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが得られませんが、3つの入力(そのうちの1つはバイアス)を使用すると、正しい重みが得られます。
勾配降下法と逆伝播アルゴリズムを知っています。私が得られないのは、バイアスを使用することが重要で、それをどのように使用するかです。
たとえば、AND
関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが得られませんが、3つの入力(そのうちの1つはバイアス)を使用すると、正しい重みが得られます。
回答:
バイアスはほとんど常に役立つと思います。実際には、バイアス値により、アクティベーション関数を左または右にシフトできます。これは、学習を成功させるために重要な場合があります。
簡単な例を見ると役立つかもしれません。バイアスのない、この1入力1出力ネットワークを考えてみましょう。
ネットワークの出力は、入力(x)に重み(w 0)を掛け、その結果をある種の活性化関数(例えば、シグモイド関数)に渡すことによって計算されます。
これは、このネットワークがw 0のさまざまな値に対して計算する関数です。
重みw 0を変更すると、本質的にシグモイドの「勾配」が変更されます。これは便利ですが、xが2のときにネットワークに0を出力させたい場合はどうでしょうか。シグモイドの勾配を変更するだけでは、実際には機能しません。曲線全体を右にシフトできるようにしたいとします。
それこそが、バイアスによって実現できることです。そのネットワークにバイアスを追加すると、次のようになります。
...ネットワークの出力はsig(w 0 * x + w 1 * 1.0)になります。次に、w 1のさまざまな値に対するネットワークの出力を示します。
w 1に-5の重みを付けると、曲線が右にシフトします。これにより、xが2のときに0を出力するネットワークを作成できます。
ちょうど私の2セントを追加します。
バイアスが何であるかを理解するより簡単な方法:線形関数の定数bにいくらか似ています
y = ax + b
これにより、ラインを上下に移動して、予測をデータに適合させることができます。bがない場合、線は常に原点(0、0)を通過し、フィットが悪くなる可能性があります。
このスレッドは、自分のプロジェクトの開発に本当に役立ちました。以下は、2変数回帰問題でバイアスユニットを使用した場合と使用しない場合の単純な2層フィードフォワードニューラルネットワークの結果を示す図です。重みはランダムに初期化され、標準のReLUアクティベーションが使用されます。私の前の回答が結論付けたように、バイアスがないと、ReLUネットワークは(0,0)でゼロから逸脱することができません。
ANNのトレーニング中に、アクティベーション関数の重みと値の2種類のパラメーターを調整できます。これは非現実的であり、パラメータの1つだけを調整する方が簡単です。この問題に対処するために、バイアスニューロンが発明されました。バイアスニューロンは1つの層にあり、次の層のすべてのニューロンに接続されていますが、前の層にはありません。常に1を放出します。バイアスニューロンは1を放出するため、バイアスニューロンに接続された重みが直接追加されます。アクティベーション関数のt値と同様に、他の重みの合計(式2.1)。1
これが非現実的である理由は、重みと値を同時に調整しているためです。重みを変更すると、前のデータインスタンスで有用だった値への変更が無効になる可能性があります...値を変更せずにバイアスニューロンを追加すると、レイヤーの動作を制御します。
さらに、バイアスにより、単一のニューラルネットを使用して同様のケースを表すことができます。次のニューラルネットワークで表されるANDブール関数について考えます。
(ソース:aihorizon.com)
単一のパーセプトロンを使用して、多くのブール関数を表すことができます。
たとえば、ブール値を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に対応します。すべてのm-of-n関数は、すべての入力の重みを同じ値(たとえば、0.5)に設定し、それに応じてしきい値w0を設定することにより、パーセプトロンを使用して簡単に表すことができます。
パーセプトロンは、すべてのプリミティブなブール関数AND、OR、NAND(1 AND)、およびNOR(1 OR)を表すことができます。機械学習-トム・ミッチェル)
しきい値はバイアスであり、w0はバイアス/しきい値ニューロンに関連付けられた重みです。
バイアスはNN
用語ではなく、考慮すべき一般的な代数用語です。
Y = M*X + C
(直線方程式)
さて、C(Bias) = 0
その場合、ラインは常に原点を通過し(0,0)
ます。つまりM
、1つのパラメータ(つまり、勾配)にのみ依存するため、操作する項目が少なくなります。
C
バイアスは任意の数を取り、グラフをシフトするアクティビティを持っているため、より複雑な状況を表すことができます。
ロジスティック回帰では、リンク関数によってターゲットの期待値が変換され、その値が単位間隔に制限されます。このようにして、モデル予測は、次のように主要な結果確率と見なすことができます。Wikipediaのシグモイド関数
これは、ニューロンをオン/オフするNNマップの最後のアクティブ化レイヤーです。ここでもバイアスが果たす役割があり、モデルのマッピングに役立つようにカーブを柔軟にシフトします。
バイアスのないニューラルネットワークのレイヤーは、入力ベクトルと行列の乗算にすぎません。(出力ベクトルは、正規化のためにシグモイド関数を介して渡され、その後多層ANNで使用される可能性がありますが、それは重要ではありません。)
つまり、線形関数を使用しているため、すべてゼロの入力は常にすべてゼロの出力にマッピングされます。これは一部のシステムにとっては妥当な解決策かもしれませんが、一般的には制限が厳しすぎます。
バイアスを使用すると、入力スペースに効果的に別の次元が追加されます。これは常に値1をとるため、すべてゼロの入力ベクトルを回避します。訓練された重み行列は全射型である必要がないため、これによって一般性が失われることはありません。そのため、以前に可能だったすべての値にマッピングできます。
2D ANN:
ANDまたはOR(またはXOR)関数を再現する場合のように、2つの次元を1つの次元にマッピングするANNの場合、神経回路網は次のように考えることができます。
2D平面で、入力ベクトルのすべての位置をマークします。したがって、ブール値の場合、(-1、-1)、(1,1)、(-1,1)、(1、-1)をマークする必要があります。ANNが今行っていることは、2d平面に直線を描画し、正の出力値と負の出力値を分離することです。
バイアスがない場合、この直線はゼロを通過する必要がありますが、バイアスがある場合は、どこにでも自由に配置できます。したがって、(1、-1)と(-1,1)の両方を負の側に置くことができないため、バイアスがないとAND関数の問題に直面していることがわかります。(それらがライン上にいることは許可されていません。)問題はOR関数と同じです。しかし、偏見があれば、線を引くのは簡単です。
その状況でのXOR関数は、バイアスがあっても解決できないことに注意してください。
ニューロンの重みの変更は、伝達関数の形状/曲率を操作するためにのみ機能し、平衡/ゼロ交差点では機能しません。
バイアスニューロンの導入により、形状/曲率を変更せずに、入力軸に沿って伝達関数曲線を水平(左/右)にシフトできます。これにより、ネットワークはデフォルトとは異なる任意の出力を生成できるため、特定のニーズに合わせて入力から出力へのマッピングをカスタマイズ/シフトできます。
グラフィカルな説明については、ここを参照してください:http : //www.heatonresearch.com/wiki/Bias
このすべてに、欠けていて、他のほとんどの場合は知らなかったものを追加するだけです。
画像で作業している場合、実際にはバイアスをまったく使用しない方がよい場合があります。理論的には、その方法では、画像が暗いか、明るく鮮やかであるかのように、ネットワークはデータの大きさからより独立します。そして、ネットは、データ内の相対性を研究することによって、その仕事をすることを学びます。最新のニューラルネットワークの多くはこれを利用しています。
他のデータの場合、バイアスがあることが重要になる可能性があります。それはあなたが扱っているデータのタイプに依存します。情報がマグニチュードインバリアントである場合--- [1,0,0.1]を入力すると、[100,0,10]を入力した場合と同じ結果が得られる場合は、バイアスがない方がよい場合があります。
バイアスは、ウェイトを回転させる角度を決定します。
2次元のグラフでは、重みとバイアスが出力の決定境界を見つけるのに役立ちます。AND関数を作成する必要があるとすると、input(p)-output(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 + PはW' = W + bPと同等ですが、b = 1です。
したがって、b(bias)の値を変更することで、W 'とWの間の角度を決定できます。これが「ANNの学習ルール」です。
Martin T. Hagan / Howard B. Demuth / Mark H. Bealeによる第4章「Perceptron Learning Rule」のニューラルネットワーク設計も読むことができます。
特に、ネイトの回答、zfyの回答、およびプラディの回答は素晴らしいです。
以下のために簡単に言えば、バイアスが許すより多くのバリエーションの重みを学習する/格納され...(サイドノート:時々ある閾値を与えられます)。いずれにせよ、バリエーションが多いほど、バイアスにより、モデルの学習/保存された重みに入力空間の表現が豊富になります。(より良い重みがニューラルネットの推測力を強化できる場所)
たとえば、学習モデルでは、いくつかの入力、おそらくいくつかの分類タスクでは、仮説/推測はy = 0またはy = 1によって制限されます...つまり、一部のx =(1,1)と一部のy = 0一部のx =(0,1)に対してy = 1。(仮説/結果の条件は、上で説明したしきい値です。私の例では、入力Xを、いくつかのコレクションXのNateの単一値x入力ではなく、x = 2または2値ベクトルに設定しています。)
バイアスを無視すると、多くの入力が同じ重みの多くで表される可能性があります(つまり、学習された重みは主に原点(0,0)の近くで発生します。モデルは、適切な重みのより少ない量に制限されます。より多くのより良い重みの代わりに、バイアスで学習することができます(学習が不十分な重みは、推測の低下またはニューラルネットの推測力の低下につながります)。
そのため、モデルは、原点の近くだけでなく、しきい値/決定境界内のできるだけ多くの場所でも学習することが最適です。バイアスにより、原点に近い自由度を実現できますが、原点のすぐ近くの領域に限定されません。
@zfyの説明を拡張すると... 1つの入力、1つのニューロン、1つの出力の方程式は次のようになります。
y = a * x + b * 1 and out = f(y)
ここで、xは入力ノードからの値で、1はバイアスノードの値です。yは直接出力することも、関数(多くの場合シグモイド関数)に渡すこともできます。また、バイアスは任意の定数にすることもできますが、すべてを単純にするために、常に1を選択します(おそらく、これは非常に一般的であるため、@ zfyは表示および説明せずにそれを行いました)。
ネットワークは、データに適応するために係数aとbを学習しようとしています。要素を追加するb * 1
ことで、より多くのデータに適合することができる理由がわかります。これで、勾配と切片の両方を変更できます。
複数の入力がある場合、方程式は次のようになります。
y = a0 * x0 + a1 * x1 + ... + aN * 1
式は1つのニューロンと1つの出力ネットワークを記述していることに注意してください。より多くのニューロンがある場合は、係数行列に1つの次元を追加して、すべてのノードへの入力を多重化し、各ノードの寄与を合計します。
ベクトル化された形式で次のように記述できること
A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT
つまり、1つの配列に係数を入力し、別の配列に(入力+バイアス)を入れると、2つのベクトルの内積として希望の解が得られます(形状を正しくするためにXを転置する必要があります。XTには「X転置」と書きました)。
つまり、最終的には、入力から実際に独立している出力の一部を表すためのもう1つの入力として、バイアスを確認することもできます。
あなたが持っている場合は、簡単な方法で考えるために、= W1 * xのyのyは、あなたの出力とあるW1は重みが条件想像ではx = 0、その後、X = W1 * yが 0に等しいが、あなたの体重を更新したい場合は、持っていますdelw = target-yによる変更量を計算します。ここでtargetはターゲット出力です。この場合、yは0として計算されるため、「delw」は変更されません。追加の値を追加できれば、y = w1に役立ちます。* x + w0 * 1、bias = 1と重みを調整して正しいバイアスを得ることができます。以下の例を検討してください。
線に関しては、勾配切片は特定の形式の線形方程式です。
y = mx + b
画像を確認
ここでbは(0,2)です
それを(0,3)に増やしたい場合は、バイアスになるbの値を変更してどのようにしますか
私が調査したすべてのMLブックでは、Wは常に2つのニューロン間の接続性インデックスとして定義されます。つまり、2つのニューロン間の接続性が高いほど、発火ニューロンからターゲットニューロンに信号が強く送信されます。またはY = w *結果としてXはニューロンの生物学的特性を維持するために、1> = W> = -1を維持する必要がありますが、実際の回帰では、Wは| W |で終わります。> = 1は、ニューロンがどのように機能しているかと矛盾します。その結果、私はW = cos(theta)を提案しますが、1> = | cos(シータ)| 、およびY = a * X = W * X + bであり、a = b + W = b + cos(theta)、bは整数
ニューラルネットワーク:
バイアスがない場合、ニューロンは、入力層からの加重和のみを考慮してもアクティブ化されない可能性があります。ニューロンがアクティブ化されていない場合、このニューロンからの情報はニューラルネットワークの残りの部分を通過しません。
バイアスの値は学習可能です。
事実上、バイアス= —しきい値。バイアスは、ニューロンが1を出力するのがいかに簡単であると考えることができます。バイアスが非常に大きい場合、ニューロンが1を出力するのは非常に簡単ですが、バイアスが非常に負である場合、難しいです。
要約すると、バイアスは、アクティベーション機能がトリガーされる値を制御するのに役立ちます。
いくつかのより便利なリンク:
a
トレーニングできますが、勾配a
が常に一定である場合、バイアスをどのようにトレーニングできますか?
一般に、機械学習では、この基本式がバイアス分散のトレードオフになります。NNではオーバーフィットの 問題(データの小さな変化がモデル結果の大きな変化につながるモデルの汎化問題)があり、そのため大きな分散があるため、小さなバイアスは大きな助けになります。バイアスが2乗されるバイアスと分散のトレードオフの上の式を検討すると、小さなバイアスを導入すると、分散を大幅に減らすことができます。したがって、大きな変動と過剰適合の危険がある場合は、バイアスを導入します。