Un’introduzione al Q-Learning Parte 2/2

'Introduzione al Q-Learning Parte 2/2'

Unità 2, parte 2 del corso di Deep Reinforcement Learning con Hugging Face 🤗

⚠️ Una nuova versione aggiornata di questo articolo è disponibile qui 👉 https://huggingface.co/deep-rl-course/unit1/introduction

Questo articolo fa parte del corso di Deep Reinforcement Learning. Un corso gratuito per principianti ed esperti. Controlla il programma qui.


⚠️ Una nuova versione aggiornata di questo articolo è disponibile qui 👉 https://huggingface.co/deep-rl-course/unit1/introduction

Questo articolo fa parte del corso di Deep Reinforcement Learning. Un corso gratuito per principianti ed esperti. Controlla il programma qui.

Nella prima parte di questa unità, abbiamo imparato sui metodi basati sul valore e sulla differenza tra Monte Carlo e Temporal Difference Learning.

Quindi, nella seconda parte, studieremo Q-Learning, e implementeremo il nostro primo agente RL da zero, un agente Q-Learning, e lo addestreremo in due ambienti:

  1. Frozen Lake v1 ❄️: dove il nostro agente dovrà andare dallo stato iniziale (S) allo stato obiettivo (G) camminando solo su piastrelle ghiacciate (F) ed evitando buche (H).
  2. Un taxi autonomo 🚕: dove l’agente dovrà imparare a navigare in una città per trasportare i suoi passeggeri dal punto A al punto B.

Questa unità è fondamentale se vuoi essere in grado di lavorare sul Deep Q-Learning (Unità 3).

Quindi iniziamo! 🚀

  • Introduzione a Q-Learning
    • Cos’è Q-Learning?
    • L’algoritmo Q-Learning
    • Off-policy vs On-policy
  • Un esempio di Q-Learning

Introduzione a Q-Learning

Cos’è Q-Learning?

Q-Learning è un metodo basato sul valore off-policy che utilizza un approccio TD per addestrare la sua funzione valore-azione:

  • Off-policy: ne parleremo alla fine di questo capitolo.
  • Metodo basato sul valore: trova la politica ottimale in modo indiretto addestrando una funzione valore o valore-azione che ci dirà il valore di ogni stato o di ogni coppia stato-azione.
  • Utilizza un approccio TD: aggiorna la sua funzione valore-azione ad ogni passo invece che alla fine dell’episodio.

Q-Learning è l’algoritmo che utilizziamo per addestrare la nostra Q-Function, una funzione valore-azione che determina il valore di trovarsi in uno stato specifico e prendere un’azione specifica in quel stato.

Dato uno stato e un'azione, la nostra Q Function restituisce un valore di stato-azione (chiamato anche Q-value)

La Q deriva dalla “Qualità” di quell’azione in quello stato.

Internamente, la nostra Q-function ha una Q-table, una tabella in cui ogni cella corrisponde a una coppia valore di stato-azione. Pensate a questa Q-table come la memoria o il foglio di trucchi della nostra Q-function.

Se prendiamo questo esempio di labirinto:

La Q-Table viene inizializzata. Ecco perché tutti i valori sono = 0. Questa tabella contiene, per ogni stato, i quattro valori di stato-azione.

Qui vediamo che il valore di stato-azione dello stato iniziale e l’azione di andare in su è 0:

Pertanto, la funzione Q contiene una tabella Q che ha il valore di ogni coppia stato-azione. E dato uno stato e un’azione, la nostra funzione Q cercherà all’interno della sua tabella Q per restituire il valore.

Data una coppia stato e azione, la nostra funzione Q cercherà all'interno della sua tabella Q per restituire il valore della coppia stato-azione (il valore Q).

Se facciamo un riassunto, il Q-Learning è l’algoritmo di RL che:

  • Allena la funzione Q (una funzione di valore azione) che internamente è una tabella Q che contiene tutti i valori delle coppie stato-azione.
  • Dato uno stato e un’azione, la nostra funzione Q cercherà nella sua tabella Q il valore corrispondente.
  • Quando l’addestramento è completato, abbiamo una funzione Q ottimale, il che significa che abbiamo una tabella Q ottimale.
  • E se abbiamo una funzione Q ottimale, abbiamo una politica ottimale poiché sappiamo per ogni stato quale è l’azione migliore da compiere.

Tuttavia, all’inizio la nostra tabella Q è inutile poiché fornisce valori arbitrari per ogni coppia stato-azione (la maggior parte delle volte, inizializziamo la tabella Q con valori 0). Ma, mentre esploriamo l’ambiente e aggiorniamo la nostra tabella Q, otterremo approssimazioni sempre migliori.

