##### Copyright 2023 The TF-Agents Authors.
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
RL 和深度 Q 网络简介#
![]() |
![]() |
![]() |
![]() |
简介#
强化学习 (RL) 是一种通用框架,其中代理可以学习在所处的环境中执行操作来使奖励最大化。两个主要组件是环境(代表要解决的问题)和代理(代表学习算法)。
代理与环境持续相互作用。在每个时间步骤,代理都会根据其策略
注:区分环境的 state
和 observation
非常重要,这是代理可以看到的环境 state
部分,例如在扑克游戏中,环境状态由属于所有玩家的纸牌和公共牌组成,但是代理只能观测到自己的纸牌和部分公共牌。在大多数文献中,这些术语可互换使用,观测值也表示为
这是非常通用的框架,可以对游戏、机器人等各种顺序决策问题进行建模。
Cartpole 环境#
Cartpole 环境是最著名的经典强化学习问题之一(RL 的 “Hello, World!”)。一根长杆连接到一个小车上,小车可以沿着无摩擦的轨道移动。长杆开始时是直立的,目标是通过控制小车来防止其倒下。
来自环境
的观测值是一个 4D 向量,表示小车的位置和速度以及长杆的角度和角速度。代理可以通过执行以下两个操作
之一来控制系统:向右 (+1) 或向左 (-1) 推小车。对于长杆保持直立的每个时间步骤,都会提供
奖励。如果满足以下任一条件,则片段结束:长杆超过某个角度限制
小车移出世界边缘
经过 200 个时间步骤。
代理的目标是学习策略
DQN 代理#
DQN(深度 Q 网络)算法由 DeepMind 在 2015 年开发。通过将强化学习和深度神经网络进行大规模组合,它能够通关各种 Atari 游戏(有些甚至达到了超出人类能力的水平)。此算法通过使用深度神经网络和一种称为经验回放的技术来增强经典的 RL 算法(称为 Q-Learning)开发而成。
Q-Learning#
Q-Learning 基于 Q 函数的概念。策略
$\begin{equation}Q^\ast(s, a) = \mathbb{E}[ r + \gamma \max_{a'} Q^\ast(s', a') ]\end{equation}$
这意味着,从状态
Q-Learning 背后的基本思想是使用贝尔曼最优性方程作为迭代更新
深度 Q-Learning#
对于大多数问题,将
此处,
注意,先前迭代
Q-Learning 是一种离策略算法,可在学习贪心策略
经验回放#
为了避免计算 DQN 损失的全期望,我们可以使用随机梯度下降算法将其最小化。如果仅使用最后的转换
Atari DQN 工作引入了一种称为“经验回放”的技术,可使网络更新更加稳定。在数据收集的每个时间步骤,转换都会添加到称为回放缓冲区的循环缓冲区中。然后,在训练过程中,我们不是仅仅使用最新的转换来计算损失及其梯度,而是使用从回放缓冲区中采样的转换的 mini-batch 来计算它们。这样做有两个优点:通过在许多更新中重用每个转换来提高数据效率,以及在批次中使用不相关的转换来提高稳定性。
TF-Agents 中基于 Cartpole 的 DQN#
TF-Agents 提供了训练 DQN 代理所需的全部组件,例如代理本身、环境、策略、网络、回放缓冲区、数据收集循环和指标。这些组件以 Python 函数或 TensorFlow 计算图运算的形式实现,我们还提供用于在它们之间进行转换的包装器。此外,TF-Agents 还支持 TensorFlow 2.0 模式,这样我们便能在命令式模式下使用 TF。