Ottobre 2018
Volume 33 numero 10
Il presente articolo è stato tradotto automaticamente.
Artificially Intelligent - Introduzione a apprendimento per rinforzo
Dal Frank La La | Ottobre 2018
Negli articoli precedenti, ho accennato sia apprendimento supervisionato e algoritmi di apprendimento non supervisionato. Oltre a questi due metodi di machine learning prevede un altro tipo: Ottimizzazione dell'apprendimento (RL). Definite formalmente, RL rappresenta un calcolo approccio orientato agli obiettivi di apprendimento tramite l'interazione con l'ambiente in condizioni ideali learning.
Come altri aspetti dell'intelligenza artificiale, molti degli algoritmi e gli approcci utilizzati attivamente oggi loro origini al 1980s di traccia (bit.ly/2NZP177). Con l'avvento di risorse di archiviazione convenienti e la potenza di calcolo on demand, sono emersi nuovamente le tecniche di apprendimento per rinforzo.
Senza dubbio l'uso più famosa di RL alla data è il programma AlphaGo Zero da DeepMind Technologies Ltd. A differenza di AlphaGo, quale apprese dai record di entrambi e professionali lettori umani, AlphaGo Zero non hanno accesso ai set di dati di training basato su umane. Al contrario, il sistema in base completamente a giocare alle partite su se stesso. Dopo alcune settimane, AlphaGo zero raggiunto lo stato a livello generale e, dopo 40 giorni, è diventato Windows Media player Go migliore del mondo. Tenere presente che lo ha tutto ciò senza intervento umano. Altre informazioni sul progetto posizionato bit.ly/2K9NpW8. RL è stato usato anche per eseguire il training di algoritmi da utilizzare giochi arcade classico e raggiungere i punteggi più alti possibili con la partecipazione umana minima o senza alcuna.
In questo articolo verrà discutere concetti fondamentali di RL e si basano su questo in futuro gli articoli.
Componenti di base di un modello RL
RL è incentrato su un modello usando un sistema ricompensa in modo molto simile a come gli animali ed esseri umani informazioni in base all'esperienza di training, ovvero dalla versione di valutazione ed errori. Poiché RL simula i sistemi comportamentali cognitivi umani, è molto di sovrapposizione con psicologia cognitivo. Gli algoritmi RL distribuiscono anche un po' di matematica teoria di giochi e le strategie, nonché.
I primi due elementi in qualsiasi modello RL sono l'ambiente e l'agente. Usando l'esempio di un gioco di chess, l'ambiente è la griglia di gioco e l'agente è Windows Media player. Lo stato dell'ambiente è il posizionamento degli elementi in conoscerli. L'agente rileva lo stato dell'ambiente e si applica un'azione per l'ambiente per ricevere un premio (vedere figura 1). Del gioco di chess, questa azione potrebbe essere in futuro un ludico o acquisizione dell'avversario. Lo spostamento in un gioco di chess modifica automaticamente lo stato dell'ambiente. L'agente potrebbe richiedere uno qualsiasi degli spostamenti validi disponibili per il lettore in un gioco di chess.
Figura 1 componenti essenziali di un sistema di apprendimento per rinforzo
L'agente riceve un premio dall'ambiente in base all'azione impiegato. I benefici sono un valore numerico analogo al punteggio in un gioco video. Gli agenti di scegliere tra le opzioni disponibili in base i benefici previsto. Gli agenti vengono programmati per ottimizzare la loro ricompensa. Ad esempio, lo spostamento di un componente in avanti potrebbe produrre un premio di 1, mentre l'acquisizione di un pezzo avversario potrebbe produrre un premio di 5. Compiere questa scelta, l'algoritmo sceglierà l'acquisizione di un pezzo avversario su semplicemente spostata in avanti ogni volta. Tale struttura reward produrrà un agente aggressivo, come sceglierà sempre dell'avversario, anche a scapito di perdere il gioco di acquisizione. Ovviamente, questo non è il risultato ottimale. Pertanto, l'accuratezza dell'ambiente e struttura reward sono fondamentali per il successo di un modello di training tramite RL.
Uno spazio ridotto di problema
Creazione di un modello che acquisisce la complessità di chess per il training di un agente cade molto all'esterno dell'ambito di questa colonna. Per semplicità, ridurrà l'ambiente fino a una 4x4 griglia. L'agente consente di controllare lo spostamento di un carattere in questa griglia. Alcune celle della griglia sono è percorribile, mentre altri lead per l'agente che rientrano nell'acqua e, di conseguenza, il carattere di terminazione e la reimpostazione della simulazione. L'agente dispone di una cella di obiettivo di raggiungere e sarà possibile ottenere con un punteggio pari a 1 per trovare un percorso sicuro a esso. Gli spostamenti bacheca restituisce un valore di reward pari a 0. Per questo esempio, si utilizzerà l'ambiente Lake bloccati dalla OpenAI palestra (bit.ly/2v1csWA).
Per iniziare, aprire un notebook di Jupyter di Python 3 sulla tua piattaforma preferita. Ho spiegato come iniziare a usare i notebook di Jupyter in un precedente articolo (msdn.com/magazine/mt829269). Creare una cella vuota e immettere ed eseguire il codice seguente per importare le librerie appropriate e configurare l'ambiente per l'agente in cui eseguire il training:
import gym
import numpy as np
env = gym.make('FrozenLake-v0')
A questo punto, creare una nuova cella, immettere il codice seguente e quindi eseguire:
print("observation_space")
print(env.observation_space)
print("action_space")
print(env.action_space)
Il risultato dovrebbe indicare che sono presenti valori discreti 16 nell'area di osservazione, semplicemente ciò che vi aspettereste in una 4x4 griglia. Indica inoltre che nello spazio di azione sono presenti quattro valori discreti, vale a dire che è possibile spostare l'agente di, in basso a sinistra o destra.
Un approccio casuale
Ora che l'ambiente è configurato, è possibile iniziare a interagire con esso. Aggiungere il codice seguente in una nuova cella di sotto di quello corrente:
env.reset()
done = False
while done == False:
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
print(action, observation, reward, done, info)
L'output dovrebbe essere simile al seguente:
2 4 0.0 False {'prob': 0.3333333333333333}
3 4 0.0 False {'prob': 0.3333333333333333}
2 8 0.0 False {'prob': 0.3333333333333333}
0 4 0.0 False {'prob': 0.3333333333333333}
1 5 0.0 True {'prob': 0.3333333333333333}
Questo algoritmo esamina in modo casuale lo spazio scegliendo una direzione dallo spazio di azione in modo casuale. La funzione di passaggio accetta l'azione come parametro e restituisce l'osservazione, ricompensa, eseguita e le informazioni. Osservazione, in questo caso, rappresenta la posizione della griglia. Reward è la quantità di reward generato il passaggio. Operazione eseguita è un valore booleano che indica se la simulazione è terminata. In questo esempio, significa che il lettore è scesa attraverso il ghiaccio ed è necessario riavviare la simulazione. Il parametro finale in uscita è info e viene utilizzato principalmente per scopi diagnostici. Dato che zero reward punti acquisiti significa che l'agente non raggiungere l'obiettivo.
Ovviamente è molto improbabile che l'agente verrà in modo casuale tra la soluzione. Probabilmente tentato più volte, verrà restituito un risultato positivo. Il codice seguente, che debba essere immessi ed eseguito, verrà eseguito la simulazione di 100 volte:
print("starting")
for i in range(100):
env.reset()
done = False
while done == False:
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if(reward > 0):
print("success")
print(reward)
print ("done")
Questa operazione, troppo, non probabilmente restituirà un risultato positivo. Modificare il codice in modo che la simulazione viene eseguita a 1.000 volte ed eseguire di nuovo. Con 1.000 esecuzioni, deve essere pari a 10 esecuzioni riuscite, assegnare o eseguire. Statisticamente parlando, ciò significa che un approccio casuale per il problema funziona l'1% del tempo. Ovviamente, l'approccio casuale da solo non è sufficiente.
Introduzione a domande E-Learning
Come si è visto, l'approccio di "prova e avere esito negativo" random produce risultati terribili. O se ne non? Gli animali di ordine superiore, memoria svolge un ruolo fondamentale nell'apprendimento. Un approccio di provare a non riuscire sarà molto più efficace se i risultati di precedenti tentativi vengono acquisiti. Il codice precedente viene avviata una nuova a ogni iterazione, in modo efficiente affidarsi probabilità di esito positivo.
Un approccio utile consiste Q-Learning. Il metodo di Q-Learning apprende una strategia per guidare un agente per le azioni da eseguire in quali circostanze. Nella configurazione più semplice, l'algoritmo di Q-Learning potrebbe essere implementato come una tabella, denominata Q-tabella. In questo ambiente Lake bloccati, sono presenti 16 possibili stati, che rappresenta una posizione nella 4x4 griglia e quattro le azioni possibili per ogni direzione. Ciò comporta una tabella 16 x 4 di Q-Value. Ogni riga della tabella presenta quattro colonne, il valore più elevato sulla riga rappresenta l'azione migliore da sfruttare. Pertanto, la tabella contiene le righe che rappresentano tutti gli stati possibili con le colonne che indica la direzione è la più alta probabilità di successo.
Immettere il codice nel figura 2 in uno spazio vuoto di cella e l'esecuzione (dovrebbe richiedere qualche secondo per l'esecuzione).
Figura 2 implementazione di Q-tabella
Qtable = np.zeros([env.observation_space.n,env.action_space.n])
lr = .8
gamma = .95
num_episodes = 2000
rList = []
for i in range(num_episodes):
s = env.reset()
rAll = 0
d = False
j = 0
while j < 99:
j+=1
a = np.argmax(Qtable[s,:] + np.random.randn(1,env.action_space.n)*(1./(i+1)))
s1,r,d,_ = env.step(a)
Qtable[s,a] = Qtable[s,a] + lr*(r + gamma*np.max(Qtable[s1,:]) - Qtable[s,a])
rAll += r
s = s1
if d == True:
break
rList.append(rAll)
Per creare una tabella di D, creare innanzitutto una tabella con 16 righe e quattro colonne. Tenere presente che sarà presente una riga per tutti gli stati possibili e una colonna per ogni azione possibile. La tabella di domande e viene inizializzata con i valori pari a zero in ogni cella, un'attività più facile grazie gli zeri (metodo). Quando l'agente viene illustrato l'ambiente e osserva i risultati, Q-tabella viene aggiornata. A ogni passaggio della simulazione, il codice consente di selezionare l'azione (colonna) con il valore massimo per lo stato specifico (riga), dopo il quale il codice rileva i vantaggi ottenuti per varie azioni e aggiorna di conseguenza la tabella. La simulazione viene eseguito il più il codice, l'esperienza più verrà archiviata nella tabella di D. Infine, i valori la convergenza in una soluzione ideale e il risultato è un modello più accurato. Il codice nel figura 2 eseguirà la simulazione di 2.000 ore.
Gran parte del codice è piuttosto semplice e corrisponde alla descrizione di semplicemente fornita, è possibile trovare la riga seguente nel frammento di codice alquanto sconcertante:
Qtable[s,a] = Qtable[s,a] + lr*(r + gamma*np.max(Qtable[s1,:]) - Qtable[s,a])
Questo codice implementa l'equazione Fattorino d'albergo e archivia i risultati della Q-tabella. Una descrizione completa dell'equazione Fattorino d'albergo cade all'esterno dell'ambito di questa colonna. Per ora, comprendere che l'equazione Fattorino d'albergo rappresenta i vantaggi associati a una sequenza di azioni. È disponibili su YouTube in una procedura dettagliata completa di questa equazione bit.ly/2n1eEc5.
Immettere il codice seguente in una nuova cella ed eseguirlo:
print( "score: " + str(sum(rList)/num_episodes) )
Il punteggio risulta è una media dei vantaggi ottenuti oltre 2.000 iterazioni ed equivale approssimativamente a accuratezza. Questo punteggio deve rientrare in un intervallo di 0,42 e 0,54, vale a dire che l'algoritmo si sposterà correttamente un modo tramite l'ambiente in un punto qualsiasi tra 42% e 54% del tempo. Non perfetto, ma certamente migliore rispetto alla velocità di esito positivo dell'1% prodotta da un'ipotesi casuale con memoria non delle azioni precedenti.
Esaminando più da vicino la Q-tabella
Infine, può essere utile per esaminare più da vicino la tabella di D. Immettere "Qtable" in una cella vuota ed eseguirlo. L'output sarà una tabella 16 x 4 numeri compresi tra zero e uno. Si noti che alcune righe sono completamente riempiti con zeri. Immettere "Qtable [1,:]" in una classe vuota cella ed eseguire il codice. L'output sarà simile al seguente:
array([0.00081276, 0.00239483, 0.00018525, 0.15080315])
Questo risultato indica che l'agente appreso che l'azione quarta (aumenta stabilmente) è il percorso più probabile reward quando l'ambiente è in uno stato. Righe riempite con zeri indicano che l'algoritmo mai inserito il valore e lo pernottato il valore predefinito. Questo caso si verifica quando l'iterazione è terminata, perché l'agente è diminuita in uno spazio vuoto o raggiunto l'obiettivo.
Conclusioni
In questo articolo, esaminato i componenti principali di RL e due metodi per esplorare un ambiente. L'agente è stato descritto come passare un campo ghiaccio con nessuna guida umana. Tutto ciò che è stato l'agente, lo imparato di per sé. In entrambi gli scenari, l'agente esplorato l'ambiente in modo casuale. Nel secondo esempio, una tabella di domande e usato l'agente o una tabella di ricerca, che fornite indicazioni su cosa spostare apportare basato sullo stato corrente dell'ambiente. Questo ha conferito l'agente di un ordinamento della memoria in cui è stato possibile ascolta le decisioni precedenti. Come si è visto, il risultato è un miglioramento significativo in frequenza esecuzioni senza errori.
RL è tra gli spazi più interessanti di intelligenza artificiale. Come ha dimostrato AlphaGo Zero, non è più input umano è un componente essenziale per machine learning. Mentre le applicazioni per questa tecnologia potenziali sono molte, esistono importanti sfide da superare prima di usarlo in qualsiasi progetto reale.
Ringraziamenti Arthur Juliani e il suo post di blog speciali "semplice apprendimento per rinforzo con Tensorflow Part 0: Q-Learning con tabelle e le reti neurali"(bit.ly/2OxySXQ), quale fornito un esempio di equazione Fattorino d'albergo implementata in Python.
Frank La Vignelavora in Microsoft come un professionista di soluzioni di tecnologia per intelligenza artificiale, in cui aiuta le aziende ottenere migliori risultati per usufruire al meglio i propri dati con analitica e intelligenza artificiale. Ha inoltre CO-host il DataDriven podcast. Il suo blog all'indirizzo FranksWorld.com ed è possibile guardare lui sul suo canale YouTube, "Di Frank mondo TV" (FranksWorld.TV).
Grazie al seguente esperto tecnico Microsoft per la revisione dell'articolo: Andy Leonard