Q Apprendimento in Python: che cos'è, definizioni [Esempi di codifica]

Pubblicato: 2020-03-26

L'apprendimento per rinforzo è quando un agente di apprendimento impara a comportarsi in modo ottimale in base al suo ambiente attraverso interazioni costanti. L'agente attraversa varie situazioni, note anche come stati. Come avrai intuito, l'apprendimento per rinforzo ha molte applicazioni nel nostro mondo. Scopri di più se sei interessato a saperne di più sugli algoritmi di data science.

Inoltre, ha molti algoritmi, tra i più popolari c'è l'apprendimento Q. In questo articolo, discuteremo cos'è questo algoritmo e come funziona.

Quindi, senza ulteriori indugi, iniziamo.

Sommario

Che cos'è l'apprendimento Q?

L'apprendimento Q è un algoritmo di apprendimento per rinforzo e si concentra sulla ricerca della migliore linea d'azione per una particolare situazione. È fuori policy perché le azioni da cui apprende la funzione di apprendimento Q sono al di fuori della policy esistente, quindi non ne richiede una. Si concentra sull'apprendimento di una politica che aumenti la sua ricompensa totale. È una semplice forma di apprendimento per rinforzo che utilizza valori di azione (o valori Q) per migliorare il comportamento dell'agente di apprendimento.

L'apprendimento Q è uno degli algoritmi più popolari nell'apprendimento per rinforzo, poiché è facile da comprendere e implementare. La "Q" nell'apprendimento Q rappresenta la qualità. Come accennato in precedenza, l'apprendimento Q si concentra sulla ricerca dell'azione migliore per una situazione particolare. E la qualità mostra quanto sia utile un'azione specifica e quale ricompensa può aiutarti a raggiungere.

Definizioni importanti

Prima di iniziare a discutere di come funziona, dovremmo prima dare un'occhiata ad alcuni concetti essenziali dell'apprendimento di q. Iniziamo.

Q-Valori

I valori Q sono anche noti come valori di azione. Sono rappresentati da Q(S, A) e forniscono una stima di quanto sia buona l'azione A da intraprendere nello stato S. Il modello calcolerà questa stima in modo iterativo utilizzando la regola di aggiornamento della differenza temporale di cui abbiamo discusso in seguito in questa sezione.

Episodi e premi

Un agente inizia da uno stato iniziale, attraversa diverse transizioni, quindi passa dal suo stato attuale a quello successivo in base alle sue azioni e al suo ambiente. Ogni volta che l'agente agisce, ottiene una ricompensa. E quando non sono possibili transizioni, è il completamento dell'episodio.

Aggiornamento TD (differenza temporale)

Ecco la regola TD-Update o Differenza temporale:

Q(S,A) Q(S,A) + (R + Q(S',A')-Q(S,A))

Qui, S rappresenta lo stato corrente dell'agente, mentre S' rappresenta lo stato successivo. A rappresenta l'azione corrente, A' rappresenta la seguente migliore azione in base alla stima del valore Q, R mostra la ricompensa corrente in base all'azione in corso, rappresenta il fattore di sconto e mostra la lunghezza del passo.

Leggi anche: Prerequisito per Data Science. Come cambia nel tempo?

Esempio di Q Learning Python

Il modo migliore per comprendere l'apprendimento di Q Python è vedere un esempio. In questo esempio, utilizziamo l'ambiente palestra di OpenAI e alleniamo il nostro modello con esso. Prima di tutto, dovrai installare l'ambiente. Puoi farlo con il seguente comando:

palestra di installazione pip

Ora importeremo le librerie di cui avremo bisogno per questo esempio:

importare palestra

importare itertools

importa matplotlib

importa matplotlib.style

importa numpy come np

importa panda come pd

importazione sist

dalle raccolte import defaultdict

da windy_gridworld import WindyGridworldEnv

importare la stampa

matplotlib.style.use('ggplot')

Senza le librerie necessarie, non saresti in grado di eseguire queste operazioni con successo. Dopo aver importato le librerie, creeremo l'ambiente:

env = WindyGridworldEnv()

Ora creeremo la politica -greedy:

def createEpsilonGreedyPolicy(Q, epsilon, num_actions):

“””

Crea una politica basata su epsilon-greedy

su una data funzione Q ed epsilon.

Restituisce una funzione che prende lo stato

come input e restituisce le probabilità

per ogni azione sotto forma di un array numpy

della lunghezza dello spazio d'azione (insieme di possibili risposte).

“””

def policyFunction(state):

Azione_probabilità = np.ones(num_azioni,

dtype = float) * epsilon / num_actions

best_action = np.argmax(Q[stato])

Azione_probabilità[miglior_azione] += (1.0 – epsilon)

restituisce Azione_probabilità

politica di restituzioneFunzione

Ecco il codice per costruire un modello q-learning:

def qLearning(env, num_episodes, discount_factor = 1.0,

alfa = 0,6, epsilon = 0,1):

“””

Algoritmo Q-Learning: controllo TD fuori policy.

Trova la politica avida ottimale mentre migliora

seguendo una politica epsilon-greedy”””

# Funzione valore azione

# Un dizionario annidato che mappa

