Skip to content

Commit

Permalink
更新
Browse files Browse the repository at this point in the history
  • Loading branch information
johnjim0816 committed Sep 11, 2023
1 parent 61e7851 commit bea24ce
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
53 changes: 50 additions & 3 deletions docs/appendix/main.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ $\qquad$ 答:目的是为了平衡探索和利用的关系。具体来说,$\

3. $\text{DQN}$ 算法为什么要多加一个目标网络?

$\qquad$ 答:目标网络的作用是为了解决动作价值函数的不稳定性问题。目标网络是一个与当前神经网络结构相同的网络,但其参数被固定一段时间。在训练时,使用目标网络来计算目标 $Q$ $Q$值,从而减少当前神经网络参数对目标 $Q$ 值的影响,提高训练稳定性。具体来说,当使用当前神经网络来计算目标 $Q$ 值时,当前神经网络的参数和目标 $Q$ 值的计算都是基于同一批数据的,这可能导致训练过程中出现不稳定的情况。而使用目标网络来计算目标 $Q$ 值时,目标网络的参数是固定的,不会受到当前神经网络的训练过程的影响,因此可以提高训练的稳定性。同时,目标网络的更新也是基于一定的规则进行的。在每个训练步骤中,目标网络的参数被更新为当前网络的参数的加权平均值,其权重由一个超参数$\tau$ 控制。通过这种方式,目标网络的更新过程可以更加平稳,避免了训练过程中出现剧烈的波动,从而提高了训练的效率和稳定性。因此,引入目标网络是 $\text{DQN}$ 算法的一个重要改进,可以显著提高算法的性能和稳定性。
$\qquad$ 答:目标网络的作用是为了解决动作价值函数的不稳定性问题。目标网络是一个与当前神经网络结构相同的网络,但其参数被固定一段时间。在训练时,使用目标网络来计算目标 $Q$ 值,从而减少当前神经网络参数对目标 $Q$ 值的影响,提高训练稳定性。具体来说,当使用当前神经网络来计算目标 $Q$ 值时,当前神经网络的参数和目标 $Q$ 值的计算都是基于同一批数据的,这可能导致训练过程中出现不稳定的情况。而使用目标网络来计算目标 $Q$ 值时,目标网络的参数是固定的,不会受到当前神经网络的训练过程的影响,因此可以提高训练的稳定性。同时,目标网络的更新也是基于一定的规则进行的。在每个训练步骤中,目标网络的参数被更新为当前网络的参数的加权平均值,其权重由一个超参数$\tau$ 控制。通过这种方式,目标网络的更新过程可以更加平稳,避免了训练过程中出现剧烈的波动,从而提高了训练的效率和稳定性。因此,引入目标网络是 $\text{DQN}$ 算法的一个重要改进,可以显著提高算法的性能和稳定性。

4. 经验回放的作用是什么?

Expand All @@ -93,7 +93,7 @@ $\qquad$ 答:经验回放主要作用在于缓解样本相关性和不稳定

1. $\text{DQN}$ 算法为什么会产生 $Q$ 值的过估计问题?

$\qquad$ 答:原因主要有:**数据相关性**:每次更新神经网络时,使用的都是之前采集到的数据,这些数据之间存在相关性。这导致神经网络的训练过程不稳定,可能会导致 $Q$ 值的过估计问题。**最大化操作**:$\text{DQN}$ 算法在更新目标 $Q$ 值时,使用的是当前神经网络在下一个状态下具有最大 $Q$ 值的动作。这种最大化操作可能会导致某些状态和动作的 $Q$ 值被过估计。为了解决这个问题,可以采用一些技术,如 $\text{Double DQN}$ 和 $\text{Dueling DQN}$ 。$\text{Double DQN}$ 通过使用一个神经网络来估计当前状态下各个动作的 $Q$ 值,使用另一个神经网络来计算目标 $Q$ 值,从而减少Q值的过估计问题。$\text{Dueling DQN}$ 则通过将 $Q$ 值分解为状态值和优势值两部分,从而更准确地估计 $Q$ 值,减少 $Q$ 值的过估计问题。这些技术可以有效地减少 $Q$ 值的过估计问题,提高 $\text{DQN}$ 算法的性能。
$\qquad$ 答:原因主要有:**数据相关性**:每次更新神经网络时,使用的都是之前采集到的数据,这些数据之间存在相关性。这导致神经网络的训练过程不稳定,可能会导致 $Q$ 值的过估计问题。**最大化操作**:$\text{DQN}$ 算法在更新目标 $Q$ 值时,使用的是当前神经网络在下一个状态下具有最大 $Q$ 值的动作。这种最大化操作可能会导致某些状态和动作的 $Q$ 值被过估计。为了解决这个问题,可以采用一些技术,如 $\text{Double DQN}$ 和 $\text{Dueling DQN}$ 。$\text{Double DQN}$ 通过使用一个神经网络来估计当前状态下各个动作的 $Q$ 值,使用另一个神经网络来计算目标 $Q$ 值,从而减少Q值的过估计问题。$\text{Dueling DQN}$ 则通过将 $Q$ 值分解为状态值和优势值两部分,从而更准确地估计 $Q$ 值,减少 $Q$ 值的过估计问题。这些技术可以有效地减少 $Q$ 值的过估计问题,提高 $\text{DQN}$ 算法的性能。

