持続可能性戦略







前の記事で、勾配を明示的に計算することなく関数パラメーターを最適化するのに役立ついくつかの進化戦略(ES)アルゴリズムについて説明しました。 強化学習(RL)の問題を解決するとき、これらのアルゴリズムを使用して、ニューラルネットワークエージェントのモデルパラメーターの適切なセットを見つけることができます。 この記事では、一部のRLタスクでのESの使用について説明し、より安定した安定したポリシーを見つける方法についても説明します。







強化学習戦略



RLアルゴリズムは各クロックサイクルでエージェントに送信される報酬信号を必要とするため、これらのアルゴリズムでは、エージェントが環境で実行された後にエージェントが受信する累積強化のみが重要です。 多くの場合、エージェントが正常に動作したかどうか、ロボットマニピュレーターがオブジェクトを取得したかどうか、エージェントが生き残ったかどうかなど、タスクの最後の出力のみがわかります。これらのすべてのタスクで、ESは従来のRLよりも効果的です。 以下に、エージェントの実行がOpenAIジム環境にカプセル化される擬似コードを示しました。 ここでは、累積強化にのみ関心があります。







def rollout(agent, env): obs = env.reset() done = False total_reward = 0 while not done: a = agent.get_action(obs) obs, reward, done = env.step(a) total_reward += reward return total_reward
      
      





前の記事で説明したように、 rollout



をエージェントモデルのパラメーターとフィットネスポイントを比較する目的関数として定義し、ESソルバーを使用して適切なパラメーターセットを見つけることができます。







 env = gym.make('worlddomination-v0') # use our favourite ES solver = EvolutionStrategy() while True: # ask the ES to give set of params solutions = solver.ask() # create array to hold the results fitlist = np.zeros(solver.popsize) # evaluate for each given solution for i in range(solver.popsize): # init the agent with a solution agent = Agent(solutions[i]) # rollout env with this agent fitlist[i] = rollout(agent, env) # give scores results back to ES solver.tell(fitness_list) # get best param & fitness from ES bestsol, bestfit = solver.result() # see if our task is solved if bestfit > MY_REQUIREMENT: break
      
      





決定論的および確率論的ポリシー



環境を観察した結果はエージェントへの入力であり、出力は環境内での実行中の各サイクルでの効果です。 必要に応じてエージェントをシミュレートし、コード、ディシジョンツリー、リカレントニューラルネットワークの線形関数で規定されているルールのメソッドを使用できます。 この記事では、エージェント(ベクトルx )の監視結果をアクション(ベクトルy )に直接変換するために、2つの非表示レベルを持つ単純なフィードフォワードネットワークを使用します。







