Domanda

Ho una rete neurale artificiale che riproduce Tris, ma non è ancora completa.


Quello che ho ancora:

  • la serie di ricompense "R [t]" con valori interi per ogni passo temporale o mossa "t" (1= il giocatore A vince, 0= pareggio, -1= vince il giocatore B)
  • I valori di input vengono propagati correttamente attraverso la rete.
  • la formula per la regolazione dei pesi:

inserisci qui la descrizione dell'immagine


Cosa manca:

  • l'apprendimento TD: ho ancora bisogno di una procedura che "backpropagate" gli errori della rete utilizzando l'algoritmo TD (λ).

Ma non capisco veramente questo algoritmo.


Il mio approccio finora ...

Il parametro di decadimento della traccia λ dovrebbe essere "0,1" poiché gli stati distali non dovrebbero ottenere gran parte della ricompensa.

Il tasso di apprendimento è "0,5" in entrambi i livelli (input e nascosto).

È un caso di ricompensa ritardata: la ricompensa rimane "0" fino alla fine del gioco. Quindi la ricompensa diventa "1" per la vittoria del primo giocatore, "-1" per la vittoria del secondo giocatore o "0" in caso di pareggio.


Le mie domande:

  • Come e quando calcoli l'errore di rete (errore TD)?
  • Come puoi implementare la "propagazione inversa" dell'errore?
  • Come vengono regolati i pesi utilizzando TD (λ)?

Grazie mille in anticipo :)

È stato utile?

Soluzione

Se sei seriamente intenzionato a farlo funzionare, allora capire TD-lambda sarebbe molto utile.Il libro di Sutton e Barto, "Reinforcement Learning" è disponibile gratuitamente inFormato HTML e copre questo algoritmo in dettaglio.Fondamentalmente, ciò che TD-lambda fa è creare una mappatura tra uno stato del gioco e la ricompensa prevista alla fine del gioco.Man mano che le partite vengono giocate, gli stati che hanno maggiori probabilità di portare a stati vincenti tendono a ottenere valori di ricompensa attesi più elevati.

Per un gioco semplice come il tris, è meglio iniziare con una mappatura tabulare (basta tenere traccia del valore di ricompensa previsto per ogni possibile stato del gioco).Quindi, una volta che hai funzionato, puoi provare a utilizzare un NN per la mappatura.Ma suggerirei di provare prima un progetto NN separato e più semplice ...

Altri suggerimenti

Anch'io sono stato confuso su questo, ma credo che sia così che funziona:

A partire dal nodo finale, si seleziona R, (output ricevuto) ed E, (output previsto).Se E= R, va bene e non devi apportare modifiche.

Se E!= R, vedi quanto era lontano, in base alle soglie e quant'altro, quindi sposta i pesi o la soglia su o giù un po '.Quindi, in base ai nuovi pesi, torni indietro e indovina se era troppo alto o troppo basso e ripeti, con un effetto più debole.

Non ho mai provato questo algoritmo, ma fondamentalmente è la versione dell'idea per come la intendo io.

Per quanto ricordo, fai l'addestramento con un set di risultati noto - quindi calcoli l'output per un input noto e sottrai il tuo valore di output noto da quello - questo è l'errore.

Quindi si utilizza l'errore per correggere la rete: per un singolo strato NN regolato con la regola delta, so che un epsilon di 0,5 è troppo alto - qualcosa come 0,1 è migliore - più lento ma migliore.Con la backpropagation è un po 'più avanzato, ma per quanto ricordo la descrizione dell'equazione matematica di un NN è complessa e difficile da capire - non è così complicata.

dai un'occhiata a http://www.codeproject.com/KB/recipes/BP.aspx

o google per "backpropagation c": probabilmente è più facile da capire nel codice.

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