Domanda

Disclaimer: non sono un genio matematico, né ho esperienza con la scrittura di reti neurali. Quindi, per favore, perdona qualsiasi cosa idiota che mi capiti di dire qui. ;)

Ho sempre letto delle reti neurali utilizzate per l'apprendimento automatico, ma mentre provavo a scrivere semplici macchine virtuali, ho iniziato a chiedermi se potevano essere applicate in un altro modo.

In particolare, è possibile creare una macchina virtuale come rete neurale? In tal caso, come funzionerebbe (sentiti libero di usare una descrizione astratta qui, se necessario)?

Ho sentito parlare della Joycean Machine, ma non riesco a trovare informazioni se non spiegazioni molto, molto vaghe.

EDIT: Quello che sto cercando qui è una spiegazione di come esattamente una macchina virtuale basata su rete neurale interpreterebbe l'assemblaggio. Come verrebbero gestiti gli input, ecc.? Ogni singolo input sarebbe un indirizzo di memoria? Facciamo brainstorming!

È stato utile?

Soluzione

Mi hai davvero reso amico ...

Poiché una rete neurale già addestrata non sarà molto diversa da una normale macchina a stati, non ha senso scrivere una VM di rete neurale per un set di istruzioni deterministico.

Potrebbe essere interessante addestrare una tale VM con più set di istruzioni o un set sconosciuto. Tuttavia, dubito che sarà pratico eseguire tale addestramento e anche un interprete corretto al 99% sarà di qualche utilità per il bytecode convenzionale.

L'unico uso di una VM di rete neurale che mi viene in mente è l'esecuzione di un programma che contiene costrutti logici fuzzy o euristica dell'algoritmo AI.

Alcuni stupidi esempi di macchine stack per dimostrare l'idea:

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

Non c'è euristica esplicita qui. Supponiamo solo che manteniamo tutto lo stato nella * mappa incluso l'algoritmo euristico.

Vedi che sembra sciocco e non completamente sensibile al contesto, ma una rete neurale non ha valore se non impara online.

Altri suggerimenti

Certo. Con una rete piuttosto complessa senza dubbio.

Gran parte dell'analisi di bytecode / codici operativi è la corrispondenza dei modelli in cui eccellono le reti neurali.

Potresti certamente farlo con una rete neurale - Potrei facilmente vedere l'apprendimento delle transizioni di stato corrette per un dato codice byte.

L'input potrebbe essere qualcosa del tipo:

  • Valore in cima allo stack
  • Valore nell'accumulatore corrente
  • Codice byte al puntatore dell'istruzione corrente
  • Valore byte al puntatore dati corrente
  • Flag precedenti

L'output potrebbe essere qualcosa del tipo:

  • Passa al puntatore alle istruzioni
  • Cambia puntatore dati
  • Cambia in accumulatore
  • Operazione stack (push, pop o niente)
  • Operazione memoria (leggi su accumulatore, scrivi accumulatore o niente)
  • Nuove bandiere

Tuttavia, non sono sicuro del motivo per cui vorresti farlo in primo luogo. Una rete neurale sarebbe molto meno efficiente (e potenzialmente commetterebbe errori a meno che non sia stata addestrata abbastanza bene) rispetto all'esecuzione diretta del bytecode. Probabilmente avresti comunque bisogno di scrivere un accurato valutatore bytecode solo per creare abbastanza dati di formazione ....

Inoltre, nella mia esperienza, le reti neurali tendono ad essere brave nel riconoscimento di schemi ma molto cattive nell'apprendimento di operazioni logiche (come l'aggiunta binaria o XOR) una volta che si supera una certa scala (cioè più di qualche bit). Pertanto, a seconda della complessità del set di istruzioni, la rete potrebbe richiedere molto tempo per la formazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top