0

これは、ニューラルネットワークのパフォーマンスに関するより高いレベルの質問です。私が抱えている問題は、レイヤーあたりのニューロン数が多いため、ネットワークが頻繁に完全に愚かになることです。それらは一貫していません。層が60ニューロン(常に3層)より大きくなると、一般的な成功と失敗の確率は約50/50になるようです。

10〜200のサイズの入力層と非表示層を持つネットワークに同じ関数を教えることによってこれをテストしました。成功率は0-1%または90 +%のいずれかですが、その間にはありません。これを視覚化するために、グラフを作成しました。失敗は、5k回のトレーニング反復後の200個のデータセットに対する誤った応答の総数です。imgur

ネットワークが成功または失敗する数は、実験を実行するたびに変化することに注意することも重要だと思います。私が思いついた唯一の原因は極小値です(ただし、これがあなたの答えに影響を与えないようにしてください。私はこれに不慣れであり、極小値の可能性を最小限に抑える最初の試みは効果がないようです)。

したがって、最終的な問題は、何がこの動作を引き起こす可能性があるかということです。なぜこれほどひどく矛盾しているのですか?

PythonコードはGithubにあり、このグラフを生成したコードはtest.pyのtestHugeNetworkメソッドです(172行目)。ネットワークアルゴリズムの特定の部分が役立つ場合は、関連するスニペットを投稿できてうれしいです。

4

1 に答える 1

0

私の推測では、ネットワークはギザギザのエラーサーフェス全体で大きく振動しています。エラー率を低くしてみると役立つ場合があります。しかし、まず第一に、ネットワークが何をしているのかをよりよく理解するためにできることがいくつかあります。

  • トレーニングエポックにわたる出力エラーをプロットします。これにより、トレーニングプロセスで問題が発生した場合に表示されます。
  • 重み行列と出力のグラフィック表現(画像)があります。不規則性を見つけるのがはるかに簡単になります。

ANNトレーニングの主な問題は、シグモイド関数の飽和です。ロジスティック関数とtanhの両方の漸近線に向かって、導関数は0に近く、数値的にはおそらくゼロですらあります。その結果、ネットワークは非常にゆっくりと学習するか、まったく学習しません。この問題は、シグモイドの入力が大きすぎる場合に発生します。これについてできることは次のとおりです。

  • ニューロンが受け取る入力の数に比例して重みを初期化します。標準的な文献では、平均=0および標準偏差1/ sqrt(m)の分布からそれらを引き出すことが提案されています。ここで、mは入力接続の数です。
  • ネットワークが最も学習できる場所に教師がいるように、教師をスケーリングします。つまり、活性化関数が最も急勾配である場合、つまり一次導関数の最大値です。tanhの場合、代わりに関数をf(x)= 1.7159 * tanh(2/3 * x)にスケーリングし、教師を[-1、1]に保つことができます。ただし、導関数をf'(x)= 2/3 * 1.7159 *(1-tanh ^ 2(2/3 * x)に調整することを忘れないでください。

さらに詳しい説明が必要な場合はお知らせください。

于 2012-12-02T21:37:05.977 に答える