この質問は難しいものです。ニューラル ネットワークに動的入力を与えるにはどうすればよいでしょうか?
この質問に答えることは、コンピューター ビジョンや音声認識以外のアプリケーションにディープ ラーニングを使用する最新の AI の進歩に確実に役立ちます。ニューラルネットワークの素人のために、この問題をさらに説明します。
たとえば、次の簡単な例を見てみましょう。
「三目並べ」のゲームで勝つ、負ける、または引き分けの確率を知る必要があるとします。
したがって、私の入力は、状態 (1-あなた、2-敵、0-空) を表す [3,3] 行列になる可能性があります。
[2. 1. 0.]
[0. 1. 0.]
[2. 2. 1.]
以前にトレーニングされた隠れ層、重みの [3,1] 行列が既にあると仮定しましょう。
[1.5]
[0.5]
[2.5]
したがって、基本的に 2 つのy(x)=W*xの間の行列乗算で構成される単純な活性化関数を使用すると、出力に次の [3,1] 行列が得られます。
[2. 1. 0.] [1.5] [3.5]
[0. 1. 0.] * [0.5] = [0.5]
[2. 2. 1.] [2.5] [6.5]
ソフトマックス関数がなくても、引き分けになる可能性が最も高いことがわかります。
しかし、この同じニューラル ネットワークを 5x5 の三目並べゲームで機能させたい場合はどうすればよいでしょうか?
それは 3x3 と同じロジックを持っていますが、より大きくなっています。ニューラルネットワークはそれを処理できる はずです
次のようなものがあります。
[2. 1. 0. 2. 0.]
[0. 2. 0. 1. 1.] [1.5] [?]
[2. 1. 0. 0. 1.] * [0.5] = [?] IMPOSSIBLE
[0. 0. 2. 2. 1.] [2.5] [?]
[2. 1. 0. 2. 0.]
しかし、この乗算を計算することは不可能です。次のように、トレーニングされていない重み (この場合は 0 で初期化) が原因でニューラル ネットワークが失敗するため、レイヤーを追加するか、以前にトレーニングしたものを変更してRETRAINする必要があります。
input 1st Layer output1
[2. 1. 0. 2. 0.] [0. 0. 0.] [6.5 0. 0.]
[0. 2. 0. 1. 1.] [1.5 0. 0.] [5.5 0. 0.]
[2. 1. 0. 0. 1.] * [0.5 0. 0.] = [1.5 0. 0.]
[0. 0. 2. 2. 1.] [2.5 0. 0.] [6. 0. 0.]
[2. 1. 0. 2. 0.] [0. 0. 0.] [6.5 0. 0.]
2nd Layer output1 final output
[6.5 0. 0.]
[5.5 0. 0.]
[0. 0. 0. 0. 0.] * [1.5 0. 0.] = [0. 0. 0.] POSSIBLE
[6. 0. 0.]
[6.5 0. 0.]
最初のレイヤーを拡張し、重みがゼロの新しいレイヤーを追加したため、結果は明らかに決定的ではありません。ソフトマックス関数を適用すると、ニューラル ネットワークがすべての可能な結果に対して 33.3% の確率を返すことがわかります。もう一度トレーニングする必要があります。
さまざまな入力サイズに適応できる一般的なニューラル ネットワークを作成したいのは明らかですが、この問題の解決策はまだ考えていません。だから、スタックオーバーフローが役立つかもしれないと思った。何千もの頭が一人よりもよく考えます。何か案は?