Abbiamo visto che il Q-learning converge alla funzione ottimale \(Q^*(s,a)\) quando viene utilizzata una rappresentazione tabulare.
Nell’approssimazione di funzione, invece, il Q-learning minimizza la perdita MSE tramite discesa stocastica del gradiente, usando una stima \(\hat{Q^\pi}(s;a;w)\approx Q^\pi\) per quanto riguarda la policy evaluation.
Ricordiamo a fronte di una funzione di costo del tipo \(J(w)=\Bbb E_\pi[(r+\gamma \max_{a'} \hat{Q}(s';a';w)-\hat{Q}(s;a;w)^2]\) avremmo con la discesa del gradiente un aggiornamento dei pesi del modello \(\Delta w=\alpha(r+\gamma \max_{a'} \hat{Q}(s';a';w)-\hat{Q}(s;a;w))\nabla_w\hat{Q}(s;a;w)\)
Tuttavia, il Q-learning con approssimazione di funzione di valore può divergere. Si rilevano dei problemi di stabilità relativi alla compresenza dell'approssimazione di funzione (potenziale espansione), del bootstrapping (contrazione) e dell'off-policy learning, tali da non garantire la convergenza.
Due delle principali cause di questo problema sono: correlazioni tra i campioni e target non stazionari.
Il Deep Q-learning (DQN) affronta queste difficoltà introducendo due meccanismi fondamentali: l’experience replay, che riduce le correlazioni tra i dati campionati, e i fixed Q-targets, che stabilizzano l’apprendimento limitando la variazione dei target.
Per ridurre le correlazioni tra campioni (molti potenzialmente simili, tali da rompere l'ipotesi di IID) , nel Deep Q-learning viene utilizzato un dataset chiamato replay buffer \(\mathcal{D}\), che memorizza le esperienze passate sotto forma di tuple \((s, a, r, s')\), relative a tutte le tuple differenti incontrate nel passato, per rendere l'aggiornamento il più indipendente possibile.
L’experience replay si realizza ripetendo i seguenti passi:
• Campionare una tupla di esperienza \((s, a, r, s') \sim \mathcal{D}\) dal replay buffer.
• Calcolare il valore target per lo stato campionato: \(r + \gamma \max_{a'} \hat{Q}(s', a'; w)\).
• Aggiornare i pesi della rete neurale tramite discesa stocastica del gradiente \[ \Delta w = \alpha \Big(r + \gamma \max_{a'} \hat{Q}(s', a'; w) - \hat{Q}(s, a; w)\Big) \nabla_w \hat{Q}(s, a; w) \]
Il target \(r+\gamma \max_{a'} \hat{Q}(s';a';w)\) prevede una parte dipendente a sua volta dai pesi w che vengono aggiornati in ogni iterazione del SGD; per migliorare la stabilità, è possibile far utilizzare un insieme differente di pesi \(\overline w\) rispetto a quelli aggiornati, da tenere fissi più a lungo per permettere un raggiungimento dell'obiettivo più stabile.
In questo caso il calcolo del target value prevederà:
Vediamo un algoritmo base per implementare il DQN, tenendo conto che vi sono numerosi iperparametri e strategie che possono essere perfezionate e specificate, quali la gestione del replay buffer,
In sintesi rispetto al Q-Learning tabulare le Deep Q-Networks (DQN) combinano due tecniche fondamentali: l’experience replay e l’uso di target fissi. Le transizioni \((s_t, a_t, r_{t+1}, s_{t+1})\) vengono memorizzate in un buffer di replay \(\mathcal{D}\) e da questo si estrae in modo casuale un mini-batch di tuple \((s,a,r,s')\). I target di Q-learning vengono calcolati rispetto a parametri congelati \(w^-\), mentre la rete Q viene aggiornata minimizzando l’errore quadratico medio (MSE) tra le stime della rete e i target di Q-learning. L’ottimizzazione avviene attraverso lo stochastic gradient descent, migliorando la stabilità e l’efficacia dell’apprendimento.