強化学習におけるマルコフ決定過程 (MDP) とは?

AI・機械学習

マルコフ決定過程 (MDP) とは?

マルコフ決定過程 (Markov Decision Process, MDP) は、エージェントがある環境内で行動し、最適な行動方針(ポリシー)を見つけるための数学的枠組みです。
特に、強化学習で頻繁に使われ、将来的な報酬を最大化するための意思決定モデルを提供します。

以前の記事で紹介したバンディット問題は、毎回同じ条件の問題(どのスロットを選ぶか)を解くため、状態の変化はありませんが、迷路を解くなどといった問題の場合、エージェントの行動によって、状態が変わり、適切な行動も変化します。
このような問題に対応するためにはMDPの考え方が必要になります。

マルコフ決定過程の要素

MDP は以下の 4 つの要素から構成されます:

  1. 状態 (State, )
    – エージェントが現在いる環境の状況を表します。例:迷路内での位置

  2. 行動 (Action, )
    – エージェントが取れる選択肢(行動)です。例:上、下、左、右に移動する。

  3. 遷移確率 (Transition Probability, )
    – ある状態 で行動 を取ったとき、次の状態 に遷移する確率。
    → MDP の “マルコフ性” とは、「次の状態は現在の状態と行動だけに依存する」という性質を意味します。

  4. 報酬 (Reward, )
    – エージェントが特定の行動を取り、状態が変わったときに得られる報酬。
    例:ゴールにたどり着くと +10 点。

マルコフ決定過程の流れ

  1. エージェントは現在の状態 に基づいて行動 を選択。
  2. 選択した行動の結果、次の状態 に遷移し、報酬 を受け取る。
  3. エージェントはこれを繰り返し、長期的な報酬の合計を最大化する行動方針(ポリシー)を見つける。

割引報酬の概念

MDP では、未来の報酬の価値は現在の報酬よりも低く見積もられます。
割引率 () を使って、将来の報酬を徐々に割り引いて評価します。

  • が 1 に近いほど、将来の報酬を重視する。
  • が 0 に近いほど、即時の報酬を重視する。

ポリシーと価値関数

  • ポリシー (Policy, ):
    状態 において、どの行動 を選ぶかを決める戦略。

  • 状態価値関数 (State Value Function, ):
    特定の状態 から将来得られる期待報酬の合計。

  • 行動価値関数 (Action Value Function, ):
    状態 で行動 を取ったときの期待報酬。

具体例:迷路問題

迷路を解くエージェントを考えます:

  • 状態 (S): エージェントの位置(例:)。
  • 行動 (A): 上、下、左、右の 4 つの移動。
  • 遷移確率 (P): 行動を選んだ結果、次の状態に移動する確率。
  • 報酬 (R): ゴールにたどり着いたら +10 点、それ以外は -1 点。

エージェントはゴールにたどり着くまでの報酬を最大化するポリシーを学習します。

Pythonで簡単なMDPの例

以下は、迷路のような環境で MDP を実装する簡単なコード例です。

import numpy as np

# 状態と行動を定義
states = ["A", "B", "C", "D"]  # 4つの状態
actions = ["left", "right"]     # 2つの行動

# 遷移確率と報酬の定義 (状態, 行動) -> (次の状態, 報酬)
transition_probs = {
    "A": {"left": ("A", 0), "right": ("B", 1)},
    "B": {"left": ("A", 0), "right": ("C", 2)},
    "C": {"left": ("B", 1), "right": ("D", 3)},
    "D": {"left": ("C", 2), "right": ("D", 0)},  # Dは終端状態
}

# 割引率の設定
gamma = 0.9  # 将来の報酬を割り引くための係数

# 状態価値関数を初期化
V = {s: 0 for s in states}  # 各状態の価値を0で初期化

# 価値反復法 (Value Iteration) の実装
for _ in range(10):  # 10回の反復
    new_V = V.copy()
    for state in states:
        action_values = []
        for action in actions:
            next_state, reward = transition_probs[state][action]
            value = reward + gamma * V[next_state]
            action_values.append(value)
        new_V[state] = max(action_values)  # 最大価値の行動を選択
    V = new_V

# 結果を表示
print("各状態の価値関数:")
for state, value in V.items():
    print(f"状態 {state}: {value:.2f}")
  • 遷移確率と報酬の設定:
    各状態から行動を取ったときに、次の状態と報酬を定義しています。
transition_probs = {
    "A": {"left": ("A", 0), "right": ("B", 1)},
    "B": {"left": ("A", 0), "right": ("C", 2)},
    "C": {"left": ("B", 1), "right": ("D", 3)},
    "D": {"left": ("C", 2), "right": ("D", 0)},  # Dは終端状態
}
  1. 状態 “A”
    “left” 行動を取る → 次の状態: “A”, 報酬: 0

    • 状態 “A” に留まり、報酬は 0 です。つまり、何も進展がない行動です。
    • “right” 行動を取る → 次の状態: “B”, 報酬: 1
    • エージェントは「B」に移動し、1 点の報酬を得ます。
  2. 状態 “B”
    “left” 行動を取る → 次の状態: “A”, 報酬: 0

    • 「B」から「A」に戻り、報酬は 0 点です。
    • “right” 行動を取る → 次の状態: “C”, 報酬: 2
    • 「B」から「C」へ進み、2 点の報酬を得ます。
  3. 状態 “C”
    “left” 行動を取る → 次の状態: “B”, 報酬: 1

    • 状態「B」に戻って 1 点の報酬を得ます。
    • “right” 行動を取る → 次の状態: “D”, 報酬: 3
    • ゴール状態「D」にたどり着き、3 点の報酬を獲得。
  4. 状態 “D” (ゴール状態)
    “left” 行動を取る → 次の状態: “C”, 報酬: 2

    • 状態「C」に戻り、2 点の報酬を得ます。
    • “right” 行動を取る → 次の状態: “D”, 報酬: 0
    • 「D」に留まり、報酬は 0 点。エージェントはここで終了します。
  • 価値反復法:
    各状態の価値を反復的に更新し、最適なポリシーを求めています。

まとめ

マルコフ決定過程(MDP)は、状態・行動・報酬の要素を組み合わせて、エージェントが最適な行動を学ぶためのフレームワークです。この例では、価値反復法を使って、各状態での最適な価値を計算しました。

MDPは強化学習の基礎であり、Q学習やSARSAなどの手法の理解にも役立ちます。

タイトルとURLをコピーしました