Apprendimento supervisionato vs apprendimento di rinforzo per una semplice auto RC a guida autonoma


12

Sto costruendo un'auto a guida autonoma telecomandata per divertimento. Sto usando un Raspberry Pi come computer di bordo; e sto usando vari plug-in, come una fotocamera Raspberry Pi e sensori di distanza, per feedback sull'ambiente circostante. Sto usando OpenCV per trasformare i fotogrammi video in tensori e sto usando TensorFlow di Google per costruire una rete neurale contorta per apprendere confini e ostacoli. La mia domanda principale è: dovrei usare l'apprendimento supervisionato per insegnare alla macchina a guidare o dovrei fornire obiettivi e penalità e fare l'apprendimento per rinforzo (cioè arrivare al punto B il più velocemente possibile senza colpire nulla e rimanere all'interno dei confini della strada)? Di seguito è riportato un elenco di pro e contro che ho escogitato.

Professionisti dell'apprendimento supervisionato:

  • Gli input per l'algoritmo di apprendimento sono piuttosto semplici. L'auto impara ad associare il tensore del fotogramma video e le letture della distanza del sensore con lo spostamento della ruota avanti, indietro e angolare
  • Posso più o meno insegnare all'auto a guidare esattamente come voglio (senza eccesso di equipaggiamento, ovviamente)
  • Ho già affrontato tonnellate di problemi di apprendimento supervisionato e questo approccio sembra adattarsi perfettamente al mio set di competenze esistente

Contro di apprendimento supervisionato:

  • Non è chiaro come insegnare la velocità e la velocità corretta è piuttosto arbitraria fintanto che la macchina non va così veloce da deviare dalla strada. Suppongo che potrei guidare veloce durante l'allenamento, ma questo sembra un approccio rozzo. Forse potrei aggiungere manualmente una variabile costante durante l'allenamento che corrisponde alla velocità per quella sessione di allenamento, e quindi quando viene distribuito l'algoritmo di apprendimento, imposto questa variabile in base alla velocità che voglio?

Professionisti dell'apprendimento per rinforzo:

  • Se costruisco la mia auto con lo scopo specifico di guidare auto a guida autonoma di altre persone, l'apprendimento per rinforzo sembra essere il modo naturale per dire alla mia auto di "arrivarci il più velocemente possibile"
  • Ho letto che RL è talvolta usato per droni autonomi, quindi in teoria dovrebbe essere più facile nelle auto perché non devo preoccuparmi di su e giù

Contro di apprendimento di rinforzo:

  • Sento che l'apprendimento per rinforzo richiederebbe molti sensori aggiuntivi e francamente la mia auto lunga un piede non ha molto spazio all'interno considerando che deve anche montare una batteria, il Raspberry Pi e una breadboard

  • All'inizio la macchina si comporterà in modo molto irregolare, tanto che forse si distruggerà da sola. Potrebbe anche essere necessario un tempo irragionevolmente lungo per imparare (ad esempio, mesi o anni)

  • Non posso incoporare regole esplicite in seguito, ad esempio, fermarmi a un semaforo rosso giocattolo. Con l'apprendimento supervisionato, potrei incorporare numerosi algoritmi SL (ad esempio, un classificatore Haar Cascade per identificare i semafori) in un motore di regole configurabile che viene valutato tra ciascun fotogramma video. Il motore delle regole sarebbe quindi in grado di ignorare l'algoritmo di guida SL se vedesse un semaforo rosso anche se il semaforo potrebbe non aver fatto parte dell'addestramento dell'algoritmo di guida. RL sembra troppo continuo per farlo (cioè fermarsi solo allo stato terminale)
  • Non ho molta esperienza con l'apprendimento del rinforzo applicato, anche se voglio sicuramente impararlo a prescindere

Questa non è in realtà una risposta, sto effettivamente facendo lo stesso progetto, un'auto a guida autonoma con Q-learning (RL) (ancora all'inizio), e vorrei chiedere se il codice del tuo progetto è disponibile in parte online, sarebbe molto utile per me. Questo è il progetto che sto seguendo in questo momento: medium.com/@harvitronix/… usa RL con NN come google deep Q learning (il documento Atari), ma non usa l'apprendimento supervisionato. Il suo codice è disponibile qui: github.com/harvitronix/reinfo
Mahmoud Hossam,

@MahmoudHossam hai una posizione alternativa per il codice? Il link che hai fornito è morto.
Homunculus Reticulli,

@MahmoudHossam Sembra che il repository sia cambiato in: github.com/harvitronix/rl-rc-car
Ryan Zotti,

Risposte:


12

Ti suggerirei di provare un approccio ibrido:

  • Prima di tutto, allena la tua auto in modo supervisionato dimostrando . Basta controllarlo e usare i comandi come etichette. Questo ti permetterà di ottenere tutti i pro di SL.
  • Quindi, perfeziona la tua rete neurale usando l'apprendimento per rinforzo. Non hai bisogno di sensori extra per questo: i premi possono essere ottenuti dai sensori di distanza (distanze maggiori = migliore) e dalla velocità stessa. Questo ti darà i professionisti di RL e addestrerà la tua NN all'obiettivo corretto di guidare velocemente evitando gli ostacoli anziché l'obiettivo di imitarti.
  • Combinando entrambi gli approcci otterrai i vantaggi di SL e RL evitando i loro contro. RL non inizierà da un comportamento casuale, solo piccole deviazioni graduali da ciò che hai insegnato alla NN. Un approccio simile è stato applicato con successo da Google DeepMind con AlphaGo .
  • Inoltre puoi sempre includere regole esplicite. Implementali con alta priorità e chiama l'NN solo quando non esiste una regola esplicita per la situazione attuale. Questo ricorda l' architettura di sussunzione .

DeepMind ha persino strappato Matthew Lai, appena uscito dai suoi eccitanti risultati Giraffe Chess NN: motherboard.vice.com/en_us/article/…
DukeZhou
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.