BAIRは、3種類のモデルフリー強化学習アルゴリズムを組み合わせたRLコードライブラリrlpytをオープンソース化しました。

BAIRは、3種類のモデルフリー強化学習アルゴリズムを組み合わせたRLコードライブラリrlpytをオープンソース化しました。

最近、BAIR は強化学習研究コードライブラリ rlpyt をオープンソース化しました。このライブラリには、モデルフリー強化学習アルゴリズムの 3 つの主要カテゴリが初めて含まれ、新しいデータ構造が提案されています。

2013 年、研究者は深層強化学習を使用してゲームをプレイすることを提案しました。その後すぐに、深層強化学習はシミュレーションによるロボット制御に適用されました。それ以来、多数の新しいアルゴリズムが登場しています。それらのほとんどはモデルフリー アルゴリズムであり、ディープ Q 学習 (DQN)、ポリシー勾配、Q 値ポリシー勾配 (QPG) の 3 つのカテゴリに分類されます。これら 3 つのクラスのアルゴリズムは、異なる学習メカニズムに依存し、異なる (ただし重複する) 制御問題を解決し、異なるプロパティ (離散的または連続的) を持つアクション セットを処理するため、異なる研究ラインに沿って進化してきました。現在、3 つのカテゴリのアルゴリズムをすべてカバーするコード ベースは非常に少なく、多くのオリジナルの実装は非公開のままです。その結果、実践者は異なる出発点から開発する必要があり、関心のあるアルゴリズムやベースラインごとに新しいコード ベースを学習する必要があることがよくあります。強化学習の研究者はアルゴリズムの再実装に時間を費やす必要があります。これは貴重な個人的な実践ですが、コミュニティ内での作業の重複につながり、参入障壁にもなります。

これらのアルゴリズムは、多くの共通の強化学習機能を共有しています。最近、BAIR は rlpyt コード ライブラリをリリースしました。このライブラリは、3 種類のアルゴリズム間の共通性を活用し、共有の最適化インフラストラクチャ上にこれら 3 種類のアルゴリズムの実装を構築します。

GitHub アドレス: https://github.com/astooke/rlpyt

rlpyt ライブラリには、ディープラーニング ライブラリ Pytorch を使用して Python で記述された、多くの一般的なディープ強化学習アルゴリズムのモジュール実装が含まれています。多数の既存の実装の中で、rlpyt は研究者にとってより包括的なオープンソース リソースです。

rlpyt は、深層強化学習の分野における小規模から中規模の研究に高スループットのコードベースを提供するように設計されています。この記事では、rlpyt の機能と、それが以前の研究とどのように関連しているかについて簡単に紹介します。特に、rlpyt は論文「分散強化学習における反復体験再生」(R2D2) に基づいて Atari ゲーム分野における最近の最高の結果を再現しますが、トレーニングに必要な数十億のゲーム ビデオ フレームを収集するために分散コンピューティング インフラストラクチャを使用していません。この記事では、numpy 配列のコレクションを処理するために rlpyt で広く使用されている namedarraytuple という新しいデータ構造も紹介します。より技術的な議論、実装の詳細、および使用方法については、論文「rlpyt: A Research Code Base for Deep Reinforcement Learning in PyTorch」を参照してください。

論文アドレス: https://arxiv.org/abs/1909.01500

rlpyt ライブラリの重要な機能と機能は次のとおりです。

  • 実験をシリアル モードで実行します (デバッグに役立ちます)。
  • 並列サンプリングやマルチ GPU 最適化のオプションを使用して、並列モードで実験を実行します。
  • 同期または非同期のサンプリング最適化(非同期モードはリプレイ バッファを通じて実装されます)。
  • 環境サンプリングでのトレーニングやバッチアクションの選択に CPU または GPU を使用します。
  • 再帰エージェントの完全サポート。
  • トレーニング中にオンラインまたはオフラインの評価とエージェント診断ログを実行します。
  • ローカル コンピューターで、実験のスタッキング/キューを設定するプログラムを起動します。
  • モジュール性: 既存のコンポーネントを簡単に変更および再利用できます。
  • OpenAI Gym環境インターフェースと互換性があります。

