4

私は問題を解決するためにニューラルネットワークを使用しようとしています。私はCourseraで提供されている機械学習コースからそれらについて学び、FANNがニューラルネットワークのRuby実装であることを知ってうれしく思いました。そのため、飛行機を再発明する必要はありませんでした。

しかし、なぜFANNが私にそのような奇妙な出力を与えているのか私は本当に理解していません。クラスで学んだことに基づいて、

試合の結果であるトレーニングデータのセットがあります。プレーヤーには番号が与えられ、対戦相手には番号が与えられ、結果は勝ちの場合は1、負けの場合は0になります。データは混乱のために少しうるさいですが、それほどひどくはありません。私の目標は、どのレーティングギャップが混乱しやすいかを見つけることです。たとえば、私の直感では、レーティングの精度が低いため、レーティングの低い一致はより多くの混乱を伴う傾向があることがわかります。

そこで、約100例のトレーニングセットを入手しました。各例は(評価、デルタ)=>1/0です。したがって、これは分類の問題ですが、ロジスティック回帰タイプのグラフに適しているとは思いません。ニューラルネットワークの方が正しいように見えました。

私のコードが始まります

training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)

次に、ニューラルネットワークを設定します

network = RubyFann::Standard.new(
  :num_inputs=>2, 
  :hidden_neurons=>[8, 8, 8, 8], 
  :num_outputs=>1)

クラスでは、合理的なデフォルトは、各隠れ層に同じ数のユニットを持たせることであることを学びました。私はこれをどのように行うか、または私がまだ何をしているのか本当にわからないので、デフォルトを使用しました。

network.train_on_data(training_data, 1000, 1, 0.15)

そして最後に、一連のサンプル入力評価を段階的に調べ、各段階でデルタを増やして、結果が> 0.5から<0.5に切り替わるまで、実際には約0と約1になりました。 0.45や0.55のように。

これを1回実行すると、すべての入力に対して0が返されました。同じデータでもう一度2回実行したところ、負の数の減少傾向と正の数の増加傾向が得られました。これは、まったく逆の予測です。

十分な機能が含まれていないのではないかと思ったので、(rating**2delta**2)を追加しました。残念ながら、その後、毎回、すべての入力に対して開始デルタまたは最大デルタのいずれかを取得し始めました。

なぜこのような異なる結果が得られるのか、Ruby-FANNが何を言っているのか、私にはよくわかりません。これは、ライブラリを理解していないこともありますが、ニューラルネットワークについて学び始めたばかりで、何かが足りないためだと思います。大きくて明白です。十分なトレーニングデータがありませんか?より多くの機能を含める必要がありますか、問題は何ですか?それを修正するか、より良い方法を学ぶにはどうすればよいですか?

4

1 に答える 1

1

パラメータで少し遊んでみませんか?最初は 2 層のみを強くお勧めします。多くの問題に対して十分であるという数学的な証明がどこかにあるはずです。ニューロンが多すぎる場合、NN は実際に何かを学習するのに十分なエポックを持たない..そのため、ガマと同様にエポックの数で遊ぶこともできます..あなたの場合、それは 0.15 だと思います..少し大きいものを使用する場合NN の値を少し速く学習する必要があります (0.3 または 0.7 を試すことを恐れないでください)。ガマの正しい値は、通常、重みの間隔または入力の正規化に依存します。

おそらく、実行ごとに新しい初期化が行われ、まったく異なるネットワークがあり、前のものとは異なる方法で学習するため、NN はこのような異なる結果を示します (異なる重みはより高い値を持つため、NN の異なる部分は同じことを学習します)もの)。

私はこのライブラリに精通していません.NNの経験を書いているだけです. これらの何かが役立つことを願っています..

于 2012-10-09T08:55:02.373 に答える