Jump to content
Unity Insider Forum

Machine Learning Environments


Recommended Posts

Hallo zusammen,

seit knapp einem halben Jahr führt Unity einen AI Blog. In diesem Rahmen wurde die Unity ML Agents API veröffentlicht. Diese enthält unter anderem ein Interface zu Python um etablierte Deep Reinforcement Learning Algorithmen anzuwenden.

Ich arbeite derzeit an einer Vielzahl von Beispielen für diese API, welche sich auf Github (Unity ML Environments) finden lässt. Deep Reinforcement Learning ist schon länger Thema bei mir wie z.B. bei meinem Projekt BRO. Reinforcement Learning werde ich noch über meinen Master hinaus bis zum Doktor intensiv verfolgen. Eine lernende KI für BRO scheiterte erstmal daran, dass es keine geeignete Library für Neuronale Netze gab. Mit den Unity ML Agents ist das nun möglich und steht auch künftig auf meiner Agenda, um das entsprechend zu lösen.

In Deep Reinforcement Learning gibt es einige Herausforderungen, welche ich durch geeignete Beispiele als Anschauungsmaterial veröffentlichen möchte. Zu den Herausforderungen zählen:

  • Kontinuierliche und diskrete Aktionsmöglichkeiten eines Agents
  • Pixelinput (z.B. durch Kamera)
  • Curriculum Learning
  • Imitation Learning
  • Multiple kompetitive Agenten (z.B. Use-Case BRO)
  • Multiple kooperative Agenten
  • Pixelinput durch mehrere Beobachtungen

Darüber hinaus gibt es folgende Probleme zu bewältigen:

  • Trainingsdauer und Skalierbarkeit
  • Blackbox Verhalten und Debugging
  • Exploration-Exploitation Dilemma

Die ganze Thematik ist Inhalt meiner Forschungsaktivitäten.

Aktuell arbeite ich an einer Environment, welche dem BRIO Labyrinth nach empfunden ist.

environment.png

Ziel ist es, dass der orangene Ball in das rote Zielloch kullert ohne vom Spielbrett zu fallen oder durch das falsche Loch zu schlüfen. Der Agent ist in diesem Fall das Spielbrett, welches in zwei Dimensionen bis zu einem bestimmten Grad rotiert werden kann. Als Input erhält der Agent eine senkrechte Beobachtung auf das Spielbrett. Zusätzlich kennt der Agent die Geschwindikeit des Balls. In dieser Umwelt findet auch noch Curriculum Learning statt. Das heißt, dass der Agent immer schwerer werdende Probleme löst. In diesem Fall fängt die erste Lernstunde mit einer sehr einfachen Position des Balles an. Je besser der Agent wird, desto weiter wird die Kugel vom Ziel weg verschoben. Die einzelnen Lektionen lassne sich wie folgt illustrieren:

curriculum.png

Noch arbeite ich an einer erfolgreichen Umsetzung, um den Agent durch die Beobachtung lernen zu lassen. Parallel versuche ich diese Umwelt mittels numerischen Input zu lösen. Beispielsweise gehen vom Ball Raycasts aus, um die Distanz zu Wänden zu bestimmen. Sobald ich ansprechende Resultate habe werde ich auch mal das Spielbrett ausgestalten, damit ich als Programmierer auch mal etwas ästhetisches aufzeigen kann.

 

Wäre super mal zu erfahren wer sich hier für Machine Learning in Unity interessiert. Vielleicht hat ja auch jemand noch ein paar interessante Use-Cases zum Ausprobieren.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich interessiere mich generell für dieses Thema, aber weniger für "fertige" APIs oder Lösungen. Trotzdem finde ich es gut, daß es nun etwas gibt, was man beispielsweise auch in einem Spiel einsetzen kann ohne "Forschungsaufwand" zu betreiben. Ich interessiere mich persönlich aber eher für Algorithmen, die über die Theorie der neuronalen Netze hinausgehen, bzw. die Idee eines neuronalen Netzes zwar aufgreifen, aber dann einen völlig anderen Weg einschlagen, es geht mir also mehr um Forschung, wie man neuronale Netze weiter verbessern kann oder wie man die ursprüngliche Idee aus einem anderen Blickwinkel umsetzt. Ich glaube persönlich, daß die Theorie der neuronalen Netze (so wie ich sie im Studium gelernt hatte) in eine Sackgasse führt und sich daher von einer "Intelligenz" entfernt wie ich sie gern hätte. Was ich aber trotzdem noch interessant finde, wie weit man mit den aktuellen neuronalen Netzen kommt. Zudem bin ich leider nicht auf dem Stand der neuesten Entwicklungen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Zer0Cool schließe mich dir an. Bin zwar noch nicht so weit im Studium, dass ich dazu etwas qualifiziertes sagen kann, aber ich sehe in Neuronalen Netzen ein großes Potential. 

