仮想マシンをニューラルネットワークとして実装できますか?
-
05-07-2019 - |
質問
免責事項:私は数学の天才ではなく、ニューラルネットワークの記述経験もありません。だから、ここで私が偶然言ったことを許してください。 ;)
機械学習に使用されるニューラルネットワークについては常に読んでいますが、単純な仮想マシンの作成を試している間、それらを別の方法で適用できるかどうか疑問に思い始めました。
具体的には、仮想マシンをニューラルネットワークとして作成できますか?その場合、どのように機能しますか(必要に応じてここで抽象的な説明を使用してください)。
Joycean Machineについて聞いたことがありますが、非常に曖昧な説明以外の情報は見つかりません。
編集:ここで探しているのは、ニューラルネットワークベースのVMがアセンブリを解釈する方法の正確な説明です。入力はどのように処理されますか?個々の入力はメモリアドレスになりますか?ブレインストーミングしましょう!
解決
あなたは本当に私の一日の相棒を作りました...
すでに訓練されたニューラルネットワークは通常のステートマシンとそれほど変わらないため、決定論的な命令セット用のニューラルネットワークVMを記述する意味はありません。
このようなVMを複数の命令セットまたは未知のセットでトレーニングすることは興味深いかもしれません。ただし、このようなトレーニングを実行することは実用的ではなく、%99の正しいインタープリターでさえ、従来のバイトコードに使用できます。
私が考えることができるニューラルネットワークVMの唯一の使用は、ファジーロジック構造またはAIアルゴリズムヒューリスティックを含むプログラムの実行です。
アイデアを示すための愚かなスタックマシンの例:
push [x1]
push [y1] ;start coord
push [x2]
push [y2] ;end coord
pushmap [map] ;some struct
stepastar ;push the next step of A* heuristics to accumulator and update the map
pop ;do sth with is and pop
stepastar ;next step again
... ;stack top is a map
reward ;we liked the coordinate. reinforce the heuristic
stepastar
... ;stack top is a map
punish ;we didn't like the next coordinate. try something different
ここには明示的なヒューリスティックはありません。ヒューリスティックアルゴリズムを含むすべての状態を* mapに保持すると仮定します。
見た目は馬鹿げており、完全に文脈依存ではありませんが、ニューラルネットワークはオンラインで学習しなければ意味がありません。
他のヒント
もちろん。かなり複雑なネットワークでは間違いありません。
バイトコード/オペコードの解析の多くは、ニューラルネットワークが優れているパターンマッチングです。
あなたは確かにニューラルネットワークでこれを行うことができます-私は簡単に特定のバイトコードの正しい状態遷移を学ぶことがわかりました。
入力は次のようになります。
- スタックの先頭の値
- 現在のアキュムレータの値
- 現在の命令ポインタのバイトコード
- 現在のデータポインターのバイト値
- 以前のフラグ
出力は次のようになります:
- 命令ポインタへの変更
- データポインターへの変更
- アキュムレーターへの変更
- スタック操作(プッシュ、ポップ、またはなし)
- メモリー操作(アキュムレーターへの読み取り、アキュムレーターへの書き込み、またはなし)
- 新しいフラグ
ただし、最初にこれを行う理由はわかりません。ニューラルネットワークは、単にバイトコードを直接実行する場合と比較して、効率がはるかに低くなります(十分にトレーニングしない限り間違いを犯す可能性があります)。十分なトレーニングデータを作成するために、とにかく正確なバイトコードエバリュエーターを記述する必要があります。...
また、私の経験では、ニューラルネットワークはパターン認識が得意である傾向がありますが、特定のスケール(数ビット以上)を超えると、論理演算(バイナリ加算やXORなど)の学習が非常に得意になります。したがって、命令セットの複雑さによっては、ネットワークのトレーニングに非常に長い時間がかかる場合があります。