強化学習の高速化
について考えたことのメモ。強化学習の応用にあたっての重要な問題点に学習速度が非常に遅いということがあげられていた。学習が遅い原因として状態・行動対の価値の評価を試行錯誤的に行うからだと認識している。今まで調べてきて学習の高速化に焦点をあてている研究方法を列挙すると大体次のようになる(ただし、試行錯誤回数を減らすのと時間計算量を減らすのがごっちゃになっている。自分にはまだ区別できない)。
- 関数近似:経験を一般化する。
- 適正度の履歴:得た報酬を過去の経験列に分配して、価値がいっぺんに更新されるようにする。
- プラニング:一度得た経験を何度も使いまわす。
- k-確実探査法:できるだけ効率的に経験を得て、無駄な試行錯誤を行わないようにする。
- サブタスクの設定:タスクをサブタスクに分割して個々に強化学習。
- TTD(Truncated TD)のようにアルゴリズムの改良(詳細はよくわからなかった)。
- 遺伝的アルゴリズムを使う。
- マルチエージェント系にして個々のエージェントが得た経験を共有または通信しあう。
- 教示を導入。
- 状態空間を粗くする。
ここで疑問。高速化というと並列化すればいいというイメージがあるのだけど、そういう研究は見られなかった(見落としの確率ほぼ100%だが。大昔、ほとんど調べてない部分に海外でやられている可能性が高い)。ただ、プラニングではプラニングの過程だけを取り出して並列化できると示唆されていたのは目にしたことがある。
並列化するとなると価値の評価部分を並列的に同時に行って最後に統合するという当たり前な考えが浮かぶ(マルチエージェント系で個々のエージェントを並列実行することに似ているような気もするが)がどうなのだろう。直感的(並列化もよく知らないので妄想の域に入っているが)には速くなりそうなのだが収束しないこともあるのだろうか。強化学習の並列化の研究がどうなっているか調べてみる必要あり。自分でも実験して調べられそうな予感もする。