Skip to content

Commit

Permalink
format
Browse files Browse the repository at this point in the history
  • Loading branch information
johnjim0816 committed Aug 14, 2023
1 parent 5824e01 commit e802497
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 15 deletions.
8 changes: 4 additions & 4 deletions docs/ch4/main.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
# 免模型预测

$\qquad$ 本章开始介绍常见的两种免模型预测方法,**蒙特卡洛方法**( $\text{Monte Carlo,MC}$ )和**时序差分方法**($\text{temporal-difference,TD}$)。在讲解这两个方法之前,我们需要铺垫一些重要的概念,有模型($\text{model based}$)与无模型($\text{model free}$),预测($\text{predicton}$)与控制($\text{control}$)。
$\qquad$ 本章开始介绍常见的两种免模型预测方法,**蒙特卡洛方法**( $\text{Monte Carlo,MC}$ )和**时序差分方法**($\text{temporal-difference,TD}$)。在讲解这两个方法之前,我们需要铺垫一些重要的概念,有模型($\text{model based}$)与免模型($\text{model free}$),预测($\text{predicton}$)与控制($\text{control}$)。


## 有模型与免模型

$\qquad$ 在前面的章节中,我们其实默认了一个事实,即状态转移概率是已知的,这种情况下使用的算法称之为**有模型算法**,例如动态规划算法。但大部分情况下对于智能体来说,环境是未知的,这种情况下的算法就称之为**无模型算法**,目前很多经典的强化学习算法都是免模型的。当然近年来出现了一些新的强化学习算法,例如 $\text{PlaNet}$、$\text{Dreamer}$ 和 $\text{World Models}$ 等。这些算法利用了神经网络和其他机器学习方法建立一个近似的环境模型,并使用规划和强化学习的方法进行决策,这些算法也都称为有模型算法。
$\qquad$ 在前面的章节中,我们其实默认了一个事实,即状态转移概率是已知的,这种情况下使用的算法称之为**有模型算法**,例如动态规划算法。但大部分情况下对于智能体来说,环境是未知的,这种情况下的算法就称之为**免模型算法**,目前很多经典的强化学习算法都是免模型的。当然近年来出现了一些新的强化学习算法,例如 $\text{PlaNet}$、$\text{Dreamer}$ 和 $\text{World Models}$ 等。这些算法利用了神经网络和其他机器学习方法建立一个近似的环境模型,并使用规划和强化学习的方法进行决策,这些算法也都称为有模型算法。

$\qquad$ 具体说来,有模型强化学习尝试先学习一个环境模型,它可以是环境的动态(例如,给定一个状态和一个动作,预测下一个状态)或奖励(给定一个状态和一个动作,预测奖励),即前面小节所讲的状态转移概率和奖励函数。一旦有了这个环境模型,智能体可以使用它来计划最佳的行动策略,例如通过模拟可能的未来状态来预测哪个动作会导致最大的累积奖励。它的优点很明显,即可以在不与真实环境交互的情况下进行学习,因此可以节省实验的成本。但缺点是,这种模型往往是不完美的,或者是复杂到难以学习和计算。

$\qquad$ 而无模型则直接学习在特定状态下执行特定动作的价值或优化策略。它直接从与环境的交互中学习,不需要建立任何预测环境动态的模型。其优点是不需要学习可能是较为复杂的环境模型,更加简单直接,但是缺点是在学习过程中需要与真实环境进行大量的交互。注意,除了动态规划之外,基础的强化学习算法都是无模型的
$\qquad$ 而免模型则直接学习在特定状态下执行特定动作的价值或优化策略。它直接从与环境的交互中学习,不需要建立任何预测环境动态的模型。其优点是不需要学习可能是较为复杂的环境模型,更加简单直接,但是缺点是在学习过程中需要与真实环境进行大量的交互。注意,除了动态规划之外,基础的强化学习算法都是免模型的

## 预测与控制

