24

多層パーセプトロンと単純なバックプロパゲーションのみをサポートする単純なニューラル ネットワーク フレームワークを実装しました。線形分類と通常の XOR 問題では問題なく動作しますが、正弦関数近似の場合、結果はそれほど満足のいくものではありません。

私は基本的に、正弦関数の 1 周期を、6 ~ 10 個のニューロンで構成される 1 つの隠れ層で近似しようとしています。ネットワークは、隠れ層の活性化関数として双曲線正接を使用し、出力の線形関数を使用します。結果は、正弦波の非常に大まかな推定のままであり、計算に時間がかかります。

参考のためにencogを見ましたが、それでも単純な逆伝播で動作させることができませんでした(回復力のある伝播に切り替えることで改善し始めますが、この同様の質問で提供されている非常に滑らかなRスクリプトよりもはるかに悪いです)。それで、私は実際に不可能なことをしようとしていますか?単純なバックプロパゲーション (運動量なし、動的学習率なし) で正弦を近似することはできませんか? R のニューラル ネットワーク ライブラリで使用される実際の方法は何ですか?

編集:単純な逆伝播でも十分な近似を見つけることは間違いなく可能であることを知っていますが(最初の重みで信じられないほど幸運であれば)、実際にはこれが実現可能なアプローチであるかどうかを知りたいと思っていました. 私がリンクした R スクリプトは、私の実装や encog の回復力のある伝播と比較して、信じられないほど高速かつ堅牢に (わずかな学習サンプルで 40 エポックで) 収束しているようです。同じパフォーマンスを得るためにバックプロパゲーション アルゴリズムを改善するためにできることがあるのだろうか、それともより高度な学習方法を検討する必要があるのでしょうか?

4

3 に答える 3

3

あなたは絶対に不可能を目指しているわけではありません。ニューラル ネットワークは普遍的な近似値です。つまり、任意の関数 F とエラー E に対して、F をE 未満のエラーで近似できるニューラル ネットワーク (単一の隠れ層のみを必要とする) が存在することを意味します。

もちろん、(それらの) ネットワークを見つけることは、まったく別の問題です。そして、私が言える最善のことは試行錯誤です...基本的な手順は次のとおりです。

  1. データをトレーニング セット (~2/3) とテスト セット (~1/3) の 2 つの部分に分割します。
  2. トレーニング セットのすべての項目でネットワークをトレーニングします。
  3. テスト セット内のすべての項目でネットワークをテスト (ただし、トレーニングは行いません) し、平均エラーを記録します。
  4. 最小のテスト エラーに達するまで (これは、ネットワークがトレーニング データで非常にうまくなり始め、他のすべてに損害を与える「過剰適合」で発生します)、または全体的なエラーが著しく減少しなくなるまで (これは、ネットワークが可能な限り優れていることを意味します)。
  5. この時点でエラーが許容範囲内であれば、作業は完了です。そうでない場合、ネットワークはトレーニング対象の機能を処理するのに十分なほど複雑ではありません。隠れニューロンを追加して最初に戻る...

場合によっては、アクティベーション関数を変更することでも違いが生じることがあります (レイヤーを追加する力が無効になるため、線形を使用しないでください)。しかし、繰り返しになりますが、何が最適かを確認するには試行錯誤が必要です。

お役に立てば幸いです(そして、これ以上役に立たないことを申し訳ありません)!

PS: 誰かがネットワークで正弦を近似しているのを見たので、それが可能であることも知っています。彼女はシグモイド活性化関数を使用していなかったと言いたいのですが、その点で私の記憶を保証することはできません...

于 2012-12-16T12:28:42.613 に答える