Question

Avertissement: je ne suis pas un génie des mathématiques, je n'ai aucune expérience de l'écriture de réseaux de neurones. Alors, s'il te plaît, pardonne toutes les bêtises que je dis ici. ;)

J'ai toujours entendu parler des réseaux de neurones utilisés pour l'apprentissage automatique, mais tout en essayant d'écrire des machines virtuelles simples, j'ai commencé à me demander s'ils pourraient être appliqués d'une autre manière.

Plus précisément, une machine virtuelle peut-elle être créée en tant que réseau de neurones? Si oui, comment cela fonctionnerait-il (n'hésitez pas à utiliser une description abstraite ici, le cas échéant)?

J'ai entendu parler de la machine Joycean, mais je ne trouve aucune information à part des explications très très vagues.

MODIFIER: Ce que je recherche ici, c'est une explication de la manière exacte dont une machine virtuelle basée sur un réseau neuronal interpréterait un assemblage. Comment les entrées seraient-elles traitées, etc.? Chaque entrée individuelle serait-elle une adresse mémoire? Faisons un brainstorming!

Était-ce utile?

La solution

Vous avez vraiment fait ma journée mon pote ...

Etant donné qu'un réseau de neurones déjà formé ne sera pas très différent d'une machine à états normale, il est inutile d'écrire une machine virtuelle de réseau neuronal pour un jeu d'instructions déterministes.

Il peut être intéressant de former une telle machine virtuelle avec plusieurs jeux d’instructions ou un jeu inconnu. Cependant, je doute qu’il soit pratique d’effectuer une telle formation et même un interprète% 99 correct sera d’une quelconque utilité pour les codes octets conventionnels.

La seule utilisation d’une machine virtuelle de réseau neuronal à laquelle je peux penser est d’exécuter un programme contenant des constructions de logique floue ou des méthodes heuristiques de l’algorithme AI.

Un exemple stupide de machine à piles pour illustrer l'idée:

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

Il n'y a pas d'heuristique explicite ici. Supposons simplement que nous conservons tous les états dans * map, y compris l’algorithme heuristique.

Vous voyez que cela semble ridicule et pas complètement sensible au contexte, mais un réseau de neurones n'a aucune valeur s'il n'apprend pas en ligne.

Autres conseils

Bien sûr. Avec un réseau assez complexe sans aucun doute.

Une grande partie de l'analyse des bytecodes / opcodes est une correspondance de modèle pour laquelle les réseaux de neurones excellent.

Vous pouvez certainement le faire avec un réseau de neurones - je pourrais facilement voir apprendre les transitions d'état correctes pour un morceau de code secondaire donné.

L'entrée pourrait être quelque chose comme:

  • Valeur en haut de la pile
  • Valeur dans l'accumulateur actuel
  • Code d'octet au pointeur de l'instruction en cours
  • Valeur en octets au pointeur de données actuel
  • Drapeaux précédents

Le résultat pourrait être quelque chose comme:

  • Passer au pointeur d'instruction
  • Passer au pointeur de données
  • Changer d'accumulateur
  • Opération d'empilement (push, pop ou rien)
  • Opération de mémoire (lecture dans l'accumulateur, écriture dans l'accumulateur ou rien)
  • Nouveaux drapeaux

Cependant - je ne suis pas sûr de savoir pourquoi vous voudriez le faire en premier lieu. Un réseau de neurones serait beaucoup moins efficace (et risquerait probablement de faire des erreurs si vous ne l'étiez pas suffisamment bien formé) par rapport à l'exécution directe du bytecode. Vous auriez probablement besoin d'écrire un évaluateur de bytecode précis, de toute façon, juste pour créer suffisamment de données d'apprentissage ....

De plus, selon mon expérience, les réseaux de neurones ont tendance à être bons pour la reconnaissance des formes mais très mauvais pour apprendre les opérations logiques (telles que l’addition binaire ou les XOR) une fois que vous avez dépassé une certaine échelle (c’est-à-dire plus de quelques bits). Ainsi, en fonction de la complexité de votre jeu d'instructions, la formation du réseau peut prendre beaucoup de temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top