# stato -> (azione -> valore-azione).

Q = defaultdict(lambda: np.zeros(env.action_space.n))

# Tiene traccia di statistiche utili

stats = plotting.EpisodeStats(

lunghezza_episodio = np.zeros(num_episodi),

episodio_ricompense = np.zeros(num_episodes))

# Creare una funzione di politica avida di epsilon

# in modo appropriato per lo spazio di azione ambientale

policy = createEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)

# Per ogni episodio

per ith_episode nell'intervallo(num_episodes):

# Ripristina l'ambiente e scegli la prima azione

stato = ambiente.reset()

per t in itertools.count():

# ottieni le probabilità di tutte le azioni dallo stato corrente

action_probabilities = politica(stato)

# scegli l'azione in base a

# la distribuzione di probabilità

azione = np.random.choice(np.arange(

len(azione_probabilità)),

p = azione_probabilità)

# agisci e ottieni ricompensa, passa allo stato successivo

stato_successivo, ricompensa, fatto, _ = env.step(azione)

# Aggiorna le statistiche

stats.episode_rewards[i_episode] += ricompensa

stats.episode_lengths[i_episode] = t

# Aggiornamento TD

migliore_azione_successiva = np.argmax(Q[stato_successivo])

td_target = ricompensa + fattore_sconto * Q[next_state][best_next_action]

td_delta = td_target – Q[stato][azione]

Q[stato][azione] += alfa * td_delta

# done è True se l'episodio è terminato

se fatto:

rottura

stato = stato_successivo

ritorno Q, statistiche

Alleniamo ora il modello:

Q, statistiche = qApprendimento(env, 1000)

Dopo aver creato e addestrato il modello, possiamo tracciare le statistiche essenziali dello stesso:

plotting.plot_episode_stats(stats)

Utilizzare questo codice per eseguire il modello e tracciare il grafico. Che tipo di risultati vedi? Condividi i tuoi risultati con noi e, in caso di confusione o dubbi, faccelo sapere.

Leggi anche: Algoritmi di apprendimento automatico per la scienza dei dati

Impara i corsi di scienza dei dati dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Pensieri finali

Quando tracci il grafico, vedrai che la ricompensa per episodio aumenta progressivamente nel tempo. E dopo alcuni episodi, la trama riflette anche che livella il limite elevato di ricompense per episodio. Cosa indica questo?

Significa che il tuo modello ha imparato ad aumentare la ricompensa totale che può guadagnare in un episodio assicurandosi che si comporti in modo ottimale. Devi anche aver visto perché q learning Python vede applicazioni in così tanti settori e aree.

Quali sono gli svantaggi dell'apprendimento per rinforzo?

1. Un apprendimento per rinforzo eccessivo potrebbe comportare un eccesso di stati, abbassando la qualità dei risultati.
2. L'apprendimento per rinforzo non è raccomandato per una facile risoluzione dei problemi.
3. L'apprendimento per rinforzo richiede una grande quantità di dati e calcoli.
4. L'apprendimento per rinforzo ha una sua serie di ostacoli unici e molto complicati, come l'impostazione della progettazione della formazione impegnativa e problemi con l'equilibrio tra esplorazione e rinforzo.

Q è basato sul modello di apprendimento?

No, l'apprendimento Q non dipende dai modelli. Il Q-learning è una tecnica di apprendimento per rinforzo senza modelli per determinare il valore di una determinata azione in un determinato stato. L'apprendimento Q è uno dei numerosi algoritmi di apprendimento per rinforzo attuali che è privo di modelli, il che significa che può essere utilizzato in una varietà di contesti e può adattarsi rapidamente a condizioni nuove e sconosciute. Può gestire problemi che coinvolgono transizioni stocastiche e ricompense senza la necessità di adattamenti e non richiede un modello ambientale. Q-learning è un algoritmo di apprendimento basato sui valori. Gli algoritmi basati sul valore utilizzano un'equazione per aggiornare la funzione del valore (in particolare l'equazione di Bellman).

In che modo Q learning e SARSA sono diversi l'uno dall'altro?

SARSA apprende una politica quasi ottimale durante l'esplorazione, mentre Q-learning apprende direttamente la politica ottimale. La SARSA fuori politica apprende i valori di azione in relazione alla politica che sta seguendo, mentre la SARSA in linea con la politica apprende i valori di azione in relazione alla politica che sta seguendo. In relazione alla politica avida, Q-Learning lo fa. Entrambi convergono alla funzione del valore reale in condizioni simili, ma a velocità diverse. Q-Learning richiede un po' più di tempo per convergere, ma potrebbe continuare ad apprendere mentre i regolamenti vengono modificati. Quando accoppiato con l'approssimazione lineare, non è garantito che Q-Learning converga. La SARSA prenderà in considerazione le sanzioni derivanti dai passaggi esplorativi quando si avvicina alla convergenza, mentre il Q-learning no. Se c'è la possibilità di una ricompensa negativa significativa lungo il percorso ideale, Q-learning cercherà di attivarlo durante l'esplorazione, tuttavia SARSA cercherà di evitare un percorso ottimale rischioso e imparerà a utilizzarlo solo dopo che i parametri di esplorazione sono diminuiti.