アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

pythonで強化学習のモデルフリーの手法、学習法・コードまとめ【機械学習】

強化学習はモデルベースとモデルフリーに分類できて、前回はモデルベースの手法をまとめた。
今回はモデルフリーのメインの手法をまとめてく。

モデルベースの手法はこちら。
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():
  # 略


モデルフリーにおける学習の概略図
f:id:trafalbad:20190425221644p:plain



2.モデルフリーにおける3つの問題とその解決法

モデルフリーではエージェントが行動することによって「経験」を蓄積していき、報酬を最大化する仕組み。
そこで、焦点になる問題が3つある。



モデルフリーにおける3つの問題の関係図
f:id:trafalbad:20190425221709p:plain


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がベスト値となってる。
f:id:trafalbad:20190425222733p:plain




2.エージェントの行動の修正をどのように行うか

エージェントの行動の修正は

実績で行うか(実績で修正)

実績で修正:エピソードが終わったときの報酬の総和で修正する(主な手法は「モンテカルロ法」)

予測で行うか(予測で修正)

予測で修正:エピソードの終了を待たずに途中で修正する(主な手法は「TD法」)


以下に実績で修正した場合と、予測で修正した場合の報酬獲得の推移をまとめた。



実績で修正した(モンテカルロ法の)エピソード数の獲得報酬平均の推移

f:id:trafalbad:20190425222756p:plain




予測で修正した(TD法を利用した学習法「Q-learning」の)エピソード数の獲得報酬平均の推移

f:id:trafalbad:20190425223428p:plain

どっちも上手く行ってる。



***エージェント行動の修正のメイン手法***

・1回の行動直後に修正する=TD(0)

モンテカルロ法(TD(1))

・2とから3回の行動直後に修正する=Multi-step Learning

・各ステップの値を合成し、誤差を計算する=TD(λ)法

強化学習の深層学習の手法ではMulti-step Learningがよく使われてる。




3.経験を戦略(policyベース)、状態評価(valueベース)、その両方の更新に利用するか

モデルフリーの学習方法には「経験」を

・価値を最大化する行動選択(valueベース)のために更新するか

・戦略に基づく行動選択(policyベース)のために更新するか

・互いに弱点を補いながら、valueベースとpolicyベースの両方(Actor Critic)を更新するか

の3つがある。


モデルフリーの3つの学習法「policyベース」・「valueベース」・「Actor Critic」



valueベース】

valueベースを主に使う学習法はQ-learning。
さっきも載っけたけど、再掲。


Q-learningの学習のエピソード数と獲得平均報酬の推移
f:id:trafalbad:20190425223428p:plain




【policyベース】
policyベースを主に使う学習法はSARSAがある



SARSAの学習のエピソード数と獲得平均報酬の推移
f:id:trafalbad:20190425224343p:plain

今回のコイントス環境では、Q-learningの状態評価の方がいい結果になった。

これはリスクのある行動をとらない状態評価の効果が、今回の環境に上手く反映された結果っぽい。



【Actor Critic法】

もう一つの学習法は、valueベースとpolicyベースを組み合わせた「Actor Critic法」。

戦略担当Actorと状態評価担当Criticを相互に更新して学習する仕組み。


Actor Critic法の学習のエピソード数と獲得報酬平均の推移
f:id:trafalbad:20190425224430p:plain

今までの手法より、エピソード数が長くなってるけど、その分最終的には安定して報酬を獲得できてる。



3.まとめ
モデルフリーの学習の流れをまとめると

①変数、関数、環境、エージェントの定義

②3つの問題を考慮し、手法を考える

1.経験を蓄積するか活用するかのバランスを取る手法「epsilon-greedy法」

2.エージェントの行動の修正をどのように行うか

3.経験を戦略(policyベース)、状態評価(valueベース)、またはそのどちらか(Actor Critic)の更新に利用するか

valueベース、policyベースまたは、両方を組み合わせた「Actor Critic法」で学習する



強化学習は今、すべて深層学習になってるけと、モデルフリーに関して紹介した手法やモデルベースの記事での手法は強化学習の基礎&メインの手法で、深層学習でも使われてる。

強化学習の基礎的かつメインの手法を学習して備忘録としてまとめた。モデルベースの記事とモデルフリーのこの記事で、強化学習の基礎的 & 主要な手法はほぼ網羅してる。