強化学習
Keras
DQN
OpenAIGym
Keras-RL

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

More than 1 year has passed since last update.

主旨

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

アルゴリズムの選択基準

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

問題例

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

サンプルコード

OpenAI Gymの倒立振子は,
- 状態空間: 連続(座標と傾き)
- 行動空間: 離散(左 or 右)
なので,上記表よりDQNかCEM,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

Misc