Policy Gradient con PyTorch

'Policy Gradient with PyTorch'.

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

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

Questo articolo fa parte del corso di Deep Reinforcement Learning. Un corso gratuito dal principiante all’esperto. Controlla il programma qui.


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

Questo articolo fa parte del corso di Deep Reinforcement Learning. Un corso gratuito dal principiante all’esperto. Controlla il programma qui.

Nell’ultima unità, abbiamo imparato il Deep Q-Learning. In questo algoritmo di Deep Reinforcement Learning basato sul valore, abbiamo utilizzato una rete neurale profonda per approssimare i diversi Q-values per ogni possibile azione in uno stato.

In effetti, fin dall’inizio del corso, abbiamo studiato solo metodi basati sul valore, dove stimiamo una funzione di valore come passaggio intermedio per trovare una politica ottimale.

Perché, nel metodo basato sul valore, π esiste solo a causa delle stime dei valori delle azioni, poiché la politica è solo una funzione (ad esempio, politica avida) che selezionerà l’azione con il valore più alto dato uno stato.

Ma, con i metodi basati sulla politica, vogliamo ottimizzare direttamente la politica senza avere un passaggio intermedio di apprendimento di una funzione di valore.

Quindi oggi, studiaremo il nostro primo metodo basato sulla politica: Reinforce. E lo implementeremo da zero utilizzando PyTorch. Prima di testarne la robustezza utilizzando CartPole-v1, PixelCopter e Pong.

Cominciamo,

  • Cosa sono i metodi di Policy-Gradient?
    • Una panoramica dei Policy Gradients
    • I vantaggi dei metodi di Policy-Gradient
    • Gli svantaggi dei metodi di Policy-Gradient
  • Reinforce (Monte Carlo Policy Gradient)

Cosa sono i metodi di Policy-Gradient?

Policy-Gradient è una sottoclasse dei metodi basati sulla politica, una categoria di algoritmi che mirano ad ottimizzare direttamente la politica senza utilizzare una funzione di valore utilizzando diverse tecniche. La differenza con i metodi basati sulla politica è che i metodi di Policy-Gradient sono una serie di algoritmi che mirano ad ottimizzare direttamente la politica stimando i pesi della politica ottimale utilizzando l’Ascesa del Gradiente.

Una panoramica dei Policy Gradients

Perché ottimizziamo direttamente la politica stimando i pesi di una politica ottimale utilizzando l’Ascesa del Gradiente nei metodi di Policy Gradients?

Ricordiamo che l’apprendimento per rinforzo mira a trovare una strategia di comportamento ottimale (politica) per massimizzare la ricompensa cumulativa attesa.

Dobbiamo anche ricordare che una politica è una funzione che dato uno stato, restituisce una distribuzione delle azioni (nel nostro caso utilizzando una politica stocastica).

Il nostro obiettivo con Policy-Gradients è controllare la distribuzione di probabilità delle azioni regolando la politica in modo tale che le buone azioni (che massimizzano il rendimento) vengano campionate più frequentemente in futuro.

Prendiamo un semplice esempio:

  • Raccogliamo un episodio facendo interagire la nostra politica con il suo ambiente.

  • Poi guardiamo la somma delle ricompense dell’episodio (rendimento atteso). Se questa somma è positiva, consideriamo che le azioni prese durante gli episodi siano state buone: Pertanto, vogliamo aumentare P(a|s) (probabilità di prendere quell’azione in quello stato) per ogni coppia stato-azione.

L’algoritmo Policy Gradient (semplificato) si presenta così:

Ma Deep Q-Learning è eccellente! Perché utilizzare i metodi di policy gradient?

I Vantaggi dei Metodi di Policy-Gradient

Ci sono diversi vantaggi rispetto ai metodi di Deep Q-Learning. Vediamo alcuni di essi:

  1. La semplicità dell’integrazione: possiamo stimare direttamente la policy senza memorizzare dati aggiuntivi (valori d’azione).

  2. I metodi di policy gradient possono apprendere una policy stocastica mentre le funzioni di valore non possono .

Ciò comporta due conseguenze:

a. Non è necessario implementare manualmente un trade-off tra esplorazione e sfruttamento . Poiché produciamo una distribuzione di probabilità sulle azioni, l’agente esplora lo spazio degli stati senza seguire sempre la stessa traiettoria.

b. Ci liberiamo anche del problema dell’aliasing percettivo . L’aliasing percettivo si verifica quando due stati sembrano (o sono) gli stessi ma richiedono azioni diverse.

Prendiamo ad esempio un aspirapolvere intelligente il cui obiettivo è aspirare la polvere e evitare di uccidere i criceti.

Il nostro aspirapolvere può percepire solo dove sono le pareti.

Il problema è che i due casi rossi sono stati alias perché l’agente percepisce un muro superiore e inferiore per ciascuno.

In base a una policy deterministica, la policy si muoverà a destra quando si trova in uno stato rosso o si muoverà a sinistra. In entrambi i casi l’agente rimarrà bloccato e non aspirerà mai la polvere .

In base a un algoritmo RL basato su valore, impariamo una policy quasi deterministica (“strategia epsilon avida”). Di conseguenza, il nostro agente può impiegare molto tempo prima di trovare la polvere.