Ich finde es trotzdem immer wieder interessant solche Spiele zu sehen die auf dieser Technik aufbauen bzw. etwas Simulieren. Mir gefällt das Projekt sehr gut :) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 1/5/2018 um 19:21 schrieb Zer0Cool:

Ich interessiere mich generell für dieses Thema, aber weniger für "fertige" APIs oder Lösungen. Trotzdem finde ich es gut, daß es nun etwas gibt, was man beispielsweise auch in einem Spiel einsetzen kann ohne "Forschungsaufwand" zu betreiben

Die Balanace muss jeder für sich selber entscheiden. Beispielsweise könnte man so weit gehen und sagen, dass man auf eine fertige Game Engine verzichtet. Ich bin froh, dass es so gut optimierte Libraries/APIs wie beispielsweise TensorFlow und numpy gibt. Von solchen Implementierungen kann man auch viel lernen und für die eigenen Problemlösungen verwerten. Eine gewisse Grundlage (oder auch Abhängigkeiten) sind nicht verkehrt um produktiver zu sein. So kann ich zum einen schnell Umwelten (Prototypen) bauen und zum anderen kann ich mich auf die Algorithmen konzentrieren. Ein hochwertiges Python Interface oder eine umfangreiche neuronale Netz Library zu implementieren würde mich zeitlich weit zurückwerfen. Dann sind schon die neuesten Trends und Entdeckungen in anderen etablierten Angeboten bereits vorhanden.

 

Das Ballabyrinth hat schon zu weiteren Erkenntnissen geführt. Das ursprünglich vorgesehene Curriculum Learning geht so nicht auf. Der Agent schafft es zwar so bis zur 6. Lektion zu kommen, aber "vergisst" dann seine früheren positiven Erfahrungen. Das liegt daran, dass entsprechende Erfahrungen aus dem Buffer, der zum Training genutzt wird, ersetzt werden. Da das neuronale Netz stetisch von neuen Daten lernt wird entsprechend das Modell überschrieben. Ansätze zum Lösen des Problems habe ich schon. Derzeit lasse ich 12 Agenten gleichzeitig trainieren. Dabei belegt je ein Agent eine Position. Dies könnte man noch optimieren, in dem alle 12 Agenten das Curriculum wie vorgesehen durchlaufen, aber min. ein Agent muss auf der durchlaufenen Lektion verbleiben, so das am Ende alle 12 Positionen besetzt sind. Das könnte den zeitlichen Aufwand reduzieren. Eine weitere interessante Lösung wäre für jede Lektion einen Buffer mit Trainingsdaten anzulegen, so kann das neuronale Netz auf das Vergangene weiterhin zugreifen und überschreibt das nicht.

In Kürze werde ich noch Frame Stacking an dem Beispiel ausprobieren, damit ich auf numerische Inputs komplett verzichten kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da sehe ich generell das Problem bei derzeitigen neuronalen Netzen, man kann sie für einen bestimmten Anwendungsfall einsetzen, aber bei einem neuen Problem werden die Erfahrungen des anderen Problems überschrieben. Das kann man wie du schon sagtest verhindern, indem man einen Speicher für jedes Problem anlegt. Ich bin mir nicht sicher, wie es unser Gehirn macht, aber ich vermute mal die "Buffer" sind im Gehirn im 3D-Raum verteilt und dadurch gibt es 3-dimensionale Regionen im Gehirn die sich nur bestimmten Problemen annehmen. Interessant finde ich, wie in unserem Gehirn eben diese verteilten Regionen miteinander netzt sind, ich vermute mal, es muss eine Art Metaebene geben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...