Un’introduzione al Deep Reinforcement Learning

'Introduzione al Deep Reinforcement Learning'

Capitolo 1 della classe 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 della Classe 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 della Classe di Deep Reinforcement Learning. Un corso gratuito per principianti ed esperti. Controlla il programma qui.

Benvenuti nell’argomento più affascinante dell’Intelligenza Artificiale: Deep Reinforcement Learning.

Deep RL è un tipo di Machine Learning in cui un agente impara come comportarsi in un ambiente effettuando azioni e vedendo i risultati.

Dal 2013 e il paper sul Deep Q-Learning, abbiamo assistito a molte scoperte. Dai cinque di OpenAI che hanno sconfitto alcuni dei migliori giocatori di Dota2 al mondo, al progetto Dexterity, viviamo in un momento eccitante nella ricerca di Deep RL.

OpenAI Five, un'intelligenza artificiale che ha sconfitto alcuni dei migliori giocatori di Dota2 al mondo

Inoltre, dal 2018, hai ora accesso a così tanti ambienti e librerie incredibili per costruire i tuoi agenti.

Ecco perché questo è il momento migliore per iniziare a imparare e con questo corso sei nel posto giusto.

Sì, perché questo articolo è la prima unità della Classe di Deep Reinforcement Learning, un corso gratuito per principianti ed esperti in cui imparerai la teoria e la pratica utilizzando famose librerie di Deep RL come Stable Baselines3, RL Baselines3 Zoo e RLlib.

In questo corso gratuito, imparerai:

  • 📖 Studiare Deep Reinforcement Learning nella teoria e pratica.
  • 🧑‍💻 Imparare ad utilizzare famose librerie di Deep RL come Stable Baselines3, RL Baselines3 Zoo e RLlib.
  • 🤖 Allenare agenti in ambienti unici come SnowballFight, Huggy the Doggo 🐶, e classici come Space Invaders e PyBullet.
  • 💾 Pubblicare i tuoi agenti allenati in una sola riga di codice su Hub. Ma anche scaricare potenti agenti dalla community.
  • 🏆 Partecipare a sfide in cui valuterai i tuoi agenti rispetto ad altre squadre.
  • 🖌️🎨 Imparare a condividere i tuoi ambienti realizzati con Unity e Godot.

Quindi in questa prima unità, imparerai le basi del Deep Reinforcement Learning. E quindi, addestrerai il tuo primo agente di atterraggio per atterrare correttamente sulla Luna 🌕 e caricarlo su Hugging Face Hub, una piattaforma gratuita e aperta in cui le persone possono condividere modelli di ML, dataset e demo.

È fondamentale padroneggiare questi elementi prima di passare all’implementazione degli agenti di Deep Reinforcement Learning. Lo scopo di questo capitolo è quello di darti basi solide.

Se preferisci, puoi guardare la versione 📹 video di questo capitolo:

Quindi cominciamo! 🚀

  • Cos’è il Reinforcement Learning?
    • Il quadro generale
    • Una definizione formale
  • Il Framework di Reinforcement Learning
    • Il processo di RL
    • L’ipotesi del reward: l’idea centrale del Reinforcement Learning
    • Proprietà di Markov
    • Spazio delle osservazioni/stati
    • Spazio delle azioni
    • Ricompense e lo sconto
    • Tipo di compiti
  • Tradeoff Esplorazione/Utilizzo
  • I due approcci principali per risolvere i problemi di RL
    • La Policy π: il cervello dell’agente
    • Metodi basati sulla Policy
    • Metodi basati sul Valore
  • Il “Deep” nel Reinforcement Learning

Cos’è il Reinforcement Learning?

Per capire il Reinforcement Learning, partiamo dall’immagine generale.

L’immagine generale

L’idea dietro il Reinforcement Learning è che un agente (un’intelligenza artificiale) imparerà dall’ambiente interagendo con esso (attraverso prove ed errori) e ricevendo ricompense (negative o positive) come feedback per le azioni eseguite.

L’apprendimento dall’interazione con l’ambiente deriva dalle nostre esperienze naturali.

Per esempio, immagina di mettere tuo fratello piccolo davanti a un videogioco che non ha mai giocato, un controller nelle sue mani e lasciarlo da solo.

Tuo fratello interagirà con l’ambiente (il videogioco) premendo il pulsante giusto (azione). Ha ottenuto una moneta, che è una ricompensa +1. È positiva, ha appena capito che in questo gioco deve ottenere le monete.

Ma poi, preme di nuovo a destra e tocca un nemico, è appena morto -1 ricompensa.

