1

フィード フォワード人工ニューラル ネットワークがほとんどの場合、単純な「OR」パーセプトロンの学習に失敗する理由を理解するのに苦労しています。

  • 0 または 0 : 0
  • 1 または 0 : 1
  • 0 または 1 : 1
  • 1または1:1

さまざまなネットワーク構成を試しました: 1 つまたは 2 つの隠れ層、隠れ層の 2 から 8 ニューロン、バイアス (値 = 1、各隠れニューロンと出力ニューロンに接続)

この例では、ネットワークは次のようになります。

[1]    [3]
[2]    [4]    [6]
       [5]
  • 入力レイヤー : [1] と [2]
  • 非表示レイヤー : [3] と [4] と [6]
  • 出力レイヤー : [6]

表記法:

  • ニューロン i : [i]
  • [i] と [j] の間の重み : w(i,j)
  • [i] 値 : v(i)
  • [i] エラー: e(i)
  • sig(t) : 1/(1 + e^-t)

重みの初期化

各重みは -0.5 から 0.5 の間のランダムな値に設定されます

入力

v(1) と v(2) はランダムな値で設定されます: 0 または 1

値を伝播 (左から右へ) :

  • v(3) = sig(v(1) * w(1,3) + v(2) * w(2,3))
  • v(4) = sig(v(1) * w(1,4) + v(2) * w(2,4))
  • v(5) = sig(v(1) * w(1,5) + v(2) * w(2,5))
  • v(6) = sig(v(3) * w(3,6) + v(4) * w(4,6) + v(5) * w(5,6))

予想される出力: (v(1) または v(2)) が true の場合は 1、それ以外の場合は 0

  • e(6) = (予想 - v(6)) * v(6) * (1 - v(6))

エラーの伝播 (右から左へ)

  • e(3) = e(6) * w(3,6) * v(3) * (1 - v(3))
  • e(4) = e(6) * w(4,6) * v(4) * (1 - v(4))
  • e(5) = e(6) * w(5,6) * v(5) * (1 - v(5))

重みの更新 (学習率 = 1)

  • w(1,3) = w(1,3) + v(1) * e(3)
  • w(1,4) = w(1,4) + v(1) * e(4)
  • w(1,5) = w(1,5) + v(1) * e(5)
  • w(2,3) = w(2,3) + v(2) * e(3)
  • w(2,4) = w(2,4) + v(2) * e(4)
  • w(2,5) = w(2,5) + v(2) * e(5)
  • w(3,6) = w(3,6) + v(3) * e(6)
  • w(4,6) = w(4,6) + v(4) * e(6)
  • w(5,6) = w(5,6) + v(5) * e(6)

それを 300 回実行し、各結果を出力します。

  • v(6) > 0.5 の場合、それは True
  • v(6) < 0.5 の場合は False
  • 期待される出力と比較する

数エポック後、v(1) = v(2) = 0 の場合でも、ネットワークはほとんど常に v(6) > 0.9 を返します。

ときどき (およそ 20 回に 1 回)、機能し、ネットワークが正しく学習した

私は何を間違っていますか?

編集: 見つけました!

犯人は次のとおりです。

  • e(3) = e(6) * w(3,6) * v(3) * (1 - v(3))
  • e(4) = e(6) * w(4,6) * v(4) * (1 - v(4))
  • e(5) = e(6) * w(5,6) * v(5) * (1 - v(5))

だったはずです:

  • e(3) = e(6) * w(3,6)
  • e(4) = e(6) * w(4,6)
  • e(5) = e(6) * w(5,6)
4

0 に答える 0