深層強化学習の導入

Pythonで学ぶDeep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

なぜ深層強化学習か

 

  • 従来の RL は低次元タスクに適する

 

 

  • 多くの応用は高次元の状態・行動空間をもつ

 

Frozen Lake 環境を探索するエージェント

クラシックゲーム Space Invaders をプレイするエージェント

Pythonで学ぶDeep Reinforcement Learning

DRL の材料

 

  1. 強化学習の基礎
  2. ディープラーニングと PyTorch

 

  • DRL は深層ニューラルネットでこれらを統合

 

材料を混ぜる料理人のドット絵イラスト

Pythonで学ぶDeep Reinforcement Learning

RL の枠組み

 

  • ステップ t:

 

大きな箱の中に「エージェント」「環境」と書かれた小箱が2つある図

Pythonで学ぶDeep Reinforcement Learning

RL の枠組み

 

  • ステップ t:
    • エージェントが状態 $s_t$ を観測

 

環境からエージェントへ、状態 s_t と書かれた赤い矢印が伸びている。

Pythonで学ぶDeep Reinforcement Learning

RL の枠組み

 

  • ステップ t:
    • エージェントが状態 $s_t$ を観測
    • エージェントが行動 $a_t$ を選択

 

エージェントから環境へ、行動 a_t と書かれた赤い矢印。状態の矢印は黒色。

Pythonで学ぶDeep Reinforcement Learning

RL の枠組み

 

  • ステップ t:
    • エージェントが状態 $s_t$ を観測
    • エージェントが行動 $a_t$ を選択
  • ステップ t+1:
    • 環境が報酬 $r_t$ を与える
    • 状態が $s_{t+1}$ に遷移

 

状態 s_t の矢印が s_{t+1} に更新され赤色に。環境からエージェントへ報酬 r_{t+1} の赤い矢印が追加。行動の矢印は黒色。

Pythonで学ぶDeep Reinforcement Learning

RL の枠組み

 

  • ステップ t:
    • エージェントが状態 $s_t$ を観測
    • エージェントが行動 $a_t$ を選択
  • ステップ t+1:
    • 環境が報酬 $r_t$ を与える
    • 状態が $s_{t+1}$ に遷移
  • エピソードが終了するまで繰り返し

 

前スライドと同じだが、すべての矢印が黒色。

Pythonで学ぶDeep Reinforcement Learning

方策 $\pi(s_t)$

 

  • 状態から行動への写像。状態 $s_t$ での振る舞いを定める

 

  • 決定論的:
    • 選択した行動を返す
  • 確率的:
    • 行動の分布を返す
    • 方策は可能な行動上の確率分布
Pythonで学ぶDeep Reinforcement Learning

軌跡とエピソード収益

 

軌跡 τ: エピソード中の全状態と行動の列。τ = ((s0, a0), (s1, a1), ... (sT, aT))

 

エピソード収益 Rτ: 軌跡 τ に沿って累積した(割引)報酬の合計。Rτ = Σ_t γ^t r_t

Pythonで学ぶDeep Reinforcement Learning

環境のセットアップ

env = gym.make("ALE/SpaceInvaders-v5")

# Define neural network architecture class Network(nn.Module): def __init__(self, dim_inputs, dim_outputs): super(Network, self).__init__() self.linear = nn.Linear(dim_inputs, dim_outputs) def forward(self, x): return self.linear(x)
# Instantiate network network = Network(dim_inputs, dim_outputs)
# Instantiate optimizer optimizer = optim.Adam(network.parameters(), lr=0.0001)
Pythonで学ぶDeep Reinforcement Learning

基本ループ

for episode in range(1000):
  state, info = env.reset()
  done = False

while not done:
action = select_action(network, state)
next_state, reward, terminated, truncated, _ = ( env.step(action)) done = terminated or truncated
loss = calculate_loss(network, state, action, next_state, reward, done) optimizer.zero_grad() loss.backward() optimizer.step()
state = next_state

 

  • 外側ループ: エピソードを反復
  • 内側ループ: ステップを反復
    • 行動を選択
    • 新しい状態と報酬を観測
    • 損失を計算しネットワークを更新
    • 状態を更新
  • (損失とは?)
Pythonで学ぶDeep Reinforcement Learning

この後に続く内容

 

 

  • DRL は強力
  • 価値ベースと方策ベース
  • DQN とその改良
  • 方策勾配法

深層強化学習の秘密を探るため深海に潜る Datacamp 受講者

Pythonで学ぶDeep Reinforcement Learning

練習してみましょう!

Pythonで学ぶDeep Reinforcement Learning

Preparing Video For Download...