rlpyt ライブラリに実装されているアルゴリズムは次のとおりです。

  • ポリシー勾配: A2C、PPO
  • DQN とその変種: Double、Dueling、Categorical、Rainbow minus Noisy Nets、Recurrent (R2D2 スタイル)
  • QPG: DDPG、TD3、SAC

リプレイ バッファ (DQN および QPG をサポート) には、n ステップ リターン、優先順位付きリプレイ、シーケンス リプレイ (繰り返し用)、フレーム ベース バッファ (複数の観測フレームから一意の Atari ゲーム フレームのみ保存) などのオプション機能が含まれています。

実験を加速する並列コンピューティングアーキテクチャ

サンプリング

モデルフリー強化学習の 2 つの段階 (環境インタラクションのサンプリングとエージェントのトレーニング) は、さまざまな方法で並行して実行できます。たとえば、rlpyt には、シリアル、並列 CPU、並列 GPU という 3 つの基本オプションが含まれています。

シリアル サンプリングは、プログラム全体が 1 つの Python プロセスで実行され、デバッグが容易なため、最も簡単です。ただし、環境は通常 CPU ベースでシングルスレッドであるため、並列サンプラーはワーカー プロセスを使用して環境インスタンスを実行し、全体的な収集速度を高速化します。 CPU サンプリングでは、ワーカー プロセスでエージェントのニューラル ネットワークも実行され、アクションが選択されます。 GPU サンプリングは、すべての環境観察をバッチ処理し、マスター プロセスでアクションを選択することで、GPU をより有効に活用できるようにします。これらの構成の詳細は次の図に示されています。

環境相互作用サンプリングの図解。 (左) シリアル: エージェントと環境が 1 つの Python プロセスで実行されます。 (中) 並列 CPU: エージェントと環境は CPU (並列ワーカー プロセス) 上で実行されます。 (右) 並列 GPU: 環境は CPU (並列ワーカー プロセス) 上で実行され、エージェントはコア プロセス上で実行され、バッチ アクションの選択が可能になります。

さらに、交互 GPU サンプリングのオプションがあり、2 つのワーカー グループを使用します。1 つのグループは環境シミュレーションを実行し、もう 1 つのグループは新しいアクションを待機します。アクション選択時間がバッチ環境シミュレーション時間よりわずかに短い場合、スピードアップが実現される可能性があります。

最適化

同期マルチ GPU 最適化は、PyTorch の DistributedDataParallel モジュールを通じて実装されます。サンプラー オプティマイザー スタック全体が各 GPU 上の異なるプロセスに複製され、モデルはバックプロパゲーション中に勾配に対して all-reduce を実行し、暗黙的な同期を実現します。バックプロパゲーション中に、DistributedDataParallel ツールは、次の図に示すように、大規模なネットワークでより優れたスケーリングを実現するために、勾配を自動的にダウンコンバートします。 (サンプラーは、上記のシリアル構成またはパラレル構成のいずれかにすることができます。)

同期マルチプロセス強化学習。各 Python プロセスはサンプル アルゴリズム スタックの完全なコピーを実行し、PyTorch の DistribuedDataParallel を介してバックプロパゲーション中に「同期」が暗黙的に実現されます。 GPU (NCCL バックエンド) および CPU (gloo バックエンド) モードをサポートします。

非同期サンプリングの最適化

これまで説明した構成では、サンプラーとオプティマイザーの両方が同じ Python プロセス内で順番に実行されます。場合によっては、最適化とサンプリングを非同期で実行すると、最適化とサンプリングを継続的に実行できるため、ハードウェアの使用率が向上することがあります。これはBAIRがR2D2を再現した際に行ったことであり、実際のロボットを基に学習するためのモデルでもあります。

非同期モードでは、トレーニングとサンプリングは 2 つの別々の Python プロセスで実行され、リプレイ バッファーは共有メモリに基づいて 2 つを接続します。データ バッチは二重バッファリングされるため、サンプリングは問題なく実行されます。下の図に示すように、別の Python プロセスがバッチ データを書き込みロック モードでメイン バッファーにコピーします。オプティマイザーとサンプラーは、異なる数の GPU を使用して独立して並列化でき、全体的な使用率と速度を最大限に高めることができます。

非同期サンプリング/最適化モード。 2 つの個別の Python プロセスが、共有メモリ再生バッファ (リーダー/ライター ロック下) を介して最適化とサンプリングを実行します。メモリ コピア プロセスは、サンプラーがバッチをすぐに処理できるように、データのバッチを再生バッファーに書き込みます。

