強化学習アルゴリズムの選び方


主旨

強化学習アルゴリズムは多すぎて,結局どういう条件でどのアルゴリズムを使ったらよいかわからなかったので,調べてみました.

系図


図: 主要なアルゴリズム(左上の数字は誕生年)


図: DQN誕生以降版(Deep Learning for Video Game Playingより引用)

アルゴリズムの選択基準

  • 問題の空間(離散/連続)と手法,工夫によってアルゴリズム名が変わる.
  • 手法は行動価値関数$Q(s,a)$を更新するために利用
アルゴリズム 状態空間 行動空間
DQN 離散/連続 離散
DDPG 離散/連続 連続
NAF1 離散/連続 連続
CEM 離散/連続 離散
Sarsa 離散 離散
Q学習 離散 離散
Deep Sarsa 離散/連続 離散

問題例

状態空間 行動空間 例     
離散 離散 三目並べ, 迷路, テトリス, 囲碁
離散 連続 ダーツ     
連続 離散 倒立振子     
連続 連続 ブロック崩し, インベーダー     

サンプルコード

OpenAI Gymの倒立振子は,
- 状態空間: 連続(座標と傾き)
- 行動空間: 離散(左 or 右)
なので,上記表よりDQNかCEM, Deep Sarsaで解けば良いことがわかります.

Keras-RLにあるCEMで解くサンプルです.

import gym
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from rl.agents.cem import CEMAgent
from rl.memory import EpisodeParameterMemory
env = gym.make("CartPole-v0")
nb_actions = env.action_space.n
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(nb_actions))
model.add(Activation('softmax'))
memory = EpisodeParameterMemory(limit=1000, window_length=1)
cem = CEMAgent(model=model, nb_actions=nb_actions, memory=memory,
               batch_size=50, nb_steps_warmup=2000, train_interval=50, elite_frac=0.05)
cem.compile()
cem.fit(env, nb_steps=100000, visualize=False, verbose=1)
cem.test(env, nb_episodes=5, visualize=True)

References

DQN

DDPG(Deep Deterministic Policy Gradient)

NAF(Normalized Advantage Functions)

CEM(Cross-Entropy Method)

Sarsa

References

補足


  1. NAF: Normalized Advantage Functionの略称.DQNで行動空間が連続な問題を解くために用いられます.