D’altra parte, una policy stocastica ottimale si muoverà casualmente a sinistra o a destra negli stati grigi. Di conseguenza, non rimarrà bloccato e raggiungerà lo stato obiettivo con alta probabilità .

  1. I gradienti di policy sono più efficaci negli spazi di azione ad alta dimensione e negli spazi di azione continui

Infatti, il problema con il Deep Q-learning è che le loro previsioni assegnano un punteggio (massimo premio futuro atteso) per ogni possibile azione , ad ogni passo temporale, dato lo stato corrente.

Ma cosa succede se abbiamo un numero infinito di azioni possibili?

Ad esempio, con una macchina a guida autonoma, ad ogni stato si ha una scelta (quasi) infinita di azioni (girare il volante di 15°, 17,2°, 19,4°, suonare il clacson, ecc.). Dovremmo produrre un valore Q per ogni possibile azione! E prendere l’azione massima di un output continuo è un problema di ottimizzazione!

Invece, con un policy gradient, produciamo una distribuzione di probabilità sulle azioni.

Gli Svantaggi dei Metodi di Policy-Gradient

Naturalmente, i metodi di Policy Gradient hanno anche alcuni svantaggi:

  • I gradienti di policy convergono spesso su un massimo locale anziché su un massimo globale.
  • I gradienti di policy procedono più lentamente, passo dopo passo: possono richiedere più tempo per l’addestramento (inefficienti).
  • I gradienti di policy possono avere una varianza elevata (baseline di soluzione).

👉 Se vuoi approfondire i motivi degli vantaggi e svantaggi dei metodi di Policy Gradient, puoi guardare questo video .

Ora che abbiamo visto l’immagine generale di Policy-Gradient e i suoi vantaggi e svantaggi, studiamo e implementiamo uno di essi : Reinforce.

Reinforce (Monte Carlo Policy Gradient)

Reinforce, anche chiamato Monte-Carlo Policy Gradient, utilizza un rendimento stimato da un intero episodio per aggiornare il parametro di policy θ \theta θ .

Abbiamo la nostra policy π che ha un parametro θ. Questa π, dato uno stato, produce una distribuzione di probabilità sulle azioni .

Dove π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) π θ ​ ( a t ​ ∣ s t ​ ) è la probabilità che l’agente selezioni l’azione at dallo stato st, dato la nostra policy.

Ma come possiamo sapere se la nostra politica è buona? Abbiamo bisogno di avere un modo per misurarla. Per saperlo definiamo una funzione di punteggio/obiettivo chiamata J ( θ ) J(\theta) J ( θ ) .

La funzione di punteggio J è il ritorno atteso:

Ricorda che il gradiente della politica può essere visto come un problema di ottimizzazione. Quindi dobbiamo trovare i migliori parametri (θ) per massimizzare la funzione di punteggio, J(θ).

Per fare ciò utilizzeremo il Teorema del Gradient Policy . Non approfondirò i dettagli matematici, ma se sei interessato/a guarda questo video

L’algoritmo Reinforce funziona così: Ciclo:

  • Utilizza la politica π θ \pi_\theta π θ ​ per raccogliere un episodio τ \tau τ
  • Utilizza l’episodio per stimare il gradiente g ^ = ∇ θ J ( θ ) \hat{g} = \nabla_\theta J(\theta) g ^ ​ = ∇ θ ​ J ( θ )

  • Aggiorna i pesi della politica: θ ← θ + α g ^ \theta \leftarrow \theta + \alpha \hat{g} θ ← θ + α g ^ ​

L’interpretazione che possiamo fare è la seguente:

  • ∇ θ l o g π θ ( a t ∣ s t ) \nabla_\theta log \pi_\theta(a_t|s_t) ∇ θ ​ l o g π θ ​ ( a t ​ ∣ s t ​ ) è la direzione di aumento più ripido della probabilità (logaritmica) di selezionare l’azione at dallo stato st. => Questo ci dice come dovremmo cambiare i pesi della politica se vogliamo aumentare / diminuire la probabilità logaritmica di selezionare l’azione at nello stato st.
  • R ( τ ) R(\tau) R ( τ ) : è la funzione di punteggio:
    • Se il ritorno è alto, spingerà verso l’alto le probabilità delle combinazioni (stato, azione).
    • Altrimenti, se il ritorno è basso, spingerà verso il basso le probabilità delle combinazioni (stato, azione).

Ora che abbiamo studiato la teoria dietro a Reinforce, sei pronto/a per codificare il tuo agente Reinforce con PyTorch . E testerai la sua robustezza usando CartPole-v1, PixelCopter e Pong.

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

La classifica per confrontare i tuoi risultati con quelli dei tuoi compagni di classe 🏆 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard

Congratulazioni per aver completato questo capitolo! C’era molta informazione. E congratulazioni per aver completato il tutorial. Hai appena codificato il tuo primo agente di Deep Reinforcement Learning da zero usando PyTorch e l’hai condiviso sul Hub 🥳.

È normale se ti senti ancora confuso con tutti questi elementi. Questo è stato lo stesso per me e per tutte le persone che hanno studiato RL.

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

Non esitare a allenare il tuo agente in altri 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/unit5/README.md

Nella prossima unità, impareremo su una combinazione di metodi basati su Policy e basati su Valore chiamati Metodi Actor Critic.

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

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

Continua a imparare, resta fantastico 🤗,