どの構成が最適ですか?

シリアル モードは、エージェント、モデル、アルゴリズム、環境の作成または変更をデバッグするのに最も簡単です。シリアル プログラムがスムーズに実行されると、並列サンプリング、マルチ GPU 最適化、非同期サンプリングなどのより複雑なインフラストラクチャを探索するのは簡単です。これらはほぼ同じインターフェイス上に構築されているためです。最適な構成は、特定の学習問題、利用可能なコンピューター ハードウェア、および実行する実験の数によって異なります。 rlpyt に含まれる並列モードは単一のノードに制限されていますが、そのコンポーネントは分散フレームワークの構成要素として機能します。

パフォーマンスケーススタディ: R2D2

BAIR は、これまでは分散コンピューティングでのみ可能だった Atari ドメインでの R2D2 の結果を複製するための学習曲線を示しています。ベンチマークは、約 100 億のサンプル (400 億フレーム) を使用してリプレイ バッファーからトレーニングされた再帰エージェントで構成されています。 R2D1 (非分散型 R2D2) は、rlpyt のさらに高度なインフラストラクチャ コンポーネント、具体的には交互 GPU サンプラーを使用したマルチ GPU 非同期サンプリング モードを使用して実装します。下の図は、再現プロセス中の学習曲線を示しており、その多くは以前のアルゴリズムを上回っています。これらの結果はすべてのゲームで完全に再現されるわけではないことに注意する必要があります。たとえば、Gravitar ゲームは比較的低いスコアで頭打ちになります。詳細については関連論文を参照してください。

rlpyt で単一のコンピューターを使用して R2D2 の学習曲線を再現します。

R2D2 の初期の分散実装では、サンプリングに 256 個の CPU を使用し、トレーニングに 1 個の GPU を使用し、毎秒 66,000 ステップで実行しました。 rlpyt は、24 個の CPU (2 個の Intel Xeon Gold 6126) と 3 個の Titan-Xp GPU を搭載したワークステーションのみを使用して、毎秒 16,000 ステップでこれを達成しました。これは、分散インフラストラクチャが利用できない場合に実験を実行するのに十分です。今後の研究の可能性としては、マルチ GPU 最適化を使用して再生率を高め、学習を高速化することが挙げられます。下の図は、環境ステップ数 (つまり、1 ステップ = 4 フレーム)、モデルの更新、および時間という 3 つの異なるメトリックでの同じ学習曲線を示しています。 80 億ステップを要し、138 時間以内に 100 万回のモデル更新を完了しました。

rlpyt は、24 個の CPU と 3 個の Titan-Xp GPU を使用して、非同期サンプリング モードで R2D1 実装を実行します。水平軸が異なる場合 (環境ステップ数、モデル更新、時間) の学習曲線は、上の図に示されています。

新しいデータ構造: namedarraytuple

rlpyt は、numpy 配列または torch テンソルの整理を容易にする、arraytuples という名前の新しいオブジェクト クラスを導入します。 namedarraytuple は本質的に、構造内でインデックス付きまたはスライスされた配列の読み取り/書き込みを公開する namedtuple です。

いくつかの共通の次元を持つ(ネストされている可能性のある)配列の辞書を書いてみてください。

  1. src.items() 内の k、v の場合: isinstance (dest[k]、dict): ..recurse..dest[k][slice_or_indexes] = v

上記のコードを次のコードに置き換えます。

  1. dest[スライスまたはインデックス] = src

重要なのは、dest と src が異なる numpy 配列であるか、ランダムに構造化された配列のコレクションであるかに関係なく、構文は同じであることです (dest と src の構造が一致している必要があります。または、src はすべてのフィールドに適用される単一の値です)。 rlpyt はこのデータ構造を広範に活用します。トレーニング データのさまざまな要素が同じマトリックスのメイン ディメンションを使用して編成されるため、目的の時間ディメンションまたはバッチ ディメンションと簡単に対話できます。さらに、namedarraytuples は、マルチモーダルなアクションや観察を伴う環境を自然にサポートします。これは、ニューラル ネットワークの異なるレイヤーが異なるパターンを使用する場合に、中間インフラストラクチャ コードを変更せずに済むため便利です。

関連研究

