問題-私は1から10のカードの数を10枚持っています。今度は、5枚のカードを追加すると36枚、残りの5枚のカードの積が360枚になるようにカードを配置する必要があります。
私はJavaでカードの問題を解決するためにGAを作成することに成功しました。今、私はニューラルネットワークで同じ問題を解決しようと考えています。NNでこれを解決することは可能ですか?どのようなアプローチを取るべきですか?
問題-私は1から10のカードの数を10枚持っています。今度は、5枚のカードを追加すると36枚、残りの5枚のカードの積が360枚になるようにカードを配置する必要があります。
私はJavaでカードの問題を解決するためにGAを作成することに成功しました。今、私はニューラルネットワークで同じ問題を解決しようと考えています。NNでこれを解決することは可能ですか?どのようなアプローチを取るべきですか?
この問題は、ニューラルネットワークで直接解決するのは困難です。ニューラルネットワークには合計や積の概念がないため、有効なソリューションと無効なソリューションの違いを直接区別することはできません。
十分な例を作成してラベルを付けた場合、ニューラルネットワークは、すべてを記憶するだけで、「良い」配置と「悪い」配置を区別することを学習できる可能性があります。しかし、これを行うには非常に非効率的で不正確な方法であり、やや無意味です。ニューラルネットワークをトレーニングするためのデータを作成するには、問題を解決する方法を知っている別のプログラムが必要になります。
PS GAをうまく機能させることができたのは少し幸運だと思います。問題が十分に小さいため、GAが回答の近くで考えられる解決策のほとんどを試すことができたため、うまくいったと思います。そのため、やがて正解に偶然出くわします。
ニューラルネットワーク(NN)がこのタスクに最適でない理由に関する@mikeraのコメントをフォローアップするには、NNが通常どのように使用されるかを検討することが役立ちます。
NNは通常、教師あり学習タスクで使用されます。つまり、実装者は、入力の多くの例と、その入力に伴う正しい出力を提供します。次に、NNは、提供された入力/出力ペアをキャプチャし、うまくいけば、これまでに見られなかった他の多くの入力/出力ペアもキャプチャする一般的な関数を見つけます。
あなたの問題では、特定の最適化を解いているので、行うべきトレーニングはあまりありません。正解は1つ(またはそれ以上)です。したがって、NNは実際にはそのような問題のために設計されていません。
合計/積がないという概念は、必ずしもNNを傷つけるわけではないことに注意してください。NNがこれらの機能から直接学習できるように、合計機能と製品機能を備えた独自の入力レイヤーを作成する必要があります。しかし、この問題ではあまり役に立ちません。
また、問題が非常に小さいため、数のすべての組み合わせ(10!= 3,628,800)の単純な列挙でさえ、せいぜい数秒で達成できるはずであることに注意してください。