11

4 つの入力ニューロンで構成されるニューラル ネットワーク、20 のニューロンで構成される 1 つの隠れ層、および 7 つのニューロンの出力層を使用しています。

bcd から 7 セグメントのアルゴリズム用にトレーニングしようとしています。私のデータは正規化されており、0 は -1、1 は 1 です。

出力エラー評価が発生すると、ニューロンは間違って飽和します。目的の出力が1で、実際の出力が の-1場合、エラーは1-(-1)= 2です。

活性化関数の導関数を掛けるとerror*(1-output)*(1+output)、誤差はほぼ0になります2*(1-(-1)*(1-1)

この飽和エラーを回避するにはどうすればよいですか?

4

3 に答える 3

12

活性化関数の漸近線での飽和は、ニューラル ネットワークの一般的な問題です。関数のグラフを見ると、驚くことではありません。これらはほぼフラットで、一次導関数が (ほぼ) 0 であることを意味します。ネットワークはこれ以上学習できません。

簡単な解決策は、アクティベーション関数をスケーリングしてこの問題を回避することです。たとえば、tanh() 活性化関数 (私のお気に入り) では、目的の出力が {-1, 1} にある場合、次の活性化関数を使用することをお勧めします。

f(x) = 1.7159 * tanh( 2/3 * x)  

したがって、導関数は

f'(x) = 1.14393 * (1- tanh( 2/3 * x))  

これにより、勾配が最も非線形な値の範囲に強制され、学習が高速化されます。詳細については、Yann LeCun の優れた論文Efficient Back-Propを読むことをお勧めします。tanh() アクティベーション関数の場合、エラーは次のように計算されます。

error = 2/3 * (1.7159 - output^2) * (teacher - output)
于 2012-11-30T17:13:10.007 に答える
1

これは、使用する関数に関係なく発生するはずです。導関数は、定義により、出力が 2 つの極値のいずれかに達するとゼロになります。私が人工ニューラル ネットワークを扱ってからしばらく経ちましたが、私の記憶が正しければ、これは (他の多くのことの中でも) 単純な逆伝播アルゴリズムを使用する際の制限の 1 つです。

導関数がゼロの場合でも、以前の経験に基づいて何らかの修正があることを確認するために、モメンタム ファクターを追加できます。

エポックごとにトレーニングすることもできます。この場合、実際の更新を行う前に重みのデルタ値を累積します (反復ごとに更新するのと比較して)。これにより、デルタ値が 2 つの値の間で振動している状況も緩和されます。

この特定の問題を軽減する、逆伝播の 2 次法のような、より高度な方法があるかもしれません。

ただし、tanh は無限大で -1 または +1 に達し、問題は純粋に理論的なものであることに注意してください。

于 2012-11-29T20:00:31.440 に答える
0

質問を正しく読んでいるかどうかは完全にはわかりませんが、そうであれば、入力とターゲットを 0.9 から -0.9 の間でスケーリングする必要があります。これにより、導関数がより健全になります。

于 2012-11-30T04:29:37.837 に答える