数行のコードで強化学習を実装する

数行のコードで強化学習を実装する

強化学習は過去 1 年間で大きな進歩を遂げ、最先端のテクノロジが 2 か月ごとにリリースされています。 AlphaGo が世界チャンピオンの囲碁プレイヤー、柯潔に勝利したり、マルチエージェントがかくれんぼをしたり、さらには AlphaStar が StarCraft で健闘したりするのを見てきました。

これらのアルゴリズムを実装するには、ディープラーニングと強化学習の両方を十分に理解する必要があるため、非常に困難になる可能性があります。 この記事の目的は、強化学習の学習を簡単に開始できるように、いくつかの便利なパッケージをすぐに使い始めることができるようにすることです。

SOTA 深層強化学習アルゴリズムを実装する方法についての詳細なチュートリアルについては、こちらをご覧ください。 ぜひ注意深く読んでみてください!

1. 環境

これらのアルゴリズムの実装を始める前に、まず作業環境、つまりゲームを作成する必要があります。 アルゴリズムでは、アクション空間と観察空間が何であるかを理解することが重要です。 この目的のために、興味深い環境を選択するために使用できるいくつかのソフトウェア パッケージを紹介します。

1. ジム

Gym は、強化学習アルゴリズムを開発および比較するためのツールキットです。 環境を操作するための使いやすいインターフェースを提供するため、実験や研究の目的でよく使用されます。

次のコマンドを使用してパッケージをインストールするだけです。

  1. pip インストール ジム

その後、次のコードを使用して環境を作成できます。

  1. ジムをインポート
  2. env = gym.make ('CartPole-v0')

CartPole 環境では、カートに先端が取り付けられたポールが落ちないようにすることがタスクです。

env 変数には、環境 (ゲーム) に関する情報が含まれます。 CartPole のアクション空間が何であるかを調べるには、env.action_space を実行して Discrete(2) を生成します。 これは、2 つの個別のアクションが可能であることを意味します。 観測空間を表示するにはenv.observation_spaceを実行し、Box(4)を生成します。 このボックスはn(4)個の閉区間の直積を表します。

ゲームをレンダリングするには、次のコードを実行します。

  1. ジムをインポート
  2. env = gym.make ('CartPole-v0')
  3.  
  4. obs = env .reset()
  5. 真の場合:
  6. アクション= env .action_space.sample()
  7. obs、rewards、done、 info = env .step(action)
  8. env.render()
  9.  
  10. 完了した場合:
  11. 壊す
[[336834]]

ランダムなアクションを選択した場合、カートは失敗し続けることがわかります。 最終的な目標は、この問題を解決する方法を学習する強化学習アルゴリズムを実行することです。

Gym の環境の完全なリストについては、こちらをご覧ください。

注: Atari ゲームの実行中に問題が発生した場合は、https://github.com/openai/gym/issues/1726 を参照してください。

2. レトロ

興味深い環境を作成するためのもう 1 つのオプションは、Retro を使用することです。 OpenAI によって開発されたこのパッケージを使用すると、ROM を使用して Airstriker-Genesis などのゲームをエミュレートできます。

次のコマンドを使用してパッケージをインストールするだけです。

  1. pip インストール ジム レトロ

次に、以下を使用して環境を作成および表示できます。

  1. レトロを輸入
  2. env = retro .make(ゲーム= 'Airstriker-Genesis' )

同様に、ゲームをレンダリングするには、次のコードを実行します。

  1. レトロを輸入
  2. env = retro .make(ゲーム= 'Airstriker-Genesis' )
  3.  
  4. obs = env .reset()
  5. 真の場合:
  6. アクション= env .action_space.sample()
  7. obs、rewards、done、 info = env .step(action)
  8. env.render()
  9.  
  10. 完了した場合:
  11. 壊す

ROM をインストールするには、対応する .sha ファイルを見つけて、次のコマンドを実行する必要があります。

  1. python3 -m retro.import /path/to/your/ROMs/directory/

注: 簡単に利用できる環境の完全なリストについては、次のコマンドを実行してください。

  1. レトロデータリスト()

3. プロジェクション

強化学習の典型的な問題は、結果として得られるアルゴリズムが特定の環境ではうまく機能することが多いものの、一般化可能なスキルを学習できないことです。 たとえば、ゲームの見た目や敵の反応を変えたい場合はどうすればよいでしょうか?

