問題タブ [mlp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 機械学習におけるデータのテストとトレーニング
ANN 用に 2000 以上のデータ セットがあります。その中に MLPRegressor を適用しました。私のコードは正常に動作しています。しかし、テストのために、たとえば 50 個のデータ セットがあるなどのテスト値を修正したいと考えています。それから、最初の 20 の値をテストしたいと思います。コードでこれを修正するにはどうすればよいですか? 次のコードを使用しました。
machine-learning - MLP を使用してチェス エンジンを作成するという私のアプローチの何が問題になっていますか?
機械学習を使用してチェス エンジンを作成していますが、デバッグで問題が発生しています。プログラムの何が問題なのかを理解するのに助けが必要です。助けていただければ幸いです。
私は調査を行い、複数の成功したプロジェクトからアイデアを借りました。アイデアは、強化学習を使用して NN に強い立場と弱い立場を区別するように教えることです。
2000 以上の Elo で 300 万のゲームを収集し、独自の方法でそれらにラベルを付けました。何百ものゲームを調査した結果、どのゲームでも最後の 10 ターンではバランスが変わらず、勝った側が強いアドバンテージを持っていると想定しても安全であることがわかりました。そこで、最後の 10 ターンからポジションを選び、2 つのラベルを作成しました。1 つは白の勝利、0 は黒の勝利です。ドローポジションは含めませんでした。偏りを避けるために、私は両陣営の勝利とラベル付けされた偶数の位置と、次のターンでの両陣営の偶数の位置を選びました。
各位置 I は、773 要素の長さのベクトルで表されます。チェス盤のすべてのマスのすべての駒を、キャスリング権と次のターンとともに、1 と 0 でコーディングしました。私のシーケンシャル モデルには、773 個のニューロンを持つ入力層と 1 つのニューロンを持つ出力層があります。レイヤー 1、2、3 にそれぞれ 1546、500、50 の隠れユニットを持つ 3 つの隠れ層の深い MLP を使用し、ドロップアウト正則化値をそれぞれ 20% に設定しました。隠れ層は非線形活性化関数 ReLU で接続され、最終出力層はシグモイド出力を持ちます。0.0001 に設定した学習率を除いて、バイナリ クロスエントロピー損失関数と Adam アルゴリズムをすべての既定のパラメーターで使用しました。
検証には、ポジションの 3% を使用しました。最初の 10 エポックの間に、検証精度は 90% から 92% に徐々に上昇し、トレーニング精度よりわずか 1% 遅れています。さらにトレーニングすると、オーバーフィッティングが発生し、トレーニングの精度が上がり、検証の精度が低下します。
トレーニング済みのモデルを複数の位置で手動でテストしたところ、かなり悪い結果が得られました。全体として、コンバージョン スクエアに近いピースまたはポーンが多い場合、モデルはどちらの側が勝つかを予測できます。また、次のターンの側にわずかなアドバンテージ (0.1) を与えます。しかし、全体としてはあまり意味がありません。ほとんどの場合、黒を優先し (~0.3)、セットアップを適切に考慮していません。たとえば、黒側が勝つ可能性がほぼ 100% であるかのように、開始位置を ~0.0001 とラベル付けします。場合によっては、関係のない位置の変換によって、予測できない評価の変化が生じることがあります。黒のキングが特定のマス目にない限り、各サイドから 1 つのキングと 1 つのクイーンは通常、白 (0.32) の失われた位置と見なされますが、チェス盤のバランスは実際には変わりません。
プログラムをデバッグするために私がしたこと:
間違いを犯していないことを確認するために、各ポジションがどのように記録されているかを段階的に分析しました。次に、トレーニングの直前に、最終的な numpy 配列から 12 の位置を選び出し、それを変換して通常のチェス盤で分析しました。
同じゲームのさまざまな数のポジション (1 と 6) を使用して、似たようなポジションを多用しすぎてもオーバーフィッティングが速くならないことを確認しました。ちなみに、データベース内の各ゲームの 1 つの位置でも、300 万のデータ セットが得られました。いくつかの研究論文によると、これで十分なはずです。
私が使用するポジションが単純すぎないことを確認するために、それらを分析しました。そのうちの 130 万は 36 ポイント (ナイト、ビショップ、ルーク、クイーン。ポーンはカウントに含まれていません)、140 万は 19 ポイントで、30 万はそれ以下でした。