2. 同样是提高探索,$\text{Noisy DQN}$ 和 $\varepsilon-\text{greedy}$ 策略 有什么区别?

Expand All @@ -115,4 +115,51 @@ $\qquad$ 答:两者的速度不能一概而论,尽管前者往往会比后

4. 确定性策略与随机性策略的区别?

$\qquad$ 答:对于同一个状态,确定性策略会给出一个明确的、固定的动作,随机性策略则会为每一个可能的动作(legal action)提供一个概率分布。前者在训练中往往需要额外的探索策略,后者则只需要调整动作概率。但前者相对更容易优化,因为不需要考虑所有可能的动作,但也容易受到噪声的影响。后者则相对更加鲁棒,适用面更广,因为很多的实际问题中,我们往往无法得到一个确定的最优策略,而只能得到一个概率分布,尤其是在博弈场景中。
$\qquad$ 答:对于同一个状态,确定性策略会给出一个明确的、固定的动作,随机性策略则会为每一个可能的动作(legal action)提供一个概率分布。前者在训练中往往需要额外的探索策略,后者则只需要调整动作概率。但前者相对更容易优化,因为不需要考虑所有可能的动作,但也容易受到噪声的影响。后者则相对更加鲁棒,适用面更广,因为很多的实际问题中,我们往往无法得到一个确定的最优策略,而只能得到一个概率分布,尤其是在博弈场景中。

### 第 10 章 练习题

1. 相比于 $\text{REINFORCE}$ 算法, $\text{A2C}$ 主要的改进点在哪里,为什么能提高速度?

$\qquad$ 答:改进点主要有:**优势估计**:可以更好地区分好的动作和坏的动作,同时减小优化中的方差,从而提高了梯度的精确性,使得策略更新更有效率;**使用 $\text{Critic}$** : $\text{REINFORCE}$ 通常只使用 $\text{Actor}$ 网络,没有 $\text{Critic}$ 来辅助估计动作的价值,效率更低;**并行化**:即 $\text{A3C}$ ,允许在不同的环境中并行运行多个 $\text{Agent}$,每个 $\text{Agent}$ 收集数据并进行策略更新,这样训练速度也会更快。

2. $\text{A2C}$ 算法是 $\text{on-policy}$ 的吗?为什么?

$\qquad$ 答: $\text{A2C}$ 在原理上是一个 $\text{on-policy}$ 算法,首先它使用当前策略的样本数据来更新策略,然后它的优势估计也依赖于当前策略的动作价值估计,并且使用的也是策略梯度方法进行更新,因此是 $\text{on-policy}$ 的。但它可以被扩展为支持 $\text{off-policy}$ 学习,比如引入经验回放,但注意这可能需要更多的调整,以确保算法的稳定性和性能。

### 第 11 章 练习题

1. $\text{DDPG}$ 算法是 $\text{off-policy}$ 算法吗?为什么?

$\qquad$ 答:跟 $\text{DQN}$ 一样,$\text{DDPG}$ 算法,主要结合了经验回放、目标网络和确定性策略,是典型的 $\text{off-policy}$ 算法。

2. 软更新相比于硬更新的好处是什么?为什么不是所有的算法都用软更新?

$\qquad$ 答:好处:**平滑目标更新**:软更新通过逐渐调整目标网络的参数,使其向主网络的参数靠近,而不是直接复制主网络的参数。这样做可以降低目标的变化幅度,减少了训练中的不稳定性;**降低方差****避免振荡**:软更新可以减少目标网络和主网络之间的振荡,这有助于更稳定地收敛到良好的策略。缺点:**速度**:软更新会使目标网络变得更加缓慢;**探索和稳定性权衡**:一些算法可能更倾向于使用硬更新,因为它们可能需要更频繁地探索新的策略,而不依赖于过去的经验。硬更新允许在每次更新时完全用新策略替代旧策略;**算法需求**:某些算法可能对硬更新更敏感,而且硬更新可能是这些算法的关键组成部分。综上,软更新和硬更新都有其用途,选择哪种方式取决于具体的问题和算法要求。