深層強化学習の初心者は、まず OpenAI Spinning Up などの他のリソースを読んで、強化学習アルゴリズムについて学ぶことができます。

OpenAI Spinning Up コードアドレス: https://github.com/openai/spinningup

ドキュメントアドレス: https://spinningup.openai.com/en/latest/

rlpyt は accel_rl の改訂版であり、論文「Accelerated Methods for Deep Reinforcement Learning」で説明されているように、Theano を使用して Atari ドメインでの強化学習を拡張しようとします。ディープラーニングと強化学習におけるバッチサイズのスケーリングに関する詳細な研究については、OpenAI のレポート (https://arxiv.org/abs/1812.06162) を参照してください。 rlpyt と accel_rl はどちらも元々 rllab からインスピレーションを得ました。

公開されている他の研究リポジトリには、OpenAI Baseline と Dopamine が含まれます。どちらも Tensorflow フレームワークを使用しており、rlpyt ほど最適化されておらず、3 種類のアルゴリズムは含まれていません。 Ray 上に構築された Rllib は、分散コンピューティングに対して異なるアプローチを採用していますが、小規模な実験を複雑にする可能性があります。 Facebook Horizo​​n は、大規模な本番レベルのアプリケーションに重点を置いた一連のアルゴリズムを提供します。要約すると、rlpyt は、より多くのアルゴリズムのモジュール実装と並列化のためのモジュール インフラストラクチャを提供し、幅広い研究アプリケーションをサポートするツールボックスです。

結論は

BAIRは関連ブログで、rlpytは既存の深層強化学習技術の便利な利用を促進し、新たな研究の出発点となる可能性があると述べた。たとえば、rlpyt は、メタ学習、モデルベースの強化学習、マルチエージェント強化学習などのより高度なトピックには明示的に対応していませんが、rlpyt によって提供される利用可能なコードは、これらの分野での進歩を加速するのに役立つ可能性があります。

<<:  AIは病気の診断や新薬の設計に大きな可能性を秘めている

>>:  AIが品質保証を向上させる6つのヒント

ブログ    

推薦する

...

最高裁:アプリは顔情報を収集・処理するためにユーザーの個別の同意が必要

最高人民法院研究室民事部の陳龍野部長は、一部のモバイルアプリケーション(APP)はしばらくの間、パッ...

将来のAIアプリケーションには、より高速でスマートな通信インフラストラクチャが必要

[[409599]]インターネット接続が4Gから5Gへと高速化していく一方で、利用可能な帯域幅が限ら...

2024年の人工知能とデジタルツインの開発動向

人工知能 (AI) とデジタル ツインは、複数の業界で重要な用途を持つ、よく議論される 2 つの技術...

マスク氏は突然、xAI の「奇妙な」モデルを公開し、ユーモアのセンスを見せつけた。 ChatGPTのメジャーアップデートが事前にリークされる

11月3日、マスク氏は週末に突然エキサイティングなニュースをもたらしました。xAIの最初の製品が明日...

専門家が最もよく使う機械学習ツール 15 選

[[323871]]画像ソース: unsplash機械学習は素晴らしい技術ですが、その可能性を実現す...

ロボットは人間の笑顔を真似することができますが、この笑顔はいつも...

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

VGG畳み込みニューラルネットワークモデル分析

1: VGGの紹介とモデル構造VGGはVisual Geometry Groupの略で、オックスフォ...

...

人工知能のヒューマニズム:AIをより愛らしくする方法

1. デジタル格差が拡大し、高齢者は「デジタル難民」となっている最近、高齢者に関する2つのニュース...

ケーススタディ: SAP Conversational AI を使用したチャットボットの構築

[51CTO.com クイック翻訳] チャットボットの構築に慣れていない初心者の場合、自然言語理解、...

AIの限界を理解することがその可能性を実現する鍵となる

人工知能 (AI) は、デジタル顧客サービス アシスタント、自動運転車、無人倉庫のロボットなど、多く...

闇の奥:人工知能の奥にはどんな闇が隠されているのか?

4月13日、TechnologyReviewによると、ロボットが倉庫への特定のルートを取ることを決...

「ロボットが私にそうさせた」:ロボットは人々にリスクを取るよう促すことができると研究で判明

[[404036]] 「仲間からのプレッシャーがリスクの高い行動につながることはわかっています。オン...