$\qquad$ 前面提到很多经典的强化学习算法都是免模型的,换句话说在这种情况下环境的状态转移概率是未知的,这种情况下会去近似环境的状态价值函数,这其实跟状态转移概率是等价的,我们把这个过程称为**预测**。换句话说,预测的主要目的是估计或计算环境中的某种期望值,比如状态价值函数 $V(s)$ 或动作价值函数 $Q(s,a)$。例如,我们正在玩一个游戏,并想知道如果按照某种策略玩游戏,我们的预期得分会是多少。

$\qquad$ 而控制的目标则是找到一个最优策略,该策略可以最大化期望的回报。换句话说,你不仅想知道按照某种策略你的预期得分是多少,还想知道如何选择动作以最大化这个得分。控制问题通常涉及两个相互交替的步骤:策略评估(使用当前策略估计值函数)和策略改进(基于当前的值函数更新策略)。

$\qquad$ 在实际应用中,预测和控制问题经常交织在一起。例如,在使用 $\text{Q-learning}$(一种无模型的控制算法)时,我们同时进行预测(更新 $Q$ 值)和控制(基于$Q$ 值选择动作)。之所以提到这两个概念,是因为很多时候我们不能一蹴而就解决好控制问题,而需要先解决预测问题,进而解决控制问题。
$\qquad$ 在实际应用中,预测和控制问题经常交织在一起。例如,在使用 $\text{Q-learning}$(一种免模型的控制算法)时,我们同时进行预测(更新 $Q$ 值)和控制(基于$Q$ 值选择动作)。之所以提到这两个概念,是因为很多时候我们不能一蹴而就解决好控制问题,而需要先解决预测问题,进而解决控制问题。

## 蒙特卡洛估计

Expand Down
23 changes: 12 additions & 11 deletions docs/ch7/main.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,43 @@
# DQN 算法

本章开始进入深度强化学习的部分,我们首先从 $\text{DQN}$ 算法开始讲起。$\text{DQN}$ 算法,英文全称 $\text{Deep Q-Network}$ , 顾名思义就是基于深度网络模型的 $\text{Q-learning}$ 算法,主要由 $\text{DeepMind}$ 公司于 $\text{2013}$ 年<sup>①</sup>和 $\text{2015}$ 年<sup>②</sup>分别提出的两篇论文来实现。除了用深度网络代替 $Q$ 之外,$\text{DQN}$ 算法还引入了两个技巧,即经验回放和目标网络,我们将逐一介绍。
$\qquad$ 本章开始进入深度强化学习的部分,我们首先从 $\text{DQN}$ 算法开始讲起。$\text{DQN}$ 算法,英文全称 $\text{Deep Q-Network}$ , 顾名思义就是基于深度网络模型的 $\text{Q-learning}$ 算法,主要由 $\text{DeepMind}$ 公司于 $\text{2013}$ 年<sup>①</sup>和 $\text{2015}$ 年<sup>②</sup>分别提出的两篇论文来实现。除了用深度网络代替 $Q$ 之外,$\text{DQN}$ 算法还引入了两个技巧,即经验回放和目标网络,我们将逐一介绍。其实,$\text{DQN}$ 算法相对于 $\text{Q-learning}$ 算法来说更新方法本质上是一样的,而 $\text{DQN}$ 算法最重要的贡献之一就是,用神经网络替换表格的形式来近似动作价值函数$Q(\boldsymbol{s},\boldsymbol{a})$

$\text{DQN}$ 算法相对于 $\text{Q-learning}$ 算法来说更新方法本质上是一样的,而 $\text{DQN}$ 算法最重要的贡献之一就是本章节开头讲的,用神经网络替换表格的形式来近似动作价值函数$Q(\boldsymbol{s},\boldsymbol{a})$。
> ① Mnih V , Kavukcuoglu K , Silver D ,et al.Playing Atari with Deep Reinforcement Learning[J].Computer Science, 2013.DOI:10.48550/arXiv.1312.5602.
> ① 《Playing Atari with Deep Reinforcement Learning》
> ② 《Human-level Control through Deep Reinforcement Learning》
> ② Human-level control through deep reinforcement learning[J].Nature, 2015.
## 深度网络