h 1 = f h (W 1 x + b 1

h 2 = f h (W 2 h 1 + b 2

y = f out (W out h 2 + b out







アクティベーション関数f hおよびf outは、 tanh



sigmoid



relu



または他のいずれかです。 すべての実験で、 tanh



を使用しました。 そのような必要性がある場合、非線形性のないパススルー関数として出力レベルでfを取り出すことができます。 すべての重みとバイアスパラメーターを単一のベクトルWに連結すると、上記のニューラルネットワークが決定関数y = F(x、W)であることがわかります。 次に、ESを使用して、前の記事で説明した検索サイクルを使用してソリューションWを見つけることができます。







エージェントのポリシーを決定論的にしたくない場合はどうしますか? じゃんけんのような単純なタスクでも、最適なポリシーはランダムアクションです。 つまり、エージェントは確率論的な政治を学ばなければなりません。 y = F(x、W)を確率的ポリシーに変える1つの方法は、Wをランダムにすることです。 モデルの各パラメーターw i∈Wは、正規分布N(μi、σi)から取得したランダムな値にすることができます。







このタイプの確率的ニューラルネットワークは、 ベイジアンニューラルネットワークと呼ばれます 。 これは、事前に重み付けされた配信ネットワークです。 この場合、解を探しているモデルのパラメーターは、重みWではなく、ベクトルμとσのセットです。ニューラルネットワークの各パスで、N(μ、σI)から新しいWを取得します。さまざまなタスク、およびこれらのネットワークトレーニングの問題 。 ESを使用して、Wの代わりにμとσを設定することにより、確率論的ポリシーのソリューションを直接見つけることができます。







確率ネットワークは、RLに捧げられた作品によく見られます。 たとえば、 Proximal Policy Optimization(PPO)アルゴリズムでは、最後のレベルはパラメーターのセットμとσ、およびN(μ、σI)から選択されたアクションです。 パラメータにノイズを追加すると、エージェントを刺激して環境を探索し、局所的な最適化を回避できます。







エージェントが媒体を調査する必要がある場合、Wベクトルが完全にランダムである必要はないことが多いことがわかりました。バイアスだけで十分です。 たとえば、 roboschool環境などの移動に関連する困難なタスクでは、ESを使用して、正規分布からエラーパラメーターのみを抽出する確率的ポリシーを見つける必要があります。







二足歩行器の持続可能性ポリシーの開発



これは、持続可能性ポリシーを見つけるためにESが役立つ分野の1つです。 ランダムな試行を何度か繰り返して、データのパフォーマンスとポリシーの持続可能性のバランスを管理したいと考えています。 Oleg Klimovが開発した優れたBipedalWalkerHardcore-v2環境でESをテストしました。 この環境では、 Angry Birdsでも使用されていたBox2D物理エンジンを使用しています。









エージェントがBipedalWalkerHardcore-v2を決定しました







この環境で、エージェントは、時間制限のあるランダムに生成された障害物コースを転倒せずに歩くポリシーを研究しました。 24個の入力信号が使用されました:10個のLIDARセンサー、角度、および表面との接触。 エージェントは、ルートのどこにいるかを知りません。 アクションスペース(アクションスペース)は、4つのモーターのトルクを制御する4つの連続動作値(連続値)で構成されています。 総強化(総報酬)は、エージェントが移動した距離全体に基づいて計算されます。 エージェントがルート全体を通過した場合、300ポイント以上を獲得します。 確かに、適用されるトルクの量に応じていくつかのポイントが差し引かれるため、エネルギー消費も制限になります。







BipedalWalkerHardcore-v2では 、エージェントが100回の連続ランダム試行で平均300以上のポイントを獲得した場合、タスクは解決されたと見なさます。 RLアルゴリズムを使用すると、ルート全体を正常に完了するようにエージェントをトレーニングするのは比較的簡単ですが、エージェントを効率的に通過させて安定した結果を得るのははるかに困難です。 このタスクは非常に興味深いものです。 私の知る限り、2017年10月の時点で、私のエージェントはトラックを最高の状態にしています。







画像

スタート。 歩くことを学ぶ。







画像

エラーを修正することを学びますが、それでもまだゆっくりと判明します...







試行ごとに新しいランダムルートが生成されるため、ルートは簡単な場合もあれば非常に難しい場合もあります。 自然選択中に次世代に引き継ぐための簡単な道を歩むのに十分な幸運な政治家がいるエージェントは必要ありません。 さらに、優秀な政治家を持つ代理人は、彼らが他の人よりも悪くないことを証明できるはずです。 そこで、16回のランダムランの平均結果をエージェントエピソードとし、16回のランにわたる累積強化の平均値をフィットネススコアとして使用しました。







一方、100回の試行でエージェントをテストしたが、試行は片手で行われたため、テストタスクはシステムを最適化したトレーニングタスクに対応していないことがわかります。 確率的環境で、母集団内で複数のエージェントが何度も平均化される場合、トレーニングセットとテストセットのギャップを減らすことができます。 トレーニングセットを再トレーニングできる場合は、特にRLでテストセットを再トレーニングできます。これには問題はありません :)







もちろん、アルゴリズムのデータ効率は16倍悪化しています。 しかし、最終的な政策はずっと持続可能になりました。 100回連続してランダムに試行して最終ポリシーをテストしたとき、この環境を完了するには平均300ポイント以上かかりました。 この平均化方法がなければ、100回の試行で最高のエージェントが約220〜230ポイントを獲得できました。 私の知る限り、私たちの決定は今週水曜日に通過する最初のものでした(2017年10月現在)。







画像









勝利の決定は、エピソードごとに平均16回実行するPEPGを使用して調査されました







また、RL用の優れたポリシーグラデーションアルゴリズムであるPPOも使用しました。 私の能力の及ぶ限り、私はそれを私のタスクでうまく機能するように設定しようとしました。 100回のランダム試行で約240〜250ポイントしか達成できませんでした。 しかし、だれかがPPOまたは別のRLアルゴリズムを使用してこの環境を通過できると確信しています。







安全なポリシーが必要な現実の状況では、有用で非常に効果的な機能は、データの効率性とポリシーの回復力のバランスを管理することです。 理論的には、十分な計算能力があれば、100回の必要な実行にわたってデータを平均し、要件のレベルでBiped walkerを最適化することさえ可能です。 デバイスを設計するとき、プロのエンジニアはしばしば品質管理サービスと安全係数の要件を考慮する必要があります。 それらを取り巻く現実の世界に影響を与える可能性のあるエージェントのポリシーを教えるとき、それらは考慮されなければなりません。







ESが見つけたいくつかのソリューション:







画像

CMA-ESソリューション。







画像

OpenAI-ESソリューション。







また、確率論的ポリシーを使用し、初期ノイズパラメータが高いネットワークを使用してエージェントをトレーニングしたため、エージェントは動きがノイズの多い場所でもノイズを見ました。 その結果、エージェントは、入力信号と出力信号の精度に自信がない場合でも、問題を解決するようにトレーニングされました(ただし、300ポイントを超えるスコアは得られませんでした)。







画像

確率論的政治を用いた二足歩行器。







クーカグラブロボットアーム



私は、ESと平均化技術の組み合わせを適用して、Kukaロボットアームを使用した簡単なタスクを解決しようとしました。 この環境は、 pybullet環境で使用できます。 シミュレータで使用されるKukaモデルは、実際のKukaマニピュレーターに対応しています。 このタスクでは、エージェントオブジェクトの座標を取得ます。







より高度なRL環境では、エージェントはピクセル入力信号に基づいてアクションを実行する必要がある場合がありますが、原則として、この単純化されたモデルを事前トレーニングされた畳み込みニューラルネットワークと組み合わせて、座標を計算することもできます。







画像

確率的ポリシーを使用したマニピュレーターによるグラブのタスク。







エージェントがオブジェクトの取得に成功した場合、10,000ポイントを受け取り、そうでない場合は0を受け取ります。ポイントの一部はエネルギー消費のために取り除かれます。 16のランダム試行で強化を平均すると、安定性の観点からESを最適化できます。 しかし、最終的には、確定的で確率的なポリシーを持つケースの約70〜75%でオブジェクトを取得するポリシーを取得できました。 まだ努力が必要です。







Minitaurにいくつかのタスクを教えます



いくつかの複雑なタスクを同時に実行することを学ぶと、単一のタスクをより適切に実行し始めます。 たとえば、柱の上に立っているウェイトレスを持ち上げる少林寺の修道士は、ウェイトレスの方がはるかにバランスが取れています。 山道で時速140 kmで車を運転しているときにカップから水をこぼさないようにすると、違法なストリートレースで素晴らしいドライバーになります。 また、複数のタスクを一度に実行するようにエージェントをトレーニングすることもできます。そうすると、エージェントはより安定したポリシーを習得します。







画像

少林寺のエージェント。







画像

ドリフトトレーニング。







自己再生エージェントに関する最近の研究は、相撲などの難しいタスクを習得したエージェント(およびこのスポーツには多くのスキルが必要)が、追加のトレーニングなしで歩くときに風の抵抗などの単純なタスクを実行できることを証明しています。 Erwin Kumansは最近、歩くことを学んでいるMinitaurのふたにアヒルを追加する実験を試みました。 アヒルが倒れた場合、タスクはカウントされません。 したがって、タスクへのこのような追加が、シミュレーターからの研究されたポリシーを実際のMinitaurに変換するのに役立つことを期待できます。 例の 1つを取り上げ、ESをトレーニングに使用して、ミニタウアとアヒルを試しました。







画像

pybulletの CMA-ESウォーキングポリシー。







画像

ゴーストロボティクスの Real Minitaur。







pybulletのMinitaurモデルは、実際のMinitaurをモデルにしています。 ただし、理想的な仮想環境で学習したポリシーは通常、現実の世界では機能しません。 彼女は、シミュレーター内のタスクへの小さな追加を要約することさえできないかもしれません。 たとえば、前のビデオでは、Minitaurは(CMA-ESを使用して)前進するように訓練されましたが、同じポリシーでは、ロボットの上にシミュレーターを置いた場合、部屋を通してアヒルを移動できるとは限りません。







画像

歩行ポリシーはアヒルと連携します。







画像

アヒルの助けを借りて学んだ政策。







アヒルを使わない単純な歩行に関する研究は、ロボットにアヒルを乗せた場合でも何らかの形で機能します。つまり、タスクをあまり複雑にしません。 アヒルは安定しているので、Minitaurがそれを落とさないことはそれほど難しくありませんでした。 タスクを非常に複雑にするために、アヒルをボールに置き換えようとしました。







画像







画像

チートを学ぶ。







しかし、これは安定したバランスのとれたポリシーの瞬時の出現には至りませんでした。 代わりに、CMA-ESは、ボールを脚の間のくぼみに転がしてそこに保持することにより、ボールを技術的に転送できるポリシーを開発しました。 目的に従って解決策を探すアルゴリズム(目的駆動型検索アルゴリズム)は、タスクのために環境の設計上の欠陥を使用することを学ぶと結論付けることができます。







画像

確率論的政治はボールで研究しました。







画像

同じポリシーですが、アヒルがいます。







ボールを小さくした後、CMA-ESは、ボールを同時に歩き、バランスを取ることができる確率的ポリシーを見つけることができました。 このポリシーは、アヒルのあるより単純なタスクに移行されました。 将来、そのようなタスクを完了する方法が実際のロボットに経験を移すのに役立つことを願っています。







エストール



ESの重要な機能の1つは、中央処理装置の異なるコアまたは異なるマシン上で異なる実行スレッドで作業する複数のワーカー間で計算を並列化できることです。







Pythonのマルチプロセッシングライブラリを使用すると、プロセスを並行して実行できます。 Message Passing Interface(MPI)とmpi4pyを使用して、タスクごとに個別のPythonプロセスを実行することを好みます。 これにより、インタープリターのグローバルロックをバイパスし、各プロセスが独自のインスタンス(サンドボックスnumpyおよびgym)を確実に受信できるようにします。これは、乱数ジェネレーターの初期化に関して重要です。







画像

ロボスクールホッパー、ウォーカー、アント。







画像

ロボスクールリーチャー。







さまざまなロボスクールのタスクについて訓練されたestool



を使用するエージェント。







シンプルなツールestool



を実装しました。これは、前の記事で説明したes.py



ライブラリを使用して、フィードフォワードポリシーネットワークを備えたシンプルなネットワークを教えて、連続制御(連続制御RLタスク)でes.py



RLタスクを実行します。 estool



を使用して、上記のすべての実験での学習を簡素化するとともに、ジムやロボスクール内で常に制御するさまざまなタスクで学習を簡素化しました。 estool



は分散処理にMPIを使用するため、異なるマシンにワーカーを分散させるのに多くのジェスチャーは必要ありません。







pybulletを使用したESTool



Github







ジムとロボスクールで提供される環境に加えて、 estool



はほとんどのpybulletジム環境でうまく機能します。 既存のPybullet環境を変更して、タスクにより適したものにすることができます。 たとえば、Minitaurがボールを運ぶ環境を(リポジトリのcustom_envs



ディレクトリに)簡単に作成しました。 環境の簡単なセットアップにより、新しいアイデアを簡単にテストできます。 ROSBlenderなどの他のソフトウェアパッケージから3Dモデルを実装する場合は、新しい興味深いpybullet環境を作成し、他の人にそれらを試してもらうことができます。







KukaやMinitaurなど、pybulletの多くのモデルと環境は、実際のロボットのイメージと類似性に基づいてモデル化されており、訓練されたアルゴリズムの現在の知識をそこに転送します。 実際、最近の多くの研究( 1、2、3、4 )では、知識伝達実験を制御するためにピブレットが使用されています。







しかし、シミュレータから実際のデバイスへの知識の転送を試すために、高価なロボットを入手する必要はありません。 Pybulletには、ハードウェアオープンソーススイートMIT racecarに基づいたracecarモデルがあります。 エージェントが入力監視ツールとして仮想画面を使用できるように、仮想レースカーに仮想カメラをマウントするpybullet環境もあります。







最初に、より単純なバージョンを試してみましょう。この場合、マシンは巨大なボールに移動するポリシーを研究するだけです。 RacecarBulletEnv-v0環境では、エージェントは入力でボールの相対座標を受け取り、出力でモーター速度と舵方向を制御するための連続アクションを受け取ります。 タスクは簡単で、2014 Macbook Pro(8コアプロセッサ)のトレーニングには5分(50世代)かかります。 estool



使用すると、このコマンドは8つのプロセスでトレーニングを開始し、各プロセスに4つのタスクを割り当てて、32人のワーカーを作成します。 ポリシー開発には、CMA-ESが使用されます。







 python train.py bullet_racecar -o cma -n 8 -t 4
      
      





現在のトレーニング結果と検出されたモデルパラメーターは、 log



サブディレクトリに保存されlog



。 このコマンドを実行して、見つかった最適なポリシーを使用して環境内のエージェントをレンダリングします。







 python model.py bullet_racecar log/bullet_racecar.cma.1.32.best.json
      
      





画像

MIT Racecarに基づく水曜日のピブレットレースカー。







シミュレーターでは、マウスカーソルでボールを動かしたり、車を動かすことさえできます。







IPython notepad plot_training_progress.ipynb



を使用すると、すべての世代のエージェントの学習履歴を表示できます。 世代ごとに、最高スコアと最低スコア、および母集団全体の平均結果を確認できます。







画像







画像







標準的な移動タスクは、倒立振子のようなロボスクールで使用されるタスクに似ています。 また、pybulletには、Hopper、Walker、HalfCheetah、Ant、およびHumanoidがあります。 Antのポリシーを開発しました。PEPGの助けを借りて、1時間で256のエージェントが存在するマルチコアマシンで3000ポイントに到達します。







 python train.py bullet_ant -o pepg -n 64 -t 4
      
      





画像







画像







AntBulletEnvの実行 gym.wrappers.Monitor



を使用すると、ランニングをMP4ビデオで記録できます。







画像







画像







おわりに



この記事では、ESを使用してエンドツーエンドのニューラルネットワークエージェントのポリシーを開発し、ジムインターフェイスで定義された一定の制御でさまざまなRLタスクを実行する方法について説明しました。 estool



ツールについて説明しestool



;分散コンピューティング環境でMPIフレームワークを使用して、さまざまな設定でESアルゴリズムをすばやくテストできます。







これまで、試行錯誤を通じてエージェントをトレーニングする方法のみを説明してきました。 このゼロからの学習形式は、モデルを使用しない強化学習と呼ばれます( model-free )。 次の記事(まったく書いた場合)では、エージェントが以前にトレーニングしたモデルを使用して現在のタスクを完了する方法を学習するときに、モデルベースのトレーニングについて詳しく説明します。 そして、はい、私は再び進化アルゴリズムを適用します。







興味深いリンク



エストール

安定または安定? 違いは何ですか?

OpenAIジムのドキュメント

強化学習のスケーラブルな代替手段としての進化戦略

エドワード-確率的モデリング、結論、批判のためのライブラリ

ベイジアンニューラルネットワークの歴史

BipedalWalkerHardcore-v2

roboschool

pybullet

Emergent Complexity

GraspGAN








All Articles