Qui vediamo che con l'addestramento, la nostra tabella Q è migliore poiché, grazie ad essa, possiamo conoscere il valore di ogni coppia stato-azione.

Ora che abbiamo capito cosa sono il Q-Learning, la funzione Q e la tabella Q, approfondiamo l’algoritmo del Q-Learning.

L’algoritmo del Q-Learning

Questo è il pseudocodice del Q-Learning; studiamo ogni parte e vediamo come funziona con un esempio semplice prima di implementarlo. Non spaventatevi, è più semplice di quanto sembri! Esamineremo ogni passaggio.

Passo 1: Inizializziamo la tabella Q

Dobbiamo inizializzare la tabella Q per ogni coppia stato-azione. La maggior parte delle volte, inizializziamo con valori 0.

Passo 2: Scegliere un’azione utilizzando la strategia Epsilon Greedy

La strategia Epsilon Greedy è una politica che gestisce il compromesso tra esplorazione e sfruttamento.

L’idea è che definiamo epsilon ɛ = 1.0:

  • Con probabilità 1 – ɛ: facciamo sfruttamento (cioè il nostro agente seleziona l’azione con il valore della coppia stato-azione più alto).
  • Con probabilità ɛ: facciamo esplorazione (provando un’azione casuale).

All’inizio dell’addestramento, la probabilità di fare esplorazione sarà elevata poiché ɛ è molto alto, quindi la maggior parte delle volte esploreremo. Ma man mano che l’addestramento continua e di conseguenza la nostra tabella Q migliora nelle sue stime, riduciamo progressivamente il valore di epsilon poiché avremo bisogno di sempre meno esplorazione e di più sfruttamento.

Passaggio 3: Esegui l’azione At, ottieni la ricompensa Rt+1 e lo stato successivo St+1

Passaggio 4: Aggiorna Q(St, At)

Ricorda che nell’apprendimento TD, aggiorniamo la nostra politica o la nostra funzione di valore (a seconda del metodo di RL che scegliamo) dopo un passo di interazione.

Per produrre il nostro target TD, abbiamo utilizzato la ricompensa immediata R t + 1 R_{t+1} R t + 1 ​ più il valore scontato della coppia stato-azione successiva migliore (chiamato bootstrap).

Pertanto, la nostra formula di aggiornamento di Q ( S t , A t ) Q(S_t, A_t) Q ( S t ​ , A t ​ ) è la seguente:

Ciò significa che per aggiornare il nostro Q ( S t , A t ) Q(S_t, A_t) Q ( S t ​ , A t ​ ) :

  • Affinché sia necessario S t , A t , R t + 1 , S t + 1 S_t, A_t, R_{t+1}, S_{t+1} S t ​ , A t ​ , R t + 1 ​ , S t + 1 ​ .
  • Per aggiornare il valore Q in una determinata coppia stato-azione, utilizziamo il target TD.

Come formiamo il target TD?

  1. Otteniamo la ricompensa dopo aver eseguito l’azione R t + 1 R_{t+1} R t + 1 ​ .
  2. Per ottenere il valore migliore della prossima coppia stato-azione, utilizziamo una politica avida per selezionare l’azione migliore successiva. Nota che questa non è una politica epsilon-greedy, selezionerà sempre l’azione con il valore stato-azione più alto.

Quando l’aggiornamento di questo valore Q è completato, iniziamo in un nuovo stato e selezioniamo la nostra azione utilizzando nuovamente la nostra politica epsilon-greedy.

Ecco perché diciamo che questo è un algoritmo off-policy.

Off-policy vs On-policy

La differenza è sottile:

  • Off-policy : utilizzare una politica diversa per l’azione e l’aggiornamento.

Ad esempio, con il Q-Learning, la politica epsilon-greedy (politica di azione) è diversa dalla politica avida che viene utilizzata per selezionare il miglior valore stato-azione successivo per aggiornare il valore Q (politica di aggiornamento).

Politica di azione

È diversa dalla politica che utilizziamo durante la fase di addestramento:

Politica di aggiornamento
  • On-policy: utilizzare la stessa politica per l’azione e l’aggiornamento.

Ad esempio, con Sarsa, un altro algoritmo basato sui valori, la politica epsilon-greedy seleziona la coppia stato-azione successiva, non una politica avida.

Sarsa

Un esempio di Q-Learning

Per comprendere meglio il Q-Learning, prendiamo un esempio semplice:

  • Sei un topo in questo piccolo labirinto. Inizi sempre dallo stesso punto di partenza.
  • Il tuo obiettivo è mangiare la grande pila di formaggio nell’angolo in basso a destra e evitare il veleno. Dopotutto, chi non ama il formaggio?
  • L’episodio termina se mangiamo il veleno, mangiamo la grande pila di formaggio o se passiamo più di cinque passi.
  • Il tasso di apprendimento è 0,1
  • Il gamma (tasso di sconto) è 0,99