在 $\text{Q-learning}$ 算法中,我们使用 $Q$ 表的形式来实现动作价值函数 $Q(\boldsymbol{s},\boldsymbol{a})$。但是用 $Q$ 表只适用于状态和动作空间都是离散的,并且不利于处理高维的情况,因为在高维状态空间下每次更新维护 $Q$ 表的计算成本会高得多。因此,在 $\text{DQN}$ 算法中,使用深度神经网络的形式来更新 $Q$ 值,这样做的好处就是能够处理高维的状态空间,并且也能处理连续的状态空间。
$\qquad$ 在 $\text{Q-learning}$ 算法中,我们使用 $Q$ 表的形式来实现动作价值函数 $Q(\boldsymbol{s},\boldsymbol{a})$。但是用 $Q$ 表只适用于状态和动作空间都是离散的,并且不利于处理高维的情况,因为在高维状态空间下每次更新维护 $Q$ 表的计算成本会高得多。因此,在 $\text{DQN}$ 算法中,使用深度神经网络的形式来更新 $Q$ 值,这样做的好处就是能够处理高维的状态空间,并且也能处理连续的状态空间。

如图 $\text{7.1}$ 所示,在 $\text{DQN}$ 的网络模型中,我们将当前状态 $s_t$ 作为输入,并输出动作空间中所有动作(假设这里只有两个动作,即1和2)对应的 $Q$ 值,我们记做 $Q(s_t,\boldsymbol{a})$ 。对于其他状态,该网络模型同样可以输出所有动作对应的价值,这样一来神经网络近似的动作价值函数可以表示为 $Q_{\theta}(\boldsymbol{s},\boldsymbol{a})$ 。其中 $\theta$ 就是神经网络模型的参数,可以结合梯度下降的方法求解。
$\qquad$ 如图 $\text{7-1}$ 所示,在 $\text{DQN}$ 的网络模型中,我们将当前状态 $s_t$ 作为输入,并输出动作空间中所有动作(假设这里只有两个动作,即1和2)对应的 $Q$ 值,我们记做 $Q(s_t,\boldsymbol{a})$ 。对于其他状态,该网络模型同样可以输出所有动作对应的价值,这样一来神经网络近似的动作价值函数可以表示为 $Q_{\theta}(\boldsymbol{s},\boldsymbol{a})$ 。其中 $\theta$ 就是神经网络模型的参数,可以结合梯度下降的方法求解。

<div align=center>
<img width="600" src="../figs/ch7/dqn_network.png"/>
</div>
<div align=center>图 $\text{7.1}$ $\text{DQN}$ 网络结构</div>
<div align=center>图 $\text{7-1}$ $\text{DQN}$ 网络结构</div>

具体该怎么结合梯度下降来更新 $Q$ 函数的参数呢?我们首先回顾一下 $\text{Q-learning}$ 算法的更新公式如式 $\text(7.1)$ 所示
$\qquad$ 具体该怎么结合梯度下降来更新 $Q$ 函数的参数呢?我们首先回顾一下 $\text{Q-learning}$ 算法的更新公式,如式 $\text(7.1)$ 所示

$$
\tag{7.1}
Q(s_t,a_t) \leftarrow Q(s_t,a_t)+\alpha[r_t+\gamma\max _{a}Q^{\prime}(s_{t+1},a)-Q(s_t,a_t)]
$$

