最急降下法とバックプロパゲーションアルゴリズムを知っています。私が得られないのは、バイアスをいつ使用することが重要で、どのように使用するのかということです。
たとえば、AND
関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが得られません。ただし、3つの入力(そのうちの1つはバイアス)を使用すると、正しい重みが得られます。
最急降下法とバックプロパゲーションアルゴリズムを知っています。私が得られないのは、バイアスをいつ使用することが重要で、どのように使用するのかということです。
たとえば、AND
関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが得られません。ただし、3つの入力(そのうちの1つはバイアス)を使用すると、正しい重みが得られます。
バイアスはほとんどの場合役立つと思います。事実上、バイアス値を使用すると、活性化関数を左または右にシフトできます。これは、学習を成功させるために重要な場合があります。
簡単な例を見ると役立つかもしれません。バイアスのないこの1入力1出力ネットワークについて考えてみます。
ネットワークの出力は、入力(x)に重み(w 0 )を掛け、その結果をある種の活性化関数(シグモイド関数など)に渡すことによって計算されます。
w 0のさまざまな値に対して、このネットワークが計算する関数は次のとおりです。
重みw0を変更すると、基本的にシグモイドの「急勾配」が変更されます。これは便利ですが、xが2のときにネットワークに0を出力させたい場合はどうでしょうか。シグモイドの急勾配を変更するだけでは実際には機能しません。曲線全体を右にシフトできるようにする必要があります。
それはまさにバイアスがあなたにできることです。そのネットワークにバイアスを追加すると、次のようになります。
...次に、ネットワークの出力はsig(w 0 * x + w 1 * 1.0)になります。w1のさまざまな値に対するネットワークの出力は次のようになります。
w 1の重みを-5にすると、曲線が右にシフトします。これにより、xが2のときに0を出力するネットワークを作成できます。
バイアスが何であるかを理解するためのより簡単な方法:それは線形関数の定数bに何とか似ています
y = ax + b
これにより、ラインを上下に移動して、予測とデータをより適切に適合させることができます。
bがないと、線は常に原点(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に対応します。すべての入力重みを同じ値(たとえば、0.5)に設定し、それに応じてしきい値w0を設定することにより、パーセプトロンを使用してm-of-n関数を簡単に表すことができます。
パーセプトロンは、すべてのプリミティブブール関数AND、OR、NAND(1 AND)、およびNOR(1 OR)を表すことができます。機械学習-トムミッチェル)
しきい値はバイアスであり、w0はバイアス/しきい値ニューロンに関連付けられた重みです。
バイアスはNN項ではありません。これは、考慮すべき一般的な代数の用語です。
Y = M*X + C
(直線方程式)
その場合C(Bias) = 0
、線は常に原点、つまりを通過し、 1つのパラメータ、つまり勾配(0,0)
にのみ依存するため、操作するものが少なくなります。M
C
、バイアスは任意の数を取り、グラフをシフトするアクティビティがあるため、より複雑な状況を表すことができます。
ロジスティック回帰では、ターゲットの期待値がリンク関数によって変換され、その値が単位間隔に制限されます。このように、モデルの予測は、次のように主要な結果の確率と見なすことができます。
これは、ニューロンをオンまたはオフにするNNマップの最後のアクティブ化レイヤーです。ここでもバイアスが果たす役割があり、モデルをマッピングするのに役立つように曲線を柔軟にシフトします。
バイアスのないニューラルネットワークの層は、入力ベクトルと行列の乗算にすぎません。(出力ベクトルは、正規化および後で多層ANNで使用するために、シグモイド関数を通過する可能性がありますが、それは重要ではありません。)
これは、線形関数を使用しているため、すべてゼロの入力が常にすべてゼロの出力にマップされることを意味します。これは、一部のシステムにとっては妥当な解決策かもしれませんが、一般的には制限が厳しすぎます。
バイアスを使用すると、入力スペースに別の次元を効果的に追加できます。この次元は常に値1を取るため、すべてゼロの入力ベクトルを回避できます。トレーニングされた重み行列は全射である必要がないため、これによって一般性が失われることはありません。したがって、以前は可能だったすべての値にマップできます。
2D ANN:
ANDまたはOR(またはXOR)関数を再現する場合のように、2次元を1次元にマッピングするANNの場合、ニューロンネットワークは次のように考えることができます。
2D平面上で、入力ベクトルのすべての位置をマークします。したがって、ブール値の場合は、(-1、-1)、(1,1)、(-1,1)、(1、-1)をマークする必要があります。ANNが現在行っていることは、2次元平面上に直線を描き、正の出力を負の出力値から分離することです。
バイアスがない場合、この直線はゼロを通過する必要がありますが、バイアスがある場合は、どこにでも自由に配置できます。したがって、(1、-1)と(-1,1)の両方を負の側に置くことはできないため、バイアスがないとAND関数の問題に直面していることがわかります。(オンラインにすることはできません。)OR関数の場合も問題は同じです。ただし、偏見があると、線を引くのは簡単です。
そのような状況でのXOR関数は、バイアスがあっても解決できないことに注意してください。
ANNを使用する場合、学習したいシステムの内部についてはほとんど知りません。偏見なくして学べないこともあります。たとえば、次のデータを見てください:(0、1)、(1、1)、(2、1)、基本的に任意のxを1にマップする関数。
1層のネットワーク(または線形マッピング)がある場合、解決策を見つけることができません。ただし、偏見がある場合は簡単です。
理想的な設定では、バイアスによってすべてのポイントがターゲットポイントの平均にマッピングされ、隠れたニューロンがそのポイントとの違いをモデル化できるようになります。
ニューロンのWEIGHTSの変更だけで、伝達関数の形状/曲率を操作するだけで、平衡/ゼロ交差点は操作できません。
バイアスニューロンの導入により、形状/曲率を変更せずに、伝達関数曲線を入力軸に沿って水平方向(左/右)にシフトできます。これにより、ネットワークはデフォルトとは異なる任意の出力を生成できるため、特定のニーズに合わせて入出力マッピングをカスタマイズ/シフトできます。
グラフィカルな説明については、こちらを参照してください: http ://www.heatonresearch.com/wiki/Bias
画像を使用している場合は、実際にはバイアスをまったく使用しない方がよい場合があります。理論的には、このようにすると、画像が暗いか、明るく鮮やかかなど、ネットワークはデータの大きさに依存しなくなります。そして、ネットはあなたのデータ内の相対性理論を研究することを通してそれの仕事をすることを学ぶつもりです。現代のニューラルネットワークの多くはこれを利用しています。
バイアスのある他のデータの場合、重要になる可能性があります。扱っているデータの種類によって異なります。情報が大きさ不変である場合---[1,0,0.1]を入力すると、[100,0,10]を入力した場合と同じ結果になる場合は、バイアスをかけない方がよい場合があります。
修士論文(59ページなど)でのいくつかの実験で、バイアスは最初のレイヤーにとって重要である可能性があることがわかりましたが、特に最後に完全に接続されたレイヤーでは、バイアスは大きな役割を果たしていないようです。
これは、ネットワークアーキテクチャ/データセットに大きく依存している可能性があります。
バイアスは、体重が回転する角度を決定します。
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章「パーセプトロン学習ルール」も読むことができます。
簡単に言えば、バイアスにより、学習/保存される重みのバリエーションがますます増えます...(補足:しきい値が与えられることもあります)。とにかく、より多くのバリエーションは、バイアスがモデルの学習/保存された重みに入力スペースのより豊かな表現を追加することを意味します。(より良い重みがニューラルネットの推測力を高めることができる場合)
たとえば、学習モデルでは、仮説/推測は、何らかの入力が与えられた場合、y=0またはy=1によって制限されることが望ましいです。一部の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つの入力として、バイアスを確認することもできます。
ニューラルネットワーク:
バイアスがない場合、入力層からの加重和のみを考慮してもニューロンはアクティブ化されない可能性があります。ニューロンがアクティブ化されていない場合、このニューロンからの情報は残りのニューラルネットワークを通過しません。
バイアスの価値は学習可能です。
事実上、バイアス= —しきい値。バイアスは、ニューロンに1を出力させるのがいかに簡単であるかと考えることができます。非常に大きなバイアスでは、ニューロンが1を出力するのは非常に簡単ですが、バイアスが非常に負の場合、それは困難です。
要約すると、バイアスは、活性化関数がトリガーされる値を制御するのに役立ちます。
詳細については、このビデオをフォローしてください。
いくつかのより有用なリンク:
簡単に考えると、y = w1 * xがあり、yが出力で、w1が重みである場合、x = 0、y = w1*xが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(theta)|、Y = a * X = W * X + b、a = b + W = b + cos(theta)、 bは整数です。
バイアスは私たちのアンカーとして機能します。それは、私たちがそれを下回らないような、ある種のベースラインを持つための方法です。グラフの観点から、y = mx + bのように考えてください。これは、この関数のy切片のようなものです。
出力=入力に重み値を掛け、バイアス値を追加してから、活性化関数を適用します。
バイアスという用語は、y切片と同様に最終的な出力行列を調整するために使用されます。たとえば、古典的な方程式y = mx + cでは、c = 0の場合、線は常に0を通過します。バイアス項を追加すると、ニューラルネットワークモデルの柔軟性と一般化が向上します。
バイアスは、より良い方程式を得るのに役立ちます。
関数y=ax + bのような入力と出力を想像してください。次のような方程式を維持する場合、各ポイントとラインの間のグローバルエラーを最小限に抑えるために、input(x)とoutput(y)の間に正しいラインを配置する必要があります。このy=axの場合、適応のためのパラメーターは1つだけになります。ただし、グローバルエラーを最小化するのに最適なものを見つけたとしても、目的のa
値からは少しかけ離れています。
バイアスにより、方程式がより柔軟になり、最適な値に適応できるようになると言えます。