Aprendizaje supervisado vs aprendizaje de refuerzo para un auto rc simple y autónomo

12

Estoy construyendo un auto con control remoto para divertirme. Estoy usando una Raspberry Pi como computadora de a bordo; y estoy usando varios complementos, como una cámara Raspberry Pi y sensores de distancia, para obtener información sobre los alrededores del automóvil. Estoy usando OpenCV para convertir los cuadros de video en tensores, y estoy usando TensorFlow de Google para construir una red neuronal enrevesada para aprender los límites y obstáculos de la carretera. Mi pregunta principal es, ¿debería utilizar el aprendizaje supervisado para enseñar a conducir el automóvil o debería proporcionar objetivos y sanciones y hacer un aprendizaje de refuerzo (es decir, llegar al punto B lo más rápido posible sin golpear nada y permanecer dentro de los límites de la carretera)? A continuación se muestra una lista de los pros y los contras que se me ocurrieron.

Profesionales de aprendizaje supervisados:

  • Las entradas al algoritmo de aprendizaje son bastante sencillas. El automóvil aprende a asociar las lecturas de distancia del tensor de cuadro de video y del sensor con el desplazamiento de la rueda hacia adelante, hacia atrás y angular
  • Puedo enseñarle más o menos al automóvil a conducir exactamente como quiero (sin sobreajustar, por supuesto)
  • He hecho toneladas de problemas de aprendizaje supervisado antes, y este enfoque parece adaptarse cómodamente a mi conjunto de habilidades existente

Contras de aprendizaje supervisado:

  • No está claro cómo enseñar la velocidad, y la velocidad correcta es bastante arbitraria siempre que el automóvil no vaya tan rápido que se desvíe de la carretera. Supongo que podría conducir rápido durante el entrenamiento, pero esto parece un enfoque burdo. ¿Tal vez podría agregar manualmente una variable constante durante el entrenamiento que corresponda a la velocidad de esa sesión de entrenamiento, y luego, cuando se implementa el algoritmo de aprendizaje, configuro esta variable de acuerdo con la velocidad que quiero?

Profesionales de aprendizaje por refuerzo:

  • Si construyo mi automóvil con el propósito específico de competir con autos autónomos de otras personas, el aprendizaje de refuerzo parece ser la forma natural de decirle a mi automóvil que "llegue lo más rápido posible"
  • He leído que RL a veces se usa para drones autónomos, por lo que en teoría debería ser más fácil en los automóviles porque no tengo que preocuparme por subir y bajar

Contrastes de aprendizaje de refuerzo:

  • Siento que el aprendizaje de refuerzo requeriría muchos sensores adicionales, y, francamente, mi automóvil de un pie de largo no tiene mucho espacio en el interior teniendo en cuenta que también necesita una batería, la Raspberry Pi y una placa de pruebas.

  • El auto se comportará de manera muy errática al principio, tanto que tal vez se destruya solo. También puede tomar un tiempo excesivamente largo para aprender (por ejemplo, meses o años)

  • No puedo incorporar reglas explícitas más adelante, por ejemplo, parar en un semáforo en rojo. Con el aprendizaje supervisado, podría incorporar numerosos algoritmos SL (por ejemplo, un clasificador Haar Cascade para identificar semáforos) en un motor de reglas configurables que se evalúa entre cada cuadro de video. De este modo, el motor de reglas podría anular el algoritmo SL de conducción si viera un semáforo en rojo, aunque el semáforo podría no haber sido parte del entrenamiento del algoritmo de conducción. RL parece demasiado continuo para hacer esto (es decir, detenerse solo en el estado terminal)
  • No tengo mucha experiencia con el aprendizaje de refuerzo aplicado, aunque definitivamente quiero aprenderlo independientemente
Ryan Zotti
fuente
Esto no es realmente una respuesta, en realidad estoy haciendo el mismo proyecto, un auto sin conductor con Q-learning (RL) (todavía en el comienzo), y me gustaría preguntar si el código de su proyecto está disponible en algún lugar en línea. Sería muy útil para mí. Este es el proyecto que estoy siguiendo en este momento: medium.com/@harvitronix/… usa RL con NN como google deep Q learning (el documento de Atari), pero no usa el aprendizaje supervisado. Su código está disponible aquí: github.com/harvitronix/reinfo
Mahmoud Hossam
@MahmoudHossam, ¿tiene una ubicación alternativa para el código? El enlace que diste está muerto.
Homunculus Reticulli
@MahmoudHossam Parece que el repositorio cambió a: github.com/harvitronix/rl-rc-car
Ryan Zotti

Respuestas:

12

Te sugiero que pruebes un enfoque híbrido:

  • Primero, entrene su automóvil de manera supervisada mediante demostración . Simplemente contrólelo y use sus comandos como etiquetas. Esto le permitirá obtener todas las ventajas de SL.
  • Luego, ajuste su red neuronal utilizando el aprendizaje por refuerzo. No necesita sensores adicionales para eso: las recompensas se pueden obtener de sensores de distancia (distancias más grandes = mejor) y de la velocidad misma. Esto le dará las ventajas de RL y entrenará a su NN hacia el objetivo correcto de conducir rápido, evitando obstáculos en lugar del objetivo de imitarlo.
  • La combinación de ambos enfoques le proporcionará las ventajas de SL y RL mientras evita sus desventajas. RL no comenzará con un comportamiento aleatorio, solo pequeñas desviaciones graduales de lo que pensó el NN. Google DeepMind aplicó con éxito un enfoque similar con AlphaGo .
  • Siempre puede incluir reglas explícitas además de esto. Impleméntelos con alta prioridad y llame al NN solo cuando no haya una regla explícita para la situación actual. Esto es una reminiscencia de la arquitectura de subsunción .
rcpinto
fuente
DeepMind incluso arrancó a Matthew Lai, recién salido de sus emocionantes resultados de Giraffe Chess NN: motherboard.vice.com/en_us/article/…
DukeZhou