強化学習(TD3)を試したら環境依存性が強くてビックリしたという話
今回のポストは、TD3 という手法を試してみたら論文通りの性能が出ずに悩んでいたんですが、その原因が環境差にあったという笑えない話です。
経緯
ロボット動作などの、連続行動空間での強化学習にはPPOが今のところ最強なのではないかと思っていたのだけど、TD3の論文 (Addressing Function Approximation Error in Actor-Critic Methods: https://arxiv.org/pdf/1802.09477.pdf)を見ると、様々なタスクでTD3がPPOを大きく上回っているではありませんか。これは試す価値があるなと思って、TD3をchainer で自作して Walker2d で試してみました。
ところが、論文のような学習効果が全くでないんです。
Pendulum などの小さな問題ではきちんと学習できていますし、一通りのバグチェックもしましたが、どうしても誤りを見つけることができませんでした。
最後に残った可能性は次の二つでした。
- 論文著者はpytorchを使用している(
GitHub - sfujim/TD3: PyTorch implementation of TD3 and DDPG for OpenAI gym tasks
)が、私はchainer を使った。 - OpenAI gym の mujoco Walker2d-v1 でなく、DartWalker2d-v1 を使っている。
Pytorch でなく chainer を使っている
Pytorch と Chainer の違いを調べたのですが、私が使った機能の範囲では、全結合層の重みの初期化方法が異なることだけしか違いがるようには見えませんでした。
重みの初期化については、pytorch 方式に合わせて、私のプログラムを修正しましたが、結果は変わりませんでした。
OpenAI gym の mujoco Walker2d-v1 でなく DartWalker2d-v1 を使っている
OpenAI gym の Walker2d-v1 を動かすには mujoco という物理エンジンが必要ですが、mujoco はフリーソフトではありません。私はサラリーマンのオジサンですから無料の Student Licenceは使えません。$500/year とはいえライセンス費用を支払うのもキツイですし、mujoco の無償お試しを使うのも面倒なので、mujoco とほぼ同じ結果になるとされている DartEnv を使っていました。
Walker などの接触拘束が多い場面では mujoco と Dart に完全互換はあり得ませんが、制御レベルからみれば同じとみなせる仮想環境であろうと考えていました。
ところが、です。
TD3の作者が公開している pytorch 実装で、mujoco Walker2d-v1 でなく、DartWalker2d-v1 の学習を実行させてみたら、学習は論文通りには進まなかったのです・・・。(Fig. 1)
学習曲線も私の実装したプログラムの結果と瓜二つ。論文著者のプログラムであっても、DartWalker2d はうまく学習できなかったということです。
ええ!?って感じですよね。
環境依存性がこんなに大きくていいのかよ!?って思いました。
利用者としての意見
強化学習はパラメータに敏感で怖いなって思いますけど、今回はまた別の意味での脆弱さを感じました。
私が今回感じた課題は2つです。
1.に関しては、PPOなどの他のアルゴリズムでは環境依存性がどの程度あるのか試していませんが、環境が少し変わっただけで学習が進まなくなるようなアルゴリズムは使い勝手が悪すぎるなという印象です。
連続行動空間での強化学習の論文では、今のところ、mujoco の hopper や walker などがデファクトの例題となっていますが、実世界応用を考えたときに、mujocoの例題だけではアルゴリズムの評価はできてないんじゃないの?と疑問を持たざるを得ません。
2.については、強化学習の利用者からすると、是非クリアになっていってほしい課題です。
mujoco と Dart との、何の差がこれほどまでの学習進捗の差を生み出したのかを把握したいです。これをクリアにしておかないと、どのような基準を満たすシミュレーションで事前検討を進めればよいのか分かりません。
強化学習を現実世界に適用(例えば2足歩行ロボット)することを想定した場合、プロトタイプ作成前に、シミュレーション環境で学習効率や制御性能を検討しようと考えるのはよくあることだと思いますが、その際にシミュレータが満たすべき性能/信頼性のポイントが不明なままでは、シミュレータでの学習検討の意味はあまりないように思います。