Apprentissage supervisé vs apprentissage par renforcement pour une simple voiture rc à conduite autonome

12

Je construis une voiture autonome télécommandée pour le plaisir. J'utilise un Raspberry Pi comme ordinateur de bord; et j'utilise divers plug-ins, tels qu'un appareil photo Raspberry Pi et des capteurs de distance, pour obtenir des informations sur l'environnement de la voiture. J'utilise OpenCV pour transformer les images vidéo en tenseurs, et j'utilise TensorFlow de Google pour construire un réseau neuronal alambiqué pour apprendre les limites et les obstacles de la route. Ma question principale est la suivante: devrais-je utiliser un apprentissage supervisé pour apprendre à conduire la voiture ou dois-je fournir des objectifs et des sanctions et faire un apprentissage par renforcement (c.-à-d. Arriver au point B aussi vite que possible sans rien heurter et rester dans les limites de la route)? Voici une liste des avantages et des inconvénients que j'ai trouvés.

Professionnels de l'apprentissage supervisé:

  • Les entrées de l'algorithme d'apprentissage sont assez simples. La voiture apprend à associer les mesures de distance du tenseur de trame vidéo et du capteur avec le déplacement des roues avant, arrière et angulaire
  • Je peux plus ou moins apprendre à la voiture à conduire exactement comme je veux (sans sur-ajustement, bien sûr)
  • J'ai déjà fait des tonnes de problèmes d'apprentissage supervisé auparavant, et cette approche semble convenir à mes compétences existantes

Contre apprentissage supervisé:

  • Il n'est pas clair comment enseigner la vitesse, et la bonne vitesse est assez arbitraire tant que la voiture ne va pas si vite qu'elle s'écarte de la route. Je suppose que je pouvais conduire vite pendant l'entraînement, mais cela semble être une approche grossière. Peut-être que je pourrais ajouter manuellement une variable constante pendant la formation qui correspond à la vitesse de cette session de formation, puis lorsque l'algorithme d'apprentissage est déployé, je règle cette variable en fonction de la vitesse que je veux?

Avantages de l'apprentissage par renforcement:

  • Si je construis ma voiture dans le but spécifique de faire la course avec les voitures autonomes d'autres personnes, l'apprentissage par renforcement semble être le moyen naturel de dire à ma voiture "d'arriver le plus vite possible"
  • J'ai lu que RL est parfois utilisé pour les drones autonomes, donc en théorie, cela devrait être plus facile dans les voitures car je n'ai pas à me soucier des montées et descentes

Renforcement de l'apprentissage contre:

  • Je pense que l'apprentissage par renforcement nécessiterait beaucoup de capteurs supplémentaires, et franchement, ma voiture longue ne dispose pas de beaucoup d'espace à l'intérieur, étant donné qu'elle doit également contenir une batterie, le Raspberry Pi et une planche à pain

  • La voiture se comportera de manière très irrégulière au début, à tel point qu'elle se détruit peut-être. Cela peut également prendre un temps déraisonnablement long à apprendre (par exemple, des mois ou des années)

  • Je ne peux pas incoporer des règles explicites plus tard, par exemple, m'arrêter à un feu rouge de jouet. Avec un apprentissage supervisé, j'ai pu incorporer de nombreux algorithmes SL (par exemple, un classificateur Haar Cascade pour identifier les feux de stop) dans un moteur de règles configurable qui est évalué entre chaque image vidéo. Le moteur de règles serait ainsi en mesure de remplacer l'algorithme SL de conduite s'il voyait un feu rouge d'arrêt même si le feu stop ne faisait pas partie de la formation de l'algorithme de conduite. RL semble trop continu pour le faire (c.-à-d., Ne s'arrêter qu'à l'état terminal)
  • Je n'ai pas beaucoup d'expérience avec l'apprentissage par renforcement appliqué, bien que je veuille vraiment l'apprendre malgré
Ryan Zotti
la source
Ce n'est pas vraiment une réponse, je fais en fait le même projet, une voiture autonome avec Q-learning (RL) (toujours au début), et je voudrais demander si votre code de projet est disponible quelque part en ligne, il serait très utile pour moi. C'est le projet que je suis en ce moment: medium.com/@harvitronix/… il utilise RL avec NN comme google deep Q learning (le papier Atari), mais il n'utilise pas l'apprentissage supervisé. Son code est disponible ici: github.com/harvitronix/reinfo
Mahmoud Hossam
@MahmoudHossam avez-vous un autre emplacement pour le code? Le lien que vous avez donné est mort.
Homunculus Reticulli
@MahmoudHossam Il semble que le dépôt ait été changé en: github.com/harvitronix/rl-rc-car
Ryan Zotti

Réponses:

12

Je vous suggère d'essayer une approche hybride:

  • Tout d'abord, entraînez votre voiture de manière supervisée par démonstration . Contrôlez-le et utilisez vos commandes comme étiquettes. Cela vous permettra d'obtenir tous les avantages de SL.
  • Ensuite, affinez votre réseau neuronal en utilisant l'apprentissage par renforcement. Vous n'avez pas besoin de capteurs supplémentaires pour cela: les récompenses peuvent être obtenues à partir de capteurs de distance (plus grandes distances = mieux) et de la vitesse elle-même. Cela vous donnera les avantages de RL et entraînera votre NN à l'objectif correct de conduire rapidement tout en évitant les obstacles au lieu de vous imiter.
  • En combinant les deux approches, vous obtiendrez les avantages de SL et RL tout en évitant leurs inconvénients. RL ne partira pas d'un comportement aléatoire, juste de petits écarts graduels par rapport à ce que vous avez appris au NN. Une approche similaire a été appliquée avec succès par Google DeepMind avec AlphaGo .
  • Vous pouvez toujours inclure des règles explicites en plus de cela. Implémentez-les avec une priorité élevée et appelez le NN uniquement lorsqu'il n'y a pas de règle explicite pour la situation actuelle. Cela rappelle l' architecture de subsomption .
rcpinto
la source
DeepMind a même arraché Matthew Lai, fraîchement sorti de ses résultats excitants sur Giraffe Chess NN: motherboard.vice.com/en_us/article/…
DukeZhou