この記事は、Huawei クラウド コミュニティ「MindSpore 強化学習: HalfCheetah-v2 環境で PPO を使用したトレーニング」(著者: irrational) から共有されたものです。
Half Cheetah は、P. Wawrzyński が「A Cat-like Robot Real-Time Learning to Run」で提案した、MuJoCo に基づく強化学習環境です。この環境のハーフチーターは、9 つのリンクと 8 つの関節 (2 つの爪を含む) で構成される 2D ロボットです。この環境では、関節にトルクを加えてチーターをできるだけ早く前方 (右方向) に走らせることが目標であり、移動距離に基づいてプラスの報酬が与えられ、後退するとマイナスの報酬が与えられます。チーターの胴体と頭は固定されており、トルクがかかるのは前後の太腿、ふくらはぎ、足のみです。
アクション空間とは、Box(-1, 1, (6,), float32)
各アクションがリンク間のトルクを表す空間です。観察空間にはチーターのさまざまな体の部位の位置と速度の値が含まれており、すべての位置の値が最初に表示され、すべての速度の値が続きます。デフォルトでは、観測値にはチーターの重心 X 座標は含まれませんが、exclude_current_positions_from_observation=False
ビルド時に渡すことで含めることができます。これが含まれる場合、観察空間は 18 次元を持つことになり、最初の次元はチーターの重心の x 座標を表します。
報酬は、前方報酬と制御コストの 2 つの部分に分かれています。前進報酬は行動前後のx座標の変化に基づいて計算され、制御コストは過剰な行動をとったチーターを懲らしめるためのコストです。合計報酬は、フォワード報酬から制御コストを差し引いたものです。
各状態は、ランダム性を高めるために状態にノイズ (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、) を追加することから始まります。最初の 8 つの値は位置の値、最後の 9 つの値は速度の値です。位置の値は均一なノイズを追加し、初速度の値(すべてゼロ)は標準の通常のノイズを追加します。
エピソードの長さが 1000 を超えると、エピソードは切り捨てられます。
この環境に関する詳細情報は、https://www.gymlibrary.dev/environments/mujoco/half_cheetah/ でご覧いただけます。
これは多くの環境よりも複雑です。
しかし、それは問題ではありません。強化学習や大規模な言語モデルさえも実行できる ppo アルゴリズムがあります。
PPO (近接ポリシー最適化) アルゴリズムは、強化学習のポリシー最適化手法であり、従来のポリシー勾配法 (TRPO、信頼領域ポリシー最適化など) における信頼領域の問題を解決するように設計されています。
PPO アルゴリズムでは、クリッピング手法と重要度サンプリング手法を導入して勾配を計算する際の分散を低減し、それによってアルゴリズムの収束速度と安定性が向上します。
PPO アルゴリズムには 2 つの重要な概念があります。
- ポリシー: ポリシーは、与えられた状態でアクションを実行する確率分布を定義する関数です。
- 値関数: 値関数は、特定の戦略の下で状態 s から開始して特定の状態または終点に到達するときに得られる期待収益を推定します。
PPO アルゴリズムの主なステップは次のとおりです。
- サンプリング: 状態、アクション、報酬、次の状態など、現在の戦略からのデータをサンプリングします。
- ターゲットの計算: ターゲット戦略を使用して、ターゲット値関数を計算し、ターゲット戦略の KL 発散を計算します。
- ポリシーの更新: 重要度サンプリング手法とクリッピング手法を使用してポリシーを更新します。
- 値関数の更新: ポリシー勾配法を使用して値関数を更新します。
PPO アルゴリズムの核となる考え方は、戦略と価値の関数を交互に更新して、戦略と価値の共同最適化を達成することです。この方法は、勾配を計算する際の分散を効果的に削減し、アルゴリズムの収束速度と安定性を向上させることができます。
以下は、PPO アルゴリズムの簡略化されたマークダウン式です。
# 近接ポリシー最適化 (PPO) アルゴリズム ## 1. サンプリング 状態 $s$、アクション $a$、報酬 $r$、次の状態 $s'$ を含む現在のポリシーのデータをサンプリングします。 ## 2. 目標の計算 目的政策を使用して目的価値関数を計算し、目的政策の KL 発散を計算します。 ## 3. ポリシーの更新 重要度サンプリング手法とクリッピング手法を使用して戦略を更新します。 ## 4. 値関数の更新 ポリシー勾配法を使用して値関数を更新します。 ## ステップ 1 ~ 4 を繰り返して、戦略と価値を組み合わせて最適化します。
この式は簡略化されたバージョンであり、実際には、PPO アルゴリズムには、エクスペリエンスの再生、学習率の動的調整など、他の多くの詳細とテクニックも含まれています。
引数解析をインポートする 私たちを輸入してください マインドスポアインポートコンテキストから マインドスポアから dtype を mstype としてインポートします Mindspore.communication からインポート get_rank、init Mindspore_rl.distribution.distribution_policies を DP としてインポートします Mindspore_rl.algorithm.ppo から設定をインポート Mindspore_rl.algorithm.ppo.ppo_session から PPOSession をインポート Mindspore_rl.algorithm.ppo.ppo_trainer から PPOTrainer をインポート parser = argparse.ArgumentParser(description="マインドスポア強化 PPO") parser.add_argument("--episode"、type=int、default=650、help="総エピソード数。") parser.add_argument( "--device_target", タイプ=str、 デフォルト = "自動"、 選択肢=["昇順", "CPU", "GPU", "自動"], help="ppo サンプルを実行するデバイスを選択してください (デフォルト: 自動)。", ) parser.add_argument( "--precision_mode", タイプ=str、 デフォルト = "fp32"、 選択肢=["fp32", "fp16"], help="高精度モード", ) parser.add_argument( "--env_yaml", タイプ=str、 デフォルト = "../env_yaml/HalfCheetah-v2.yaml", help="ppo サンプルを更新するための環境 yaml を選択してください (デフォルト: HalfCheetah-v2.yaml)。", ) parser.add_argument( "--algo_yaml", タイプ=str、 デフォルト = なし、 help="ppo サンプルを更新するためのアルゴ yaml を選択してください (デフォルト: なし)。", ) parser.add_argument( "--enable_distribute", タイプ=ブール、 デフォルト=False、 help="配布モードでトレーニングします (デフォルト: False)。", ) parser.add_argument( "--worker_num"、type=int、default=2、help="ワーカー番号 (デフォルト: 2)。" ) parser.add_argument( "--graph_op_run"、type=int、default=1、help="カーネルごとにカーネルを実行します (デフォルト: 1)。 ) オプション、_ = 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 インストール 'mujoco_py==2.0.2.13'
初めて mujoco をコンパイルするには時間がかかります。
次の内容を bashrc に追加します。
エクスポート LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin エクスポート MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH} エクスポート LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin エクスポート LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
その後、トレーニングを開始できます。入力を保存するには、前のセクションの with を使用します。
# dqn_session.run(クラスタイプ=DQNTrainer、エピソード=エピソード) RealTimeCaptureAndDisplayOutput() を Capture_new として使用: ppo_session.run(class_type=PPOTrainer、episode=エピソード、duration=期間)
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
私はオープンソースの産業用ソフトウェアを諦めることにしました - OGG 1.0 がリリースされ、Huawei がすべてのソース コードを提供しました。Google Python Foundation チームは「コード クソ マウンテン」によって解雇されました 。 Fedora Linux 40が正式リリース。有名ゲーム会社がリリース 新規定:従業員の結婚祝儀は10万元を超えてはならない。チャイナユニコム、世界初のオープンソースモデルLlama3 8B中国語版をリリース。Pinduoduoに賠償判決国内のクラウド入力方式に500万元の罰金- クラウドデータアップロードのセキュリティ問題がないのはファーウェイだけ