この問題に対処するために、OpenAI は手続き的に生成された環境の作成を可能にする Procgen というパッケージを開発しました。 このパッケージを使用すると、強化学習エージェントが一般的なスキルをどれだけ早く学習するかを測定できます。

ゲームのレンダリングは非常に簡単です:

  1. ジムをインポート
  2. パラメータ= {"num_levels": 1、"distribution_mode": "hard"}
  3. env = gym .make("procgen:procgen-leaper-v0", **param)
  4.  
  5. obs = env .reset()
  6. 真の場合:
  7. アクション= env .action_space.sample()
  8. obs、rewards、done、 info = env .step(action)
  9. env.render()
  10.  
  11. 完了した場合:
  12. 壊す
[[336835]]

これにより、アルゴリズムをトレーニングできる単一のレベルが生成されます。 同じ環境のさまざまなバージョンを手順的に生成するには、いくつかのオプションがあります。

  • num_levels - 生成できる一意のレベル数
  • distribution_mode - 使用する変数のレベル。オプションは「easy」、「hard」、「extreme」、「memory」、「exploration」です。 すべてのゲームは「イージー」と「ハード」をサポートしていますが、その他のオプションはゲームによって異なります。

2. 強化学習

さて、いよいよ実際の強化学習をやってみましょう。 トレーニング アルゴリズムに使用できるパッケージは多数ありますが、ここでは実装が堅牢な Stable Baselines に焦点を当てます。

この投稿では、RL アルゴリズムが実際にどのように機能するかについては説明しません。そのためには、まったく新しい投稿が必要になります。 PPO、SAC、TD3 などの最先端のアルゴリズムの概要については、以下を参照してください。

https://github.com/dennybritz/reinforcement-learning.

1. 安定したベースライン

安定ベースライン (SB) は OpenAI ベンチマークに基づいており、研究コミュニティと業界が新しいアイデアをより簡単に複製、改善、特定できるように設計されています。 彼らはベースラインを改良し、より安定したシンプルなツールにして、初心者が実装の詳細に煩わされることなく強化学習を試すことができるようにしました。

SB は、最先端の強化学習アルゴリズムを簡単かつ迅速に適用できるため、よく使用されます。 さらに、RL モデルの作成とトレーニングには、数行のコードだけが必要です。

インストールは、pip install stable-baselines で簡単に実行できます。 次に、RL モデル (例: PPO2) を作成して学習するには、次のコード行を実行します。

  1. stable_baselines から PPO2 をインポート
  2. stable_baselines.common.policies から MlpPolicy をインポートします
  3. モデル= PPO2 (MlpPolicy、env、 verbose = 1 )
  4. モデル.learn(合計時間ステップ= 10_000 ログ間隔= 10 )

いくつかの点については説明が必要かもしれません:

  • total_timesteps: トレーニングするサンプルの総数
  • MlpPolicy: アクター・クリティックを実装するポリシー オブジェクト。 この場合、64 層の多層パーセプトロンが 2 つ使用されます。 CnnPolicyやCnnLstmPolicyなどの視覚情報ポリシーもあります。

このモデルを CartPole の例に適用するには、環境を Dummy でラップして SB で利用できるようにする必要があります。 次に、CartPole 環境で PPO2 をトレーニングする完全な例を示します。

  1. stable_baselines.common.policies から MlpPolicy をインポートします
  2. stable_baselines.common.vec_env から DummyVecEnv をインポートします
  3. stable_baselines から PPO2 をインポート
  4. ジムをインポート
  5.  
  6. env = gym.make ('CartPole-v0')
  7. env =ダミーベクトルエンベロープ([lambda: env])
  8.  
  9. モデル= PPO2 (MlpPolicy、env、 verbose = 1 )
  10. モデル.learn(合計時間ステップ= 50_000 ログ間隔= 10 )
  11.  
  12. obs = env .reset()
  13. 真の場合:
  14. アクション、 _states = model.predict (obs)
  15. obs、rewards、dones、 info = env .step(action)
  16. env.render()
[[336836]]

上のグラフからわかるように、PPO2 はわずか 50,000 ステップでポールを安定させる方法を見つけることができました。 これには、数行のコードと数分の処理だけが必要です。

