モンテカルロ法

Pythonで学ぶGymnasiumによるReinforcement Learning

Fouad Trad

Machine Learning Engineer

リキャップ: モデルベース学習

 

  • 環境ダイナミクスの知識に依存
  • 環境との相互作用なし

前の動画で見た方策反復と価値反復の図。

Pythonで学ぶGymnasiumによるReinforcement Learning

モデルフリー学習

 

  • 環境ダイナミクスの知識を不要
  • エージェントが環境と相互作用
  • 試行錯誤で方策を学習
  • 実環境により適する

ロボットがチェス環境と相互作用する画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

モンテカルロ法

  • モデルフリー手法
  • エピソードに基づきQ値を推定

収集したエピソードの骨子(状態・行動・報酬・リターン)を示す画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

モンテカルロ法

  • モデルフリー手法
  • エピソードに基づきQ値を推定

Q値推定の第2段階とQテーブルの例(行=状態数、列=行動数)を示す画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

モンテカルロ法

  • モデルフリー手法
  • エピソードに基づきQ値を推定

各状態を最適行動に対応づける最終ステップ(最適方策の導出)を示す画像。

  • 2手法: 初回訪問毎回訪問
Pythonで学ぶGymnasiumによるReinforcement Learning

カスタムGrid World

6状態のカスタムGrid World(2行×3列、左上0〜右下5)。エージェントは状態3、山は状態4、ゴールは状態5。

Pythonで学ぶGymnasiumによるReinforcement Learning

2つのエピソードの収集

状態・行動・報酬・リターンで表した最初のエピソードを示す画像。

状態・行動・報酬・リターンで表した2番目のエピソードを示す画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q値の推定

2つのエピソードで収集した状態・行動・報酬・リターンを示す画像。

  • Qテーブル: Q値の表

空のQテーブル(これから埋める)を示す画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q(4, left), Q(4, up), Q(1, down)

2つのエピソードの状態・行動・報酬・リターンで、(4, left)、(4, up)、(1, down)を強調表示。

  • (s,a) が1回出現 → そのリターンで埋める

(4, left)、(4, up)、(1, down)の値を埋めたQテーブル。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q(4, right)

2つのエピソードの状態・行動・報酬・リターンで、(4, right)を両方で強調表示。

  • (s,a) が各エピソードで1回 → 平均を取る

両エピソードのリターン平均で(4, right)を埋めたQテーブル。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q(3, right) - 初回訪問モンテカルロ

2つのエピソードで、(3, right)の各エピソードの最初の出現のみを強調表示。

  • 各エピソード内の(s,a)初回訪問の平均

強調行((3, right)の初回)のリターン平均で埋めたQテーブル。

Pythonで学ぶGymnasiumによるReinforcement Learning

Q(3, right) - 毎回訪問モンテカルロ

2つのエピソードで、(3, right)の全出現を強調表示。

  • 各エピソード内の(s,a)全訪問の平均

強調行((3, right)の全出現)のリターン平均で埋めたQテーブル。

Pythonで学ぶGymnasiumによるReinforcement Learning

エピソードの生成

def generate_episode():
    episode = []
    state, info = env.reset()

terminated = False while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
episode.append((state, action, reward)) state = next_state
return episode
Pythonで学ぶGymnasiumによるReinforcement Learning

初回訪問モンテカルロ

def first_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))

for i in range(num_episodes): episode = generate_episode() visited_states_actions = set()
for j, (state, action, reward) in enumerate(episode):
if (state, action) not in visited_states:
returns_sum[state, action] += sum([x[2] for x in episode[j:]])
returns_count[state, action] += 1 visited_states_actions.add((state, action))
nonzero_counts = returns_count != 0
Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts] return Q
Pythonで学ぶGymnasiumによるReinforcement Learning

毎回訪問モンテカルロ

def every_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))    

    for i in range(num_episodes):
        episode = generate_episode()  

        for j, (state, action, reward) in enumerate(episode):

            returns_sum[state, action] += sum([x[2] for x in episode[j:]])
            returns_count[state, action] += 1


    nonzero_counts = returns_count != 0
    Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts]
    return Q
Pythonで学ぶGymnasiumによるReinforcement Learning

最適方策の取得

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Pythonで学ぶGymnasiumによるReinforcement Learning

統合して確認

Q = first_visit_mc(1000)

policy_first_visit = get_policy()
print("First-visit policy: \n", policy_first_visit)
Q = every_visit_mc(1000)
policy_every_visit = get_policy()
print("Every-visit policy: \n", policy_every_visit)
First-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Every-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

各状態での最適行動(矢印)を示す最適方策の画像。

Pythonで学ぶGymnasiumによるReinforcement Learning

Passons à la pratique !

Pythonで学ぶGymnasiumによるReinforcement Learning

Preparing Video For Download...