我们注意到公式右边两项 $r_t+\gamma\max _{a}Q^{\prime}(s_{t+1},a)$ 和 $Q(s_t,a_t)$ 分别表示期望的 $Q$ 值和实际的 $Q$ 值,其中预测的 $Q$ 值是用目标网络中下一个状态对应$Q$值的最大值来近似的。换句话说,在更新 $Q$ 值并达到收敛的过程中,期望的 $Q$ 值也应该接近实际的 $Q$ 值,即我们希望最小化 $r_t+\gamma\max _{a}Q(s_{t+1},a)$ 和 $Q(s_t,a_t)$ 之间的损失,其中 $\alpha$ 是学习率,尽管优化参数的公式跟深度学习中梯度下降法优化参数的公式有一些区别(比如增加了 $\gamma$ 和 $r_t$ 等参数)。从这个角度上来看,强化学习跟深度学习的训练方式其实是一样的,不同的地方在于强化学习用于训练的样本(包括状态、动作和奖励等等)是与环境实时交互得到的,而深度学习则是事先准备好的训练集。当然训练方式类似并不代表强化学习和深度学习之间的区别就很小,本质上来说强化学习和深度学习解决的问题是完全不同的,前者用于解决序列决策问题,后者用于解决静态问题例如回归、分类、识别等等。在 $\text{Q-learning}$ 算法中,我们是直接优化 $Q$ 值的,而在 DQN 中使用神经网络来近似 $Q$ 函数,我们则需要优化网络模型对应的参数 $\theta$ ,如下:
$\qquad$ 我们注意到公式右边两项 $r_t+\gamma\max _{a}Q^{\prime}(s_{t+1},a)$ 和 $Q(s_t,a_t)$ 分别表示期望的 $Q$ 值和实际的 $Q$ 值,其中预测的 $Q$ 值是用目标网络中下一个状态对应$Q$值的最大值来近似的。换句话说,在更新 $Q$ 值并达到收敛的过程中,期望的 $Q$ 值也应该接近实际的 $Q$ 值,即我们希望最小化 $r_t+\gamma\max _{a}Q(s_{t+1},a)$ 和 $Q(s_t,a_t)$ 之间的损失,其中 $\alpha$ 是学习率,尽管优化参数的公式跟深度学习中梯度下降法优化参数的公式有一些区别(比如增加了 $\gamma$ 和 $r_t$ 等参数)。

$\qquad$ 从这个角度上来看,强化学习跟深度学习的训练方式其实是一样的,不同的地方在于强化学习用于训练的样本(包括状态、动作和奖励等等)是与环境实时交互得到的,而深度学习则是事先准备好的训练集。当然训练方式类似并不代表强化学习和深度学习之间的区别就很小,本质上来说强化学习和深度学习解决的问题是完全不同的,前者用于解决序列决策问题,后者用于解决静态问题例如回归、分类、识别等等。在 $\text{Q-learning}$ 算法中,我们是直接优化 $Q$ 值的,而在 DQN 中使用神经网络来近似 $Q$ 函数,我们则需要优化网络模型对应的参数 $\theta$ ,如式 $\text(7.2)$ 所示。

$$
\tag{7.2}
\begin{split}
y_{i}= \begin{cases}r_{i} & \text {对于终止状态} s_{i} \\ r_{i}+\gamma \max _{a^{\prime}} Q\left(s_{i+1}, a^{\prime} ; \theta\right) & \text {对于非终止状态} s_{i}\end{cases}\\
L(\theta)=\left(y_{i}-Q\left(s_{i}, a_{i} ; \theta\right)\right)^{2}\\
\theta_i \leftarrow \theta_i - \alpha \nabla_{\theta_{i}} L_{i}\left(\theta_{i}\right)\\
\end{split}
$$

这里 $\text{DQN}$ 算法也是基于 $\text{TD}$ 更新的,因此依然需要判断终止状态,在 $\text{Q-learning}$ 算法中也有同样的操作。
$\qquad$ 这里 $\text{DQN}$ 算法也是基于 $\text{TD}$ 更新的,因此依然需要判断终止状态,在 $\text{Q-learning}$ 算法中也有同样的操作。

## 经验回放

Expand Down
Binary file modified words/第4章 免模型预测.docx
Binary file not shown.

0 comments on commit e802497

Please sign in to comment.