Sconto sui premi nell'apprendimento rinforzato

3

Ho letto il libro di Sutton and Barto e ho seguito le lezioni di David Silver su youtube. I principi di base hanno molto senso per me e ho costruito un labirinto (una griglia arbitraria in cui l'agente può spostarsi su, giù, a sinistra a meno che non sia bloccato da un muro) agente risolutivo che impara a caso percorsi di campionamento e come impara pesi la sua scelta "casuale" in base alla quantità di ricompensa ricevuta.

Poiché l'agente può solo assegnare un valore allo stato (la sua scelta di direzione quando si passa al quadrato successivo) una volta raggiunto l'obiettivo, la ricompensa viene ritardata. Quando l'agente raggiunge l'obiettivo, ho una serie di scelte che l'hanno portato.

Il mio primo pensiero è stato quello di scontare la ricompensa assegnata a ogni casella di quella catena di una percentuale pari al 90% per ogni casella di distanza dall'obiettivo. Quindi

GOAL   = 1
GOAL-1 = 1 * 0.9
GOAL-2 = 1 * 0.9^2
...

Tuttavia questo si traduce in una ricompensa così piccola da essere priva di significato in una griglia qualsiasi più grande di circa 5x5.

I premi devono differire ovviamente per le scelte che hanno avuto minore influenza sul raggiungimento dell'obiettivo, ma non riesco a capire come assegnarli sensibilmente.

    
posta starfish 03.08.2015 - 18:54
fonte

1 risposta

1

Disclaimer - outis is right in his comment, this isn't good approach. Still, I'll try to answer your question, I'm curious if that'll work.

OK, iniziamo con la notazione.

  • reward - premio base, nel tuo esempio = 1
  • modifier(i) - modifica della ricompensa per il punto, nel tuo esempio = 0.9^i
  • total(i) - ricompensa totale per il passaggio i , nell'esempio reward*modifier(i)
  • I - lunghezza della soluzione, ovvero il numero di passaggi necessari per risolvere il problema (varia a seconda della soluzione, ma non dovrebbe essere un problema)
  • total(I) - premio minimo ricercato

Il tuo problema sorge perché la sequenza modifier(i) converge a 0 in infinito.

Usa qualcos'altro. Scegli quali passaggi, primo o ultimo, hanno un impatto maggiore sulla tua soluzione. Se la maggior parte del guadagno deriva dai primi passi, la sequenza modifier(i) dovrebbe essere decrescente, e dovrebbe essere crescente nell'altro caso. Supponiamo che i primi passi siano più importanti. In caso contrario, utilizza modifier(I-i) anziché modifier(i) .

Se vuoi total(0)=1 e total(I)=0.5 con progresso geometrico, allora sai:

reward=1
reward*(q^I)=0.5

dove q è fattore di scala. Ora lo calcoli come:

q = 0.5^(-I)

Voila! Indipendentemente dalla durata della soluzione, ogni passaggio avrà un impatto non zero sull'apprendimento.

Puoi anche usare altre sequenze, ad esempio lineare:

total(i) = reward-i*a
reward-I*a = r 

risolto per a .

Ovviamente queste non sono le uniche opzioni - potresti usare per esempio sqrt o log per il modificatore ascendente (ma quelle non sono le uniche opzioni - usa la tua immaginazione qui). Penso che capirai da solo la matematica.

    
risposta data 03.08.2015 - 21:18
fonte

Leggi altre domande sui tag