2012-10-07 10 views
5

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

しかし、なぜFANNが私にそのような変な出力を与えているのか、私は理解できません。私が授業で学んだことに基づいて、

私はマッチの結果である一連のトレーニングデータを持っています。プレイヤーには数字が与えられ、相手には数字が与えられ、結果は勝利の場合は1、敗北の場合は0になります。データは混乱のために少し騒々しいですが、それほどひどくはありません。私の目標は、どんな格付け格差が転落する傾向があるのか​​を見極めることです。例えば、私の直感は、格付けの精度が低いため格付けの低いマッチはより多くの混乱を招く傾向があると言います。

私は約100例のトレーニングセットを手に入れました。各例は(rating、delta)=> 1/0です。だから、それは分類問題ですが、私がロジスティック回帰型グラフに役立つとは思っていないものがあり、ニューラルネットワークはもっと正しいと思われます。私はその後、クラスで

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

とニューラルネットワークをセットアップ

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

私のコードが始まる、私は合理的にデフォルトが同じ数の各隠れ層を持つことであることを学びました単位。私はこれをどうやってやっているのか、私がまだやっていることは本当に分からないので、私はデフォルトに行った。

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

そして最後に、Iは単位のサンプルの入力定格のセットを行って、各増分で、結果があることから切り替わるまでデルタを増加> 0.5 < 0.5、Iが約0であることを取って約1であったが、実際には0.45と0.55に似ていた。

これを1回実行すると、入力ごとに0が返されました。私は同じデータで2回再度実行し、正の数の減少傾向、負の数の減少傾向、全く反対の予測を得ました。

私は多分十分な機能を含んでいないと思ったので、私は(rating**2delta**2)を付け加えました。残念なことに、私はいつでも毎回の入力に対して、開始デルタまたは最大デルタを取得し始めました。

Ruby-FANNが私に言っているような発散的な結果が出ているのは分かりません。なぜなら、私はライブラリを理解できないからです。また、神経ネットワーク大きくて明白なものを紛失しています。十分なトレーニングデータがないのですか、もっと多くの機能を追加する必要がありますか?問題は何ですか?どのように解決できますか?

+0

私はMLについてよく分かりませんが、バイアスされたサンプルはバイアスされた結果を引き起こします。ほとんどのサンプルデータが勝つためのものであれば、モデルを使用したときに勝てる。 – iouri

+0

これは損失より多くの勝利ですが、結果は異なるランでどうして違いますか? –

答えて

1

パラメータを少し再生するとどうなりますか?最初は私は非常に2つの層だけをお勧めします。どこかに多くの問題があれば十分であるという数学的証明が必要です。あなたが多すぎるニューロンを持っているなら、あなたのNNは本当に何かを学ぶには十分なエポックを持っていません。あなたはまた、エポックの数だけでなく、ガマも遊ぶことができます。あなたのケースでは、それは0.15です。あなたのNNは少し早く(0.3や0.7を試すことを恐れてはいけません)学ばなければならない値です。ガマの正しい値は通常、体重の間隔や入力の正規化に依存します。

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

私はこのライブラリに精通していません。私はNNでいくつかの経験を書いています。

関連する問題