強化学習はモデルベースとモデルフリーに分類できて、前回はモデルベースの手法をまとめた。
今回はモデルフリーのメインの手法をまとめてく。
モデルベースの手法はこちら。
trafalbad.hatenadiary.jp
目次
1.変数、関数、環境、エージェントの定義
2.モデルフリーにおける3つの問題とその解決法
3.まとめ
1.変数、関数、環境、エージェントの定義
まずモデルフリーの定義について
モデルフリーは「遷移関数」と「報酬関数」を定義しない代わりに、「エージェント(環境におけるプレイヤー)」を定義する。
モデルフリーはモデルベースとは違い、エージェントが行動しながら、価値を最大化するように学習する仕組みで、メインで定義するのは「行動、状態、環境、エージェント」
モデルベースとモデルフリーの大きな違いは「エージェントを定義するか、してないか」だ。
# モデルフリーの環境(コイントスゲーム)の定義 class CoinToss(): def __init__(self, head_probs, max_episode_steps=30): self.head_probs = head_probs self.max_episode_steps = max_episode_steps self.toss_count = 0 # 略 return reward, done # エージェントの定義 class Agent(): # 略
モデルフリーにおける学習の概略図
2.モデルフリーにおける3つの問題とその解決法
モデルフリーではエージェントが行動することによって「経験」を蓄積していき、報酬を最大化する仕組み。
そこで、焦点になる問題が3つある。
モデルフリーにおける3つの問題の関係図
1.経験を蓄積するか活用するか
モデルフリーでエージェントの「経験」を使い、報酬の総和を最大化するためには
・報酬を得るためには、経験を活用する(以下「活用」)
の2つの使い方をバランスよく行う必要がある。
経験における「探索と活用はトレードオフの関係」にあるため、理想は探索しながら経験を活用して報酬を得ること。
そのために「探索と活用のバランス」を上手くとる手法として「epsilon-greedy法」がある。
# epsilon-greedy法での学習 # EpsilonGreedy法のエージェントの定義 class EpsilonGreedyAgent(): def __init__(self, epsilon): self.epsilon = epsilon self.V = [] # コイントスゲームを行う処理 def play(self, env): # 略 return rewards # コイントスゲーム環境と上のエージェントを使う env = CoinToss([0.1, 0.5, 0.1, 0.9, 0.1]) epsilons = [0.0, 0.1, 0.2, 0.5, 0.8] game_steps = list(range(10, 310, 10)) result = {} for e in epsilons: agent = EpsilonGreedyAgent(epsilon=e) means = [] for s in game_steps: env.max_episode_steps = s rewards = agent.play(env) means.append(np.mean(rewards)) result["epsilon={}".format(e)] = means result["coin toss count"] = game_steps result = pd.DataFrame(result) result.set_index("coin toss count", drop=True, inplace=True) result.plot.line(figsize=(10, 5)) plt.show()
コイントス環境の引数の値を変えて、ベストな値を探し、探索と活用のバランスをとる。
epsilon-greedy法の値による報酬の推移は以下の図の通り。0.1か0.2がベスト値となってる。
2.エージェントの行動の修正をどのように行うか
エージェントの行動の修正は
実績で修正:エピソードが終わったときの報酬の総和で修正する(主な手法は「モンテカルロ法」)
・予測で行うか(予測で修正)
予測で修正:エピソードの終了を待たずに途中で修正する(主な手法は「TD法」)
以下に実績で修正した場合と、予測で修正した場合の報酬獲得の推移をまとめた。
実績で修正した(モンテカルロ法の)エピソード数の獲得報酬平均の推移
予測で修正した(TD法を利用した学習法「Q-learning」の)エピソード数の獲得報酬平均の推移
どっちも上手く行ってる。
***エージェント行動の修正のメイン手法***
強化学習の深層学習の手法ではMulti-step Learningがよく使われてる。
3.経験を戦略(policyベース)、状態評価(valueベース)、その両方の更新に利用するか
モデルフリーの学習方法には「経験」を
・戦略に基づく行動選択(policyベース)のために更新するか
・互いに弱点を補いながら、valueベースとpolicyベースの両方(Actor Critic)を更新するか
の3つがある。
モデルフリーの3つの学習法「policyベース」・「valueベース」・「Actor Critic」
【valueベース】
valueベースを主に使う学習法はQ-learning。
さっきも載っけたけど、再掲。
Q-learningの学習のエピソード数と獲得平均報酬の推移
【policyベース】
policyベースを主に使う学習法はSARSAがある
SARSAの学習のエピソード数と獲得平均報酬の推移
今回のコイントス環境では、Q-learningの状態評価の方がいい結果になった。
これはリスクのある行動をとらない状態評価の効果が、今回の環境に上手く反映された結果っぽい。
【Actor Critic法】
もう一つの学習法は、valueベースとpolicyベースを組み合わせた「Actor Critic法」。
戦略担当Actorと状態評価担当Criticを相互に更新して学習する仕組み。
Actor Critic法の学習のエピソード数と獲得報酬平均の推移
今までの手法より、エピソード数が長くなってるけど、その分最終的には安定して報酬を獲得できてる。
3.まとめ
モデルフリーの学習の流れをまとめると②3つの問題を考慮し、手法を考える
1.経験を蓄積するか活用するかのバランスを取る手法「epsilon-greedy法」
2.エージェントの行動の修正をどのように行うか
3.経験を戦略(policyベース)、状態評価(valueベース)、またはそのどちらか(Actor Critic)の更新に利用するか
③valueベース、policyベースまたは、両方を組み合わせた「Actor Critic法」で学習する
強化学習は今、すべて深層学習になってるけと、モデルフリーに関して紹介した手法やモデルベースの記事での手法は強化学習の基礎&メインの手法で、深層学習でも使われてる。
強化学習の基礎的かつメインの手法を学習して備忘録としてまとめた。モデルベースの記事とモデルフリーのこの記事で、強化学習の基礎的 & 主要な手法はほぼ網羅してる。