Interagendo con il suo ambiente attraverso prove ed errori, tuo fratello ha capito che deve ottenere le monete in questo ambiente ma evitare i nemici.

Senza alcuna supervisione, il bambino migliorerà sempre di più nel gioco.

Ecco come gli esseri umani e gli animali imparano, attraverso l’interazione. Il Reinforcement Learning è solo un approccio computazionale di apprendimento attraverso l’azione.

Una definizione formale

Se prendiamo ora una definizione formale:

Il reinforcement learning è un framework per risolvere compiti di controllo (anche chiamati problemi decisionali) costruendo agenti che imparano dall’ambiente attraverso l’interazione con esso attraverso prove ed errori e ricevendo ricompense (positive o negative) come unico feedback.

⇒ Ma come funziona il Reinforcement Learning?

Il Framework del Reinforcement Learning

Il processo di RL

Il processo di RL: un loop di stato, azione, ricompensa e stato successivo

Per comprendere il processo di RL, immaginiamo un agente che impara a giocare a un gioco di piattaforme:

  • Il nostro agente riceve lo stato S 0 S_0 S 0 ​ dall’Ambiente – riceviamo il primo fotogramma del nostro gioco (Ambiente).
  • In base a tale stato S 0 S_0 S 0 ​, l’Agente esegue l’azione A 0 A_0 A 0 ​ – il nostro Agente si sposterà a destra.
  • L’Ambiente passa a uno stato nuovo S 1 S_1 S 1 ​ – nuovo fotogramma.
  • L’ambiente fornisce una certa ricompensa R 1 R_1 R 1 ​ all’Agente – non siamo morti (Ricompensa positiva +1) .

Questo loop di RL produce una sequenza di stato, azione, ricompensa e stato successivo.

Lo scopo dell’agente è massimizzare la sua ricompensa cumulativa, chiamata ritorno atteso.

L’ipotesi della ricompensa: l’idea centrale del Reinforcement Learning

⇒ Perché l’obiettivo dell’agente è massimizzare il ritorno atteso?

Perché il RL si basa sull’ipotesi della ricompensa, che afferma che tutti gli obiettivi possono essere descritti come la massimizzazione del ritorno atteso (ricompensa cumulativa attesa).

Ecco perché nel Reinforcement Learning, per avere il miglior comportamento, dobbiamo massimizzare la ricompensa cumulativa attesa.

Proprietà di Markov

Nei documenti, vedrai che il processo di RL viene chiamato Processo Decisionale di Markov (MDP).

Parleremo di nuovo della Proprietà di Markov nelle unità successive. Ma se devi ricordare qualcosa oggi, la Proprietà di Markov implica che il nostro agente ha bisogno solo dello stato attuale per decidere quale azione intraprendere e non della storia di tutti gli stati e delle azioni che ha intrapreso in precedenza.

Osservazioni/Spazio degli Stati

Le Osservazioni/Gli Stati sono le informazioni che il nostro agente ottiene dall’ambiente. Nel caso di un videogioco, può essere un frame (una schermata). Nel caso dell’agente di trading, può essere il valore di una determinata azione, ecc.

C’è una differenziazione da fare tra osservazione e stato :

  • Stato s : è una descrizione completa dello stato del mondo (non ci sono informazioni nascoste). In un ambiente completamente osservato.
Nel gioco degli scacchi, riceviamo uno stato dall'ambiente poiché abbiamo accesso a tutte le informazioni sulla scacchiera.

Nel gioco degli scacchi, riceviamo uno stato dall’ambiente poiché abbiamo accesso a tutte le informazioni sulla scacchiera.

Con un gioco degli scacchi, siamo in un ambiente completamente osservato, poiché abbiamo accesso a tutte le informazioni sulla scacchiera.

  • Osservazione o : è una descrizione parziale dello stato. In un ambiente parzialmente osservato.
In Super Mario Bros, vediamo solo una parte del livello vicino al giocatore, quindi riceviamo un'osservazione.

In Super Mario Bros, vediamo solo una parte del livello vicino al giocatore, quindi riceviamo un’osservazione.

In Super Mario Bros, siamo in un ambiente parzialmente osservato. Riceviamo un’osservazione poiché vediamo solo una parte del livello.

Nella realtà, usiamo il termine stato in questo corso, ma faremo la distinzione nelle implementazioni.

Per riassumere:

Spazio delle Azioni

Lo Spazio delle Azioni è l’insieme di tutte le possibili azioni in un ambiente.

Le azioni possono provenire da uno spazio discreto o continuo :

  • Spazio discreto : il numero di azioni possibili è finito .
