MindSpore-Verstärkungslernen: Training mit PPO mit der Umgebung HalfCheetah-v2

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=Falsedurch Ü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/

Bild.png

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.

Bild.png

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)

 

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

 

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
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4526289/blog/11062207
Empfohlen
Rangfolge