3. 相比于 $\text{DDPG}$ 算法,$\text{TD3}$ 算法做了哪些改进?请简要归纳。

$\qquad$ 答:**双Q网络**: $\text{TD3}$ 使用了两个独立的 $\text{Q}$ 网络,分别用于估计动作的价值。这两个Q网络有不同的参数,这有助于减少估计误差,并提高了训练的稳定性;**目标策略噪声**:与 $\text{DDPG}$ 不同,$\text{TD3}$ 将噪声添加到目标策略,而不是主策略。这有助于减小动作值的过估计误差;**目标策略平滑化**:$\text{TD3}$ 使用目标策略平滑化技术,通过对目标策略的参数进行软更新来减小目标策略的变化幅度。这有助于提高稳定性和训练的收敛性。**延迟策略更新**:$\text{TD3}$ 引入了延迟策略更新,意味着每隔一定数量的时间步才更新主策略网络。这可以减小策略更新的频率,有助于减少过度优化的风险,提高稳定性。

4. $\text{TD3}$ 算法中 $\text{Critic}$ 的更新频率一般要比 $\text{Actor}$ 是更快还是更慢?为什么?

$\qquad$ 答:$\text{Critic}$ 网络的更新频率要比 $\text{Actor}$ 网络更快,即延迟策略更新。延迟策略更新的目的是减小策略更新的频率,以避免过度优化和提高训练的稳定性。因为 $\text{Critic}$ 网络的更新频率更高,它可以更快地适应环境的变化,提供更准确的动作价值估计,从而帮助 $\text{Actor}$ 网络生成更好的策略。


### 第 12 章 练习题

1. 为什么 $\text{DQN}$ 和 $\text{DDPG}$ 算法不使用重要性采样技巧呢?

$\qquad$ 答:$\text{DQN}$ 和 $\text{DDPG}$ 是 $\text{off-policy}$ 算法,它们通常不需要重要性采样来处理不同策略下的采样数据。相反,它们使用目标网络和优势估计等技巧来提高训练的稳定性和性能。

2. $\text{PPO}$ 算法原理上是 $\text{on-policy}$ 的,但它可以是 $\text{off-policy}$ 的吗,或者说可以用经验回放来提高训练速度吗?为什么?(提示:是可以的,但条件比较严格)

$\qquad$ 答:跟 $\text{A2C}$ 一样,可以将经验回放与 $\text{PPO}$ 结合,创建一个 $\text{PPO with Experience Replay (PPO-ER)}$ 算法。在 $\text{PPO-ER}$ 中,智能体使用经验回放缓冲区中的数据来训练策略网络,这样可以提高训练效率和稳定性。这种方法通常需要调整PPO的损失函数和采样策略,以适应 $\text{off-policy}$ 训练的要求,需要谨慎调整。

3. $\text{PPO}$ 算法更新过程中在将轨迹样本切分个多个小批量的时候,可以将这些样本顺序打乱吗?为什么?

$\qquad$ 答:将轨迹样本切分成多个小批量时,通常是可以将这些样本顺序打乱的,这个过程通常称为样本随机化( $\text{sample shuffling}$ ),这样做的好处有降低样本相关性、减小过拟合风险以及增加训练多样性(更全面地提高探索空间)。

4. 为什么说重要性采样是一种特殊的蒙特卡洛采样?

$\qquad$ 答:原因有:**估计期望值**:蒙特卡洛方法的核心目标之一是估计一个随机变量的期望值。蒙特卡洛采样通过从分布中生成大量的样本,并求取这些样本的平均值来估计期望值。重要性采样也是通过从一个分布中生成样本,但不是均匀地生成样本,而是按照另一个分布的权重生成样本,然后使用这些带权重的样本来估计期望值。**改进采样效率**:重要性采样的主要目的是改进采样效率。当我们有一个难以从中采样的分布时,可以使用重要性采样来重新调整样本的权重,以使估计更准确。这类似于在蒙特卡洛采样中调整样本大小以提高估计的精确性。**权重分布**:在重要性采样中,我们引入了一个额外的权重分布,用于指导采样过程。这个权重分布决定了每个样本的相对贡献,以确保估计是无偏的。在蒙特卡洛采样中,权重通常是均匀分布,而在重要性采样中,权重由分布的比率(要估计的分布和采样分布之间的比例)决定。
25 changes: 25 additions & 0 deletions docs/ch0/main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 前言

