エコー状態ネットワークに精通している人はいますか?C#でエコー状態ネットワークを作成しました。目的は、入力をGOODとNOTGOODに分類することだけでした。入力はdouble数の配列です。この分類では、エコー状態ネットワークが最善の選択ではないことはわかっていますが、この方法で行う必要があります。
私の問題は、ネットワークをトレーニングした後、一般化できないことです。(教育入力ではなく)外部データを使用してネットワークを実行すると、約50〜60%の良好な結果しか得られません。
詳細:私のエコー状態ネットワークは、関数近似器のように機能する必要があります。関数の入力は17個のdouble値の配列であり、出力は0または1です(入力を不良または良好の入力に分類する必要があります)。
だから私はネットワークを作成しました。これには、17個のニューロンを含む入力層、ネロン数を調整できるリザーバー層、および0または1が必要な出力用に1個のニューロンを含む出力層が含まれます。より簡単な例では、出力フィードバックは使用されません(出力フィードバックを使用しようとしました)同様に、しかし何も変わっていません)。
リザーバー層の内部マトリックスも調整可能です。調整可能なスパースネス比を使用して、2つのdouble値(最小、最大)の間の重みを生成します。値が大きすぎる場合は、マトリックスが1よりも小さいスペクトル半径を持つように標準化されます。リザーバー層は、シグモイド関数とタン活性化関数を持つことができます。
入力レイヤーは、ランダムな値でリザーバーレイヤーに完全に接続されています。したがって、トレーニング状態で、トレーニングデータを使用して内部X(n)リザーバーのアクティブ化を計算し、それらをマトリックス行表示に収集します。目的の出力データマトリックス(現在は1 ot 0の値を持つベクトル)を使用して、出力の重さ(リザーバーから出力まで)を計算します。リザーバーは出力に完全に接続されています。誰かがエコー状態ネットワークを使用した場合、今私が話していることです。これは疑似逆行列です。
問題は、ネットワークを調整して一般化を改善するにはどうすればよいかということです。外部データセット(トレーニングデータセットではない)を使用して、目的の出力の50〜60%以上をヒットすること。トレーニングデータセットを使用してネットワークを再度実行すると、80〜90%の非常に良い結果が得られますが、より一般化することが必要です。
誰かがエコー状態ネットワークでもこの問題を抱えていることを願っています。