Betreutes Lernen versus Bestärkungslernen für ein einfaches selbstfahrendes RC-Auto


12

Ich baue aus Spaß ein ferngesteuertes, selbstfahrendes Auto. Ich verwende einen Raspberry Pi als Bordcomputer. und ich benutze verschiedene Plug-Ins, wie eine Himbeer-Pi-Kamera und Abstandssensoren, um Rückmeldung über die Umgebung des Autos zu erhalten. Ich benutze OpenCV, um die Video-Frames in Tensoren umzuwandeln, und ich benutze TensorFlow von Google, um ein verschlungenes neuronales Netzwerk aufzubauen, um Straßengrenzen und Hindernisse zu lernen. Meine Hauptfrage ist, ob ich das Fahren mithilfe von überwachtem Lernen unterrichten oder ob ich Ziele und Strafen festlegen und das Fahren verbessern soll (dh, ich komme so schnell wie möglich zu Punkt B, ohne etwas zu treffen und innerhalb der Straßengrenzen zu bleiben). Unten finden Sie eine Liste der Vor- und Nachteile, die ich mir ausgedacht habe.

Betreute Lernprofis:

  • Die Eingaben zum Lernalgorithmus sind ziemlich einfach. Das Auto lernt, die Abstände von Videorahmen-Tensor und Sensor mit Vorwärts-, Rückwärts- und Winkelradverschiebung zu verknüpfen
  • Ich kann dem Auto mehr oder weniger beibringen, genau so zu fahren, wie ich will (natürlich ohne Überanpassung)
  • Ich habe schon unzählige überwachte Lernprobleme gemacht, und dieser Ansatz scheint gut zu meinen vorhandenen Fähigkeiten zu passen

Betreutes Lernen Nachteile:

  • Es ist nicht klar, wie man Geschwindigkeit lernt, und die richtige Geschwindigkeit ist ziemlich willkürlich, solange das Auto nicht so schnell fährt, dass es von der Straße abweicht. Ich denke, ich könnte während des Trainings schnell fahren, aber das scheint eine grobe Herangehensweise zu sein. Vielleicht könnte ich während des Trainings manuell eine konstante Variable hinzufügen, die der Geschwindigkeit für diese Trainingseinheit entspricht, und dann, wenn der Lernalgorithmus bereitgestellt wird, diese Variable entsprechend der gewünschten Geschwindigkeit einstellen?

Verstärkung Lernprofis:

  • Wenn ich mein Auto mit dem speziellen Ziel baue, im Rennen gegen die selbstfahrenden Autos anderer Leute zu fahren, scheint das Lernen der Verstärkung die natürliche Methode zu sein, um meinem Auto zu sagen, dass es "so schnell wie möglich dorthin kommen soll".
  • Ich habe gelesen, dass RL manchmal für autonome Drohnen verwendet wird, daher sollte es theoretisch in Autos einfacher sein, weil ich mich nicht um Auf und Ab kümmern muss

Nachteile des Verstärkungslernens:

  • Ich bin der Meinung, dass das Erlernen der Verstärkung viele zusätzliche Sensoren erfordern würde, und ehrlich gesagt, hat mein fußlanges Auto nicht so viel Platz, wenn man bedenkt, dass es auch eine Batterie, den Raspberry Pi und ein Steckbrett aufnehmen muss

  • Das Auto wird sich zunächst sehr unregelmäßig verhalten, so dass es sich vielleicht selbst zerstört. Das Erlernen kann auch unangemessen lange dauern (z. B. Monate oder Jahre).

  • Ich kann später keine expliziten Regeln einführen, z. B. bei einer Spielzeug-Ampel anhalten. Mit überwachtem Lernen könnte ich zahlreiche SL-Algorithmen (z. B. einen Haar Cascade-Klassifikator zum Identifizieren von Ampeln) in eine konfigurierbare Regel-Engine integrieren, die zwischen den einzelnen Videoframes ausgewertet wird. Die Regel-Engine könnte somit den Fahr-SL-Algorithmus außer Kraft setzen, wenn sie eine rote Ampel sehen würde, obwohl die Ampel möglicherweise nicht Teil des Trainings des Fahr-Algorithmus gewesen wäre. RL scheint zu kontinuierlich zu sein, um dies zu tun (dh nur am Endzustand anhalten)
  • Ich habe nicht viel Erfahrung mit angewandter Bestärkung, obwohl ich es auf jeden Fall trotzdem lernen möchte

Dies ist eigentlich keine Antwort, ich mache tatsächlich das gleiche Projekt, ein selbstfahrendes Auto mit Q-Learning (RL) (noch am Anfang), und ich möchte fragen, ob Ihr Projektcode irgendwo online verfügbar ist wäre für mich sehr hilfreich. Dies ist das Projekt, das ich gerade verfolge : medium.com/@harvitronix/… er verwendet RL mit NN wie google deep Q learning (das Atari-Paper), aber er verwendet nicht Supervised learning. Sein Code ist hier verfügbar: github.com/harvitronix/reinfo
Mahmoud Hossam

@ MahmoudHossam Hast du einen alternativen Ort für den Code? Der von Ihnen angegebene Link ist tot.
Homunculus Reticulli

@ MahmoudHossam Sieht aus wie das Repo geändert zu: github.com/harvitronix/rl-rc-car
Ryan Zotti

Antworten:


12

Ich würde Ihnen vorschlagen, einen hybriden Ansatz zu versuchen:

  • Zuerst trainieren Sie Ihr Auto in beaufsichtigten Art und Weise durch Demonstration . Steuern Sie es einfach und verwenden Sie Ihre Befehle als Beschriftungen. Auf diese Weise erhalten Sie alle Vorteile von SL.
  • Passen Sie dann Ihr neuronales Netz mithilfe des Verstärkungslernens an. Sie brauchen dafür keine zusätzlichen Sensoren: Die Belohnungen können von Abstandssensoren (größere Entfernungen = besser) und von der Geschwindigkeit selbst bezogen werden. Dies gibt Ihnen die Vorteile von RL und trainiert Ihren NN zum richtigen Ziel, schnell zu fahren und dabei Hindernissen auszuweichen, anstatt Sie zu imitieren.
  • Wenn Sie beide Ansätze kombinieren, erhalten Sie die Vorteile von SL und RL, ohne deren Nachteile. RL beginnt nicht mit zufälligem Verhalten, nur mit kleinen allmählichen Abweichungen von dem, was Sie dem NN beigebracht haben. Ein ähnlicher Ansatz wurde von Google DeepMind mit AlphaGo erfolgreich angewendet .
  • Darüber hinaus können Sie jederzeit explizite Regeln einfügen. Implementieren Sie sie mit hoher Priorität und rufen Sie den NN nur auf, wenn es keine explizite Regel für die aktuelle Situation gibt. Dies erinnert an die Subsumption-Architektur .

DeepMind gerupft auch Matthew Lai, frisch aus seinen spannenden Giraffe Chess NN Ergebnisse: motherboard.vice.com/en_us/article/...
DukeZhou
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.