Dieser Artikel wurde von der Huawei Cloud Community „ MindSpore Reinforcement Learning: Training using PPO with the Environment HalfCheetah-v2 “ geteilt, Autor: irrational.
Half Cheetah ist eine verstärkende Lernumgebung, die auf MuJoCo basiert und von P. Wawrzyński in „A Cat-Like Robot Real-Time Learning to Run“ vorgeschlagen wurde. Der Halbgepard in dieser Umgebung ist ein 2D-Roboter, der aus 9 Gliedern und 8 Gelenken (einschließlich zwei Klauen) besteht. In dieser Umgebung besteht das Ziel darin, den Geparden dazu zu bringen, so schnell wie möglich vorwärts (nach rechts) zu rennen, indem ein Drehmoment auf die Gelenke ausgeübt wird, wobei positive Belohnungen auf der zurückgelegten Distanz basieren und negative Belohnungen für die Rückwärtsbewegung. Der Rumpf und der Kopf des Geparden sind fixiert und das Drehmoment kann nur auf die Vorder- und Hinterschenkel, Waden und Füße ausgeübt werden.
Ein Aktionsraum ist ein Raum Box(-1, 1, (6,), float32)
, in dem jede Aktion ein Drehmoment zwischen Verbindungen darstellt. Der Beobachtungsraum enthält die Positions- und Geschwindigkeitswerte verschiedener Körperteile des Geparden, wobei alle Positionswerte an erster Stelle stehen und alle Geschwindigkeitswerte folgen. Standardmäßig umfasst die Beobachtung nicht die X-Koordinate des Massenschwerpunkts des Geparden. Sie kann exclude_current_positions_from_observation=False
durch Übergabe bei der Erstellung einbezogen werden. Bei Einbeziehung hätte der Beobachtungsraum 18 Dimensionen, wobei die erste Dimension die x-Koordinate des Massenschwerpunkts des Geparden darstellt.
Belohnungen sind in zwei Teile unterteilt: Vorwärtsbelohnungen und kontrollierte Kosten. Die Vorwärtsbelohnung wird auf der Grundlage der Änderung der X-Koordinate vor und nach der Aktion berechnet, und die Kontrollkosten sind die Kosten, mit denen der Gepard für übermäßige Aktionen bestraft wird. Die Gesamtbelohnung ist die Vorwärtsbelohnung abzüglich der Kontrollkosten.
Jeder Zustand beginnt mit dem Hinzufügen von Rauschen zum Zustand (0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0,), um die Zufälligkeit des Geschlechts zu erhöhen. Die ersten 8 Werte sind Positionswerte und die letzten 9 Werte sind Geschwindigkeitswerte. Positionswerte fügen gleichmäßiges Rauschen hinzu, während Anfangsgeschwindigkeitswerte (alle Nullen) normales Standardrauschen hinzufügen.
Wenn die Länge einer Episode 1000 überschreitet, wird die Episode gekürzt.
Detaillierte Informationen zu dieser Umgebung finden Sie unter: https://www.gymlibrary.dev/environments/mujoco/half_cheetah/
Dies ist komplexer als viele andere Umgebungen.
Aber das spielt keine Rolle, wir haben den PPO-Algorithmus, der Reinforcement Learning und sogar große Sprachmodelle ausführen kann.
Der PPO-Algorithmus (Proximal Policy Optimization) ist eine Richtlinienoptimierungsmethode für das verstärkende Lernen. Er wurde entwickelt, um das Problem der Vertrauensregion bei herkömmlichen Richtliniengradientenmethoden (wie TRPO, Trust Region Policy Optimization) zu lösen.
Der PPO-Algorithmus führt Clipping-Techniken und wichtige Stichprobentechniken ein, um die Varianz bei der Berechnung von Gradienten zu verringern und dadurch die Konvergenzgeschwindigkeit und Stabilität des Algorithmus zu verbessern.
Im PPO-Algorithmus gibt es zwei Schlüsselkonzepte:
- Richtlinie : Eine Richtlinie ist eine Funktion, die die Wahrscheinlichkeitsverteilung für das Ergreifen von Maßnahmen in einem bestimmten Zustand definiert.
- Wertfunktion : Die Wertfunktion schätzt die erwartete Rendite, die erzielt werden kann, wenn man von Zustand s ausgeht und unter einer bestimmten Strategie einen bestimmten Zustand oder ein bestimmtes Terminal erreicht.
Zu den Hauptschritten des PPO-Algorithmus gehören:
- Stichprobe : Stichprobendaten aus der aktuellen Strategie, einschließlich Zustand, Aktion, Belohnung und nächster Zustand.
- Berechnen von Zielen : Verwenden Sie die Zielstrategie, um die Zielwertfunktion zu berechnen und die KL-Divergenz der Zielstrategie zu berechnen.
- Aktualisierungsrichtlinie : Aktualisierungsrichtlinie mithilfe wichtiger Sampling- und Clipping-Techniken.
- Wertfunktion aktualisieren : Aktualisieren Sie die Wertfunktion mithilfe der Richtliniengradientenmethode.
Die Kernidee des PPO-Algorithmus besteht darin, die Strategie- und Wertfunktion abwechselnd zu aktualisieren, um eine gemeinsame Optimierung von Strategie und Wert zu erreichen. Diese Methode kann die Varianz bei der Berechnung von Gradienten effektiv reduzieren und die Konvergenzgeschwindigkeit und Stabilität des Algorithmus verbessern.
Das Folgende ist eine vereinfachte Markdown-Formel für den PPO-Algorithmus:
# Proximal Policy Optimization (PPO)-Algorithmus ## 1. Probenahme Probieren Sie die Daten der aktuellen Richtlinie aus, einschließlich Status $s$, Aktion $a$, Belohnung $r$ und nächster Status $s'$. ## 2. Ziele berechnen Berechnen Sie die Zielwertfunktion mithilfe der Zielrichtlinie und berechnen Sie die KL-Divergenz der Zielrichtlinie. ## 3. Aktualisierungsrichtlinie Aktualisieren Sie Strategien mithilfe wichtiger Sampling- und Clipping-Techniken. ## 4. Wertfunktion aktualisieren Aktualisieren der Wertfunktion mithilfe von Richtliniengradientenmethoden. ## Wiederholen Sie die Schritte 1-4, um eine gemeinsame Optimierung von Strategie und Wert zu erreichen.
Diese Formel ist eine vereinfachte Version. Tatsächlich enthält der PPO-Algorithmus auch viele andere Details und Techniken, wie z. B. Erfahrungswiedergabe, dynamische Anpassung der Lernrate usw.
argparse importieren Importieren Sie uns aus dem Mindspor-Importkontext Von mindspore importieren Sie dtype als mstype aus mindspore.communication import get_rank, init Importieren Sie mindspore_rl.distribution.distribution_policies als DP aus mindspore_rl.algorithm.ppo Importkonfiguration aus mindspore_rl.algorithm.ppo.ppo_session PPOSession importieren aus mindspore_rl.algorithm.ppo.ppo_trainer PPOTrainer importieren parser = argparse.ArgumentParser(description="MindSpore Reinforcement PPO") parser.add_argument("--episode", type=int, default=650, help="Gesamtzahl der Episoden.") parser.add_argument( „--device_target“, Typ=str, default="Auto", choice=["Ascend", "CPU", "GPU", "Auto"], help="Wählen Sie ein Gerät aus, um das PPO-Beispiel auszuführen (Standard: Auto).", ) parser.add_argument( „--precision_mode“, Typ=str, default="fp32", choice=["fp32", "fp16"], help="Präzisionsmodus", ) parser.add_argument( „--env_yaml“, Typ=str, default="../env_yaml/HalfCheetah-v2.yaml", help="Wählen Sie eine Umgebungs-YAML aus, um das PPO-Beispiel zu aktualisieren (Standard: HalfCheetah-v2.yaml).", ) parser.add_argument( „--algo_yaml“, Typ=str, Standard = Keine, help="Wählen Sie ein Algo-Yaml aus, um das PPO-Beispiel zu aktualisieren (Standard: Keine).", ) parser.add_argument( „--enable_distribute“, Typ=bool, Standard = Falsch, help="Im Verteilungsmodus trainieren (Standard: False).", ) parser.add_argument( „--worker_num“, type=int, default=2, help="Worker num (Standard: 2)." ) parser.add_argument( „--graph_op_run“, type=int, default=1, help="Kernel für Kernel ausführen (Standard: 1)." ) Optionen, _ = parser.parse_known_args()`
wget https://www.roboti.us/download/mujoco200_linux.zip mv mujoco200_linux ~/.mujoco/mujoco200 wget https://www.roboti.us/file/mjkey.txt cp mjkey.txt /home/kewei/.mujoco/mjkey.txt wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm yum localinstall patchelf-0.12-1.el7.x86_64.rpm pip install 'mujoco_py==2.0.2.13'
Es wird eine Weile dauern, mujoco zum ersten Mal zu kompilieren.
Fügen Sie den folgenden Inhalt zu bashrc hinzu:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin exportieren MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH} export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
Dann können Sie mit dem Training beginnen. Verwenden Sie with aus dem vorherigen Abschnitt, um die Eingabe beizubehalten.
# dqn_session.run(class_type=DQNTrainer, Folge=Episode) mit RealTimeCaptureAndDisplayOutput() als Capture_New: ppo_session.run(class_type=PPOTrainer, Episode=Episode, Dauer=Dauer)
Ich beschloss , auf Open-Source -Industriesoftware zu verzichten – OGG 1.0 wurde veröffentlicht, das Team von Ubuntu 24.04 LTS wurde offiziell entlassen ". Fedora Linux 40 wurde offiziell veröffentlicht. Ein bekanntes Spieleunternehmen veröffentlichte neue Vorschriften: Hochzeitsgeschenke von Mitarbeitern dürfen 100.000 Yuan nicht überschreiten. China Unicom veröffentlicht die weltweit erste chinesische Llama3 8B-Version des Open-Source-Modells. Pinduoduo wird zur Entschädigung verurteilt 5 Millionen Yuan für unlauteren Wettbewerb. Inländische Cloud-Eingabemethode – nur Huawei hat keine Sicherheitsprobleme beim Hochladen von Cloud-Daten