深度强化学习简介

Python 中的深度强化学习

Timothée Carayol

Principal Machine Learning Engineer, Komment

为何使用深度强化学习

 

  • 传统 RL 适用于低维任务

 

 

  • 许多应用具有高维状态和/或动作空间

 

一个智能体探索 Frozen Lake 环境

一个智能体玩经典游戏 Space Invaders

Python 中的深度强化学习

DRL 的要素

 

  1. 强化学习概念
  2. 深度学习与 PyTorch

 

  • DRL 将这些概念与深度神经网络结合

 

像素风厨师混合配料的插图

Python 中的深度强化学习

RL 框架

 

  • 步骤 t:

 

一个大框内含两个小框,标记为"Agent"和"Environment"

Python 中的深度强化学习

RL 框架

 

  • 步骤 t:
    • 智能体观察状态 $s_t$

 

一条标注为状态 s_t 的红色箭头从环境指向智能体。

Python 中的深度强化学习

RL 框架

 

  • 步骤 t:
    • 智能体观察状态 $s_t$
    • 智能体采取动作 $a_t$

 

一条标注为动作 a_t 的红色箭头从智能体指向环境。状态箭头现在为黑色。

Python 中的深度强化学习

RL 框架

 

  • 步骤 t:
    • 智能体观察状态 $s_t$
    • 智能体采取动作 $a_t$
  • 步骤 t+1:
    • 环境给出奖励 $r_t$
    • 状态变为 $s_{t+1}$

 

状态 s_t 箭头更新为状态 s_{t+1},并再次为红色。新增一条标注为奖励 r_{t+1} 的红色箭头从环境指向智能体。动作箭头现在为黑色。

Python 中的深度强化学习

RL 框架

 

  • 步骤 t:
    • 智能体观察状态 $s_t$
    • 智能体采取动作 $a_t$
  • 步骤 t+1:
    • 环境给出奖励 $r_t$
    • 状态变为 $s_{t+1}$
  • 重复直到回合结束

 

与上一页相同,但所有箭头均为黑色。

Python 中的深度强化学习

策略 $\pi(s_t)$

 

  • 从状态到动作的映射,描述智能体在给定状态 $s_t$ 下的行为

 

  • 确定性:
    • 返回所选动作
  • 随机性:
    • 返回动作分布
    • 策略是对可能动作的概率分布
Python 中的深度强化学习

轨迹与回合回报

 

轨迹 tau:一回合中全部状态与动作的序列;tau = ((s0, a0), (s1, a1), ... (sT, aT))

 

回合回报 Rtau:沿轨迹 tau 累积的总(折扣)奖励。Rtau = 对 t 求和,gamma 的 t 次方乘以 r_t

Python 中的深度强化学习

环境设置

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 中的深度强化学习

基本循环

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 中的深度强化学习

接下来

 

 

  • DRL 很强大!
  • 基于价值与基于策略的方法
  • DQN 及其改进
  • 策略梯度方法

一位 Datacamp 学习者潜入深海,探索深度强化学习的奥秘

Python 中的深度强化学习

Vamos praticar!

Python 中的深度强化学习

Preparing Video For Download...