Ancora una volta, in Super Mario Bros, abbiamo solo 4 direzioni e la possibilità di saltare.

In Super Mario Bros, abbiamo un insieme finito di azioni poiché abbiamo solo 4 direzioni e la possibilità di saltare.

  • Spazio continuo : il numero di azioni possibili è infinito .

    Un agente di una macchina a guida autonoma ha un numero infinito di azioni possibili poiché può girare a sinistra di 20°, 21,1°, 21,2°, suonare il clacson, girare a destra di 20°…

Per riassumere:

Tenere in considerazione queste informazioni è fondamentale perché avrà importanza nella scelta dell’algoritmo RL in futuro.

Ricompense e scontistica

La ricompensa è fondamentale nel RL perché è l’unico feedback per l’agente. Grazie ad essa, il nostro agente sa se l’azione intrapresa è stata buona o no.

La ricompensa cumulativa ad ogni passo di tempo t può essere scritta come:

La ricompensa cumulativa è uguale alla somma di tutte le ricompense della sequenza.

Che è equivalente a:

La ricompensa cumulativa = rt+1 (rt+k+1 = rt+0+1 = rt+1)+ rt+2 (rt+k+1 = rt+1+1 = rt+2) + ...

Tuttavia, nella realtà, non possiamo semplicemente sommarle così. Le ricompense che arrivano prima (all’inizio del gioco) sono più probabili che accadano poiché sono più prevedibili della ricompensa futura a lungo termine.

Supponiamo che il tuo agente sia questo piccolo topo che può muoversi di una casella ad ogni passo di tempo, e il tuo avversario sia il gatto (che può muoversi anche lui). Il tuo obiettivo è mangiare la massima quantità di formaggio prima di essere mangiato dal gatto.

Come possiamo vedere nel diagramma, è più probabile mangiare il formaggio vicino a noi rispetto al formaggio vicino al gatto (più siamo vicini al gatto, più è pericoloso).

Di conseguenza, la ricompensa vicino al gatto, anche se è più grande (più formaggio), sarà scontata maggiormente poiché non siamo sicuri di riuscire a mangiarla.

Per scontare le ricompense, procediamo così:

  1. Definiamo un tasso di sconto chiamato gamma. Deve essere compreso tra 0 e 1. La maggior parte delle volte tra 0,99 e 0,95.
  • Più è grande il gamma, più piccolo è lo sconto. Questo significa che il nostro agente si preoccupa di più della ricompensa a lungo termine.

  • D’altra parte, più piccolo è il gamma, più grande è lo sconto. Questo significa che il nostro agente si preoccupa di più della ricompensa a breve termine (il formaggio più vicino).

2. Poi, ogni ricompensa sarà scontata da gamma elevato alla potenza del passo di tempo. Man mano che il passo di tempo aumenta, il gatto si avvicina a noi, quindi la ricompensa futura diventa sempre meno probabile.

La nostra ricompensa cumulativa attesa scontata è:

Tipi di compiti

Un compito è un’ istanza di un problema di Apprendimento per Rinforzo. Possiamo avere due tipi di compiti: episodici e continui.

Compito episodico

In questo caso, abbiamo un punto di partenza e un punto di arrivo (uno stato terminale). Questo crea un episodio: una lista di Stati, Azioni, Ricompense e nuovi Stati.

Ad esempio, pensa a Super Mario Bros: un episodio inizia al lancio di un nuovo livello di Mario e termina quando sei ucciso o raggiungi la fine del livello.

Inizio di un nuovo episodio.

Compiti continui

Sono compiti che continuano all’infinito (nessuno stato terminale). In questo caso, l’agente deve imparare come scegliere le migliori azioni e interagire simultaneamente con l’ambiente.

Ad esempio, un agente che fa trading automatico di azioni. Per questo compito, non c’è un punto di partenza e uno stato terminale. L’agente continua a funzionare finché non decidiamo di fermarlo.

Trade-off tra Esplorazione/Sfruttamento

Infine, prima di analizzare i diversi metodi per risolvere i problemi di Apprendimento per Rinforzo, è necessario affrontare un altro argomento molto importante: il trade-off tra esplorazione e sfruttamento.

  • L’esplorazione consiste nell’esplorare l’ambiente provando azioni casuali al fine di ottenere più informazioni sull’ambiente.

  • Lo sfruttamento consiste nello sfruttare le informazioni conosciute per massimizzare la ricompensa.

Ricorda, l’obiettivo del nostro agente di Apprendimento per Rinforzo è massimizzare la ricompensa cumulativa attesa. Tuttavia, possiamo cadere in una trappola comune.