## 内容提要

$\qquad$ 继《蘑菇书》之后,我们对于想要更多地深入了解强化学习实践的读者准备了一套全新的教程,全书主要基于笔者“不那么丰富可是也有一点咯”的实践经验,帮助读者快速入门强化学习的代码实践,并辅以一套开源代码框架 $\text{JoyRL}$ ,便于读者适应业界应用研究风格的代码。

$\qquad$ 与《蘑菇书》不同,本教程侧重对强化学习核心理论的提点和串联,以及对于强化学习代码实践的指导,尽可能还原原论文的主要思想,而不是对于理论的详细讲解。因此,《蘑菇书》适合适合细嚼慢咽的读者,而本教程则适合具有一定编程基础且希望快速进入实践应用的读者。

## 前言

$\qquad$ 在前几年,我们 “磨菇书三剑客” 已经在 $\text{Github}$ 上发布过线上教程 $\text{EasyRL}$,并填补了强化学习国内相关资料较少的空缺。特此再次衷心感谢李宏毅、周博磊、李科浇三位老师的授权与开源奉献精神,没有他们的鼓励与无私,就没有能够造福广大强化学习初学者的《蘑菇书》。并且受到广大读者的鼓励,我们在这过程中不断优化教程,以期帮助读者更好、更愉快地入门强化学习。

$\qquad$ 时光荏苒,笔者已在业界深耕一年有余, 对于强化学习实践有了更加深入的认识,并对理论与实践的结合方面也产生了一些小小的心得。与此同时,我们也发现了读者们在从理论转变到实践的过程中似乎存在着一定的鸿沟。一方面,很多已经有人工智能知识基础的读者只是想应用强化学习来做一些其他方面的交叉研究,但由于强化学习理论错综复杂,对于这样的初学者来说很难在短时间内快速把握重点,并容易陷入一些对于实践关系不大的小知识点中。另一方面来讲,也有一些读者很难讲强化学习中的论文公式和实际代码相对应起来,例如策略函数的设计等等,并且对于算法的各种超参数调整也不知从何下手。

$\qquad$ 尽管市面上已经有一些实践教程的书籍了,但这些教程往往又过于偏重实践,忽视了理论与实践之间的把握与平衡。此外,相关的实践内容也往往偏向于一些简单的实验和算法,涵盖的内容也不够全面。鉴于这些现状,笔者希望让读者更加凝练和全面地对强化学习知识有一个更深入的了解,这也是本教程发布的初衷。

$\qquad$ 全书的内容主要基于笔者的理论知识与实践经验累积,并伴有一些原创内容的发散,例如针对策略梯度算法,提供了两种不同的推导版本,以便于让读者从不同的角度更好地理解相关知识。并且在全文中始终贯穿强化学习实践中的一些核心观点,比如优化值的估计、解决探索与利用等问题。全书对于内容结构进行了合理地编排,例如从传统强化学习到深度强化学习过渡的章节中,增加了对于深度学习基础的总结归纳,并对于一些十分泛用的强化学习算法比如 $\text{DQN}$、$\text{DDPG}$ 以及 $\text{PPO}$ 等算法作了强调,读者可择取阅读。除了给出一些简单的配套代码演示之外,笔者还开发了一套 $\text{JoyRL}$ 开源框架,并提供了更多复杂环境的 $\text{Benchmark}$,对于想要深入了解的读者可自行研究。

$\qquad$ 本书由开源组织 $\text{Datawhale}$ 的成员采用开源协作的方式完成,历时一年有余,主要参与者包括编著者(笔者、王琦和杨毅远)。此外,也十分感谢谌蕊(清华大学)、丁立(上海交通大学)、郭事成、孙成超、刘二龙(南京大学)、潘笃驿等同学参与 $\text{JoyRL}$ 开源框架的共建。在本书写作和出版过程中,人民邮电出版社提供了很多出版的专业意见和支持,在此特向信息技术出版社社长陈冀康老师和本书的责任编辑郭媛老师致谢。

$\qquad$ 笔者水平有限,书中难免有疏漏和表述不当之处,还望读者批评指正。




Binary file added words/附录-练习题解答.docx
Binary file not shown.

0 comments on commit bea24ce

Please sign in to comment.