Quanto è efficiente il Q-learning con le reti neurali quando esiste un'unità di output per azione?


9

Contesto:
sto usando l'approssimazione del valore Q della rete neurale nel mio compito di apprendimento di rinforzo. L'approccio è esattamente lo stesso di quello descritto in questa domanda , tuttavia la domanda stessa è diversa.

In questo approccio il numero di risultati è il numero di azioni che possiamo intraprendere. E in parole semplici, l'algoritmo è il seguente: esegui l'azione A, esplora la ricompensa, chiedi a NN di prevedere i valori Q per tutte le azioni possibili, scegli il valore Q massimo, calcola Q per un'azione A particolare come R + max(new_state_Q). Adatta il modello ai valori Q previsti con solo uno di essi sostituito da R + max(new_state_Q).

Domanda: quanto è efficace questo approccio se il numero di uscite è elevato?

Tentativo: supponiamo che ci siano 10 azioni che possiamo intraprendere. Ad ogni passaggio chiediamo al modello di prevedere 10 valori, in tenera età del modello questa previsione è un disastro totale. Quindi modifichiamo 1 valore dell'output e adattiamo il modello a questi valori.

Ho due pensieri opposti su quanto sia buono / cattivo questo approccio e non riesco a decidere quale sia giusto:

  • Da un punto di vista, stiamo allenando ogni neurone 9 volte su dati casuali e solo una volta su dati vicini al valore reale. Se NN ha previsto 5 per l'azione A nello stato S, ma il valore reale è -100, inseriremo NN 9 volte con valore 5 e quindi una volta con valore -100. Sembra pazzo.
  • Da un altro punto di vista, l'apprendimento della rete neurale viene implementato come propagazione all'indietro di un errore , quindi quando il modello ha previsto 5 e lo stiamo allenando su 5 non imparerà nulla di nuovo, poiché l'errore è 0. I pesi non vengono toccati . E solo quando calcoleremo -100 e lo adatteremo al modello, eseguirà il ricalcolo del peso.

Quale opzione è giusta? Forse c'è qualcos'altro che non sto prendendo in considerazione?

AGGIORNAMENTO: Per "quanto efficiente" intendo paragonare un approccio con un risultato - premio previsto. Naturalmente, l'azione farà parte dell'input in questo caso. Quindi l'approccio n. 1 prevede previsioni per tutte le azioni basate su alcuni stati, l'approccio n. 2 prevede previsioni per azioni specifiche intraprese in alcuni stati.


È molto difficile dare una risposta definitiva a questa domanda nella sua forma attuale: "quanto è efficace questo approccio?" Bene, questo dipende ... rispetto a cosa? Quale approccio alternativo proporresti che potrebbe essere o non essere più efficiente?
Dennis Soemers,

Ciao @DennisSoemers. Grazie per la tua domanda Ho aggiornato il mio post. Fondamentalmente, l'approccio alternativo sta avendo un risultato: la ricompensa. E ulteriori ingressi N per tutte le azioni possibili. L'approccio principale è INPUT (Stato) e OUTPUT (N Premi per N azioni). L'alternativa è I (Stato + Azione) e O (Ricompensa).
Serhiy,

Risposte:


1

Quindi le due opzioni che vogliamo confrontare sono:

  1. Input = rappresentazione dello stato, Output = 1 nodo per azione
  2. Input = rappresentazione dello stato + codifica one-hot delle azioni, Output = 1 nodo

Seguendo la mia intuizione, dubito che ci sia una differenza significativa in termini di potere di rappresentazione o velocità di apprendimento (in termini di iterazioni) tra queste due opzioni.

Per quanto riguarda la potenza di rappresentazione, la prima opzione fornisce una rete leggermente "più piccola" vicino agli ingressi e una rete "più ampia" vicino alle uscite. Se per qualsiasi motivo fosse utile avere più pesi vicini ai nodi di input, ad esempio, ciò potrebbe essere praticamente raggiunto rendendo il primo livello nascosto (vicino agli input) anche un po 'più grande.

Per quanto riguarda la velocità di apprendimento, la preoccupazione che sembri avere è fondamentalmente sulla falsariga di avere solo un segnale di apprendimento accurato per uno degli output e non per gli altri. Con la seconda opzione, si può dire esattamente la stessa cosa per i pesi collegati ai nodi di input, quindi dubito che ci sia una differenza significativa lì.

Come ho già detto, tutto quanto sopra si basa solo sulla mia intuizione, sarebbe interessante vedere riferimenti più credibili su questo.

Un vantaggio importante che vedo per la prima opzione è nella velocità computazionale; supponiamo di voler calcolare i valori per tutte le azioni al fine di decidere quale azione selezionare; un singolo passaggio in avanti attraverso la rete, dandoti tutti i valori contemporaneamente, sarà molto più efficiente dal punto di vista computazionale rispetto al fatto che abbia passaggi in avanti separati (per un set di azioni di dimensione ).QQnn

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.