Prendiamo ad esempio:

In questo gioco, il nostro topo può avere una quantità infinita di piccoli formaggi (+1 ciascuno). Ma in cima al labirinto, c’è una somma gigantesca di formaggio (+1000).

Tuttavia, se ci concentriamo solo sullo sfruttamento, il nostro agente non raggiungerà mai la somma gigantesca di formaggio. Invece, sfrutterà solo la fonte più vicina di ricompense, anche se questa fonte è piccola (sfruttamento).

Ma se il nostro agente fa un po’ di esplorazione, può scoprire la grande ricompensa (la pila di grandi formaggi).

Questo è ciò che chiamiamo trade-off tra esplorazione e sfruttamento. Dobbiamo bilanciare quanto esploriamo l’ambiente e quanto sfruttiamo ciò che sappiamo sull’ambiente.

Pertanto, dobbiamo definire una regola che ci aiuti a gestire questo trade-off. Vedremo in futuri capitoli diversi modi per gestirlo.

Se è ancora confuso, pensa a un problema reale: la scelta di un ristorante:

Source: Berkley AI Course
  • Sfruttamento: Vai ogni giorno nello stesso ristorante che sai che è buono e corri il rischio di perdere un altro ristorante migliore.
  • Esplorazione: Prova ristoranti in cui non sei mai stato prima, con il rischio di avere un’esperienza negativa ma con la probabile opportunità di un’esperienza fantastica.

Per riassumere:

I due principali approcci per risolvere i problemi di Apprendimento per Rinforzo

⇒ Ora che abbiamo appreso il framework di Apprendimento per Rinforzo, come risolviamo il problema di Apprendimento per Rinforzo?

In altre parole, come costruire un agente di Apprendimento per Rinforzo che possa selezionare le azioni che massimizzano la ricompensa cumulativa attesa?

La Policy π: il cervello dell’agente

La Policy π è il cervello del nostro Agente, è la funzione che ci dice quale azione intraprendere dato lo stato in cui ci troviamo. Quindi essa definisce il comportamento dell’agente in un determinato momento.

Pensa alla policy come il cervello del nostro agente, la funzione che ci dirà l'azione da intraprendere dato uno stato

Pensa alla policy come il cervello del nostro agente, la funzione che ci dirà l’azione da intraprendere dato uno stato

Questa Policy è la funzione che vogliamo imparare, il nostro obiettivo è trovare la policy ottimale π, la policy che * massimizza il rendimento atteso quando l’agente agisce in base ad essa. Troviamo questa π attraverso il training. *

Ci sono due approcci per addestrare il nostro agente a trovare questa policy ottimale π*:

  • Direttamente, insegnando all’agente a imparare quale azione intraprendere, dato lo stato in cui si trova: Metodi basati sulla Policy.
  • Indirettamente, insegnando all’agente a imparare quali stati sono più preziosi e quindi intraprendere l’azione che porta agli stati più preziosi: Metodi basati sul Valore.

Metodi basati sulla politica

Nei metodi basati sulla politica, <strong impariamo direttamente una funzione di politica.

Questa funzione mappa ogni stato all’azione corrispondente migliore per quel dato stato. O a una distribuzione di probabilità sull’insieme delle possibili azioni per quel dato stato.

Come possiamo vedere qui, la politica (deterministica) indica direttamente l'azione da intraprendere per ogni passo.

Abbiamo due tipi di politica:

  • Deterministica: una politica in uno stato specifico restituirà sempre la stessa azione.
azione = politica(stato)

  • Stocastica: restituisce una distribuzione di probabilità sulle azioni.
politica(azioni | stato) = distribuzione di probabilità sull'insieme delle azioni date lo stato attuale
Dato uno stato iniziale, la nostra politica stocastica restituirà distribuzioni di probabilità sulle possibili azioni per quel dato stato.

Se facciamo un riassunto:

Metodi basati sul valore

Nel caso dei metodi basati sul valore, invece di addestrare una funzione di politica, addestriamo una funzione di valore che mappa uno stato al valore atteso di trovarsi in quel dato stato.

Il valore di uno stato è il ritorno atteso scontato che l’agente può ottenere se parte da quel dato stato e agisce secondo la nostra politica.

“Agire secondo la nostra politica” significa semplicemente che la nostra politica “andrà allo stato con il valore più alto”.

In questo caso vediamo che la nostra funzione di valore definisce il valore per ogni possibile stato.

Grazie alla nostra funzione di valore, ad ogni passo la nostra politica selezionerà lo stato con il valore più grande definito dalla funzione di valore: -7, poi -6, poi -5 (e così via) per raggiungere l'obiettivo.