これを Procgen または Retro に適用する場合は、観測空間が環境の現在の状態のイメージになる可能性が高いため、畳み込みベースのネットワークを許可するポリシーを選択してください。

最後に、CartPole の例は非常にシンプルで、50,000 ステップのみトレーニングされます。 他のほとんどの環境では、大幅な改善が見られるようになるまでに通常数千万ステップが必要になります。

注: StableBenchmark の作成者は、初心者がパッケージを本番環境で使用する前に、強化学習について十分に理解しておくように警告しています。 強化学習には多くの重要な要素があり、そのうちのどれかに問題があれば、アルゴリズムは失敗し、ほとんど説明がつかない可能性があります。

2. その他のソフトウェアパッケージ

RL アルゴリズムを適用するために一般的に使用される他のパッケージがあります。

  • TF-Agents — StableBaseline よりも多くのコーディングが必要ですが、一般的に強化学習の研究には必須のパッケージです。
  • MinimalRL - 非常に少ないコードで Pytorch に実装された最先端の RL アルゴリズム。 アルゴリズムを理解するのに間違いなく役立ちます。
  • DeepRL の別の実装である Pytorch ですが、このバージョンには実装に使用する追加の環境もあります。
  • MlAgents - ゲームやシミュレーションをエージェントのトレーニング環境として使用できるようにするオープンソースの Unity プラグイン。

結論

強化学習は、コードに問題が発生した場合にデバッグするのが難しいため、扱いにくいテーマになる可能性があります。 この投稿が強化学習を始める助けになれば幸いです。

<<:  ドローンは5G開発をフィードバックし、インテリジェントな運用と保守の新たなアップグレードを促進する

>>:  DevOps 2 または 3: 継続的インテグレーションによる自動モデルトレーニング システムを構築するための理論と実践のガイド

ブログ    

推薦する

医者から「ビジネスを奪いたい」ですか?人工知能はこれら3つの大きな困難を克服しなければならない

10年以上が経過し、ディープラーニングは人工知能の発展の機会を提供してきました。並列コンピューティン...

AIと機械学習を活用して工場の安全を守る

自動化されたセキュリティの将来には機械学習が関与するでしょう。人工知能と機械学習の進歩により、ロボッ...

...

科学者たちは、脳波を3%という低いエラー率で直接テキストに変換する「心を読む」方法を開発した。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

MetaGPTが人気に! 2ドルでボスになれる、GitHubには11.2万個のスターがつき、AIエージェント「オールラウンダー」が誕生

インテリジェントエージェントは未来です!最近、別の AI エージェント プロジェクト MetaGPT...

知らないうちにAIを構築しているかもしれない

[[189866]]私たちは皆、検証コードに精通しています。reCAPTCHA は、人間と機械を区別...

靴下が山積みになっています。靴下をペアにするには、最も速くて効率的なアルゴリズムをどのように使用すればよいでしょうか?

[問題の説明]昨日、コインランドリーで靴下の山を整理していたのですが、自分が使っていた方法がとても...

国産のハイエンドチップはどれくらい強いのか?業界関係者6人がこう考えている

[[440057]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

協働ロボットがインダストリー4.0戦略の中核となる理由

[[402166]]今日、ロボットを自動化やインダストリー 4.0 戦略にシームレスに統合する方法に...

看護師の負担を軽減し、病院の効率化を実現します!医療物流ロボットが「新たな人気」に

[[399194]]ロボット産業は、我が国のインテリジェント製造業の発展における重要なリンクであり、...

推奨システムでよく使用される推奨アルゴリズム

[[172692]] 1. 推奨システムと共通評価指標の概要1.1 推薦システムの特徴私は Zhih...

200日!上海の18歳の高校生が、250行のPythonコードで「魂を注入」したロボットを自作した。

以前、22歳の何さんは卒業プロジェクトで「理工系男子の究極のロマンス」を解釈しました。ハードコアな卒...

...

人工知能は職場のつながりとコラボレーションを変革できる

世界の人工知能(AI)市場は2027年までに2,670億ドルに達すると予想されています。しかし、テク...

ブロックチェーンが人工知能に役立つ10の方法

ここでは、ブロックチェーンが AI を支援する 10 の方法と、それがもたらすメリットについて説明し...