0

この記事を使用して、バックプロパゲーションを使用したニューラルネットワークを実装していますが、エラーの計算に問題があります。一言で言えば、私のシグモイド関数はすべてのノード出力を1.0に押しつぶし、エラー計算で0を返します。

error = (expected - actual) * (1 - actual) * actual
                                    ^^ this term causes multiply by 0

したがって、私のエラーは常に0です。

問題は、1.0未満に漸近的に制限されるのではなく、1.0を返すシグモイド実装にあると思われます。

# ruby
def sigmoid(x)
  1/(1+Math.exp(-x))
end

シグモイドが実際に1.0に達することはないというのは正しいですか、それとも何か別の問題がありますか?

4

1 に答える 1

1

数学的な文脈では、シグモイドが1.0に達することは決してないというのは正しいことです。ただし、実際のプログラミングコンテキストでは、Math.exp(-x)は最終的に非常に小さくなるため、0との差は無視でき、1.0の結果が得られます。xの範囲によっては、これは驚くべき結果ではありません。

シグモイドアプローチを使用するには、各ノードでの入力重みの合計を約1にする必要があります。これにより、シグモイドの出力が合理的になり、ウェイトがより速く収束できるようになります。

于 2012-09-30T20:16:03.083 に答える