Grazie alla nostra funzione di valore, ad ogni passo la nostra politica selezionerà lo stato con il valore più grande definito dalla funzione di valore: -7, poi -6, poi -5 (e così via) per raggiungere l’obiettivo.

Se facciamo un riassunto:

Il “Deep” nel Reinforcement Learning

⇒ Quello di cui abbiamo parlato finora è il Reinforcement Learning. Ma dove entra in gioco il “Deep”?

Il Reinforcement Learning profondo introduce reti neurali profonde per risolvere problemi di Reinforcement Learning – da qui il termine “deep”.

Ad esempio, nel prossimo articolo, lavoreremo su Q-Learning (classico Reinforcement Learning) e poi su Deep Q-Learning, entrambi algoritmi di RL basati sul valore.

Vedrai che la differenza è che nel primo approccio, utilizziamo un algoritmo tradizionale per creare una tabella Q che ci aiuta a trovare quale azione intraprendere per ogni stato.

Nel secondo approccio, utilizzeremo una Rete Neurale (per approssimare il valore q).

Schema ispirato al quaderno di apprendimento Q di Udacity

Se non sei familiare con il Deep Learning, dovresti sicuramente guardare il corso di Deep Learning pratico per sviluppatori di codice di fastai (gratuito)

Quella è stata molta informazione, se riassumiamo:

  • L’apprendimento per rinforzo è un approccio computazionale all’apprendimento tramite azione. Costruiamo un agente che impara dall’ambiente interagendo con esso attraverso prove ed errori e ricevendo ricompense (negative o positive) come feedback.

  • Lo scopo di ogni agente di RL è massimizzare la sua ricompensa cumulativa attesa (detta anche ritorno atteso) perché RL si basa sull’ ipotesi della ricompensa , che afferma che tutti gli obiettivi possono essere descritti come la massimizzazione della ricompensa cumulativa attesa.

  • Il processo RL è un ciclo che restituisce una sequenza di stato, azione, ricompensa e stato successivo.

  • Per calcolare la ricompensa cumulativa attesa (ritorno atteso), scontiamo le ricompense: le ricompense che arrivano prima (all’inizio del gioco) sono più probabili che accadano poiché sono più prevedibili rispetto alla ricompensa a lungo termine futura.

  • Per risolvere un problema RL, vuoi trovare una politica ottimale , la politica è il “cervello” della tua IA che ci dirà che azione intraprendere dato uno stato. Quella ottimale è quella che ti fornisce le azioni che massimizzano il ritorno atteso.

  • Ci sono due modi per trovare la tua politica ottimale:

    1. Addestrando direttamente la tua politica: metodi basati sulla politica.
    2. Addestrando una funzione di valore che ci dice il ritorno atteso che l’agente otterrà in ogni stato e utilizzare questa funzione per definire la nostra politica: metodi basati sul valore.
  • Infine, parliamo di Deep RL perché introduciamo reti neurali profonde per stimare l’azione da intraprendere (basata sulla politica) o per stimare il valore di uno stato (basata sul valore) da qui il nome “deep”.


Ora che hai studiato le basi dell’apprendimento per rinforzo, sei pronto per addestrare il tuo primo agente di atterraggio per atterrare correttamente sulla Luna 🌕 e condividerlo con la comunità attraverso il Hub 🔥

Inizia il tutorial qui 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit1/unit1.ipynb

E poiché il modo migliore per imparare e evitare l’illusione di competenza è testarsi . Abbiamo scritto un quiz per aiutarti a capire dove hai bisogno di rafforzare il tuo studio . Verifica le tue conoscenze qui 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit1/quiz.md

Complimenti per aver completato questo capitolo! È stato il più grande , e c’era molta informazione. E congratulazioni per aver completato il tutorial. Hai appena addestrato il tuo primo agente Deep RL e lo hai condiviso sul Hub 🥳.

È 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 necessario per comprendere realmente il materiale prima di continuare. È importante padroneggiare questi elementi e avere solide basi prima di entrare nella parte divertente.

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

Naturalmente, durante il corso, useremo e spiegheremo nuovamente questi termini , ma è meglio comprenderli prima di immergersi nei capitoli successivi.

Nel prossimo capitolo, impareremo il Q-Learning e approfondiremo i metodi basati sul valore.

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

Infine, vogliamo migliorare e aggiornare il corso iterativamente grazie ai tuoi feedback . Se ne hai, compila questo modulo 👉 https://forms.gle/3HgA7bEHwAmmLfwh9

Continua a imparare, resta fantastico/a,