方策勾配入門

Pythonで学ぶDeep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

DRLにおける方策法の導入

 

Q学習:

  • 行動価値関数 Q を学習

状態を入力し行動価値を出力するQネットワーク

  • 方策: 最高価値の行動を選択

 

方策学習:

  • 方策を直接学習

状態を入力し行動確率を出力する方策ネットワーク

Pythonで学ぶDeep Reinforcement Learning

方策学習

 

  • 確率的にできる
  • 連続空間を扱える
  • 目的を直接最適化
  • 分散が大きい
  • サンプル効率が低い

 

  • Deep-Q学習では: 方策は決定的

 

$\pi_\theta(a_t | s_t)$:

  • 状態 $s_t$ における $a_t$ の確率分布。次のとおり:
    • $a_t$, $s_t$: 時刻 $t$ の行動と状態
    • $\theta$: 方策パラメータ(ネットワーク重み)
Pythonで学ぶDeep Reinforcement Learning

方策ネットワーク(離散行動)

class PolicyNetwork(nn.Module):
  def __init__(self, state_size, action_size):
    super(PolicyNetwork, self).__init__()
    self.fc1 = nn.Linear(state_size, 64)
    self.fc2 = nn.Linear(64, 64)
    self.fc3 = nn.Linear(64, action_size)

  def forward(self, state):
    x = torch.relu(self.fc1(torch.tensor(state)))
    x = torch.relu(self.fc2(x))
    action_probs = torch.softmax(self.fc3(x), dim=-1)
    return action_probs

action_probs = policy_network(state) print('Action probabilities:', action_probs)
Action probabilities: tensor([0.21, 0.02, 0.74, 0.03])

4 つの可能な行動をインデックスと確率に対応づける表。'up' はインデックス 0・確率 0.21、'right' は 1・0.02、'down' は 2・0.74、'left' は 3・0.03。

action_dist = (
    torch.distributions.Categorical(action_probs))

action = action_dist.sample()
Pythonで学ぶDeep Reinforcement Learning

目的関数

 

  • 方策は期待収益を最大化する必要

    • エージェントが $\pi_\theta$ に従うと仮定
    • 方策パラメータ $\theta$ を最適化
  • 目的関数:

式: J(pi theta) = 方策 pi theta に従う軌跡 tau 上の期待値 R_tau。R_tau はエピソード収益

 

  • $J$ を最大化するには: $\theta$ に関する勾配が必要

J(pi_theta) の theta に関する勾配

Pythonで学ぶDeep Reinforcement Learning

目的関数

 

  • 方策は期待収益を最大化する必要

    • エージェントが $\pi_\theta$ に従うと仮定
    • 方策パラメータ $\theta$ を最適化
  • 目的関数:

J(pi theta) の定義。前スライドと同じ

 

  • $J$ を最大化するには: $\theta$ に関する勾配が必要

J(pi_theta) の theta に関する勾配は方策勾配と呼ぶ

Pythonで学ぶDeep Reinforcement Learning

方策勾配定理

 

  • $\nabla_\theta J(\pi_\theta)$ の扱いやすい式を与える
  • $\pi_\theta$ に従う軌跡での期待値
    • 軌跡を収集し収益を観測

 

方策勾配定理: J(pi_theta) の theta に関する勾配は、pi_theta に従う軌跡 tau 上の期待値で…

Pythonで学ぶDeep Reinforcement Learning

方策勾配定理

 

  • $\nabla_\theta J(\pi_\theta)$ の扱いやすい式を与える
  • $\pi_\theta$ に従う軌跡での期待値
    • 軌跡を収集し収益を観測
  • 各軌跡について: 収益 $R_\tau$ を用いる

 

方策勾配定理: J(pi_theta) の theta に関する勾配は、エピソード収益と…の積の期待値

Pythonで学ぶDeep Reinforcement Learning

方策勾配定理

 

  • $\nabla_\theta J(\pi_\theta)$ の扱いやすい式を与える
  • $\pi_\theta$ に従う軌跡での期待値
    • 軌跡を収集し収益を観測
  • 各軌跡について: 収益 $R_\tau$
  • 選択行動の対数確率の勾配の総和を掛ける
  • 直感: 良いエピソードで取った行動の確率が上がる方向に $\theta$ を微調整

 

方策勾配定理: 勾配は、エピソード収益と軌跡内の行動の対数確率勾配の総和との積の期待値

Pythonで学ぶDeep Reinforcement Learning

 

ポンのゲームを表すGIF

Pythonで学ぶDeep Reinforcement Learning

Passons à la pratique !

Pythonで学ぶDeep Reinforcement Learning

Preparing Video For Download...