La funzione di ricompensa funziona così:

  • +0: Andare in uno stato senza formaggio.
  • +1: Andare in uno stato con un piccolo pezzo di formaggio.
  • +10: Andare nello stato con la grande pila di formaggio.
  • -10: Andare nello stato con il veleno e quindi morire.
  • +0 Se trascorriamo più di cinque passaggi.

Per addestrare il nostro agente ad avere una politica ottimale (quindi una politica che va a destra, a destra, in basso), utilizzeremo l’algoritmo di Q-Learning.

Passo 1: Inizializziamo la Q-Table

Quindi, per ora, la nostra Q-Table è inutile; dobbiamo addestrare la nostra Q-function utilizzando l’algoritmo di Q-Learning.

Facciamolo per 2 timestep di addestramento:

Timestep di addestramento 1:

Passo 2: Scegliere azione utilizzando la strategia di Epsilon Greedy

Perché epsilon è grande = 1.0, prendo un’azione casuale, in questo caso vado a destra.

Passo 3: Eseguire azione At, ottenere Rt+1 e St+1

Andando a destra, ho ottenuto un piccolo pezzo di formaggio, quindi R t + 1 = 1, e sono in un nuovo stato.

Passo 4: Aggiornare Q(S t , A t )

Ora possiamo aggiornare Q(S t , A t ) utilizzando la nostra formula.

Timestep di addestramento 2:

Passo 2: Scegliere azione utilizzando la strategia di Epsilon Greedy

Prendo ancora un’azione casuale, poiché epsilon è grande 0.99 (poiché lo diminuiamo un po’ perché man mano che l’addestramento avanza, vogliamo sempre meno esplorazione).

Ho preso l’azione in basso. Non è una buona azione poiché mi porta al veleno.

Passo 3: Eseguire azione At, ottenere Rt+1 e St+1

Perché vado nello stato del veleno, ottengo R t + 1 = -10, e muoio.

Passo 4: Aggiornare Q(S t , A t )

Poiché siamo morti, iniziamo un nuovo episodio. Ma quello che vediamo qui è che con due passaggi di esplorazione, il mio agente è diventato più intelligente.

Continuando ad esplorare e sfruttare l’ambiente e aggiornando i valori Q utilizzando il target TD, la Q-Table ci darà approssimazioni sempre migliori. E alla fine dell’addestramento, otterremo una stima della Q-Function ottimale.


Ora che abbiamo studiato la teoria del Q-Learning, implementiamolo da zero. Un agente di apprendimento Q che addestreremo in due ambienti:

  1. Frozen-Lake-v1 ❄️ (versione non scivolosa): dove il nostro agente dovrà andare dallo stato di partenza (S) allo stato di arrivo (G) camminando solo su piastrelle ghiacciate (F) e evitando buchi (H).
  2. Un taxi autonomo 🚕 dovrà imparare a navigare in una città per trasportare i passeggeri dal punto A al punto B.

Inizia il tutorial qui 👉 https://colab.research.google.com/github/huggingface/deep-rl-class/blob/main/unit2/unit2.ipynb

La classifica 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard


Congratulazioni per aver completato questo capitolo! C’era molta informazione. E congratulazioni per aver completato i tutorial. Hai appena implementato il tuo primo agente RL da zero e lo hai condiviso sul Hub 🥳.

Implementare da zero quando studi una nuova architettura è importante per capire come funziona.

È normale sentirsi ancora confusi con tutti questi elementi. È stato lo stesso per me e per tutte le persone che hanno studiato RL.

Prenditi il tempo per comprendere davvero il materiale prima di continuare.

E poiché il modo migliore per imparare e evitare l’illusione della competenza è mettersi alla prova. Abbiamo scritto un quiz per aiutarti a capire dove devi rafforzare il tuo studio. Verifica le tue conoscenze qui 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit2/quiz2.md

È fondamentale padroneggiare questi elementi e avere basi solide prima di entrare nella parte divertente. Non esitare a modificare l’implementazione, provare modi per migliorarla e cambiare ambienti, il modo migliore per imparare è provare da soli!

Abbiamo pubblicato letture aggiuntive nel programma se vuoi approfondire 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit2/README.md

Nella prossima unità, impareremo sul Deep-Q-Learning.

E non dimenticare di condividere con i tuoi amici che vogliono imparare 🤗!

Infine, vogliamo migliorare e aggiornare il corso in modo iterativo con i tuoi feedback. Se ne hai, compila questo modulo 👉 https://forms.gle/3HgA7bEHwAmmLfwh9

Continua a imparare, rimani fantastico,