Merge branch 'master' of github.com:datawhalechina/easy-rl
@@ -54,6 +54,13 @@ PDF版本是全书初稿,人民邮电出版社的编辑老师们对初稿进
|
||||
|
||||
<center class="half"><img src="https://raw.githubusercontent.com/datawhalechina/easy-rl/master/docs/res/yanggao.png" width="680"></center>
|
||||
|
||||
## 相关视频内容
|
||||
|
||||
* [《Datawhale强化学习教程》出版](https://www.bilibili.com/video/BV1rb4y1x7Zd/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
* [蘑菇书起源与RL入门指南](https://www.bilibili.com/video/BV1HZ4y1v7eX/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
* [蘑菇书开源组队学习活动](https://www.bilibili.com/video/BV1Ha41197Pg/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
* [蘑菇书开源学习与成长](https://www.bilibili.com/video/BV1xW4y1B72o/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
|
||||
## 内容导航
|
||||
|
||||
| 章节 | 习题 | 相关项目 |
|
||||
@@ -66,7 +73,7 @@ PDF版本是全书初稿,人民邮电出版社的编辑老师们对初稿进
|
||||
| [第六章 DQN (基本概念)](https://datawhalechina.github.io/easy-rl/#/chapter6/chapter6) | [第六章 习题](https://datawhalechina.github.io/easy-rl/#/chapter6/chapter6_questions&keywords) | |
|
||||
| [第七章 DQN (进阶技巧)](https://datawhalechina.github.io/easy-rl/#/chapter7/chapter7) | [第七章 习题](https://datawhalechina.github.io/easy-rl/#/chapter7/chapter7_questions&keywords) | [DQN算法实战](https://datawhalechina.github.io/easy-rl/#/chapter7/project2) |
|
||||
| [第八章 DQN (连续动作)](https://datawhalechina.github.io/easy-rl/#/chapter8/chapter8) | [第八章 习题](https://datawhalechina.github.io/easy-rl/#/chapter8/chapter8_questions&keywords) | |
|
||||
| [第九章 演员-评论家算法](https://datawhalechina.github.io/easy-rl/#/chapter9/chapter9) | [第九章 习题](https://datawhalechina.github.io/easy-rl/#/chapter9/chapter9_questions&keywords) | |
|
||||
| [第九章 演员-评论员算法](https://datawhalechina.github.io/easy-rl/#/chapter9/chapter9) | [第九章 习题](https://datawhalechina.github.io/easy-rl/#/chapter9/chapter9_questions&keywords) | |
|
||||
| [第十章 稀疏奖励](https://datawhalechina.github.io/easy-rl/#/chapter10/chapter10) | [第十章 习题](https://datawhalechina.github.io/easy-rl/#/chapter10/chapter10_questions&keywords) | |
|
||||
| [第十一章 模仿学习](https://datawhalechina.github.io/easy-rl/#/chapter11/chapter11) | [第十一章 习题](https://datawhalechina.github.io/easy-rl/#/chapter11/chapter11_questions&keywords) | |
|
||||
| [第十二章 深度确定性策略梯度 (DDPG) 算法](https://datawhalechina.github.io/easy-rl/#/chapter12/chapter12) | [第十二章 习题](https://datawhalechina.github.io/easy-rl/#/chapter12/chapter12_questions&keywords) | [DDPG算法实战](https://datawhalechina.github.io/easy-rl/#/chapter12/project3) |
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
- [项目二 使用 DQN 实现 CartPole-v0](chapter7/project2)
|
||||
- [第八章 DQN (连续动作)](chapter8/chapter8)
|
||||
- [第八章 习题](chapter8/chapter8_questions&keywords)
|
||||
- [第九章 演员-评论家算法](chapter9/chapter9)
|
||||
- [第九章 演员-评论员算法](chapter9/chapter9)
|
||||
- [第九章 习题](chapter9/chapter9_questions&keywords)
|
||||
- [第十章 稀疏奖励](chapter10/chapter10)
|
||||
- [第十章 习题](chapter10/chapter10_questions&keywords)
|
||||
|
||||
@@ -1,113 +1,123 @@
|
||||
# Chapter1 强化学习概述
|
||||
# 第一章 强化学习基础
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **强化学习(Reinforcement Learning)**:Agent可以在与复杂且不确定的Environment进行交互时,尝试使所获得的Reward最大化的计算算法。
|
||||
- **Action**: Environment接收到的Agent当前状态的输出。
|
||||
- **State**:Agent从Environment中获取到的状态。
|
||||
- **Reward**:Agent从Environment中获取的反馈信号,这个信号指定了Agent在某一步采取了某个策略以后是否得到奖励。
|
||||
- **Exploration**:在当前的情况下,继续尝试**新的**Action,其有可能会使你得到更高的这个奖励,也有可能使你一无所有。
|
||||
- **Exploitation**:在当前的情况下,继续尝试**已知的**可以获得最大Reward的过程,即重复执行这个 Action 就可以了。
|
||||
- **深度强化学习(Deep Reinforcement Learning)**:不需要手工设计特征,仅需要输入State让系统直接输出Action的一个end-to-end training的强化学习方法。通常使用神经网络来拟合 value function 或者 policy network。
|
||||
- **Full observability、fully observed和partially observed**:当Agent的状态跟Environment的状态等价的时候,我们就说现在Environment是full observability(全部可观测),当Agent能够观察到Environment的所有状态时,我们称这个环境是fully observed(完全可观测)。一般我们的Agent不能观察到Environment的所有状态时,我们称这个环境是partially observed(部分可观测)。
|
||||
- **POMDP(Partially Observable Markov Decision Processes)**:部分可观测马尔可夫决策过程,即马尔可夫决策过程的泛化。POMDP 依然具有马尔可夫性质,但是假设智能体无法感知环境的状态 $s$,只能知道部分观测值 $o$。
|
||||
- **Action space(discrete action spaces and continuous action spaces)**:在给定的Environment中,有效动作的集合经常被称为动作空间(Action space),Agent的动作数量是有限的动作空间为离散动作空间(discrete action spaces),反之,称为连续动作空间(continuous action spaces)。
|
||||
- **policy-based(基于策略的)**:Agent会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。
|
||||
- **valued-based(基于价值的)**:Agent不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。
|
||||
- **model-based(有模型结构)**:Agent通过学习状态的转移来采取措施。
|
||||
- **model-free(无模型结构)**:Agent没有去直接估计状态的转移,也没有得到Environment的具体转移变量。它通过学习 value function 和 policy function 进行决策。
|
||||
- **强化学习(reinforcement learning,RL)**:智能体可以在与复杂且不确定的环境进行交互时,尝试使所获得的奖励最大化的算法。
|
||||
|
||||
## 2 Questions
|
||||
- **动作(action)**: 环境接收到的智能体基于当前状态的输出。
|
||||
|
||||
- 强化学习的基本结构是什么?
|
||||
- **状态(state)**:智能体从环境中获取的状态。
|
||||
|
||||
答:本质上是Agent和Environment间的交互。具体地,当Agent在Environment中得到当前时刻的State,Agent会基于此状态输出一个Action。然后这个Action会加入到Environment中去并输出下一个State和当前的这个Action得到的Reward。Agent在Environment里面存在的目的就是为了极大它的期望积累的Reward。
|
||||
- **奖励(reward)**:智能体从环境中获取的反馈信号,这个信号指定了智能体在某一步采取了某个策略以后是否得到奖励,以及奖励的大小。
|
||||
|
||||
- 强化学习相对于监督学习为什么训练会更加困难?(强化学习的特征)
|
||||
- **探索(exploration)**:在当前的情况下,继续尝试新的动作。其有可能得到更高的奖励,也有可能一无所有。
|
||||
|
||||
答:
|
||||
- **开发(exploitation)**:在当前的情况下,继续尝试已知的可以获得最大奖励的过程,即选择重复执行当前动作。
|
||||
|
||||
1. 强化学习处理的多是序列数据,其很难像监督学习的样本一样满足**IID(独立同分布)**条件。
|
||||
- **深度强化学习(deep reinforcement learning)**:不需要手动设计特征,仅需要输入状态就可以让系统直接输出动作的一个端到端(end-to-end)的强化学习方法。通常使用神经网络来拟合价值函数(value function)或者策略网络(policy network)。
|
||||
|
||||
2. 强化学习有奖励的延迟(Delay Reward),即在Agent的action作用在Environment中时,Environment对于Agent的State的**奖励的延迟**(Delayed Reward),使得反馈不及时。
|
||||
3. 相比于监督学习有正确的label,可以通过其修正自己的预测,强化学习相当于一个“试错”的过程,其完全根据Environment的“**反馈**”更新对自己最有利的Action。
|
||||
- **全部可观测(full observability)、完全可观测(fully observed)和部分可观测(partially observed)**:当智能体的状态与环境的状态等价时,我们就称这个环境是全部可观测的;当智能体能够观察到环境的所有状态时,我们称这个环境是完全可观测的;一般智能体不能观察到环境的所有状态时,我们称这个环境是部分可观测的。
|
||||
|
||||
- 强化学习的基本特征有哪些?
|
||||
- **部分可观测马尔可夫决策过程(partially observable Markov decision process,POMDP)**:即马尔可夫决策过程的泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质,但是其假设智能体无法感知环境的状态,只能知道部分观测值。
|
||||
|
||||
答:
|
||||
- **动作空间(action space)、离散动作空间(discrete action space)和连续动作空间(continuous action space)**:在给定的环境中,有效动作的集合被称为动作空间,智能体的动作数量有限的动作空间称为离散动作空间,反之,则被称为连续动作空间。
|
||||
|
||||
1. 有**trial-and-error exploration**的过程,即需要通过探索Environment来获取对这个Environment的理解。
|
||||
2. 强化学习的Agent会从Environment里面获得**延迟**的Reward。
|
||||
3. 强化学习的训练过程中**时间**非常重要,因为数据都是有时间关联的,而不是像监督学习一样是IID分布的。
|
||||
4. 强化学习中Agent的Action会**影响**它随后得到的**反馈**。
|
||||
- **基于策略的(policy-based)**:智能体会制定一套动作策略,即确定在给定状态下需要采取何种动作,并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。
|
||||
|
||||
- 近几年强化学习发展迅速的原因?
|
||||
- **基于价值的(valued-based)**:智能体不需要制定显式的策略,它维护一个价值表格或者价值函数,并通过这个价值表格或价值函数来执行使得价值最大化的动作。
|
||||
|
||||
答:
|
||||
- **有模型(model-based)结构**:智能体通过学习状态的转移来进行决策。
|
||||
|
||||
1. **算力(GPU、TPU)的提升**,我们可以更快地做更多的 trial-and-error 的尝试来使得Agent在Environment里面获得很多信息,取得更大的Reward。
|
||||
- **免模型(model-free)结构**:智能体没有直接估计状态的转移,也没有得到环境的具体转移变量,它通过学习价值函数或者策略网络进行决策。
|
||||
|
||||
2. 我们有了深度强化学习这样一个端到端的训练方法,可以把特征提取和价值估计或者决策一起优化,这样就可以得到一个更强的决策网络。
|
||||
|
||||
- 状态和观测有什么关系?
|
||||
## 习题
|
||||
|
||||
答:状态(state)是对世界的**完整描述**,不会隐藏世界的信息。观测(observation)是对状态的**部分描述**,可能会遗漏一些信息。在深度强化学习中,我们几乎总是用一个实值向量、矩阵或者更高阶的张量来表示状态和观测。
|
||||
**1-1** 强化学习的基本结构是什么?
|
||||
|
||||
- 对于一个强化学习 Agent,它由什么组成?
|
||||
本质上是智能体与环境的交互。具体地,当智能体在环境中得到当前时刻的状态后,其会基于此状态输出一个动作,这个动作会在环境中被执行并输出下一个状态和当前的这个动作得到的奖励。智能体在环境里存在的目标是最大化期望累积奖励。
|
||||
|
||||
答:
|
||||
**1-2** 强化学习相对于监督学习为什么训练过程会更加困难?
|
||||
|
||||
1. **策略函数(policy function)**,Agent会用这个函数来选取它下一步的动作,包括**随机性策略(stochastic policy)**和**确定性策略(deterministic policy)**。
|
||||
|
||||
2. **价值函数(value function)**,我们用价值函数来对当前状态进行评估,即进入现在的状态,到底可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。
|
||||
|
||||
3. **模型(model)**,其表示了 Agent 对这个Environment的状态进行的理解,它决定了这个系统是如何进行的。
|
||||
|
||||
- 根据强化学习 Agent 的不同,我们可以将其分为哪几类?
|
||||
|
||||
答:
|
||||
|
||||
1. **基于价值函数的Agent**。 显式学习的就是价值函数,隐式的学习了它的策略。因为这个策略是从我们学到的价值函数里面推算出来的。
|
||||
2. **基于策略的Agent**。它直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。然后在这个 policy-based agent 里面并没有去学习它的价值函数。
|
||||
3. 然后另外还有一种 Agent 是把这两者结合。把 value-based 和 policy-based 结合起来就有了 **Actor-Critic agent**。这一类 Agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个更佳的状态。
|
||||
|
||||
- 基于策略迭代和基于价值迭代的强化学习方法有什么区别?
|
||||
|
||||
答:
|
||||
(1)强化学习处理的大多是序列数据,其很难像监督学习的样本一样满足独立同分布条件。
|
||||
|
||||
1. 基于策略迭代的强化学习方法,agent会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励;基于价值迭代的强化学习方法,agent不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。
|
||||
2. 基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作);
|
||||
3. 基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等,而基于策略迭代的强化学习算法有策略梯度算法等。
|
||||
4. 此外, Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
|
||||
(2)强化学习有奖励的延迟,即智能体的动作作用在环境中时,环境对于智能体状态的奖励存在延迟,使得反馈不实时。
|
||||
|
||||
(3)监督学习有正确的标签,模型可以通过标签修正自己的预测来更新模型,而强化学习相当于一个“试错”的过程,其完全根据环境的“反馈”更新对自己最有利的动作。
|
||||
|
||||
- 有模型(model-based)学习和免模型(model-free)学习有什么区别?
|
||||
**1-3** 强化学习的基本特征有哪些?
|
||||
|
||||
答:针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。
|
||||
有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。总的来说,有模型学习相比于免模型学习仅仅多出一个步骤,即对真实环境进行建模。免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。免模型学习的泛化性要优于有模型学习,原因是有模型学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。
|
||||
|
||||
- 强化学习的通俗理解
|
||||
|
||||
答:environment 跟 reward function 不是我们可以控制的,environment 跟 reward function 是在开始学习之前,就已经事先给定的。我们唯一能做的事情是调整 actor 里面的 policy,使得 actor 可以得到最大的 reward。Actor 里面会有一个 policy, 这个 policy 决定了actor 的行为。Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。
|
||||
(1)有试错探索过程,即需要通过探索环境来获取对当前环境的理解。
|
||||
|
||||
## 3 Something About Interview
|
||||
(2)强化学习中的智能体会从环境中获得延迟奖励。
|
||||
|
||||
(3)强化学习的训练过程中时间非常重要,因为数据都是时间关联的,而不是像监督学习中的数据大部分是满足独立同分布的。
|
||||
|
||||
(4)强化学习中智能体的动作会影响它从环境中得到的反馈。
|
||||
|
||||
- 高冷的面试官: 看来你对于RL还是有一定了解的,那么可以用一句话谈一下你对于强化学习的认识吗?
|
||||
**1-4** 近几年强化学习发展迅速的原因有哪些?
|
||||
|
||||
答: 强化学习包含环境,动作和奖励三部分,其本质是agent通过与环境的交互,使得其作出的action所得到的决策得到的总的奖励达到最大,或者说是期望最大。
|
||||
(1)算力的提升使我们可以更快地通过试错等方法来使得智能体在环境里面获得更多的信息,从而取得更大的奖励。
|
||||
|
||||
(2)我们有了深度强化学习这样一个端到端的训练方法,可以把特征提取、价值估计以及决策部分一起优化,这样就可以得到一个更强的决策网络。
|
||||
|
||||
- 高冷的面试官: 你认为强化学习与监督学习和无监督学习有什么区别?
|
||||
**1-5** 状态和观测有什么关系?
|
||||
|
||||
答: 首先强化学习和无监督学习是不需要标签的,而监督学习需要许多有标签的样本来进行模型的构建;对于强化学习与无监督学习,无监督学习是直接对于给定的数据进行建模,寻找数据(特征)给定的隐藏的结构,一般对应的聚类问题,而强化学习需要通过延迟奖励学习策略来得到"模型"对于正确目标的远近(通过奖励惩罚函数进行判断),这里我们可以将奖励惩罚函数视为正确目标的一个稀疏、延迟形式。另外强化学习处理的多是序列数据,样本之间通常具有强相关性,但其很难像监督学习的样本一样满足IID条件。
|
||||
状态是对环境的完整描述,不会隐藏环境信息。观测是对状态的部分描述,可能会遗漏一些信息。在深度强化学习中,我们几乎总是用同一个实值向量、矩阵或者更高阶的张量来表示状态和观测。
|
||||
|
||||
- 高冷的面试官: 根据你上面介绍的内容,你认为强化学习的使用场景有哪些呢?
|
||||
**1-6** 一个强化学习智能体由什么组成?
|
||||
|
||||
答: 七个字的话就是多序列决策问题。或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题并且当前的动作会影响环境的状态,即服从马尔可夫性的问题。同时应满足所有状态是可重复到达的(满足可学习型的)。
|
||||
(1)策略函数,智能体会用策略函数来选取它下一步的动作,策略包括随机性策略和确定性策略。
|
||||
|
||||
(2)价值函数,我们用价值函数来对当前状态进行评估,即进入现在的状态可以对后面的奖励带来多大的影响。价值函数的值越大,说明进入该状态越有利。
|
||||
|
||||
(3)模型,其表示智能体对当前环境状态的理解,它决定系统是如何运行的。
|
||||
|
||||
- 高冷的面试官: 强化学习中所谓的损失函数与DL中的损失函数有什么区别呀?
|
||||
**1-7** 根据强化学习智能体的不同,我们可以将其分为哪几类?
|
||||
|
||||
答: DL中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是是奖励和的期望最大。
|
||||
(1)基于价值的智能体。显式学习的是价值函数,隐式地学习智能体的策略。因为这个策略是从学到的价值函数里面推算出来的。
|
||||
|
||||
- 高冷的面试官: 你了解model-free和model-based吗?两者有什么区别呢?
|
||||
(2)基于策略的智能体。其直接学习策略,即直接给智能体一个状态,它就会输出对应动作的概率。当然在基于策略的智能体里面并没有去学习智能体的价值函数。
|
||||
|
||||
(3)另外还有一种智能体,它把以上两者结合。把基于价值和基于策略的智能体结合起来就有了演员-评论员智能体。这一类智能体通过学习策略函数和价值函数以及两者的交互得到更佳的状态。
|
||||
|
||||
答: 两者的区别主要在于是否需要对于真实的环境进行建模, model-free不需要对于环境进行建模,直接与真实环境进行交互即可,所以其通常需要较大的数据或者采样工作来优化策略,这也帮助model-free对于真实环境具有更好的泛化性能; 而model-based 需要对于环境进行建模,同时再真实环境与虚拟环境中进行学习,如果建模的环境与真实环境的差异较大,那么会限制其泛化性能。现在通常使用model-free进行模型的构建工作。
|
||||
**1-8** 基于策略迭代和基于价值迭代的强化学习方法有什么区别?
|
||||
|
||||
(1)基于策略迭代的强化学习方法,智能体会制定一套动作策略,即确定在给定状态下需要采取何种动作,并根据该策略进行操作。强化学习算法直接对策略进行优化,使得制定的策略能够获得最大的奖励;基于价值迭代的强化学习方法,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。
|
||||
|
||||
(2)基于价值迭代的方法只能应用在离散的环境下,例如围棋或某些游戏领域,对于行为集合规模庞大或是动作连续的场景,如机器人控制领域,其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。
|
||||
|
||||
(3)基于价值迭代的强化学习算法有 Q-learning、Sarsa 等,基于策略迭代的强化学习算法有策略梯度算法等。
|
||||
|
||||
(4)此外,演员-评论员算法同时使用策略和价值评估来做出决策。其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,从而取得更好的效果。
|
||||
|
||||
**1-9** 有模型学习和免模型学习有什么区别?
|
||||
|
||||
针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。总体来说,有模型学习相比免模型学习仅仅多出一个步骤,即对真实环境进行建模。免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。免模型学习的泛化性要优于有模型学习,原因是有模型学习需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。
|
||||
|
||||
**1-10** 如何通俗理解强化学习?
|
||||
|
||||
环境和奖励函数不是我们可以控制的,两者是在开始学习之前就已经事先确定的。我们唯一能做的事情是调整策略,使得智能体可以在环境中得到最大的奖励。另外,策略决定了智能体的行为,策略就是给一个外界的输入,然后它会输出现在应该要执行的动作。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**1-1** 友善的面试官: 看来你对于强化学习还是有一定了解的呀,那么可以用一句话谈一下你对于强化学习的认识吗?
|
||||
|
||||
强化学习包含环境、动作和奖励3部分,其本质是智能体通过与环境的交互,使其做出的动作对应的决策得到的总奖励最大,或者说是期望最大。
|
||||
|
||||
**1-2** 友善的面试官: 请问,你认为强化学习、监督学习和无监督学习三者有什么区别呢?
|
||||
|
||||
首先强化学习和无监督学习是不需要有标签样本的,而监督学习需要许多有标签样本来进行模型的构建和训练。其次对于强化学习与无监督学习,无监督学习直接基于给定的数据进行建模,寻找数据或特征中隐藏的结构,一般对应聚类问题;强化学习需要通过延迟奖励学习策略来得到模型与目标的距离,这个距离可以通过奖励函数进行定量判断,这里我们可以将奖励函数视为正确目标的一个稀疏、延迟形式。另外,强化学习处理的多是序列数据,样本之间通常具有强相关性,但其很难像监督学习的样本一样满足独立同分布条件。
|
||||
|
||||
**1-3** 友善的面试官: 根据你的理解,你认为强化学习的使用场景有哪些呢?
|
||||
|
||||
7个字总结就是“多序列决策问题”,或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题。并且当前的动作会影响环境的状态,即具有马尔可夫性的问题。同时应满足所有状态是可重复到达的条件,即满足可学习条件。
|
||||
|
||||
**1-4** 友善的面试官: 请问强化学习中所谓的损失函数与深度学习中的损失函数有什么区别呢?
|
||||
|
||||
深度学习中的损失函数的目的是使预测值和真实值之间的差距尽可能小,而强化学习中的损失函数的目的是使总奖励的期望尽可能大。
|
||||
|
||||
**1-5** 友善的面试官: 你了解有模型和免模型吗?两者具体有什么区别呢?
|
||||
|
||||
我认为两者的区别主要在于是否需要对真实的环境进行建模,免模型方法不需要对环境进行建模,直接与真实环境进行交互即可,所以其通常需要较多的数据或者采样工作来优化策略,这也使其对于真实环境具有更好的泛化性能;而有模型方法需要对环境进行建模,同时在真实环境与虚拟环境中进行学习,如果建模的环境与真实环境的差异较大,那么会限制其泛化性能。现在通常使用有模型方法进行模型的构建工作。
|
||||
|
||||
@@ -1,27 +1,32 @@
|
||||
# Chapter10 Sparse Reward
|
||||
# 第十章 稀疏奖励
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **reward shaping:** 在我们的agent与environment进行交互时,我们人为的设计一些reward,从而“指挥”agent,告诉其采取哪一个action是最优的,而这个reward并不是environment对应的reward,这样可以提高我们estimate Q-function时的准确性。
|
||||
- **ICM(intrinsic curiosity module):** 其代表着curiosity driven这个技术中的增加新的reward function以后的reward function。
|
||||
- **curriculum learning:** 一种广义的用在RL的训练agent的方法,其在input训练数据的时候,采取由易到难的顺序进行input,也就是认为设计它的学习过程,这个方法在ML和DL中都会普遍使用。
|
||||
- **reverse curriculum learning:** 相较于上面的curriculum learning,其为更general的方法。其从最终最理想的state(我们称之为gold state)开始,依次去寻找距离gold state最近的state作为想让agent达到的阶段性的“理想”的state,当然我们应该在此过程中有意的去掉一些极端的case(太简单、太难的case)。综上,reverse curriculum learning 是从 gold state 去反推,就是说你原来的目标是长这个样子,我们从我们的目标去反推,所以这个叫做 reverse curriculum learning。
|
||||
- **hierarchical (分层) reinforcement learning:** 将一个大型的task,横向或者纵向的拆解成多个 agent去执行。其中,有一些agent 负责比较high level 的东西,负责订目标,然后它订完目标以后,再分配给其他的 agent把它执行完成。(看教程的 hierarchical reinforcement learning部分的示例就会比较明了)
|
||||
- **设计奖励(reward shaping)**:当智能体与环境进行交互时,我们人为设计一些奖励,从而“指挥”智能体,告诉其采取哪一个动作是最优的。需要注意的是,这个奖励区别于环境的奖励。其可以提高我们估算Q函数时的准确性。
|
||||
|
||||
## 2 Questions
|
||||
- **内在好奇心模块(intrinsic curiosity module,ICM)**:其代表好奇心驱动这个技术中的增加新的奖励函数以后的奖励函数。
|
||||
|
||||
- 解决sparse reward的方法有哪些?
|
||||
- **课程学习(curriculum learning)**:一种广义的用在强化学习中训练智能体的方法,其在输入训练数据的时候,采取由易到难的顺序进行输入,也可以人为设计它的学习过程。这个方法在机器学习和强化学习中普遍使用。
|
||||
|
||||
答:Reward Shaping、curiosity driven reward、(reverse)curriculum learning 、Hierarchical Reinforcement learning等等。
|
||||
- **逆课程学习(reverse curriculum learning)**:相较于课程学习,逆课程学习为更广义的方法。其从最终最理想的状态 [我们称之为黄金状态(gold state)] 开始,依次去寻找距离黄金状态最近的状态作为想让智能体达到的阶段性的“理想”状态。当然,我们会在此过程中有意地去掉一些极端的状态,即太简单、太难的状态。综上,逆课程学习是从黄金状态反推的方法。
|
||||
|
||||
- reward shaping方法存在什么主要问题?
|
||||
- **分层强化学习(hierarchical reinforcement learning)**:将一个大型的任务,横向或者纵向地拆解成由多个智能体去执行的子任务。其中,有一些智能体负责比较高层次的任务,如负责定目标,定完目标后,再将目标分配给其他的智能体执行。
|
||||
|
||||
答:主要的一个问题是我们人为设计的reward需要domain knowledge,需要我们自己设计出符合environment与agent更好的交互的reward,这需要不少的经验知识,需要我们根据实际的效果进行调整。
|
||||
|
||||
- ICM是什么?我们应该如何设计这个ICM?
|
||||
## 习题
|
||||
|
||||
答:ICM全称为intrinsic curiosity module。其代表着curiosity driven这个技术中的增加新的reward function以后的reward function。具体来说,ICM在更新计算时会考虑三个新的东西,分别是 state $s_1$、action $a_1$ 和 state $s_2$。根据$s_1$ 、$a_1$、 $a_2$,它会 output 另外一个新的 reward $r_1^i$。所以在ICM中我们total reward 并不是只有 r 而已,还有 $r^i$。它不是只有把所有的 r 都加起来,它还把所有 $r^i$ 加起来当作total reward。所以,它在跟环境互动的时候,它不是只希望 r 越大越好,它还同时希望 $r^i$ 越大越好,它希望从 ICM 的 module 里面得到的 reward 越大越好。ICM 就代表了一种curiosity。
|
||||
**10-1** 解决稀疏奖励的方法有哪些?
|
||||
|
||||
对于如何设计ICM,ICM的input就像前面所说的一样包括三部分input 现在的 state $s_1$,input 在这个 state 采取的 action $a_1$,然后接 input 下一个 state $s_{t+1}$,对应的output就是reward $r_1^i$,input到output的映射是通过network构建的,其使用 $s_1$ 和 $a_1$ 去预测 $\hat{s}_{t+1}$ ,然后继续评判预测的$\hat{s}_{t+1}$和真实的$s_{t+1}$像不像,越不相同得到的reward就越大。通俗来说这个reward就是,如果未来的状态越难被预测的话,那么得到的reward就越大。这也就是curiosity的机制,倾向于让agent做一些风险比较大的action,从而增加其machine exploration的能力。
|
||||
设计奖励、好奇心驱动的奖励、课程学习、逆课程学习、分层强化学习等。
|
||||
|
||||
同时为了进一步增强network的表达能力,我们通常讲ICM的input优化为feature extractor,这个feature extractor模型的input就是state,output是一个特征向量,其可以表示这个state最主要、重要的特征,把没有意义的东西过滤掉。
|
||||
**10-2** 设计奖励存在什么主要问题?
|
||||
|
||||
主要的问题是我们人为设计的奖励需要领域知识,需要我们自己设计出让环境与智能体更好地交互的奖励,这需要不少的经验知识,并且需要我们根据实际的效果进行调整。
|
||||
|
||||
**10-3** 内在好奇心模块是什么?我们应该如何设计内在好奇心模块?
|
||||
|
||||
内在好奇心模块代表好奇心驱动技术中增加新的奖励函数以后的奖励函数。具体来说,其在更新计算时会考虑3个新的部分,分别是状态 $s_1$、动作 $a_1$ 和状态 $s_2$。根据 $s_1$ 、$a_1$、$a_2$,它会输出另外一个新的奖励 $r_1^i$。所以在内在好奇心模块中,我们的总奖励并不是只有 $r$ 而已,还有 $r^i$。它不是只把所有的 $r$ 相加,还把所有 $r^i$ 相加一并当作总奖励。所以,基于内在好奇心模块的智能体在与环境交互的时候,不是只希望 $r$ 越大越好,还同时希望 $r^i$ 越大越好,希望从内在好奇心模块里面得到的总奖励越大越好。
|
||||
|
||||
对于如何设计内在好奇心模块,其输入就像前面所说的一样,包括3部分,即现在的状态 $s_1$、在这个状态采取的动作 $a_1$、下一个状态 $s_{t+1}$,对应的输出就是奖励 $r_1^i$。输入、输出的映射是通过网络构建的,其使用状态 $s_1$ 和动作 $a_1$ 去预测下一个状态 $\hat{s}_{t+1}$ ,然后继续评判预测的状态 $\hat{s}_{t+1}$ 和真实状态 $s_{t+1}$ 的相似性,越不相似得到的奖励就越大。通俗来说这个奖励就是,如果未来的状态越难被预测,那么得到的奖励就越大。这就是好奇心机制,其倾向于让智能体做一些风险比较大的动作,从而提高其探索的能力。
|
||||
|
||||
同时,为了进一步增强网络的表达能力,我们通常将内在好奇心模块的输入优化为特征提取,特征提取器的输入就是状态,输出是一个特征向量,其可以表示这个状态最主要和最重要的特征,把没有意义的事物过滤。
|
||||
|
||||
@@ -1,36 +1,42 @@
|
||||
# Chapter11 Imitation Learning
|
||||
# 第十一章 模仿学习
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **Imitation learning:** 其讨论我们没有reward或者无法定义reward但是有与environment进行交互时怎么进行agent的学习。这与我们平时处理的问题中的情况有些类似,因为通常我们无法从环境中得到明确的reward。Imitation learning 又被称为 learning from demonstration (示范学习) ,apprenticeship learning (学徒学习),learning by watching (观察学习)等。
|
||||
- **Behavior Cloning:** 类似于ML中的监督学习,通过收集expert的state与action的对应信息,训练我们的network(actor)。在使用时input state时,得到对应的outpur action。
|
||||
- **Dataset Aggregation:** 用来应对在Behavior Cloning中expert提供不到的data,其希望收集expert在各种极端state下expert的action。
|
||||
- **Inverse Reinforcement learning(IRL):** Inverse Reinforcement Learning 是先找出 reward function,再去用 Reinforcement Learning 找出 optimal actor。这么做是因为我们没有环境中reward,但是我们有expert 的demonstration,使用IRL,我们可以推断expert 是因为什么样的 reward function 才会采取这些action。有了reward function 以后,接下来,就可以套用一般的 reinforcement learning 的方法去找出 optimal actor。
|
||||
- **Third Person Imitation Learning:** 一种把第三人称视角所观察到的经验 generalize 到第一人称视角的经验的技术。
|
||||
- **模仿学习(imitation learning,IL)**:其讨论我们没有奖励或者无法定义奖励但是有与环境进行交互时怎么进行智能体的学习。这与我们平时处理的问题有些类似,因为通常我们无法从环境中得到明确的奖励。模仿学习又被称为示范学习(learning from demonstration)、学徒学习(apprenticeship learning)以及观察学习(learning by watching)等。
|
||||
|
||||
## 2 Questions
|
||||
- **行为克隆(behavior cloning)**:类似于机器学习中的监督学习,通过收集专家的状态与动作等对应信息,来训练我们的网络。在使用时,输入状态就可以输出对应的动作。
|
||||
|
||||
- 对于Imitation Learning 的方法有哪些?
|
||||
- **数据集聚合(dataset aggregation)**:用来应对在行为克隆中专家提供不到数据的情况,其希望收集专家在各种极端状态下的动作。
|
||||
|
||||
答:Behavior Cloning、Inverse Reinforcement Learning(IRL)或者称为Inverse Optimal Control。
|
||||
- **逆强化学习(inverse reinforcement learning,IRL)**:逆强化学习先找出奖励函数,再用强化学习找出最优演员。这么做是因为我们没有环境中的奖励,但是有专家的示范,使用逆强化学习,我们可以推断专家是因为何种奖励函数才会采取这些动作。有了奖励函数以后就可以使用一般的强化学习方法找出最优演员。
|
||||
|
||||
- Behavior Cloning存在哪些问题呢?我们可以如何处理呢?
|
||||
|
||||
答:
|
||||
|
||||
1. 首先,如果只收集expert 的data(看到某一个state输出的action),你可能看过的 observation 会是非常 limited。所以我们要收集expert在各种极端state下的action,或者说是要收集更多的、复杂的data,可以使用教程中提到的Dataset Aggregation。
|
||||
2. 另外,使用传统意义上的Behavior Cloning的话,机器会完全 copy expert 的行为,不管 expert 的行为是否有道理,就算没有道理,没有什么用的,这是expert 本身的习惯,机器也会硬把它记下来。我们的agent是一个 machine,它是一个 network,network 的capacity 是有限的。就算给 network training data,它在training data 上得到的正确率往往也不是100%,他有些事情是学不起来的。这个时候,什么该学,什么不该学就变得很重要。不过极少数expert的行为是没有意义的,但是至少也不会产生较坏的影响。
|
||||
3. 还有,在做 Behavior Cloning 的时候,training data 跟 testing data 是 mismatch 的。我们可以用 Dataset Aggregation 的方法来缓解这个问题。这个问题是,在 training 跟 testing 的时候,data distribution 其实是不一样的。因为在 reinforcement learning 里面,action 会影响到接下来所看到的 state。我们是先有 state $s_1$,然后采取 action $a_1$,action $a_1$ 其实会决定接下来你看到什么样的 state $s_2$。所以在 reinforcement learning 里面有一个很重要的特征,就是你采取了 action 会影响你接下来所看到的 state。如果做了Behavior Cloning 的话,我们只能观察到 expert 的一堆 state 跟 action 的pair。然后我们希望可以 learn 一个 $\pi^*$,我们希望 $\pi^*$ 跟 $\hat{\pi}$ 越接近越好。如果 $\pi^*$ 可以跟 $\hat{\pi}$ 一模一样的话,你 training 的时候看到的 state 跟 testing 的时候所看到的 state 会是一样的,这样模型的泛化性能就会变得比较差。而且,如果你的 $\pi^*$ 跟 $\hat{\pi}$ 有一点误差。这个误差在一般 supervised learning problem 里面,每一个 example 都是 independent 的,也许还好。但对 reinforcement learning 的 problem 来说,可能在某个地方,也许 machine 没有办法完全复制 expert 的行为,也许最后得到的结果就会差很多。所以 Behavior Cloning 并不能够完全解决 Imatation learning 这件事情,我们可以使用另外一个比较好的做法叫做 Inverse Reinforcement Learning。
|
||||
- **第三人称视角模仿学习(third person imitation learning)**:一种把第三人称视角所观察到的经验泛化为第一人称视角的经验的技术。
|
||||
|
||||
|
||||
- Inverse Reinforcement Learning 是怎么运行的呢?
|
||||
## 习题
|
||||
|
||||
答:首先,我们有一个 expert $\hat{\pi}$,这个 expert 去跟环境互动,给我们很多 $\hat{\tau_1}$ 到 $\hat{\tau_n}$,我们需要将其中的state、action这个序列都记录下来。然后对于actor $\pi$ 也需要进行一样的互动和序列的记录。接着我们需要指定一个reward function,并且保证expert对应的分数一定要比actor的要高,用过这个reward function继续learning更新我们的训练并且套用一般条件下的RL方法进行actor的更新。在这个过程中,我们也要同时进行我们一开始制定的reward function的更新,使得actor得得分越来越高,但是不超过expert的得分。最终的reward function应该让expert和actor对应的reward function都达到比较高的分数,并且从最终的reward function中无法分辨出谁应该得到比较高的分数。
|
||||
**11-1** 具体的模仿学习方法有哪些?
|
||||
|
||||
- Inverse Reinforcement Learning 方法与GAN在图像生成中有什么异曲同工之处?
|
||||
行为克隆、逆强化学习或者称为逆最优控制。
|
||||
|
||||
答:在GAN 中,我们有一些比较好的图片数据集,也有一个generator,一开始他根本不知道要产生什么样的图,只能随机生成。另外我们有一个discriminator,其用来给生成的图打分,expert 生成的图得分高,generator 生成的图得分低。有了discriminator 以后,generator 会想办法去骗过 discriminator。Generator 会希望 discriminator 也会给它生成得图高分。整个 process 跟 IRL 的过程是类似的。我们一一对应起来看:
|
||||
**11-2** 行为克隆存在哪些问题呢?对应的解决方法有哪些?
|
||||
|
||||
* 生成的图就是 expert 的 demonstration,generator 就是actor,generator 会生成很多的图并让actor 与环境进行互动,从而产生很多 trajectory。这些 trajectory 跟环境互动的记录等价于 GAN 里面的生成图。
|
||||
* 在IRL中 learn 的 reward function 就是 discriminator。Rewards function 要给 expert 的 demonstration 高分,给 actor 互动的结果低分。
|
||||
* 考虑两者的过程,在IRL中,actor 会想办法,从这个已经 learn 出来的 reward function 里面得到高分,然后 iterative 地去循环这其实是与 GAN 的过程是一致的。
|
||||
(1)首先,如果只收集专家的示范(看到某一个状态输出的动作),那么所有的结果会是非常有限的。所以我们要收集专家在各种极端状态下的动作或者说要收集更多、更复杂的数据,可以使用数据集聚合方法。
|
||||
|
||||
(2)另外,使用传统意义上的行为克隆,智能体会完全复制专家的行为,不管专家的行为是否合理,智能体都会硬把它记下来。智能体是一个网络,网络的容量是有限的。就算给网络足够的训练数据,它在训练数据集上得到的正确率往往也不是100\%。所以这个时候,什么该学、什么不该学就变得很重要。实际上,极少数专家的行为是没有意义的,但是使用它们的示范至少不会产生较坏的影响。
|
||||
|
||||
(3)还有,在进行行为克隆的时候,训练数据和测试数据往往是不匹配的。我们可以用数据集聚合来缓解这个问题。具体来说,在训练和测试的时候,数据分布是不同的。因为在强化学习中,动作会影响到接下来的状态。我们先有状态 $s_1$ ,然后采取动作 $a_1$ ,动作 $a_1$ 会决定接下来的状态 $s_2$ 。如果 $\pi^*$ 与 $\hat{\pi}$ 一模一样,那么我们训练时看到的状态与测试时看到的状态会是一样的,这样模型的泛化性能就会变得比较差。而且, $\pi^*$ 和 $\hat{\pi}$ 可能有一点儿误差,虽然这个误差在监督学习中,由于每一个样本都是独立的,因此影响不大,但对强化学习来说,可能在某个地方,也许智能体无法完全复制专家的行为,最后得到的结果就会差很多。所以行为克隆并不能够完全解决模仿学习的问题,我们可以使用另外一个比较好的方法,即逆强化学习。
|
||||
|
||||
**11-3** 逆强化学习是怎么运行的呢?
|
||||
|
||||
首先,我们有一个专家,其策略为 $\hat{\pi}$,这个专家负责与环境交互,给我们 $\hat{\tau_1}$ ~ $\hat{\tau_n}$,我们需要将其中的状态-动作序列都记录下来。然后对于演员,其策略为$\pi$,也需要进行一样的交互和序列的记录。接着我们需要指定一个奖励函数,并且保证专家对应的分数一定要比演员的要高,用这个奖励函数继续学习并更新我们的训练,同时套用一般条件下的强化学习方法进行演员网络的更新。在这个过程中,我们也要同时进行一开始指定的奖励函数的更新,使得演员得分越来越高,但是不超过专家的得分。最终的奖励函数应该让专家和演员对应的奖励函数都达到比较高的分数,并且从最终的奖励函数中无法分辨出两者。
|
||||
|
||||
**11-4** 逆强化学习方法与生成对抗网络在图像生成中有什么异曲同工之处?
|
||||
|
||||
在生成对抗网络中,我们有一些比较好的图片数据集,也有一个生成器,一开始其不知道要生成什么样的图片,只能随机生成。另外,我们有一个判别器,其用来给生成的图片打分,专家生成的图片得分高,生成器生成的图片得分低。有了判别器以后,生成器会想办法去“骗”判别器。生成器希望判别器也给它生成的图片打高分。整个过程与逆强化学习的过程是类似的。我们一一对应起来看。
|
||||
|
||||
(1)生成的图片就是专家的判别结果,生成器就是演员,生成器会生成很多的图片并让演员与环境进行交互,从而产生很多轨迹。这些轨迹与环境交互的记录等价于生成对抗网络中的生成图片。
|
||||
|
||||
(2)逆强化学习中的奖励函数就是判别器。奖励函数给专家的实例打高分,给演员的交互结果打低分。
|
||||
|
||||
(3)考虑两者的过程,在逆强化学习中,演员会想办法从已经学习到的奖励函数中获得高分,然后迭代地循环。这个过程其实是与生成对抗网络的训练过程一致的。
|
||||
|
||||
@@ -1,50 +1,51 @@
|
||||
# Chapter12 DDPG
|
||||
# 第十二章 深度确定性策略梯度 (DDPG) 算法
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **DDPG(Deep Deterministic Policy Gradient):** 在连续控制领域经典的RL算法,是DQN在处理连续动作空间的一个扩充。具体地,从命名就可以看出,Deep是使用了神经网络;Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;Policy Gradient 代表的是它用到的是策略网络,并且每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。其与DQN都有目标网络和经验回放的技巧,在经验回放部分是一致的,在目标网络的更新有些许不同。
|
||||
|
||||
## 2 Questions
|
||||
|
||||
- 请解释随机性策略和确定性策略。
|
||||
|
||||
答:
|
||||
|
||||
- 对于随机性的策略 $\pi_\theta(a_t|s_t)$ ,我们输入某一个状态 s,采取某一个 action 的可能性并不是百分之百,而是有一个概率 P 的,就好像抽奖一样,根据概率随机抽取一个动作。
|
||||
- 对于确定性的策略 $\mu_{\theta}(s_t)$ ,其没有概率的影响。当神经网络的参数固定下来了之后,输入同样的state,必然输出同样的 action,这就是确定性的策略。
|
||||
|
||||
- 对于连续动作的控制空间和离散动作的控制空间,如果我们都采取使用Policy网络的话,分别应该如何操作?
|
||||
|
||||
答:首先需要说明的是,对于连续的动作控制空间,Q-learning、DQN等算法是没有办法处理的,所以我们需要使用神经网络进行处理,因为其可以既输出概率值 $\pi_\theta(a_t|s_t)$ ,也可以输出确定的策略 $\mu_{\theta}(s_t)$ 。
|
||||
|
||||
- 要输出离散动作的话,最后的output的激活函数使用 softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。
|
||||
- 要输出连续的动作的话,可以在输出层这里加一层 tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。比如神经网络输出一个浮点数是 2.8,然后经过 tanh 之后,它就可以被限制在 [-1,1] 之间,它输出 0.99。然后假设说小车的一个速度的那个动作范围是 [-2,2] 之间,那我们就按比例从 [-1,1] 扩放到 [-2,2],0.99 乘 2,最终输出的就是1.98,作为小车的速度或者说推小车的力输出给环境。
|
||||
- **深度确定性策略梯度(deep deterministic policy gradient,DDPG)**:在连续控制领域经典的强化学习算法,是深度Q网络在处理连续动作空间的一个扩充方法。具体地,从命名就可以看出,“深度”表明使用了深度神经网络;“确定性”表示其输出的是一个确定的动作,可以用于连续动作环境;“策略梯度”代表的是它用到的是策略网络,并且每步都会更新一次,其是一个单步更新的策略网络。其与深度Q网络都有目标网络和经验回放的技巧,在经验回放部分是一致的,在目标网络的更新上有些许不同。
|
||||
|
||||
|
||||
## 习题
|
||||
|
||||
## 3 Something About Interview
|
||||
**12-1** 请解释随机性策略和确定性策略,两者有什么区别?
|
||||
|
||||
- 高冷的面试官:请简述一下DDPG算法?
|
||||
(1)对于随机性策略 $\pi_\theta(a_t|s_t)$ ,我们输入某一个状态 $s$,采取某一个动作 $a$ 的可能性并不是百分之百的,而是有一个概率的,就好像抽奖一样,根据概率随机抽取一个动作。
|
||||
|
||||
答:深度确定性策略梯度(Deep Deterministic Policy Gradient,简称 DDPG) 使用 Actor Critic 结构,但是输出的不是行为的概率,,而是具体的行为,用于连续动作的预测。优化的目的是为了将DQN扩展到连续的动作空间。另外,其字如其名:
|
||||
(2)对于确定性策略 $\mu_{\theta}(s_t)$ ,其没有概率的影响。当神经网络的参数固定之后,输入同样的状态,必然输出同样的动作,这就是确定性策略。
|
||||
|
||||
- Deep 是因为用了神经网络;
|
||||
- Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;
|
||||
- Policy Gradient 代表的是它用到的是策略网络。REINFORCE 算法每隔一个 episode 就更新一次,但 DDPG 网络是每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。
|
||||
**12-2** 对于连续动作的控制空间和离散动作的控制空间,如果我们都采取策略网络,应该分别如何操作?
|
||||
|
||||
- 高冷的面试官:你好,请问DDPG是on-policy还是off-policy,原因是什么呀?
|
||||
首先需要说明的是,对于连续动作的控制空间,Q学习、深度Q网络等算法是没有办法处理的,所以我们需要使用神经网络进行处理,因为其可以既输出概率值,也可以输出确定的策略 $\mu_{\theta}(s_t)$ 。
|
||||
|
||||
答:off-policy。解释方法一,DDPG是优化的DQN,其使用了经验回放,所以为off-policy方法;解释方法二,因为DDPG为了保证一定的探索,对于输出动作加了一定的噪音,也就是说行为策略不再是优化的策略。
|
||||
(1)要输出离散动作,最后输出的激活函数使用 Softmax 即可。其可以保证输出的是动作概率,而且所有的动作概率加和为1。
|
||||
|
||||
- 高冷的面试官:你是否了解过D4PG算法呢?描述一下吧。
|
||||
(2)要输出连续的动作,可以在输出层中加一层tanh激活函数,其可以把输出限制到 $[-1,1]$ 。我们得到这个输出后,就可以根据实际动作的一个范围再做缩放,然后将其输出给环境。比如神经网络输出一个浮点数2.8,经过tanh激活函数之后,它就可以被限制在 $[-1,1]$ ,输出0.99。假设小车的速度的动作范围是 $[-2,2]$ ,那我们就按比例将之从 $[-1,1]$ 扩大到 $[-2,2]$ ,0.99乘2,最终输出的就是1.98,将其作为小车的速度或者推小车的力输出给环境。
|
||||
|
||||
答:分布的分布式DDPG(Distributed Distributional DDPG ,简称 D4PG),相对于DDPG其优化部分为:
|
||||
|
||||
- 分布式 critic: 不再只估计Q值的期望值,而是去估计期望Q值的分布, 即将期望Q值作为一个随机变量来进行估计。
|
||||
- N步累计回报: 当计算TD误差时,D4PG计算的是N步的TD目标值而不仅仅只有一步,这样就可以考虑未来更多步骤的回报。
|
||||
- 多个分布式并行actor:D4PG使用K个独立的演员并行收集训练样本并存储到同一个replay buffer中。
|
||||
- 优先经验回放(Prioritized Experience Replay,PER):使用一个非均匀概率 $\pi$ 从replay buffer中采样。
|
||||
|
||||
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**12-1** 友善的面试官:请简述一下深度确定性策略梯度算法。
|
||||
|
||||
深度确定性策略梯度算法使用演员-评论员结构,但是输出的不是动作的概率,而是具体动作,其可以用于连续动作的预测。优化的目的是将深度Q网络扩展到连续的动作空间。另外,其含义如其名:
|
||||
|
||||
(1)深度是因为用了深度神经网络;
|
||||
|
||||
(2)确定性表示其输出的是一个确定的动作,可以用于连续动作的环境;
|
||||
|
||||
(3)策略梯度代表的是它用到的是策略网络。强化算法每个回合就会更新一次网络,但是深度确定性策略梯度算法每个步骤都会更新一次策略网络,它是一个单步更新的策略网络。
|
||||
|
||||
**12-2** 友善的面试官:请问深度确定性策略梯度算法是同策略算法还是异策略算法?请说明具体原因并分析。
|
||||
|
||||
异策略算法。(1)深度确定性策略梯度算法是优化的深度Q网络,其使用了经验回放,所以为异策略算法。(2)因为深度确定性策略梯度算法为了保证一定的探索,对输出动作加了一定的噪声,行为策略不再是优化的策略。
|
||||
|
||||
**12-3** 友善的面试官:你是否了解过分布的分布式深度确定性策略梯度算法(distributed distributional deep deterministic policy gradient,D4PG)呢?请描述一下吧。
|
||||
|
||||
分布的分布式深度确定性策略梯度算法(distributed distributional deep deterministic policy gradient,D4PG),相对于深度确定性策略梯度算法,其优化部分如下。
|
||||
|
||||
(1)分布式评论员:不再只估计Q值的期望值,而是估计期望Q值的分布,即将期望Q值作为一个随机变量来估计。
|
||||
|
||||
(2)$N$步累计回报:计算时序差分误差时,D4PG计算的是$N$步的时序差分目标值而不仅仅只有一步,这样就可以考虑未来更多步骤的回报。
|
||||
|
||||
(3)多个分布式并行演员:D4PG使用$K$个独立的演员并行收集训练数据并存储到同一个回放缓冲区中。
|
||||
|
||||
(4)优先经验回放(prioritized experience replay,PER):使用一个非均匀概率从回放缓冲区中进行数据采样。
|
||||
|
||||
@@ -1,170 +1,226 @@
|
||||
# AlphaStar 论文解读
|
||||
# 第13章 AlphaStar 论文解读
|
||||
|
||||
## AlphaStar以及背景简介
|
||||
## 13.1 AlphaStar及背景简介
|
||||
|
||||
相比于之前的深蓝和go,对于星际争霸2等策略对战型游戏,使用AI与人类对战难度更大。比如在星际争霸2中,操作枯燥是众所周知的,要想在PVP中击败对方,就得要学会各种战术,各种微操和Timing。在游戏中你还得侦查对方的发展,做出正确判断进行转型,甚至要欺骗对方以达到战术目的。总而言之,想要上手这款游戏是非常困难的,对不起,DeepMind就做到了。
|
||||
相比于之前的深蓝和AlphaGo,对于《星际争霸Ⅱ》等策略对战型游戏,使用AI与人类对战的难度更大。比如在《星际争霸Ⅱ》中,要想在玩家对战玩家的模式中击败对方,就要学会各种战术,各种微操和掌握时机。在游戏中玩家还需要对对方阵容的更新实时地做出正确判断以及行动,甚至要欺骗对方以达到战术目的。总而言之,想要让AI上手这款游戏是非常困难的。但是DeepMind做到了。
|
||||
|
||||
AlphaStar是DeepMind公司与暴雪使用深度强化学习技术进行PC与星际争霸2人类玩家进行对战的产品,其在近些年在星际争霸2中打败了职业选手以及99.8%的欧服玩家而被人所熟知。北京时间2019年1月25日凌晨2点,暴雪与谷歌DeepMind团队合作研究的星际争霸人工智能“AlphaStar”正式通过直播亮相。按照直播安排,AlphaStar与两位《星际争霸2》人类职业选手进行了5场比赛对决演示。加上并未在直播中演示的对决,在人类vs AlphaStar人工智能的共计11场比赛中,人类只取得了一场胜利。DeepMind也将研究工作发表在了2019年10月的《Nature》杂志上。我们也将对于这篇Paper进行深入的分析,下面是论文的链接:
|
||||
AlphaStar是DeepMind与暴雪使用深度强化学习技术实现的计算机与《星际争霸Ⅱ》人类玩家对战的产品,其因为近些年在《星际争霸Ⅱ》比赛中打败了职业选手以及99.8\%的欧服玩家而被人所熟知。北京时间2019年1月25日凌晨2点,暴雪公司与DeepMind合作研发的AlphaStar正式通过直播亮相。按照直播安排,AlphaStar与两位《星际争霸Ⅱ》人类职业选手进行了5场比赛对决演示。加上并未在直播中演示的对决,在人类对阵AlphaStar的共计11场比赛中,人类仅取得了1场胜利。DeepMind也将研究工作发表在了2019年10月的 *Nature* 杂志上。本章将对这篇论文进行深入的分析,有兴趣的读者可以阅读原文。
|
||||
|
||||
## 13.2 AlphaStar的模型输入和输出是什么呢?————环境设计
|
||||
|
||||
构建深度强化学习模型的第一步就是构建模型的输入和输出,对于《星际争霸Ⅱ》这一个复杂的环境,文章第一步就是将游戏的环境抽象成众多独立的数据信息。
|
||||
|
||||
### 13.2.1 状态(网络的输入)
|
||||
|
||||
AlphaStar将《星际争霸Ⅱ》的环境状态分为4部分,分别为实体(entities)信息、地图(map)信息、玩家数据(player data)信息、游戏统计(game statistics)信息,如图13.1所示。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.1.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.1 环境状态的构成</div>
|
||||
|
||||
第一部分————实体信息,例如当前时刻环境中有什么建筑、兵种等,并且我们将每一个实体的属性信息使用向量表示。例如对于一个建筑,其当前时刻的向量中包含此建筑的血量、等级、位置以及冷却时间等信息。所以对于当前帧的全部实体信息,环境会给神经网络 $N$ 个长度为 $K$ 的向量,分别表示此刻智能体能够看见的 $N$ 个实体的具体信息(向量信息)。
|
||||
|
||||
第二部分————地图信息,这部分比较好理解,即将地图中的信息以矩阵的形式输入神经网络中,来表示当前状态全局地图的信息(向量信息或图像信息)。
|
||||
|
||||
第三部分————玩家数据信息,也就是当前状态下,玩家的等级和种族等信息(标量信息)。
|
||||
|
||||
第四部分————游戏统计信息,视野的位置(小窗口的位置,区别于第二部分的全局地图信息),还有当前游戏的开始时间等信息(标量信息)。
|
||||
|
||||
### 13.2.2 动作(网络的输出)
|
||||
|
||||
AlphaStar的动作信息主要分为6个部分,如图13.2所示,分别为动作类型(action type)、选中的单元(selected units)、目标(target)、执行动作的队列(queued)、是否重复(repeat)以及延时(delay),各个部分间是有关联的。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.2.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.2 动作信息的构成</div>
|
||||
|
||||
第一部分————动作类型,即下一次要进行的动作的类型是移动小兵、升级建筑还是移动小窗口的位置等。
|
||||
|
||||
第二部分————选中的单元,承接第一部分,例如我们要进行的动作类型是移动小兵,那么我们就应该选择具体移动哪一个小兵。
|
||||
|
||||
第三部分————目标,承接第二部分,我们移动小兵A后,是要去地图的某一个位置还是去攻击对手的哪一个目标等,即选择目的地或攻击的对象。
|
||||
|
||||
第四部分————执行动作的队列,即是否立即执行动作,对于小兵A,是到达目的地后直接进行攻击还是原地待命。
|
||||
|
||||
第五部分————是否重复,如果需要小兵A持续攻击,那么就不需要再通过网络计算得到下一个动作,直接重复上一个动作即可。
|
||||
|
||||
第六部分————延时,即等候多久后再接收网络的输入,可以理解为一个操作的延迟。
|
||||
|
||||
## 13.3 AlphaStar的计算模型是什么呢?————网络结构
|
||||
|
||||
我们在13.2节说明了AlphaStar网络的输入和输出,即状态和动作,那么从状态怎么得到动作呢?这里我们先给出其网络结构的总览,如图13.3所示,后面对此详细讨论。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.3.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.3 AlphaStar网络结构总览</div>
|
||||
|
||||
### 13.3.1 输入部分
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.4.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.4 AlphaStar网络结构输入部分</div>
|
||||
|
||||
从图13.4中的红框可以看出,模型的输入部分主要有3个部分:标量特征(scalar features),例如前面描述的玩家等级以及小窗口的位置等信息;实体(entities),是向量,即前面所叙述的一个建筑或一个小兵的当前所有的属性信息;小地图(minimap),即图像数据。
|
||||
|
||||
- 对于标量特征,使用多层感知机(multilayer perceptron,MLP),就可以得到对应的向量,可以认为是一个嵌入过程。
|
||||
- 对于实体,使用自然语言处理中常用的Transformer架构作为编码器(encoder)。
|
||||
- 对于小地图,使用图像中常用的ResNet架构作为编码器,得到一个定长的向量。
|
||||
|
||||
### 13.3.2 中间过程
|
||||
|
||||
中间过程比较简单,即通过一个深度长短期记忆网络模块融合3种当前状态下的嵌入并进行下一时刻的输出,如图13.5所示,并且将该输出分别送入价值网络(value network)、残差多层感知机(residual MLP)以及动作类型的后续的多层感知机中。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.5.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.5 AlphaStar网络结构中的深度长短期记忆网络模块</div>
|
||||
|
||||
### 13.3.3 输出部分
|
||||
|
||||
正如前面介绍的,输出的动作是前后相关联的,如图13.6所示,我们按照顺序一一介绍。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.6.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.6 AlphaStar网络结构输出部分</div>
|
||||
|
||||
首先是动作类型:使用深度长短期记忆网络的嵌入向量作为输入,使用残差多层感知机得到动作类型的Softmax激活函数的输出结果,并将其传给下一个子模型进行嵌入。
|
||||
|
||||
然后是延时:将动作类型嵌入的结果以及深度长短期记忆网络的结果一起输入多层感知机后得到结果,并传给下一个子模型进行嵌入。
|
||||
|
||||
接下来是执行动作的队列:将延时的结果以及嵌入的结果一起输入多层感知机后得到结果,并传给下一个子模型进行嵌入。
|
||||
|
||||
然后是选中的单元:将队列的结果、嵌入的结果以及实体编码后的全部结果(非平均的结果)一起送入指针网络(pointer network)中得到结果,并传给下一个子模型进行嵌入。这里的指针网络的输入是一个序列,输出是另外一个序列,并且输出序列的元素来自输入的序列。其主要用于自然语言处理中,在这里很适合我们选中的单元的计算。
|
||||
|
||||
接着是目标单元(target unit)和目标指针(target point)两者二选一,对于目标单元,使用注意力(attention)机制得到最优的动作作用的一个对象;对于目标区域,使用反卷积残差网络,将嵌入的向量反卷积为地图的大小,从而执行目标移动到某一点的对应动作。
|
||||
|
||||
## 13.4 庞大的AlphaStar如何训练呢?————学习算法
|
||||
|
||||
对于上面复杂的模型,AlphaStar究竟如何进行训练呢?总结下来一共分为4个部分,即监督学习(主要是解决训练的初始化问题)、强化学习、模仿学习(配合强化学习)以及多智能体学习或自学习(面向对战的具体问题),下面我们一一分析。
|
||||
|
||||
### 13.4.1 监督学习
|
||||
|
||||
在训练一开始,AlphaStar首先使用监督学习即利用人类的数据进行比较好的初始化。模型的输入是收集到的人类的对局数据,输出是训练好的神经网络。具体的做法是,对于收集到的人类对局数据,即对于每一个时刻解码游戏的状态,将每一时刻的状态送入网络中得到每一个动作的概率分布,最终计算模型的输出以及人类对局数据的KL散度,并以KL散度进行网络的优化,其中在KL散度中需要使用不同的损失函数。例如,动作类型的损失,即分类问题的损失就需要使用交叉熵。而对于目标定位等类似的回归问题就需要计算均方误差(mean square error,MSE)。当然还有一些细节,大家可以自行阅读论文。总之,经过监督学习,模型输出的概率分布就可以与人类玩家输出的概率分布类似。
|
||||
|
||||
### 13.4.2 强化学习
|
||||
|
||||
这里的目标就是通过优化策略使得期望的奖励最大,即
|
||||
|
||||
$$
|
||||
J(\pi_{\theta}) = E_{\pi_{\theta}} \sum_{t=0}r(s_t,a_t)
|
||||
$$
|
||||
|
||||
|
||||
但AlphaStar的训练模型使用非采样模型,即免策略的模型,这是因为其使用的架构为类似于 IMPALA 的架构,即演员负责与环境交互并采样,学习者负责优化网络并更新参数,而演员和学习者通常是异步进行计算的,并且由于前面介绍的输出动作的类型空间复杂,因此导致价值函数的拟合比较困难。
|
||||
|
||||
AlphaStar利用以下的方式进行强化学习模型的构建。
|
||||
|
||||
(1)首先是采取经典的演员-评论员(actor-critic)结构,使用策略网络给出当前状态下的智能体的动作,即计算 $\pi(a_t|s_t)$ ,使用价值网络计算当前状态下的智能体的期望奖励,即计算 $V(s_t) = E \sum_{t'=t}r_{t'} = E_{a_t}[r(s_t,a_t)+V(s_{t+1})]$。具体的计算方法是:对于当前的状态 $s$ ,计算当前动作 $a$ 相对于“平均动作”所能额外获得的奖励。
|
||||
|
||||
$$
|
||||
A(s_t,a_t)=[r(s_t,a_t)+V(s_{t+1})]-V(s_t)
|
||||
$$
|
||||
|
||||
即当前动作的预期奖励减去当前状态的预期奖励。在 AlphaStar 中,向上移动的策略更新(upgoing policy update,UPGO)也得到了应用,向上移动的策略更新使用一个迭代变量 $G_t$ 来取代原来的动作的预期奖励 $r(s_t,a_t)+V(s_{t+1})$ ,即把未来乐观的信息纳入额外奖励中,上式可改写为:
|
||||
|
||||
$$
|
||||
A(s_t,a_t)=G_t-V(s_t)
|
||||
$$
|
||||
|
||||
其中,
|
||||
|
||||
$$
|
||||
G_t=
|
||||
\begin{cases}
|
||||
r_t+G_{t+1} &, \text{如果} Q(s_{s+1},a_{t+1})\geqslant V(s_{t+1}) \\
|
||||
r_t+V(s_{t+1}) &, \text{否则} \\
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
(2)基于上面计算得到的动作,更新策略梯度,即 $\nabla_{\theta}J = A(s_t,a_t)\nabla_{\theta}\mathrm{log} \pi_{\theta}(a_t|s_t)$。我们在前面介绍了,如果基于 $\pi_{\theta}$ 的分布不好求解,或者说学习策略 $\pi_{\theta}$ 与采集策略 $\pi_{\mu}$ 不同,我们需要使用重要性采样,即 $\nabla_{\theta}J = E_{\pi_{\mu}}\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)} A_{\pi_{\theta}}(s_t,a_t)\nabla_{\theta}\mathrm{log} \pi_{\theta}(a_t|s_t)$。当然我们还需防止 $\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)}$ 出现无穷大的情况,我们需要使用V-trace限制重要性系数。这也是用于免策略的一个更新方法,在 IMPALA 论文中的4.1节有所体现。即将重要性系数的最大值限制为1,公式如下:
|
||||
|
||||
$$
|
||||
\nabla_{\theta}J = E_{\pi_{\mu}}\rho_t A_{\pi_{\theta}}(s_t,a_t)\nabla_{\theta}\mathrm{log} \pi_{\theta}(a_t|s_t)
|
||||
$$
|
||||
|
||||
其中,
|
||||
|
||||
$$
|
||||
\rho_t = \mathrm{min}(\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)},1)
|
||||
$$
|
||||
|
||||
(3)利用时序差分($\lambda$)来优化价值网络,并同时输入对手的数据。对于我们的价值函数
|
||||
|
||||
$$
|
||||
V_{\pi_{\theta}}(s_t)=E_{\pi_{\theta}}\sum_{t'=t}\gamma^{t'-t}r(s_t,a_t)=E_{a_t\sim\pi_{\theta}(\cdot|s_t)}[r(s_t,a_t)+\gamma V(s_{t+1})]
|
||||
$$
|
||||
|
||||
可以使用时序差分方法计算均方差损失,有如下几种。
|
||||
|
||||
- $\mathrm{TD}(0)$ ,表达式为 $L = [(r_t+\gamma V_{t+1})-V_t]^2$ ,即当前步(step)的信息,有偏小的方差存在。
|
||||
- $\mathrm{TD}(1)$ ,即蒙特卡洛方法,表达式为 $L = [(\sum_{t'=t}^\infty\gamma^{t'-t}r_{t'})-V_t]^2$,即未来无穷步的信息,无偏大方差。
|
||||
- $\mathrm{TD}(\lambda)$ ,即以上两个方法的加权平均。平衡当前步、下一步到无穷步后的结果。
|
||||
- 已知对于 $\lambda \in (0,1)$, $(1-\lambda)+(1-\lambda)\lambda+(1-\lambda)\lambda ^2+...=1$。
|
||||
- $r_t = \lim_{T\rightarrow\infty} (1-\lambda)(r_t+V_{t+1})+(1-\lambda)\lambda(r_t+\gamma r_{t+1}+\gamma^2 V_{t+2})+...$。
|
||||
|
||||
|
||||
### 13.4.3 模仿学习
|
||||
模仿学习额外引入了监督学习损失以及人类的统计量 $Z$ ,即对于建造顺序(build order)、建造单元(build unit)、升级(upgrade)、技能(effect)等信息进行奖励,并将统计量 $Z$ 输入策略网络和价值网络。另外,AlphaStar对于人类数据的利用还体现在前面介绍的使用监督学习进行网络的预训练工作中。
|
||||
|
||||
### 13.4.4 多智能体学习/自学习
|
||||
|
||||
自学习在AlphaGo中得到了应用。自学习通俗讲就是自己和自己玩,自己和自己对战。AlphaStar对此进行了一些更新,即有优先级的虚拟自学习策略。虚拟自学习就是在训练过程中,每隔一段时间就进行存档,并随机均匀地从存档中选出对手与正在训练的智能体对战。而有优先级的虚拟自学习指的是优先挑选常能打败智能体的对手进行训练对战,评判指标就是概率。在AlphaStar中,其训练的智能体分为3种:主智能体(main agent)、联盟利用者(league exploiter)和主利用者(main exploiter)。
|
||||
|
||||
- 主智能体:正在训练的智能体及其祖先。其有0.5的概率从联盟中的所有对手中挑选对手,使用有优先级的虚拟自学习策略,即能打败智能体的概率高,不能打败智能体的概率低。有0.35的概率与自己对战,有0.15的概率与能打败智能体的联盟利用者或者先前的智能体对战。
|
||||
|
||||
- 联盟利用者:能打败联盟中的所有智能体。其按照有优先级的虚拟自学习策略计算的概率与全联盟的对手训练,在以0.7的胜率打败所有的智能体或者距离上次存档 $2 \times 10^9$ 步后就保存策略,并且在存档的时候,有0.25概率把场上的联盟利用者的策略重设成监督学习初始化的策略。
|
||||
|
||||
- 主利用者:能打败训练中的所有智能体。在训练的过程中,随机从3个智能体中挑选1个主智能体,如果可以以高于0.1的概率打败该智能体就与其进行训练,如果不能就从之前的主智能体中再挑选对手。当以0.7的胜率打败全部3个正在学习的主智能体时,或者距上次存档 $4 \times 10^9$ 步之后就保存策略,并且进行重设初始化策略的操作。
|
||||
|
||||
他们的区别在于:如何选取训练过程中对战的对手;在什么情况下存档(snapshot)现在的策略;以多大的概率将策略参数重设为监督学习给出的初始化参数。
|
||||
|
||||
## 13.5 AlphaStar实验结果如何呢?————实验结果
|
||||
|
||||
### 13.5.1 宏观结果
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.7.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.7 AlphaStar的实验结果</div>
|
||||
|
||||
图13.7(a) 为训练后的智能体与人类对战的结果(天梯图)。具体地,刚刚结束监督学习后的 AlphaStar 可以达到“钻石”级别,而训练到一半(20天)以及训练完结(40天)的 AlphaStar 可以达到“大师”级别。这也表明AlphaStar已经可以击败绝大多数的普通玩家。
|
||||
|
||||
图13.7(b) 为不同种族间对战的胜率。
|
||||
|
||||
图13.7(c) 为《星际争霸Ⅱ》报告的每分钟有效行动分布情况,其中蓝色为AlphaStar最终的结果,红色为人类选手的结果,虚线表示平均值。
|
||||
|
||||
### 13.5.2 其他实验(消融实验)
|
||||
|
||||
AlphaStar的论文中也使用了消融实验,即控制变量法,来进一步分析每一个约束条件对于对战结果的影响。下面举一个特别的例子。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch13/13.8.png"/>
|
||||
</div>
|
||||
<div align=center>图 13.8 AlphaStar中人类对局数据使用情况</div>
|
||||
|
||||
图13.8 所示为人类对局数据的使用情况。可以看出在没有人类对局数据的情况下,数值仅仅为 149 ,但是只要经过了简单的监督学习,对应的数值就可以达到936,当然使用人类初始化后的强化学习可以达到更好的效果,利用强化学习加监督学习的KL散度可以达到接近于完整的利用人类统计量 $Z$ 的效果。由此我们可以分析出,AlphaStar 中人类对局数据对于整个模型的表现是很重要的,其并没有完全像 AlphaGo 一样,存在可以不使用人类数据进行训练的情况。
|
||||
|
||||
## 13.6 关于AlphaStar的总结
|
||||
|
||||
关于AlphaStar的总结如下。
|
||||
|
||||
(1)AlphaStar设计了一个高度可融合图像、文本、标量等信息的神经网络架构,并且对于网络设计使用了自回归(autoregressive)技巧,从而解耦了结构化的动作空间。
|
||||
|
||||
(2)其融合了模仿学习和监督学习的内容,例如人类统计量 $Z$ 的计算方法。
|
||||
|
||||
(3)其拥有复杂的深度强化学习方法以及超复杂的训练策略。
|
||||
|
||||
(4)其完整模型的端到端训练过程需要大量的计算资源。对于此,原文表述如下:每个智能体使用32个第三代张量处理单元(tensor processing unit,TPUs)进行了44天的训练;在训练期间,创建了近900个不同的游戏玩家。
|
||||
|
||||
## 参考文献
|
||||
|
||||
[Vinyals, Oriol, et al. "Grandmaster level in StarCraft II using multi-agent reinforcement learning." Nature (2019): 1-5.](https://www.nature.com/articles/s41586-019-1724-z?)
|
||||
|
||||
## AlphaStar的模型输入输出是什么?——环境设计
|
||||
|
||||
构建DRL模型的第一部分就是构建输入输出,对于星际争霸2这个复杂的环境,paper第一步做的就是将游戏的环境抽象成为许多的数据信息。
|
||||
|
||||
### 状态(网络的输入)
|
||||
|
||||
AlphaStar将星际争霸2的环境状态分为四部分,分别为实体信息(Entities)、地图信息(Map)、玩家数据信息(Player data)、游戏统计信息(Game statistics)。
|
||||
|
||||

|
||||
|
||||
- 第一部分:实体信息,例如当前时刻环境中有什么建筑、兵种等等,并且我们将每一个实体的属性信息以向量的形式表示,例如对于一个建筑,其当前时刻的向量中包含此建筑的血量、等级、位置以及冷却时间等等信息。所以对于当前帧的全部实体信息,环境会给神经网络 $N$ 个长度为 $K$ 的向量,各表示此刻智能体能够看见的 $N$ 个实体的具体信息。(向量信息)
|
||||
- 第二部分:地图信息,这个比较好理解,也就是将地图中的信息以矩阵的形式送入神经网络中,来表示当前状态全局地图的信息。(向量信息或者说是图像信息)
|
||||
- 第三部分:玩家数据信息,也就是当前状态下,玩家的等级、种族等等信息。(标量信息)
|
||||
- 第四部分:游戏统计信息,相机的位置(小窗口的位置,区别于第二部分的全局地图信息),还有当前游戏的开始时间等等信息。(标量信息)
|
||||
|
||||
### 动作(网络的输出)
|
||||
|
||||
AlphaStar的动作信息主要分为六个部分,分别为动作类型(Action type)、选中的单元(Selected units)、目标(Target)、执行动作的队列(Queued)、是否重复(Repeat)、延时(Delay),每一个部分间是有关联的。
|
||||
|
||||

|
||||
|
||||
- 第一部分:动作类型,即下一次要进行的动作的类型是移动小兵、升级建筑还是移动小窗口的位置等等
|
||||
- 第二部分:选中的单元,即承接第一部分,例如我们要进行的动作类型是移动小兵,那么我们就应该选择具体“操作”哪一个小兵
|
||||
- 第三部分:目标,承接第二部分,我们操作小兵A后,是要去地图的某一个位置还是去攻击对手的哪一个目标等等,即选择目的地和攻击的对象
|
||||
- 第四部分:执行动作的队列,具体说是是否立即执行动作,对于小兵A,我们是到达目的地后直接进行攻击还是等待
|
||||
- 第五部分:是否重复做动作,如果需要小兵A持续攻击,那么就不需要再通过网络计算得到下一个的动作了,直接重复以上一个动作的相同的动作即可。
|
||||
- 第六部分:延时,也就是等候多久才接收网络的输入,可以理解为我们人类玩家的一个操作的延迟等等
|
||||
|
||||
## AlphaStar的计算模型是什么呢?——网络结构
|
||||
|
||||
上面我们说明了AlphaStar网络的输入和输出,即状态和动作,那么从状态怎么得到动作呢?其网络结构是怎么样的呢?
|
||||
|
||||

|
||||
|
||||
### 输入部分
|
||||
|
||||

|
||||
|
||||
从上图的红框可以看出,模型的输入框架中主要有三个部分,即Scalar features(标量特征),例如前面叙述的玩家的等级、小窗口的位置等等信息、Entities(实体),是向量即前面所叙述的一个建筑一个兵的当前的所有属性信息、Minimap(地图),即上面说的图像的数据。
|
||||
|
||||
- 对于Scalar features(标量特征),使用多层感知器(MLP),就可以得到对应的向量,或者说是一个embedding的过程。
|
||||
- 对于Entities,使用NLP中常用的transformer作为encoder
|
||||
- 对于Minimap,使用图像中常用的Resnet作为encoder,得到一个定长的向量。
|
||||
|
||||
### 中间过程
|
||||
|
||||
中间过程比较简单,即通过一个deep LSTM进行融合三种当前状态下的embedding进行下一时刻的embedding输出,并且将该结果分别送入ValueNetwork、Residual MLP以及Actoin type的后续的MLP中。
|
||||
|
||||

|
||||
|
||||
### 输出部分
|
||||
|
||||
正如前面介绍的,输出的动作是前后有关联的,按照顺序
|
||||
|
||||

|
||||
|
||||
- 首先是动作类型(Action type):使用Deep LSTM的embedding的向量作为输入,使用residual MLP得到Action type的softmax的输出结果,并传给下一个子模型进行embedding。
|
||||
- 然后是延时(Delay):使用上一个上面的embedding的结果以及Deep LSTM的结果一起输入MLP后得到结果,并传给下一个子模型进行embedding。
|
||||
- 接下来是执行动作的队列(Queued):使用delay的结果以及embedding的结果一起输入MLP后得到结果,并传给下一个子模型进行embedding。
|
||||
- 然后是选中的单元(Selected units):使用queued的结果、embedding的结果以及Entity encoder的全部结果(非平均的结果)一起送入到Pointer Network中得到结果,并传给下一个子模型进行embedding。这里的Pointer Netowrk为指针网络,即输入的是一个序列,输出是另外一个序列,并且,输出序列的元素来源于输入的序列,主要用于NLP中,在这里很适合与我们的Selected units的计算。
|
||||
- 接着是目标单元(Target unit)和目标区域(Target point)两者二选一进行,对于Target unit,使用attention机制得到最优的动作作用的一个对象,对于target point,使用反卷积神经网络,将embedding的向量,反卷积为map的大小,从而执行目标移动到某一点的对应的动作。
|
||||
|
||||
## 庞大的AlphaStar如何训练呢?——学习算法
|
||||
|
||||
对于上面复杂的模型,AlphaStar究竟如何来进行训练呢?总结下来一共分为4个部分,即监督学习(主要是解决训练的初始化问题)、强化学习、模仿学习(配合强化学习)以及多智能体学习和自学习(面向对战的具体问题),下面我们一一分析:
|
||||
|
||||
### 监督学习
|
||||
|
||||
在训练一开始首先使用监督学习利用人类的数据进行一个比较好的初始化。模型的输入是收集到的人类的对局的信息,输出是训练好的神经网络。具体的做法是,对于收集到了人类的对局数据,在对于每一个时刻解码游戏的状态,将每一时刻的状态送入网络中得到以上每一个动作的概率分布,最终计算模型的输出以及人类数据的KL Loss,并以此进行网络的优化,其中在KL Loss中需要使用不同的 Loss 函数,例如,Action类型的输出,即分类问题的loss就需要使用Cross Entropy。而对于target location等类似于回归问题的就需要计算MSE。当然还有一些细节,大家可以自行阅读paper。总之,经过监督学习,我们的模型输出的概率分布就可以与人类玩家输出的概率分布类似。
|
||||
|
||||
### 强化学习
|
||||
|
||||
这里的目标就是通过优化策略使得期望的reward最大,即
|
||||
$$
|
||||
J(\pi_{\theta}) = \Epsilon_{\pi_{\theta}} \sum_{t=0}r(s_t,a_t)
|
||||
$$
|
||||
但AlphaStar的训练的模型使用不是采样的模型,即off-policy的模型,这是因为其使用的架构为类似于IMPALA的结构,即Actor负责与环境交互并采样,learner负责优化网络并更新参数,而Actor和learner通常是异步进行计算的,并且由于前面介绍的输出的动作的类型空间复杂,所以导致我们的value function的拟合比较困难。
|
||||
|
||||
这里AlphaStar利用了以下的方式进行强化学习模型的构建:
|
||||
|
||||
- 首先是采取了经典的Actor-critic的结构,使用策略网络给出当前状态下的智能体的动作,即计算$\pi(a_t|s_t)$ ,使用价值网络计算当前状态下的智能体的期望收益,即计算 $V(s_t) = \Epsilon \sum_{t'=t}r_{t'} = \Epsilon_{a_t}[r(s_t,a_t)+V(s_{t+1})]$。具体的计算方法是:
|
||||
- 对于当前的状态 $s$ ,计算当前计算出的动作 $a$ 相对于“平均动作”所能额外获得的奖励。$A(s_t,a_t)=[r(s_t,a_t)+V(s_{t+1})]-V(s_t)$,即当前动作的预期收益减去当前状态的预期收益。在AlphaStar中,UPGO(Upgoing Policy Update)也得到了应用,即UPGO使用了一个迭代变量 $G_t$ 来取代原来的动作预期收益的 $r(s_t,a_t)+V(s_{t+1})$ ,即把未来乐观的信息纳入到我们额外奖励中,上式可改写为:
|
||||
|
||||
$$
|
||||
A(s_t,a_t)=G_t-V(s_t)
|
||||
$$
|
||||
|
||||
$$
|
||||
G_t=\left\{
|
||||
\begin{aligned}
|
||||
r_t+G_{t+1} && Q(s_{s+1},a_{t+1})\geq V(s_{t+1}) \\
|
||||
r_t+V(s_{t+1}) && otherwise \\
|
||||
\end{aligned}
|
||||
\right.
|
||||
$$
|
||||
|
||||
- 在基于上面计算得到的action,更新策略梯度,即 $\nabla_{\theta}J = A(s_t,a_t)\nabla_{\theta}log \pi_{\theta}(a_t|s_t)$,在我们之前的笔记中也介绍了,如果基于 $\pi_{\theta}$ 的分布不好求解,或者说学习策略 $\pi_{\theta}$ 与采集策略 $\pi_{\mu}$ 不同的话,我们需要使用重要性采样的方法,即 $\nabla_{\theta}J = E_{\pi_{\mu}}\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)} A^{\pi_{\theta}}(s_t,a_t)\nabla_{\theta}log \pi_{\theta}(a_t|s_t)$。当然我们还需防止 $\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)}$ 出现无穷大的情况,我们需要使用V-trace限制重要性系数。这也是用于off-policy的一个更新方法,在 IMPALA 论文中的4.1小节有所体现。即将重要性系数的最大值限制为1,公式可表达如下:
|
||||
|
||||
$$
|
||||
\nabla_{\theta}J = E_{\pi_{\mu}}\rho_tA^{\pi_{\theta}}(s_t,a_t)\nabla_{\theta}log \pi_{\theta}(a_t|s_t)
|
||||
$$
|
||||
|
||||
$$
|
||||
\rho_t = min(\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\mu} (a_t|s_t)},1)
|
||||
$$
|
||||
|
||||
- 利用了TD($\lambda$) 来优化价值网络,并同时输入对手的数据。对于我们的价值函数 $V^{\pi_{\theta}}(s_t)=E_{\pi_{\theta}}\sum_{t'=t}\gamma^{t'-t}r(s_t,a_t)=E_{a_t\sim\pi_{\theta}(\cdot|s_t)}[r(s_t,a_t)+\gamma V(s_{t+1})]$,可以使用TD的方法计算MSE损失,有如下几种:
|
||||
- $TD(0)$ ,表达式为 $L = [(r_t+\gamma V_{t+1})-V_t]^2$ ,即当前step的信息,有偏小方差
|
||||
- $TD(1)$也就是MC方法,表达式为 $L = [(\sum_{t'=t}^\infty\gamma^{t'-t}r_{t'})-V_t]^2$,即未来无穷个step的信息,无偏大方差
|
||||
- $TD(\lambda)$ ,以上两个方法的加权平均。即平衡当前step、下一个step到无穷个step后的结果
|
||||
- 已知对于 $\lambda \in (0,1)$, $(1-\lambda)+(1-\lambda)\lambda+(1-\lambda)\lambda ^2+...=1$
|
||||
- $R_t = \lim_{T\rightarrow\infty} (1-\lambda)(r_t+V_{t+1})+(1-\lambda)\lambda(r_t+\gamma r_{t+1}+\gamma^2 V_{t+2})+...$
|
||||
|
||||
### 模仿学习
|
||||
|
||||
使用模仿学习额外引入了监督学习Loss以及人类的统计量 $Z$ ,即对于Build order(建造顺序)、Build Units(建造单元)、Upgrades(升级)、Effects(技能)等信息进行了奖励。对于统计量 $Z$ ,本质来说是一系列的数据,将其作为输入信息输入到策略网络和价值网络中。另外对于人类信息的利用还体现在前面介绍的使用监督学习进行网络的预训练工作。
|
||||
|
||||
### 多智能体学习/自学习
|
||||
|
||||
自学习在AlphaGo中得到了应用也就是自己和自己玩,Alpha对此做了一些更新,即有优先级的虚拟自学习策略,对于虚拟自学习就是在训练过程中,每一些时间就进行存档,并随机均匀的从存档中选出对手与正在训练的智能体对战。而有优先级的虚拟自学习指的是优先挑选能击败我的或者说常能打败智能体的对手进行训练对战,评判指标就是概率。对于AlphaStar中,其训练的agent分为了三种,
|
||||
|
||||
- Main Agent (主智能体),即正在训练的智能体及其祖先;其中有50%的概率从联盟中的所有人中挑选,使用有优先级的虚拟自学习策略,即能打败我的概率高,不能打败我的概率低,有35%的概率与自己对战,有15%的概率与能打败我的联盟利用者或者老的主智能体对战,通过利用了有优先级的虚拟自学习策略。
|
||||
- League Exploiter(联盟利用者):能打败联盟中的所有智能体的agent;其按照有优先级的虚拟自学习策略计算的概率与全联盟的对手训练,在以70%的胜率打败所有的agent或者距离上次存档 $2 \times10^9$ step后就保存,并且在存档的时候,有25%概率把场上的联盟利用者的策略重设成监督学习给出的初始化。
|
||||
- Main Exploiter(主利用者):能打败训练中的所有agent,在训练的过程中,随机从3个中挑1个主智能体,如果可以以高于10%的概率打败该agent就与其进行训练,如果不能就从其他的老主智能体中再挑选对手,当以70%的胜率打败全部三个正在学习的策略主智能体,或者距上次存档 $4 \times10^9 $ 个step之后就存,并且进行重设初始化的操作。
|
||||
|
||||
他们的区别在于:
|
||||
|
||||
- 如何选取训练过程中对战的对象
|
||||
- 在什么情况下存档 (snapshot) 现在的策略
|
||||
- 以多大的概率将策略的参数重设为监督训练给出的初始化
|
||||
|
||||
## AlphaStar实验结果如何呢?——实验结果
|
||||
|
||||
### 宏观结果
|
||||
|
||||

|
||||
|
||||
图A为训练后的agent与人类对战的结果(天梯图),具体地,刚刚结束监督学习后的AlphaStar可以达到钻石级别,而训练到一半(20天)以及训练完结(40天)的AlphaStar可以达到GM的级别。AlphaStar已经可以击败绝大多数的普通玩家。
|
||||
|
||||
图B为不同种族间对战的胜率。
|
||||
|
||||
图C为《星际争霸II》报告的每分钟有效行动分布情况(EPM),其中蓝色为AlphaStar Final的结果,红色为人类选手的结果虚线显示平均值。
|
||||
|
||||
### 其他实验(消融实验)
|
||||
|
||||
AlphaStar的论文中也使用了消融实验,即控制变量法,来进一步分析每一个约束条件对于对战结果的影响。下面举一个特别的例子:
|
||||
|
||||

|
||||
|
||||
上面的图片表示的是人类对局数据的使用的情况。可以看到如果没有人类对局数据的情况下,数值仅仅为149,但是只要经过了简单的监督学习,对应的数值就可以达到936,当然使用人类初始化后的强化学习可以达到更好的效果,利用强化学习加监督学习的KL Loss的话可以达到接近于完整的利用人类统计量 $Z$ 的效果。可以分析出,AlphaStar中人类对局的数据对于整个model的表现是很重要的,其并没有完全像AlphaGo一样,可以不使用人类数据的情况。
|
||||
|
||||
## 关于AlphaStar的总结
|
||||
|
||||
### 总结
|
||||
|
||||
- AlphaStar设计了一个高度可融合图像、文本、标量等信息的神经网络架构,并且对于网络设计使用了Autoregressive解耦了结构化的action space。
|
||||
- 模仿学习和监督学习的内容,例如人类统计量 $Z$ 的计算方法
|
||||
- 复杂的DRL方法以及超复杂的训练策略
|
||||
- 当然了,大量的计算资源(Each agent was trained using 32 third-generation tensor processing units (TPUs 23 ) over 44 days. During league training almost 900 distinct players were created.)
|
||||
|
||||
|
||||
@@ -576,7 +576,7 @@ $$
|
||||
这样迭代的式子中就只有价值函数与状态转移函数了。通过迭代式(2.19),我们也可以得到每个状态的价值。因为不管是在马尔可夫奖励过程,还是在马尔可夫决策过程中,价值函数$V$包含的变量都是只与状态有关,其表示智能体进入某一个状态,未来可能得到多大的价值。比如现在的环境是一个小网格世界(small gridworld),智能体的目的是从某一个状态开始行走,然后到达终止状态,它的终止状态就是左上角与右下角(如图 2.18(右)所示的阴影方块)。小网格世界总共有 14 个非终止状态:$1,\cdots,14$。我们把它的每个位置用一个状态来表示。如图 2.18(左)所示,在小网格世界中,智能体的策略函数直接给定了,它在每一个状态都是随机行走,即在每一个状态都是上、下、左、右行走,采取均匀的随机策略(uniform random policy),$\pi(\mathrm{l} \mid .)=\pi(\mathrm{r} \mid .)=\pi(\mathrm{u} \mid .)=\pi(\mathrm{d} \mid .)=0.25$。 它在边界状态的时候,比如在第4号状态的时候往左走,依然留在第4号状态。我们对其加了限制,这个限制就是出边界的动作不会改变状态,相应概率设置为1,如 $p(7\mid7,\mathrm{r})=1$。
|
||||
我们给出的奖励函数就是智能体每走一步,就会得到 $-$1 的奖励,也就是到达终止状态之前每走一步获得的奖励都是 $-$1,所以智能体需要尽快地到达终止状态。
|
||||
|
||||
给定动作之后状态之间的转移(transition)是确定的,例如$p(2 \mid 6$,u$)=2$,即从第6号状态往上走,它就会直接到达第2号状态。很多时候有些环境是概率性的(probabilistic),比如智能体在第6号状态,它选择往上走的时候,地板可能是滑的,然后它可能滑到第3号状态或者第1号状态,这就是有概率的转移。但我们把环境进行了简化,从6号状态往上走,它就到了第2号状态。因为我们已经知道环境中的每一个概率以及概率转移,所以就可以直接使用式(2.19)进行迭代,这样就会算出每一个状态的价值。
|
||||
给定动作之后状态之间的转移(transition)是确定的,例如$p(2 \mid 6$,u$)=1$,即从第6号状态往上走,它就会直接到达第2号状态。很多时候有些环境是概率性的(probabilistic),比如智能体在第6号状态,它选择往上走的时候,地板可能是滑的,然后它可能滑到第3号状态或者第1号状态,这就是有概率的转移。但我们把环境进行了简化,从6号状态往上走,它就到了第2号状态。因为我们已经知道环境中的每一个概率以及概率转移,所以就可以直接使用式(2.19)进行迭代,这样就会算出每一个状态的价值。
|
||||
|
||||
|
||||
|
||||
@@ -654,7 +654,7 @@ $$
|
||||
### 2.3.11 策略迭代
|
||||
|
||||
策略迭代由两个步骤组成:策略评估和策略改进(policy improvement)。如图 2.21a 所示,第一个步骤是策略评估,当前我们在优化策略 $\pi$,在优化过程中得到一个最新的策略。我们先保证这个策略不变,然后估计它的价值,即给定当前的策略函数来估计状态价值函数。
|
||||
第二个步骤是策略改进,得到 状态价值函数后,我们可以进一步推算出它的 Q 函数。得到 Q 函数后,我们直接对 Q 函数进行最大化,通过在 Q 函数做一个贪心的搜索来进一步改进策略。这两个步骤一直在迭代进行。所以如图 2.21b 所示,在策略迭代里面,在初始化的时候,我们有一个初始化的状态价值函数 $V$ 和 策略$\pi$ ,然后在这两个步骤之间迭代。图 2.21c 上面的线就是我们当前状态价值函数的值,下面的线是策略的值。
|
||||
第二个步骤是策略改进,得到 状态价值函数后,我们可以进一步推算出它的 Q 函数。得到 Q 函数后,我们直接对 Q 函数进行最大化,通过在 Q 函数做一个贪心的搜索来进一步改进策略。这两个步骤一直在迭代进行。所以如图 2.21b 所示,在策略迭代里面,在初始化的时候,我们有一个初始化的状态价值函数 $V$ 和 策略$\pi$ ,然后在这两个步骤之间迭代。图 2.21b 上面的线就是我们当前状态价值函数的值,下面的线是策略的值。
|
||||
策略迭代的过程与踢皮球一样。我们先给定当前已有的策略函数,计算它的状态价值函数。算出状态价值函数后,我们会得到一个 Q 函数。我们对Q 函数采取贪心的策略,这样就像踢皮球,“踢”回策略。然后进一步改进策略,得到一个改进的策略后,它还不是最佳的策略,我们再进行策略评估,又会得到一个新的价值函数。基于这个新的价值函数再进行 Q 函数的最大化,这样逐渐迭代,状态价值函数和策略就会收敛。
|
||||
|
||||
|
||||
|
||||
@@ -1,102 +1,117 @@
|
||||
# Chapter2 马尔可夫决策过程(MDP)
|
||||
# 第二章 马尔可夫决策过程(MDP)
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **马尔可夫性质(Markov Property):** 如果某一个过程未来的转移跟过去是无关,只由现在的状态决定,那么其满足马尔可夫性质。换句话说,一个状态的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。
|
||||
- **马尔可夫链(Markov Chain):** 概率论和数理统计中具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)。
|
||||
- **状态转移矩阵(State Transition Matrix):** 状态转移矩阵类似于一个 conditional probability,当我们知道当前我们在 $s_t$ 这个状态过后,到达下面所有状态的一个概念,它每一行其实描述了是从一个节点到达所有其它节点的概率。
|
||||
- **马尔可夫奖励过程(Markov Reward Process, MRP):** 即马尔可夫链再加上了一个奖励函数。在 MRP之中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个奖励函数(reward function)。奖励函数是一个期望,它说当你到达某一个状态的时候,可以获得多大的奖励。
|
||||
- **horizon:** 定义了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。
|
||||
- **return:** 把奖励进行折扣(discounted),然后获得的对应的收益。
|
||||
- **Bellman Equation(贝尔曼等式):** 定义了当前状态与未来状态的迭代关系,表示当前状态的值函数可以通过下个状态的值函数来计算。Bellman Equation 因其提出者、动态规划创始人 Richard Bellman 而得名 ,同时也被叫作“动态规划方程”。$V(s)=R(S)+ \gamma \sum_{s' \in S}P(s'|s)V(s')$ ,特别地,矩阵形式:$V=R+\gamma PV$。
|
||||
- **Monte Carlo Algorithm(蒙特卡罗方法):** 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
|
||||
- **Iterative Algorithm(动态规划方法):** 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,这个更新就可以停止。
|
||||
- **Q函数 (action-value function):** 其定义的是某一个状态某一个行为,对应的它有可能得到的 return 的一个期望(over policy function)。
|
||||
- **MDP中的prediction(即policy evaluation问题):** 给定一个 MDP 以及一个 policy $\pi$ ,去计算它的 value function,即每个状态它的价值函数是多少。其可以通过动态规划方法(Iterative Algorithm)解决。
|
||||
- **MDP中的control问题:** 寻找一个最佳的一个策略,它的 input 就是MDP,输出是通过去寻找它的最佳策略,然后同时输出它的最佳价值函数(optimal value function)以及它的这个最佳策略(optimal policy)。其可以通过动态规划方法(Iterative Algorithm)解决。
|
||||
- **最佳价值函数(Optimal Value Function):** 我们去搜索一种 policy $\pi$ ,然后我们会得到每个状态它的状态值最大的一个情况,$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy)。optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function,然后我们就说它被解了。
|
||||
**马尔可夫性质(Markov property,MP)**:如果某一个过程未来的状态与过去的状态无关,只由现在的状态决定,那么其具有马尔可夫性质。换句话说,一个状态的下一个状态只取决于它的当前状态,而与它当前状态之前的状态都没有关系。
|
||||
|
||||
## 2 Questions
|
||||
**马尔可夫链(Markov chain)**: 概率论和数理统计中具有马尔可夫性质且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)。
|
||||
|
||||
- 为什么在马尔可夫奖励过程(MRP)中需要有**discount factor**?
|
||||
**状态转移矩阵(state transition matrix)**:状态转移矩阵类似于条件概率(conditional probability),其表示当智能体到达某状态后,到达其他所有状态的概率。矩阵的每一行描述的是从某节点到达所有其他节点的概率。
|
||||
|
||||
答:
|
||||
**马尔可夫奖励过程(Markov reward process,MRP)**: 本质是马尔可夫链加上一个奖励函数。在马尔可夫奖励过程中,状态转移矩阵和它的状态都与马尔可夫链的一样,只多了一个奖励函数。奖励函数是一个期望,即在某一个状态可以获得多大的奖励。
|
||||
|
||||
1. 首先,是有些马尔可夫过程是**带环**的,它并没有终结,然后我们想**避免这个无穷的奖励**;
|
||||
2. 另外,我们是想把这个**不确定性**也表示出来,希望**尽可能快**地得到奖励,而不是在未来某一个点得到奖励;
|
||||
3. 接上面一点,如果这个奖励是它是有实际价值的了,我们可能是更希望立刻就得到奖励,而不是我们后面再得到奖励。
|
||||
4. 还有在有些时候,这个系数也可以把它设为 0。比如说,当我们设为 0 过后,然后我们就只关注了它当前的奖励。我们也可以把它设为 1,设为 1 的话就是对未来并没有折扣,未来获得的奖励跟我们当前获得的奖励是一样的。
|
||||
**范围(horizon)**:定义了同一个回合(episode)或者一个完整轨迹的长度,它是由有限个步数决定的。
|
||||
|
||||
所以,这个系数其实是应该可以作为强化学习 agent 的一个 hyperparameter 来进行调整,然后就会得到不同行为的 agent。
|
||||
**回报(return)**:把奖励进行折扣(discounted),然后获得的对应的奖励。
|
||||
|
||||
- 为什么矩阵形式的Bellman Equation的解析解比较难解?
|
||||
**贝尔曼方程(Bellman equation)**:其定义了当前状态与未来状态的迭代关系,表示当前状态的价值函数可以通过下个状态的价值函数来计算。贝尔曼方程因其提出者、动态规划创始人理查德 $\cdot$ 贝尔曼(Richard Bellman)而得名,同时也被叫作“动态规划方程”。贝尔曼方程即 $V(s)=R(s)+ \gamma \sum_{s' \in S}P(s'|s)V(s')$ ,特别地,其矩阵形式为 $\mathrm{V}=\mathrm{R}+\gamma \mathrm{PV}$。
|
||||
|
||||
答:通过矩阵求逆的过程,就可以把这个 V 的这个价值的解析解直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以就当我们状态非常多的时候,比如说从我们现在十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的一个矩阵。这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去解,只能对于很小量的MRP。
|
||||
**蒙特卡洛算法(Monte Carlo algorithm,MC algorithm)**: 可用来计算价值函数的值。使用本节中小船的例子,当得到一个马尔可夫奖励过程后,我们可以从某一个状态开始,把小船放到水中,让它随波流动,这样就会产生一个轨迹,从而得到一个折扣后的奖励 $g$ 。当积累该奖励到一定数量后,用它直接除以轨迹数量,就会得到其价值函数的值。
|
||||
|
||||
- 计算贝尔曼等式(Bellman Equation)的常见方法以及区别?
|
||||
**动态规划算法(dynamic programming,DP)**: 其可用来计算价值函数的值。通过一直迭代对应的贝尔曼方程,最后使其收敛。当最后更新的状态与上一个状态差距不大的时候,动态规划算法的更新就可以停止。
|
||||
|
||||
答:
|
||||
**Q函数(Q-function)**: 其定义的是某一个状态和某一个动作所对应的有可能得到的回报的期望。
|
||||
|
||||
1. **Monte Carlo Algorithm(蒙特卡罗方法):** 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
|
||||
2. **Iterative Algorithm(动态规划方法):** 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,通常是小于一个阈值 $\gamma$ ,这个更新就可以停止。
|
||||
3. **以上两者的结合方法:** 另外我们也可以通过 Temporal-Difference Learning 的那个办法。这个 `Temporal-Difference Learning` 叫 `TD Leanring`,就是动态规划和蒙特卡罗的一个结合。
|
||||
**马尔可夫决策过程中的预测问题**:即策略评估问题,给定一个马尔可夫决策过程以及一个策略 $\pi$ ,计算它的策略函数,即每个状态的价值函数值是多少。其可以通过动态规划算法解决。
|
||||
|
||||
- 马尔可夫奖励过程(MRP)与马尔可夫决策过程 (MDP)的区别?
|
||||
**马尔可夫决策过程中的控制问题**:即寻找一个最佳策略,其输入是马尔可夫决策过程,输出是最佳价值函数(optimal value function)以及最佳策略(optimal policy)。其可以通过动态规划算法解决。
|
||||
|
||||
答:相对于 MRP,马尔可夫决策过程(Markov Decision Process)多了一个 decision,其它的定义跟 MRP 都是类似的。这里我们多了一个决策,多了一个 action ,那么这个状态转移也多了一个 condition,就是采取某一种行为,然后你未来的状态会不同。它不仅是依赖于你当前的状态,也依赖于在当前状态你这个 agent 它采取的这个行为会决定它未来的这个状态走向。对于这个价值函数,它也是多了一个条件,多了一个你当前的这个行为,就是说你当前的状态以及你采取的行为会决定你在当前可能得到的奖励多少。
|
||||
|
||||
另外,两者之间是有转换关系的。具体来说,已知一个 MDP 以及一个 policy $\pi$ 的时候,我们可以把 MDP 转换成MRP。在 MDP 里面,转移函数 $P(s'|s,a)$ 是基于它当前状态以及它当前的 action,因为我们现在已知它 policy function,就是说在每一个状态,我们知道它可能采取的行为的概率,那么就可以直接把这个 action 进行加和,那我们就可以得到对于 MRP 的一个转移,这里就没有 action。同样地,对于奖励,我们也可以把 action 拿掉,这样就会得到一个类似于 MRP 的奖励。
|
||||
|
||||
- MDP 里面的状态转移跟 MRP 以及 MP 的结构或者计算方面的差异?
|
||||
|
||||
答:
|
||||
|
||||
- 对于之前的马尔可夫链的过程,它的转移是直接就决定,就从你当前是 s,那么就直接通过这个转移概率就直接决定了你下一个状态会是什么。
|
||||
- 但是对于 MDP,它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,你首先要决定的是采取某一种行为。然后因为你有一定的不确定性,当你当前状态决定你当前采取的行为过后,你到未来的状态其实也是一个概率分布。所以你采取行为以及你决定,然后你可能有有多大的概率到达某一个未来状态,以及另外有多大概率到达另外一个状态。所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这是MDP跟之前的马尔可夫过程很不同的一个地方。在马尔科夫决策过程中,行为是由 agent 决定,所以多了一个 component,agent 会采取行为来决定未来的状态转移。
|
||||
|
||||
- 我们如何寻找最佳的policy,方法有哪些?
|
||||
|
||||
答:本质来说,当我们取得最佳的价值函数过后,我们可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。然后,我们直接在这个Q函数上面取一个让这个action最大化的值,然后我们就可以直接提取出它的最佳的policy。
|
||||
|
||||
具体方法:
|
||||
|
||||
1. **穷举法(一般不使用):**假设我们有有限多个状态、有限多个行为可能性,那么每个状态我们可以采取这个 A 种行为的策略,那么总共就是 $|A|^{|S|}$ 个可能的 policy。我们可以把这个穷举一遍,然后算出每种策略的 value function,然后对比一下可以得到最佳策略。但是效率极低。
|
||||
2. **Policy iteration:** 一种迭代方法,有两部分组成,下面两个步骤一直在迭代进行,最终收敛:(有些类似于ML中EM算法(期望-最大化算法))
|
||||
- 第一个步骤是 **policy evaluation** ,即当前我们在优化这个 policy $\pi$ ,所以在优化过程中得到一个最新的这个 policy 。
|
||||
- 第二个步骤是 **policy improvement** ,即取得价值函数后,进一步推算出它的 Q 函数。得到 Q 函数过后,那我们就直接去取它的极大化。
|
||||
3. **Value iteration:** 我们一直去迭代 Bellman Optimality Equation,到了最后,它能逐渐趋向于最佳的策略,这是 value iteration 算法的精髓,就是我们去为了得到最佳的 $v^*$ ,对于每个状态它的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次之后它就会收敛到最佳的policy以及其对应的状态,这里面是没有policy function的。
|
||||
**最佳价值函数**:搜索一种策略 $\pi$ ,使每个状态的价值最大,$V^*$ 就是到达每一个状态的极大值。在极大值中,我们得到的策略是最佳策略。最佳策略使得每个状态的价值函数都取得最大值。所以当我们说某一个马尔可夫决策过程的环境可解时,其实就是我们可以得到一个最佳价值函数。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
## 习题
|
||||
|
||||
- 高冷的面试官: 请问马尔可夫过程是什么?马尔可夫决策过程又是什么?其中马尔可夫最重要的性质是什么呢?
|
||||
**2-1** 为什么在马尔可夫奖励过程中需要有折扣因子?
|
||||
|
||||
答: 马尔可夫过程是是一个二元组 $ <S,P> $ ,S为状态的集合,P为状态转移概率矩阵;
|
||||
而马尔可夫决策过程是一个五元组 $ <S,P,A,R,\gamma> $,其中 $R$ 表示为从 $S$ 到 $S'$ 能够获得的奖励期望, $\gamma$为折扣因子, $A$ 为动作集合.
|
||||
马尔可夫最重要的性质是下一个状态只与当前状态有关,与之前的状态无关,也就是 $P[S_{t+1} | S_t] = P[S_{t+1}|S_1,S_2,...,S_t]$
|
||||
(1)首先,是有些马尔可夫过程是环状的,它并没有终点,所以我们想避免无穷的奖励。
|
||||
|
||||
- 高冷的面试官: 请问我们一般怎么求解马尔可夫决策过程?
|
||||
(2)另外,我们想把不确定性也表示出来,希望尽可能快地得到奖励,而不是在未来的某个时刻得到奖励。
|
||||
|
||||
答: 我们直接求解马尔可夫决策过程可以直接求解贝尔曼等式(动态规划方程),即$V(s)=R(S)+ \gamma \sum_{s' \in S}P(s'|s)V(s')$ ,特别地,矩阵形式:$V=R+\gamma PV$.但是贝尔曼等式很难求解且计算复杂度较高,所以可以使用动态规划,蒙特卡洛,时间差分等方法求解.
|
||||
(3)接上一点,如果这个奖励是有实际价值的,我们可能更希望立刻就得到奖励,而不是后面才可以得到奖励。
|
||||
|
||||
- 高冷的面试官: 请问如果数据流不满足马尔科夫性怎么办?应该如何处理?
|
||||
(4)还有,在有些时候,折扣因子也可以设为0。当它被设为0后,我们就只关注它当前的奖励。我们也可以把它设为1,设为1表示未来获得的奖励与当前获得的奖励是一样的。
|
||||
|
||||
答: 如果不满足马尔科夫性,即下一个状态与之前的状态也有关,若还仅仅用当前的状态来进行求解决策过程,势必导致决策的泛化能力变差。 为了解决这个问题,可以利用RNN对历史信息建模,获得包含历史信息的状态表征。表征过程可以 使用注意力机制等手段。最后在表征状态空间求解马尔可夫决策过程问题。
|
||||
所以,折扣因子可以作为强化学习智能体的一个超参数进行调整,然后就会得到不同行为的智能体。
|
||||
|
||||
- 高冷的面试官: 请分别写出基于状态值函数的贝尔曼方程以及基于动作值的贝尔曼方程.
|
||||
**2-2** 为什么矩阵形式的贝尔曼方程的解析解比较难求得?
|
||||
|
||||
答:
|
||||
通过矩阵求逆的过程,我们就可以把 $V$ 的解析解求出来。但是这个矩阵求逆的过程的复杂度是 $O(N^3)$ ,所以当状态非常多的时候,比如从10个状态到1000个状态,到100万个状态,那么当我们有100万个状态的时候,转移矩阵就会是一个100万乘100万的矩阵。对于这样一个大矩阵进行求逆是非常困难的,所以这种通过解析解去解的方法,只能应用在很小量的马尔可夫奖励过程中。
|
||||
|
||||
- 基于状态值函数的贝尔曼方程: $v_{\pi}(s) = \sum_{a}{\pi(a|s)}\sum_{s',r}{p(s',r|s,a)[r(s,a)+\gamma v_{\pi}(s')]}$
|
||||
- 基于动作值的贝尔曼方程: $q_{\pi}(s,a)=\sum_{s',r}p(s',r|s,a)[r(s',a)+\gamma v_{\pi}(s')]$
|
||||
**2-3** 计算贝尔曼方程的常见方法有哪些,它们有什么区别?
|
||||
|
||||
- 高冷的面试官: 请问最佳价值函数(optimal value function) $v^*$ 和最佳策略(optimal policy) $\pi^*$ 为什么等价呢?
|
||||
(1)蒙特卡洛方法:可用来计算价值函数的值。以本书中的小船示例为例,当得到一个马尔可夫奖励过程后,我们可以从某一个状态开始,把小船放到水中,让它“随波逐流”,这样就会产生一条轨迹,从而得到一个折扣后的奖励 $g$ 。当积累该奖励到一定数量后,直接除以轨迹数量,就会得到其价值函数的值。
|
||||
|
||||
(2)动态规划方法:可用来计算价值函数的值。通过一直迭代对应的贝尔曼方程,最后使其收敛。当最后更新的状态与上一个状态区别不大的时候,通常是小于一个阈值 $\gamma$ 时,更新就可以停止。
|
||||
|
||||
(3)以上两者的结合方法:我们也可以使用时序差分学习方法,其为动态规划方法和蒙特卡洛方法的结合。
|
||||
|
||||
答: 最佳价值函数的定义为: $v^* (s)=\max_{\pi} v^{\pi}(s)$ 即我们去搜索一种 policy $\pi$ 来让每个状态的价值最大。$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy),即 $ \pi^{*}(s)=\underset{\pi}{\arg \max }~ v^{\pi}(s) $. Optimal policy 使得每个状态的价值函数都取得最大值。所以如果我们可以得到一个 optimal value function,就可以说某一个 MDP 的环境被解。在这种情况下,它的最佳的价值函数是一致的,就它达到的这个上限的值是一致的,但这里可能有多个最佳的 policy,就是说多个 policy 可以取得相同的最佳价值。
|
||||
**2-4** 马尔可夫奖励过程与马尔可夫决策过程的区别是什么?
|
||||
|
||||
- 高冷的面试官:能不能手写一下第n步的值函数更新公式呀?另外,当n越来越大时,值函数的期望和方差分别变大还是变小呢?
|
||||
相对于马尔可夫奖励过程,马尔可夫决策过程多了一个决策过程,其他的定义与马尔可夫奖励过程是类似的。由于多了一个决策,多了一个动作,因此状态转移也多了一个条件,即执行一个动作,导致未来状态的变化,其不仅依赖于当前的状态,也依赖于在当前状态下智能体采取的动作决定的状态变化。对于价值函数,它也多了一个条件,多了一个当前的动作,即当前状态以及采取的动作会决定当前可能得到的奖励的多少。
|
||||
|
||||
答:$n$越大,方差越大,期望偏差越小。值函数的更新公式? 话不多说,公式如下:
|
||||
$$
|
||||
Q\left(S, A\right) \leftarrow Q\left(S, A\right)+\alpha\left[\sum_{i=1}^{n} \gamma^{i-1} R_{t+i}+\gamma^{n} \max _{a} Q\left(S',a\right)-Q\left(S, A\right)\right]
|
||||
$$
|
||||
另外,两者之间是有转换关系的。具体来说,已知一个马尔可夫决策过程以及一个策略 $\pi$ 时,我们可以把马尔可夫决策过程转换成马尔可夫奖励过程。在马尔可夫决策过程中,状态的转移函数 $P(s'|s,a)$ 是基于它的当前状态和当前动作的,因为我们现在已知策略函数,即在每一个状态,我们知道其采取每一个动作的概率,所以我们就可以直接把这个动作进行加和,就可以得到对于马尔可夫奖励过程的一个转移概率。同样地,对于奖励,我们可以把动作去掉,这样就会得到一个类似于马尔可夫奖励过程的奖励。
|
||||
|
||||
**2-5** 马尔可夫决策过程中的状态转移与马尔可夫奖励过程中的状态转移的结构或者计算方面的差异有哪些?
|
||||
|
||||
对于马尔可夫链,它的转移概率是直接决定的,即从当前时刻的状态通过转移概率得到下一时刻的状态值。但是对于马尔可夫决策过程,其中间多了一层动作的输出,即在当前这个状态,首先要决定采取某一种动作,再通过状态转移函数变化到另外一个状态。所以在当前状态与未来状态转移过程中多了一层决策性,这是马尔可夫决策过程与之前的马尔可夫过程的不同之处。在马尔可夫决策过程中,动作是由智能体决定的,所以多了一个组成部分,智能体会采取动作来决定未来的状态转移。
|
||||
|
||||
**2-6** 我们如何寻找最佳策略,寻找最佳策略方法有哪些?
|
||||
|
||||
本质来说,当我们取得最佳价值函数后,我们可以通过对Q函数进行最大化,从而得到最佳价值。然后,我们直接对Q函数取一个让动作最大化的值,就可以直接得到其最佳策略。具体方法如下,
|
||||
|
||||
(1)穷举法(一般不使用):假设我们有有限个状态、有限个动作可能性,那么每个状态我们可以采取 $A$ 种动作策略,那么总共就是 $|A|^{|S|}$ 个可能的策略。我们可以把他们穷举一遍,然后算出每种策略的价值函数,对比一下就可以得到最佳策略。但是这种方法的效率极低。
|
||||
|
||||
(2)策略迭代: 一种迭代方法,其由两部分组成,以下两个步骤一直在迭代进行,最终收敛,其过程有些类似于机器学习中的EM算法(期望-最大化算法)。第一个步骤是策略评估,即当前我们在优化这个策略 $\pi$ ,在优化过程中通过评估从而得到一个更新的策略;第二个步骤是策略提升,即取得价值函数后,进一步推算出它的Q函数,得到它的最大值。
|
||||
|
||||
(3)价值迭代: 我们一直迭代贝尔曼最优方程,通过迭代,其能逐渐趋向于最佳策略,这是价值迭代方法的核心。我们为了得到最佳的 $V^*$ ,对于每个状态的 $V^*$ 值,直接使用贝尔曼最优方程进行迭代,迭代多次之后它就会收敛到最佳策略及其对应的状态,这里是没有策略函数的。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**2-1** 友善的面试官:请问马尔可夫过程是什么?马尔可夫决策过程又是什么?其中马尔可夫最重要的性质是什么呢?
|
||||
|
||||
马尔可夫过程是一个二元组 $<S,P>$ , $S$ 为状态集合, $P$ 为状态转移函数;
|
||||
|
||||
马尔可夫决策过程是一个五元组 $<S,P,A,R,\gamma>$, 其中 $R$ 表示从 $S$ 到 $S'$ 能够获得的奖励期望, $\gamma$ 为折扣因子, $A$ 为动作集合;
|
||||
|
||||
马尔可夫最重要的性质是下一个状态只与当前状态有关,与之前的状态无关,也就是 $p(s_{t+1} | s_t)= p(s_{t+1}|s_1,s_2,...,s_t)$。
|
||||
|
||||
**2-2** 友善的面试官:请问我们一般怎么求解马尔可夫决策过程?
|
||||
|
||||
我们求解马尔可夫决策过程时,可以直接求解贝尔曼方程或动态规划方程:
|
||||
|
||||
$$V(s)=R(S)+ \gamma \sum_{s' \in S}p(s'|s)V(s')$$
|
||||
|
||||
特别地,其矩阵形式为 $\mathrm{V}=\mathrm{R}+\gamma \mathrm{PV}$。但是贝尔曼方程很难求解且计算复杂度较高,所以可以使用动态规划、蒙特卡洛以及时序差分等方法求解。
|
||||
|
||||
**2-3** 友善的面试官:请问如果数据流不具备马尔可夫性质怎么办?应该如何处理?
|
||||
|
||||
如果不具备马尔可夫性,即下一个状态与之前的状态也有关,若仅用当前的状态来求解决策过程,势必导致决策的泛化能力变差。为了解决这个问题,可以利用循环神经网络对历史信息建模,获得包含历史信息的状态表征,表征过程也可以使用注意力机制等手段,最后在表征状态空间求解马尔可夫决策过程问题。
|
||||
|
||||
**2-4** 友善的面试官:请分别写出基于状态价值函数的贝尔曼方程以及基于动作价值函数的贝尔曼方程。
|
||||
|
||||
(1)基于状态价值函数的贝尔曼方程: $V_{\pi}(s) = \sum_{a}{\pi(a|s)}\sum_{s',r}{p(s',r|s,a)[r(s,a)+\gamma V_{\pi}(s')]}$;
|
||||
|
||||
(2)基于动作价值函数的贝尔曼方程: $Q_{\pi}(s,a)=\sum_{s',r}p(s',r|s,a)[r(s',a)+\gamma V_{\pi}(s')]$。
|
||||
|
||||
**2-5** 友善的面试官:请问最佳价值函数 $V^*$ 和最佳策略 $\pi^*$ 为什么等价呢?
|
||||
|
||||
最佳价值函数的定义为 $V^* (s)=\max_{\pi} V_{\pi}(s)$ ,即我们搜索一种策略 $\pi$ 来让每个状态的价值最大。$V^*$ 就是到达每一个状态其的最大价值,同时我们得到的策略就可以说是最佳策略,即$ \pi^{*}(s)=\underset{\pi}{\arg \max }~ V_{\pi}(s)$ 。最佳策略使得每个状态的价值函数都取得最大值。所以如果我们可以得到一个最佳价值函数,就可以说某一个马尔可夫决策过程的环境被解。在这种情况下,其最佳价值函数是一致的,即其达到的上限的值是一致的,但这里可能有多个最佳策略对应于相同的最佳价值。
|
||||
|
||||
**2-6** 友善的面试官:能不能手写一下第$n$步的价值函数更新公式呀?另外,当 $n$ 越来越大时,价值函数的期望和方差是分别变大还是变小呢?
|
||||
|
||||
$n$ 越大,方差越大,期望偏差越小。价值函数的更新公式如下:
|
||||
|
||||
$$
|
||||
Q\left(S, A\right) \leftarrow Q\left(S, A\right)+\alpha\left[\sum_{i=1}^{n} \gamma^{i-1} r_{t+i}+\gamma^{n} \max _{a} Q\left(S',a\right)-Q\left(S, A\right)\right]
|
||||
$$
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
强化学习是一个与时间相关的序列决策的问题。例如,如图 3.1 所示,在 $t-1$ 时刻,我看到熊对我招手,下意识的动作就是逃跑。熊看到有人逃跑,就可能觉得发现了猎物,并开始发动攻击。而在 $t$ 时刻,我如果选择装死的动作,可能熊咬咬我、摔几下就觉得挺无趣的,可能会走开。这个时候我再逃跑,可能就成功了,这就是一个序列决策过程。
|
||||
|
||||
在输出每一个动作之前,我们可以选择不同的动作。比如在 $t$ 时刻,我选择逃跑的时候,可能熊已经追上来了。如果在 $t$ 时刻,我没有选择装死,而是选择逃跑,这个时候熊已经追上来了,那么我就会转移到不同的状态。有一定的概率我会逃跑成功,也有一定的概率我会逃跑失败。我们用状态转移概率 $p\left[s_{t+1}, r_{t} \mid s_{t}, a_{t}\right]$ 来表示在状态 $s_t$ 选择动作 $a_t$ 的时候,转移到转态 $s_{t+1}$ ,而且得到奖励 $r_t$ 的概率是多少。状态转移概率是具有**马尔可夫性质**的(系统下一时刻的状态仅由当前时刻的状态决定,不依赖于以往任何状态)。因为在这个过程中,下一时刻的状态取决于当前的状态 $s_t$,它和之前的 $s_{t-1}$ 和 $s_{t-2}$ 没有关系。再加上这个过程也取决于智能体与环境交互的 $a_t$ ,所以包含了决策的过程,我们称这样的过程为马尔可夫决策过程。马尔可夫决策过程就是序列决策的经典的表现方式。马尔可夫决策过程也是强化学习里面一个非常基本的学习框架。状态、动作、状态转移概率和奖励 $(S$、$A$、$P$、$R)$,这4个合集就构成了强化学习马尔可夫决策过程的四元组,后面也可能会再加上折扣因子构成五元组。
|
||||
在输出每一个动作之前,我们可以选择不同的动作。比如在 $t$ 时刻,我选择逃跑的时候,可能熊已经追上来了。如果在 $t$ 时刻,我没有选择装死,而是选择逃跑,这个时候熊已经追上来了,那么我就会转移到不同的状态。有一定的概率我会逃跑成功,也有一定的概率我会逃跑失败。我们用状态转移概率 $p\left[s_{t+1}, r_{t} \mid s_{t}, a_{t}\right]$ 来表示在状态 $s_t$ 选择动作 $a_t$ 的时候,转移到状态 $s_{t+1}$ ,而且得到奖励 $r_t$ 的概率是多少。状态转移概率是具有**马尔可夫性质**的(系统下一时刻的状态仅由当前时刻的状态决定,不依赖于以往任何状态)。因为在这个过程中,下一时刻的状态取决于当前的状态 $s_t$,它和之前的 $s_{t-1}$ 和 $s_{t-2}$ 没有关系。再加上这个过程也取决于智能体与环境交互的 $a_t$ ,所以包含了决策的过程,我们称这样的过程为马尔可夫决策过程。马尔可夫决策过程就是序列决策的经典的表现方式。马尔可夫决策过程也是强化学习里面一个非常基本的学习框架。状态、动作、状态转移概率和奖励 $(S$、$A$、$P$、$R)$,这4个合集就构成了强化学习马尔可夫决策过程的四元组,后面也可能会再加上折扣因子构成五元组。
|
||||
|
||||
|
||||
<div align=center>
|
||||
|
||||
@@ -1,108 +1,117 @@
|
||||
# Chapter3 表格型方法
|
||||
# 第三章 表格型方法
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **P函数和R函数:** P函数反应的是状态转移的概率,即反应的环境的随机性,R函数就是Reward function。但是我们通常处于一个未知的环境(即P函数和R函数是未知的)。
|
||||
- **Q表格型表示方法:** 表示形式是一种表格形式,其中横坐标为 action(agent)的行为,纵坐标是环境的state,其对应着每一个时刻agent和环境的情况,并通过对应的reward反馈去做选择。一般情况下,Q表格是一个已经训练好的表格,不过,我们也可以每进行一步,就更新一下Q表格,然后用下一个状态的Q值来更新这个状态的Q值(即时序差分方法)。
|
||||
- **时序差分(Temporal Difference):** 一种Q函数(Q值)的更新方式,也就是可以拿下一步的 Q 值 $Q(S_{t+_1},A_{t+1})$ 来更新我这一步的 Q 值 $Q(S_t,A_t)$ 。完整的计算公式如下:$Q(S_t,A_t) \larr Q(S_t,A_t) + \alpha [R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)]$
|
||||
- **SARSA算法:** 一种更新前一时刻状态的单步更新的强化学习算法,也是一种on-policy策略。该算法由于每次更新值函数需要知道前一步的状态(state),前一步的动作(action)、奖励(reward)、当前状态(state)、将要执行的动作(action),即 $(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 这几个值,所以被称为SARSA算法。agent每进行一次循环,都会用 $(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 对于前一步的Q值(函数)进行一次更新。
|
||||
- **概率函数和奖励函数**:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励函数是未知的。
|
||||
|
||||
## 2 Questions
|
||||
- **Q表格**:其表示形式是表格,其中表格的横轴为动作(智能体的动作),纵轴为环境的状态,每一个坐标点对应某时刻智能体和环境的状态,并通过对应的奖励反馈选择被执行的动作。一般情况下,Q表格是一个已经训练好的表格,不过我们也可以每执行一步,就对Q表格进行更新,然后用下一个状态的Q值来更新当前状态的Q值(即时序差分方法)。
|
||||
|
||||
- 构成强化学习MDP的四元组有哪些变量?
|
||||
- **时序差分(temporal difference,TD)方法**:一种Q函数(Q值)的更新方式,流程是使用下一步的Q值 $Q(s_{t+1},a_{t+1})$ 来更新当前步的Q值 $Q(s_t,a_t)$。完整的计算公式如下:$Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha [r_{t+1}+\gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t)]$ 。
|
||||
|
||||
答:状态、动作、状态转移概率和奖励,分别对应(S,A,P,R),后面有可能会加上个衰减因子构成五元组。
|
||||
- **Sarsa算法**:一种更新前一时刻状态的单步更新的强化学习算法,也是一种同策略学习算法。该算法由于每次更新Q函数时需要知道前一步的状态、动作、奖励以及当前时刻的状态、将要执行的动作,即 $s_{t}$、$a_{t}$、$r_{t+1}$、$s_{t+1}$、$a_{t+1}$ 这几个值,因此被称为 Sarsa 算法。智能体每进行一次循环,都会用 $s_{t}$、$a_{t}$、$r_{t+1}$、$s_{t+1}$、$a_{t+1}$ 对前一步的Q值(函数)进行一次更新。
|
||||
|
||||
- 基于以上的描述所构成的强化学习的“学习”流程。
|
||||
|
||||
答:强化学习要像人类一样去学习了,人类学习的话就是一条路一条路的去尝试一下,先走一条路,我看看结果到底是什么。多试几次,只要能一直走下去的,我们其实可以慢慢的了解哪个状态会更好。我们用价值函数 $V(s)$ 来代表这个状态是好的还是坏的。然后用这个 Q 函数来判断说在什么状态下做什么动作能够拿到最大奖励,我们用 Q 函数来表示这个状态-动作值。
|
||||
## 习题
|
||||
|
||||
- 基于SARSA算法的agent的学习过程。
|
||||
**3-1** 构成强化学习的马尔可夫决策过程的四元组有哪些变量?
|
||||
|
||||
答:我们现在有环境,有agent。每交互一次以后,我们的agent会向环境输出action,接着环境会反馈给agent当前时刻的state和reward。那么agent此时会实现两个方法:
|
||||
状态、动作、状态转移概率和奖励,分别对应$(S,A,P,R)$,后面有可能会加上折扣因子构成五元组。
|
||||
|
||||
**3-2** 请通俗地描述强化学习的“学习”流程。
|
||||
|
||||
可以将强化学习的“学习”流程类比于人类的学习流程。人类学习就是尝试每一条路,并记录尝试每一条路后的最终结果。在人类尝试的过程中,其实就可以慢慢地了解到哪一条路(对应于强化学习中的状态概念)会更好。我们用价值函数 $V(s)$ 来定量表达该状态的优劣,然后用Q函数来判断在什么状态下做什么动作能够得到最大奖励,在强化学习中我们用Q函数来表示状态-动作值。
|
||||
|
||||
**3-3** 请描述基于Sarsa算法的智能体的学习过程。
|
||||
|
||||
对于环境和智能体。两者每交互一次以后,智能体都会向环境输出动作,接着环境会反馈给智能体当前时刻的状态和奖励。那么智能体此时会进行两步操作:
|
||||
|
||||
(1)使用已经训练好的Q表格,对应环境反馈的状态和奖励选取对应的动作进行输出。
|
||||
|
||||
(2)我们已经拥有了$(s_{t}, a_{t}, r_{t+1}, s_{t+1}, a_{t+1})$ 这几个值,并直接使用 $a_{t+1}$ 更新我们的Q表格。
|
||||
|
||||
**3-4** Q学习算法和Sarsa算法的区别是什么?
|
||||
|
||||
Sarsa算法是Q学习算法的改进(这句话可参考论文 “On-Line Q-Learning Using Connectionist Systems”的摘要部分),详细描述如下。
|
||||
|
||||
(1)首先,Q学习是异策略的时序差分学习方法,而 Sarsa 算法是同策略的时序差分学习方法。
|
||||
|
||||
(2)其次,Sarsa算法在更新Q表格的时候所用到的 $a'$ 是获取下一个Q值时一定会执行的动作。这个动作有可能是用 $\varepsilon$-贪心方法采样出来的,也有可能是 $\mathrm{max}_Q$ 对应的动作,甚至是随机动作。
|
||||
|
||||
(3)但是Q学习在更新Q表格的时候所用到的Q值 $Q(S',a')$ 对应的动作不一定是下一步会执行的动作,因为下一步实际会执行的动作可能是因为进一步的探索而得到的。Q学习默认的动作不是通过行为策略来选取的,它默认 $a'$ 为最佳策略对应的动作,所以Q学习算法在更新的时候,不需要传入 $a'$ ,即 $a_{t+1}$ 。
|
||||
|
||||
(4)更新公式的对比(区别只在目标计算部分)。
|
||||
|
||||
Sarsa算法的公式:$r_{t+1}+\gamma Q(s_{t+1}, a_{t+1})$ 。
|
||||
|
||||
Q学习算法的公式:$r_{t+1}+\gamma \underset{a}{\max} Q\left(s_{t+1}, a\right)$ 。
|
||||
|
||||
总结起来,Sarsa算法实际上是用固有的策略产生 {$S,A,R,S',A'$} 这一条轨迹,然后使用 $Q(s_{t+1},a_{t+1})$ 更新原本的Q值 $Q(s_t,a_t)$ 。但是Q学习算法并不需要知道实际上选择的动作,它默认下一个动作就是Q值最大的那个动作。所以Sarsa算法的动作通常会更加“保守胆小”,而对应的Q学习算法的动作会更加“莽撞激进”。
|
||||
|
||||
**3-5** 同策略和异策略的区别是什么?
|
||||
|
||||
Sarsa算法就是一个典型的同策略算法,它只用一个 $\pi$ ,为了兼顾探索和开发,它在训练的时候会显得有点儿“胆小怕事”。它在解决悬崖寻路问题的时候,会尽可能地远离悬崖边,确保哪怕自己不小心向未知区域探索了一些,也还是处在安全区域内,不至于掉入悬崖中。
|
||||
|
||||
Q学习算法是一个比较典型的异策略算法,它有目标策略(target policy),用 $\pi$ 来表示。此外还有行为策略(behavior policy),用 $\mu$ 来表示。它分离了目标策略与行为策略,使得其可以大胆地用行为策略探索得到的经验轨迹来优化目标策略。这样智能体就更有可能探索到最优的策略。
|
||||
|
||||
比较Q学习算法和Sarsa算法的更新公式可以发现,Sarsa算法并没有选取最大值的操作。因此,Q学习算法是非常激进的,其希望每一步都获得最大的奖励;Sarsa算法则相对来说偏保守,会选择一条相对安全的迭代路线。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**3-1** 友善的面试官:同学,你能否简述同策略和异策略的区别呢?
|
||||
|
||||
同策略和异策略的根本区别在于生成样本的策略和参数更新时的策略是否相同。对于同策略,行为策略和要优化的策略是同一策略,更新了策略后,就用该策略的最新版本对数据进行采样;对于异策略,其使用任意行为策略来对数据进行采样,并利用其更新目标策略。例如,Q学习在计算下一状态的预期奖励时使用了最大化操作,直接选择最优动作,而当前策略并不一定能选择到最优的动作,因此这里生成样本的策略和学习时的策略不同,所以Q学习算法是异策略算法;相对应的Sarsa算法则是基于当前的策略直接执行一次动作选择,然后用动作和对应的状态更新当前的策略,因此生成样本的策略和学习时的策略相同,所以Sarsa算法为同策略算法。
|
||||
|
||||
**3-2** 友善的面试官:能否细致地讲一下Q学习算法,最好可以写出其 $Q(s,a)$ 的更新公式。另外,它是同策略还是异策略,原因是什么呢?
|
||||
|
||||
Q学习是通过计算最优动作价值函数来求策略的一种时序差分的学习方法,其更新公式为
|
||||
|
||||
$$
|
||||
Q(s, a) \leftarrow Q(s, a) + \alpha [r(s,a) + \gamma \max_{a'} Q(s', a') - Q(s, a)]
|
||||
$$
|
||||
|
||||
其是异策略的,由于Q更新使用了下一个时刻的最大值,因此其只关心哪个动作使得 $Q(s_{t+1}, a)$ 取得最大值,而实际上到底采取了哪个动作(行为策略),Q学习并不关心。这表明优化策略并没有用到行为策略的数据,所以说它是异策略的。
|
||||
|
||||
**3-3** 友善的面试官:好的,看来你对于Q学习算法很了解,那么能否讲一下与Q学习算法类似的Sarsa算法呢,最好也可以写出其对应的 $Q(s,a)$ 更新公式。另外,它是同策略还是异策略,为什么?
|
||||
|
||||
Sarsa算法可以算是Q学习算法的改进,其更新公式为
|
||||
|
||||
$$
|
||||
Q(s, a) \leftarrow Q(s, a) + \alpha [r(s,a) + \gamma Q(s', a') - Q(s, a)]
|
||||
$$
|
||||
|
||||
其为同策略的,Sarsa算法必须执行两次动作得到 $(s,a,r,s',a')$ 才可以更新一次;而且 $a'$ 是在特定策略 $\pi$ 的指导下执行的动作,因此估计出来的 $Q(s,a)$ 是在该策略 $\pi$ 下的Q值,样本生成用的 $\pi$ 和估计的 $\pi$ 是同一个,因此是同策略。
|
||||
|
||||
**3-4** 友善的面试官:请问基于价值的方法和基于策略的方法的区别是什么?
|
||||
|
||||
(1)生成策略上的差异,前者确定,后者随机。基于价值的方法中动作-价值对的估计值最终会收敛(通常是不同的数,可以转化为0~1的概率),因此通常会获得一个确定的策略;基于策略的方法不会收敛到一个确定的值,另外他们会趋向于生成最佳随机策略。如果最佳策略是确定的,那么最优动作对应的值函数的值将远大于次优动作对应的值函数的值,值函数的大小代表概率的大小。
|
||||
|
||||
(2)动作空间是否连续,前者离散,后者连续。基于价值的方法,对于连续动作空间问题,虽然可以将动作空间离散化处理,但离散间距的选取不易确定。过大的离散间距会导致算法取不到最优动作,会在最优动作附近徘徊;过小的离散间距会使得动作的维度增大,会和高维度动作空间一样导致维度灾难,影响算法的速度。而基于策略的方法适用于连续的动作空间,在连续的动作空间中,可以不用计算每个动作的概率,而是通过正态分布选择动作。
|
||||
|
||||
(3)基于价值的方法,例如Q学习算法,是通过求解最优价值函数而间接地求解最优策略;基于策略的方法,例如REINFORCE等算法直接将策略参数化,通过策略搜索、策略梯度或者进化方法来更新参数以最大化回报。基于价值的方法不易扩展到连续动作空间,并且当同时采用非线性近似、自举等策略时会有收敛问题。策略梯度具有良好的收敛性。
|
||||
|
||||
(4)另外,对于价值迭代和策略迭代,策略迭代有两个循环,一个是在策略估计的时候,为了求当前策略的价值函数需要迭代很多次;另一个是外面的大循环,即策略评估、策略提升。价值迭代算法则是一步到位,直接估计最优价值函数,因此没有策略提升环节。
|
||||
|
||||
**3-5** 友善的面试官:请简述一下时序差分方法。
|
||||
|
||||
时序差分算法是使用广义策略迭代来更新Q函数的方法,核心是使用自举,即价值函数的更新使用下一个状态的价值函数来估计当前状态的价值。也就是使用下一步的Q值 $Q(s_{t+1},a_{t+1})$ 来更新当前步的Q值 $Q(s_t,a_t) $。完整的计算公式如下:
|
||||
|
||||
$$
|
||||
Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha [r_{t+1}+\gamma Q(s_{t+1},a_{t+1})]
|
||||
$$
|
||||
|
||||
**3-6** 友善的面试官:请问蒙特卡洛方法和时序差分方法是无偏估计吗?另外谁的方差更大呢?为什么?
|
||||
|
||||
蒙特卡洛方法是无偏估计,时序差分方法是有偏估计;蒙特卡洛方法的方差较大,时序差分方法的方差较小,原因在于时序差分方法中使用了自举,实现了基于平滑的效果,导致估计的价值函数的方差更小。
|
||||
|
||||
**3-7** 友善的面试官:能否简单说一下动态规划方法、蒙特卡洛方法和时序差分方法的异同点?
|
||||
|
||||
相同点:都用于进行价值函数的描述与更新,并且所有方法都基于对未来事件的展望计算一个回溯值。
|
||||
|
||||
不同点:蒙特卡洛方法和时序差分方法属于免模型方法,而动态规划属于有模型方法;时序差分方法和蒙特卡洛方法,因为都是免模型的方法,所以对于后续状态的获知也都是基于试验的方法;时序差分方法和动态规划方法的策略评估,都能基于当前状态的下一步预测情况来得到对于当前状态的价值函数的更新。
|
||||
|
||||
另外,时序差分方法不需要等到试验结束后才能进行当前状态的价值函数的计算与更新,而蒙特卡洛方法需要与环境交互,产生一整条马尔可夫链并直到最终状态才能进行更新。时序差分方法和动态规划方法的策略评估不同之处为免模型和有模型,动态规划方法可以凭借已知转移概率推断出后续的状态情况,而时序差分方法借助试验才能知道。
|
||||
|
||||
1.使用已经训练好的Q表格,对应环境反馈的state和reward选取对应的action进行输出。
|
||||
|
||||
2.我们已经拥有了$(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 这几个值,并直接使用 $A_{t+1}$ 去更新我们的Q表格。
|
||||
蒙特卡洛方法和时序差分方法的不同在于,蒙特卡洛方法进行了完整的采样来获取长期的回报值,因而在价值估计上会有更小的偏差,但是也正因为收集了完整的信息,所以价值的方差会更大,原因在于其基于试验的采样得到,和真实的分布有差距,不充足的交互导致较大方差。而时序差分方法则相反,因为它只考虑了前一步的回报值,其他都是基于之前的估计值,因而其价值估计相对来说具有偏差大方差小的特点。
|
||||
|
||||
- Q-learning和Sarsa的区别?
|
||||
|
||||
答:Sarsa算法是Q-learning算法的改进。(这句话出自「神经网络与深度学习」的第 342 页)(可参考SARSA「on-line q-learning using connectionist systems」的 abstract 部分)
|
||||
|
||||
1. 首先,Q-learning 是 off-policy 的时序差分学习方法,Sarsa 是 on-policy 的时序差分学习方法。
|
||||
|
||||
2. 其次,Sarsa 在更新 Q 表格的时候,它用到的 A' 。我要获取下一个 Q 值的时候,A' 是下一个 step 一定会执行的 action 。这个 action 有可能是 $\varepsilon$-greddy 方法 sample 出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作。但是就是它实实在在执行了的那个动作。
|
||||
|
||||
3. 但是 Q-learning 在更新 Q 表格的时候,它用到这个的 Q 值 $Q(S',a')$ 对应的那个 action ,它不一定是下一个 step 会执行的实际的 action,因为你下一个实际会执行的那个 action 可能会探索。Q-learning 默认的 action 不是通过 behavior policy 来选取的,它是默认 A' 为最优策略选的动作,所以 Q-learning 在学习的时候,不需要传入 A',即 $a_{t+1}$ 的值。
|
||||
|
||||
4. 更新公式的对比(区别只在target计算这一部分):
|
||||
|
||||
- Sarsa的公式: $R_{t+1}+\gamma Q(S_{t+1}, A_{t+1})$ ;
|
||||
- Q-learning的公式:$R_{t+1}+\gamma \underset{a}{\max} Q\left(S_{t+1}, a\right)$
|
||||
|
||||
Sarsa 实际上都是用自己的策略产生了 S,A,R,S',A' 这一条轨迹。然后拿着 $Q(S_{t+1},A_{t+1})$ 去更新原本的 Q 值 $Q(S_t,A_t)$。 但是 Q-learning 并不需要知道,我实际上选择哪一个 action ,它默认下一个动作就是 Q 最大的那个动作。所以基于此,Sarsa的action通常会更加“保守”、“胆小”,而对应的Q-Learning的action会更加“莽撞”、“激进”。
|
||||
|
||||
- On-policy和 off-policy 的区别?
|
||||
|
||||
答:
|
||||
|
||||
1. Sarsa 就是一个典型的 on-policy 策略,它只用一个 $\pi$ ,为了兼顾探索和利用,所以它训练的时候会显得有点胆小怕事。它在解决悬崖问题的时候,会尽可能地离悬崖边上远远的,确保说哪怕自己不小心探索了一点了,也还是在安全区域内不不至于跳进悬崖。
|
||||
2. Q-learning 是一个比较典型的 off-policy 的策略,它有目标策略 target policy,一般用 $\pi$ 来表示。然后还有行为策略 behavior policy,用 $\mu$ 来表示。它分离了目标策略跟行为策略。Q-learning 就可以大胆地用 behavior policy 去探索得到的经验轨迹来去优化我的目标策略。这样子我更有可能去探索到最优的策略。
|
||||
3. 比较 Q-learning 和 Sarsa 的更新公式可以发现,Sarsa 并没有选取最大值的 max 操作。因此,Q-learning 是一个非常激进的算法,希望每一步都获得最大的利益;而 Sarsa 则相对非常保守,会选择一条相对安全的迭代路线。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
|
||||
- 高冷的面试官:同学,你能否简述on-policy和off-policy的区别?
|
||||
|
||||
答: off-policy和on-policy的根本区别在于生成样本的policy和参数更新时的policy是否相同。对于on-policy,行为策略和要优化的策略是一个策略,更新了策略后,就用该策略的最新版本对于数据进行采样;对于off-policy,使用任意的一个行为策略来对于数据进行采样,并利用其更新目标策略。如果举例来说,Q-learning在计算下一状态的预期收益时使用了max操作,直接选择最优动作,而当前policy并不一定能选择到最优的action,因此这里生成样本的policy和学习时的policy不同,所以Q-learning为off-policy算法;相对应的SARAS则是基于当前的policy直接执行一次动作选择,然后用这个样本更新当前的policy,因此生成样本的policy和学习时的policy相同,所以SARAS算法为on-policy算法。
|
||||
|
||||
- 高冷的面试官:小同学,能否讲一下Q-Learning,最好可以写出其 $Q(s,a)$ 的更新公式。另外,它是on-policy还是off-policy,为什么?
|
||||
|
||||
答: Q-learning是通过计算最优动作值函数来求策略的一种时序差分的学习方法,其更新公式为:
|
||||
$$
|
||||
Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma \max_{a'} Q(s', a') - Q(s, a)]
|
||||
$$
|
||||
其是off-policy的,由于是Q更新使用了下一个时刻的最大值,所以我们只关心哪个动作使得 $Q(s_{t+1}, a)$ 取得最大值,而实际到底采取了哪个动作(行为策略),并不关心。这表明优化策略并没有用到行为策略的数据,所以说它是 off-policy 的。
|
||||
|
||||
- 高冷的面试官:小朋友,能否讲一下SARSA,最好可以写出其Q(s,a)的更新公式。另外,它是on-policy还是off-policy,为什么?
|
||||
|
||||
答:SARSA可以算是Q-learning的改进(这句话出自「神经网络与深度学习」的第 342 页)(可参考SARSA「on-line q-learning using connectionist systems」的 abstract 部分),其更新公式为:
|
||||
$$
|
||||
Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma Q(s', a') - Q(s, a)]
|
||||
$$
|
||||
其为on-policy的,SARSA必须执行两次动作得到 $(s,a,r,s',a') $才可以更新一次;而且 $a'$ 是在特定策略 $\pi$ 的指导下执行的动作,因此估计出来的 $Q(s,a)$ 是在该策略 $\pi$ 之下的Q-value,样本生成用的 $\pi$ 和估计的 $\pi$ 是同一个,因此是on-policy。
|
||||
|
||||
- 高冷的面试官:请问value-based和policy-based的区别是什么?
|
||||
|
||||
答:
|
||||
|
||||
1. 生成policy上的差异:前者确定,后者随机。Value-Base中的 action-value估计值最终会收敛到对应的true values(通常是不同的有限数,可以转化为0到1之间的概率),因此通常会获得一个确定的策略(deterministic policy);而Policy-Based不会收敛到一个确定性的值,另外他们会趋向于生成optimal stochastic policy。如果optimal policy是deterministic的,那么optimal action对应的性能函数将远大于suboptimal actions对应的性能函数,性能函数的大小代表了概率的大小。
|
||||
2. 动作空间是否连续,前者离散,后者连续。Value-Base,对于连续动作空间问题,虽然可以将动作空间离散化处理,但离散间距的选取不易确定。过大的离散间距会导致算法取不到最优action,会在这附近徘徊,过小的离散间距会使得action的维度增大,会和高维度动作空间一样导致维度灾难,影响算法的速度;而Policy-Based适用于连续的动作空间,在连续的动作空间中,可以不用计算每个动作的概率,而是通过Gaussian distribution (正态分布)选择action。
|
||||
3. value-based,例如Q-learning,是通过求解最优值函数间接的求解最优策略;policy-based,例如REINFORCE,Monte-Carlo Policy Gradient,等方法直接将策略参数化,通过策略搜索,策略梯度或者进化方法来更新策略的参数以最大化回报。基于值函数的方法不易扩展到连续动作空间,并且当同时采用非线性近似、自举和离策略时会有收敛性问题。策略梯度具有良好的收敛性证明。
|
||||
4. 补充:对于值迭代和策略迭代:策略迭代。它有两个循环,一个是在策略估计的时候,为了求当前策略的值函数需要迭代很多次。另外一个是外面的大循环,就是策略评估,策略提升这个循环。值迭代算法则是一步到位,直接估计最优值函数,因此没有策略提升环节。
|
||||
|
||||
- 高冷的面试官:请简述以下时序差分(Temporal Difference,TD)算法。
|
||||
|
||||
答:TD算法是使用广义策略迭代来更新Q函数的方法,核心使用了自举(bootstrapping),即值函数的更新使用了下一个状态的值函数来估计当前状态的值。也就是使用下一步的 $Q$ 值 $Q(S_{t+1},A_{t+1})$ 来更新我这一步的 Q 值 $Q(S_t,A_t) $。完整的计算公式如下:
|
||||
$$
|
||||
Q(S_t,A_t) \larr Q(S_t,A_t) + \alpha [R_{t+1}+\gamma Q(S_{t+1},A_{t+1})]
|
||||
$$
|
||||
|
||||
- 高冷的面试官:请问蒙特卡洛方法(Monte Carlo Algorithm,MC)和时序差分(Temporal Difference,TD)算法是无偏估计吗?另外谁的方法更大呢?为什么呢?
|
||||
|
||||
答:蒙特卡洛方法(MC)是无偏估计,时序差分(TD)是有偏估计;MC的方差较大,TD的方差较小,原因在于TD中使用了自举(bootstrapping)的方法,实现了基于平滑的效果,导致估计的值函数的方差更小。
|
||||
|
||||
- 高冷的面试官:能否简单说下动态规划、蒙特卡洛和时序差分的异同点?
|
||||
|
||||
答:
|
||||
|
||||
- 相同点:都用于进行值函数的描述与更新,并且所有方法都是基于对未来事件的展望来计算一个回溯值。
|
||||
|
||||
- 不同点:蒙特卡洛和TD算法隶属于model-free,而动态规划属于model-based;TD算法和蒙特卡洛的方法,因为都是基于model-free的方法,因而对于后续状态的获知也都是基于试验的方法;TD算法和动态规划的策略评估,都能基于当前状态的下一步预测情况来得到对于当前状态的值函数的更新。
|
||||
|
||||
另外,TD算法不需要等到实验结束后才能进行当前状态的值函数的计算与更新,而蒙特卡洛的方法需要试验交互,产生一整条的马尔科夫链并直到最终状态才能进行更新。TD算法和动态规划的策略评估不同之处为model-free和model-based 这一点,动态规划可以凭借已知转移概率就能推断出来后续的状态情况,而TD只能借助试验才能知道。
|
||||
|
||||
蒙特卡洛方法和TD方法的不同在于,蒙特卡洛方法进行完整的采样来获取了长期的回报值,因而在价值估计上会有着更小的偏差,但是也正因为收集了完整的信息,所以价值的方差会更大,原因在于毕竟基于试验的采样得到,和真实的分布还是有差距,不充足的交互导致的较大方差。而TD算法与其相反,因为只考虑了前一步的回报值 其他都是基于之前的估计值,因而相对来说,其估计值具有偏差大方差小的特点。
|
||||
|
||||
- 三者的联系:对于$TD(\lambda)$方法,如果 $ \lambda = 0$ ,那么此时等价于TD,即只考虑下一个状态;如果$ \lambda = 1$,等价于MC,即考虑 $T-1$ 个后续状态即到整个episode序列结束。
|
||||
三者的联系:对于TD($\lambda$)方法,如果 $\lambda = 0$ ,那么此时等价于时序差分方法,即只考虑下一个状态;如果 $\lambda = 1$ ,等价于蒙特卡洛方法,即考虑 $T-1$ 个后续状态直到整个试验结束。
|
||||
|
||||
@@ -1,119 +1,137 @@
|
||||
# Chapter4 梯度策略
|
||||
# 第四章 策略梯度
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **policy(策略):** 每一个actor中会有对应的策略,这个策略决定了actor的行为。具体来说,Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。**一般地,我们将policy写成 $\pi$ 。**
|
||||
- **Return(回报):** 一个回合(Episode)或者试验(Trial)所得到的所有的reward的总和,也被人们称为Total reward。**一般地,我们用 $R$ 来表示它。**
|
||||
- **Trajectory:** 一个试验中我们将environment 输出的 $s$ 跟 actor 输出的行为 $a$,把这个 $s$ 跟 $a$ 全部串起来形成的集合,我们称为Trajectory,即 $\text { Trajectory } \tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\}$。
|
||||
- **Reward function:** 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数,它是一个 function。也就是给一个 $s_1$,$a_1$,它告诉你得到 $r_1$。给它 $s_2$ ,$a_2$,它告诉你得到 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 $R(\tau)$ ,代表某一个 trajectory $\tau$ 的 reward。
|
||||
- **Expected reward:** $\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]$。
|
||||
- **REINFORCE:** 基于策略梯度的强化学习的经典算法,其采用回合更新的模式。
|
||||
- **策略(policy)**:在每一个演员中会有对应的策略,这个策略决定了演员的后续动作。具体来说,策略就是对于外界的输入,输出演员现在应该要执行的动作。一般地,我们将策略写成 $\pi$ 。
|
||||
|
||||
## 2 Questions
|
||||
- **回报(return)**:一个回合(episode)或者试验(trial)得到的所有奖励的总和,也被人们称为总奖励(total reward)。一般地,我们用 $R$ 来表示它。
|
||||
|
||||
- 如果我们想让机器人自己玩video game, 那么强化学习中三个组成(actor、environment、reward function)部分具体分别是什么?
|
||||
- **轨迹(trajectory)**:一个试验中我们将环境输出的状态 $s$ 与演员输出的动作 $a$ 全部组合起来形成的集合称为轨迹,即 $\tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\}$ 。
|
||||
|
||||
答:actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到 20 分等等。
|
||||
- **奖励函数(reward function)**:用于反映在某一个状态采取某一个动作可以得到的奖励分数,这是一个函数。即给定一个状态-动作对 ($s_1$,$a_1$) ,奖励函数可以输出 $r_1$ 。给定 ($s_2$,$a_2$),它可以输出 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 $R(\tau)$ ,它代表某一个轨迹 $\tau$ 的奖励。
|
||||
|
||||
- 在一个process中,一个具体的trajectory $s_1$,$a_1$, $s_2$ , $a_2$ 出现的概率取决于什么?
|
||||
- **期望奖励(expected reward)**:$\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]$。
|
||||
|
||||
答:
|
||||
- **REINFORCE**:基于策略梯度的强化学习的经典算法,其采用回合更新的模式。
|
||||
|
||||
1. 一部分是 **environment 的行为**, environment 的 function 它内部的参数或内部的规则长什么样子。 $p(s_{t+1}|s_t,a_t)$这一项代表的是 environment, environment 这一项通常你是无法控制它的,因为那个是人家写好的,或者已经客观存在的。
|
||||
|
||||
2. 另一部分是 **agent 的行为**,你能控制的是 $p_\theta(a_t|s_t)$。给定一个 $s_t$, actor 要采取什么样的 $a_t$ 会取决于你 actor 的参数 $\theta$, 所以这部分是 actor 可以自己控制的。随着 actor 的行为不同,每个同样的 trajectory, 它就会有不同的出现的概率。
|
||||
## 习题
|
||||
|
||||
- 当我们在计算 maximize expected reward时,应该使用什么方法?
|
||||
**4-1** 如果我们想让机器人自己玩视频游戏,那么强化学习中的3个组成部分(演员、环境、奖励函数)具体分别代表什么?
|
||||
|
||||
答: **gradient ascent(梯度上升)**,因为要让它越大越好,所以是 gradient ascent。Gradient ascent 在 update 参数的时候要加。要进行 gradient ascent,我们先要计算 expected reward $\bar{R}$ 的 gradient 。我们对 $\bar{R}$ 取一个 gradient,这里面只有 $p_{\theta}(\tau)$ 是跟 $\theta$ 有关,所以 gradient 就放在 $p_{\theta}(\tau)$ 这个地方。
|
||||
演员做的事情就是操控游戏的摇杆,比如向左、向右、开火等操作;环境就是游戏的主机,负责控制游戏的画面、控制怪物如何移动等;奖励函数就是当执行什么动作、发生什么状况的时候,我们可以得到多少分数,比如击杀一只怪兽得到20分、被对手暴击扣除10分、完成任务得到10分等。
|
||||
|
||||
- 我们应该如何理解梯度策略的公式呢?
|
||||
**4-2** 在一个过程中,一个具体的轨迹{$s_1 , a_1 , s_2 , a_2$}出现的概率取决于什么?
|
||||
|
||||
答:
|
||||
$$
|
||||
\begin{aligned}
|
||||
E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &\approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\
|
||||
&=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
|
||||
\end{aligned}
|
||||
$$
|
||||
$p_{\theta}(\tau)$ 里面有两项,$p(s_{t+1}|s_t,a_t)$ 来自于 environment,$p_\theta(a_t|s_t)$ 是来自于 agent。 $p(s_{t+1}|s_t,a_t)$ 由环境决定从而与 $\theta$ 无关,因此 $\nabla \log p(s_{t+1}|s_t,a_t) =0 $。因此 $\nabla p_{\theta}(\tau)=
|
||||
\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$。 公式的具体推导可见我们的教程。
|
||||
|
||||
具体来说:
|
||||
|
||||
* 假设你在 $s_t$ 执行 $a_t$,最后发现 $\tau$ 的 reward 是正的, 那你就要增加这一项的概率,即增加在 $s_t$ 执行 $a_t$ 的概率。
|
||||
* 反之,在 $s_t$ 执行 $a_t$ 会导致$\tau$ 的 reward 变成负的, 你就要减少这一项的概率。
|
||||
|
||||
- 我们可以使用哪些方法来进行gradient ascent的计算?
|
||||
|
||||
答:用 gradient ascent 来 update 参数,对于原来的参数 $\theta$ ,可以将原始的 $\theta$ 加上更新的 gradient 这一项,再乘以一个 learning rate,learning rate 其实也是要调的,和神经网络一样,我们可以使用 Adam、RMSProp 等优化器对其进行调整。
|
||||
|
||||
- 我们进行基于梯度策略的优化时的小技巧有哪些?
|
||||
|
||||
答:
|
||||
|
||||
1. **Add a baseline:**为了防止所有的reward都大于0,从而导致每一个stage和action的变换,会使得每一项的概率都会上升。所以通常为了解决这个问题,我们把reward 减掉一项叫做 b,这项 b 叫做 baseline。你减掉这项 b 以后,就可以让 $R(\tau^n)-b$ 这一项, 有正有负。 所以如果得到的 total reward $R(\tau^n)$ 大于 b 的话,就让它的概率上升。如果这个 total reward 小于 b,就算它是正的,正的很小也是不好的,你就要让这一项的概率下降。 如果$R(\tau^n)<b$ , 你就要让这个 state 采取这个 action 的分数下降 。这样也符合常理。但是使用baseline会让本来reward很大的“行为”的reward变小,降低更新速率。
|
||||
2. **Assign suitable credit:** 首先第一层,本来的 weight 是整场游戏的 reward 的总和。那现在改成从某个时间 $t$ 开始,假设这个 action 是在 t 这个时间点所执行的,从 $t$ 这个时间点,一直到游戏结束所有 reward 的总和,才真的代表这个 action 是好的还是不好的;接下来我们再进一步,我们把未来的reward做一个discount,这里我们称由此得到的reward的和为**Discounted Return(折扣回报)** 。
|
||||
3. 综合以上两种tip,我们将其统称为**Advantage function**, 用 `A` 来代表 advantage function。Advantage function 是 dependent on s and a,我们就是要计算的是在某一个 state s 采取某一个 action a 的时候,advantage function 有多大。
|
||||
4. Advantage function 的意义就是,假设我们在某一个 state $s_t$ 执行某一个 action $a_t$,相较于其他可能的 action,它有多好。它在意的不是一个绝对的好,而是相对的好,即相对优势(relative advantage)。因为会减掉一个 b,减掉一个 baseline, 所以这个东西是相对的好,不是绝对的好。 $A^{\theta}\left(s_{t}, a_{t}\right)$ 通常可以是由一个 network estimate 出来的,这个 network 叫做 critic。
|
||||
(1)一部分是环境的行为,即环境的函数内部的参数或内部的规则是什么形式的。 $p(s_{t+1}|s_t,a_t)$ 这一项代表的是环境,环境这一项通常是无法控制的,因为它是已经客观存在的,或者其形式是提前制定好的。
|
||||
|
||||
- 对于梯度策略的两种方法,蒙特卡洛(MC)强化学习和时序差分(TD)强化学习两个方法有什么联系和区别?
|
||||
(2)另一部分是智能体的行为,我们能控制的是 $p_\theta(a_t|s_t)$ ,即给定一个状态 $s_t$,演员要采取什么样的动作 $a_t$ 取决于演员的参数 $\theta$,所以这部分是我们可以控制的。随着演员动作的不同,每个同样的轨迹,它会因为不同的概率从而表现出不同的行为。
|
||||
|
||||
答:
|
||||
**4-3** 当我们最大化期望奖励时,应该使用什么方法?
|
||||
|
||||
1. **两者的更新频率不同**,蒙特卡洛强化学习方法是**每一个episode更新一次**,即需要经历完整的状态序列后再更新(比如我们的贪吃蛇游戏,贪吃蛇“死了”游戏结束后再更新),而对于时序差分强化学习方法是**每一个step就更新一次** ,(比如我们的贪吃蛇游戏,贪吃蛇每移动一次(或几次)就进行更新)。相对来说,时序差分强化学习方法比蒙特卡洛强化学习方法更新的频率更快。
|
||||
2. 时序差分强化学习能够在知道一个小step后就进行学习,相比于蒙特卡洛强化学习,其更加**快速、灵活**。
|
||||
3. 具体举例来说:假如我们要优化开车去公司的通勤时间。对于此问题,每一次通勤,我们将会到达不同的路口。对于时序差分(TD)强化学习,其会对于每一个经过的路口都会计算时间,例如在路口 A 就开始更新预计到达路口 B、路口 C $\cdots \cdots$, 以及到达公司的时间;而对于蒙特卡洛(MC)强化学习,其不会每经过一个路口就更新时间,而是到达最终的目的地后,再修改每一个路口和公司对应的时间。
|
||||
应该使用梯度上升法,因为要让期望奖励越大越好,所以是梯度上升法。梯度上升法在更新参数的时候要添加梯度信息。要进行梯度上升,我们先要计算期望奖励 $\bar{R}$ 的梯度。我们对 $\bar{R}$ 取一个梯度,这里只有 $p_{\theta}(\tau)$ 是与 $\theta$ 有关的,所以 $p_{\theta}(\tau)$ 为梯度的部分。
|
||||
|
||||
- 请详细描述REINFORCE的计算过程。
|
||||
**4-4** 我们应该如何理解策略梯度的公式呢?
|
||||
|
||||
答:首先我们需要根据一个确定好的policy model来输出每一个可能的action的概率,对于所有的action的概率,我们使用sample方法(或者是随机的方法)去选择一个action与环境进行交互,同时环境就会给我们反馈一整个episode数据。对于此episode数据输入到learn函数中,并根据episode数据进行loss function的构造,通过adam等优化器的优化,再来更新我们的policy model。
|
||||
策略梯度的公式如下:
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &\approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\
|
||||
&=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
|
||||
\end{aligned}
|
||||
$$
|
||||
|
||||
$p_{\theta}(\tau)$ 里面有两项,$p(s_{t+1}|s_t,a_t)$ 来自环境,$p_\theta(a_t|s_t)$ 来自智能体。 $p(s_{t+1}|s_t,a_t)$ 由环境决定,从而与 $\theta$ 无关,因此 $\nabla \log p(s_{t+1}|s_t,a_t) =0$ , $\nabla p_{\theta}(\tau)=\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$。
|
||||
|
||||
具体来说:
|
||||
|
||||
(1)假设在状态 $s_t$ 时执行动作 $a_t$,最后发现轨迹 $\tau$ 的奖励是正的,那我们就要增大这一项的概率,即增大在状态 $s_t$ 时执行动作 $a_t$ 的概率;
|
||||
|
||||
(2)反之,在状态 $s_t$ 时执行动作 $a_t$ 会导致轨迹 $\tau$ 的奖励变成负的,我们就要减小这一项的概率。
|
||||
|
||||
**4-5** 我们可以使用哪些方法来进行梯度提升的计算?
|
||||
|
||||
用梯度提升来更新参数,对于原来的参数 $\theta$ ,可以将原始的 $\theta$ 加上更新梯度,再乘一个学习率。通常学习率也需要调整,与神经网络一样,我们可以使用 Adam、RMSProp、SGD 等优化器对其进行调整。
|
||||
|
||||
**4-6** 进行基于策略梯度的优化的技巧有哪些?
|
||||
|
||||
(1)增加基线:为了防止所有奖励都为正,从而导致每一个状态和动作的变换,都会使得每一项变换的概率上升,我们把奖励减去一项 $b$,称之为基线。当减去 $b$ 后,就可以让奖励 $R(\tau^n)-b$ 有正有负。所以如果得到的总奖励 $R(\tau^n)$ 大于 $b$ ,就让它的概率增大。如果总奖励小于 $b$,就算它是正的,值很小也是不好的,就需要让这一项的概率减小。如果奖励 $R(\tau^n)$ 小于 $b$ ,就要让采取这个动作的奖励下降,这样也符合常理。但是使用基线会让本来奖励很大的“动作”的奖励变小,从而降低更新速率。
|
||||
|
||||
(2)指派合适的分数:首先,原始权重是整个回合的总奖励。现在改成从某个时间点 $t$ 开始,假设动作是在时间点 $t$ 被执行的,从时间点 $t$,一直到游戏结束所有奖励的总和大小,才真正代表这个动作是好的还是不好的;接下来我们再进一步,把未来的奖励打一个折扣,我们称由此得到的奖励的和为折扣回报。
|
||||
|
||||
(3)综合以上两种技巧,我们将其统称为优势函数,用 $A$ 来代表优势函数。优势函数取决于状态和动作,即我们需计算的是在某一个状态 $s$ 采取某一个动作 $a$ 的时候,优势函数有多大。
|
||||
|
||||
(4)优势函数的意义在于衡量假设我们在某一个状态 $s_t$ 执行某一个动作 $a_t$,相较于其他可能动作的优势。它在意的不是绝对的好,而是相对的好,即相对优势,因为会减去一个基线 $b$ 。 $A_{\theta}\left(s_{t}, a_{t}\right)$ 通常可以由一个网络预估出来,这个网络叫作评论员。
|
||||
|
||||
**4-7** 对于策略梯度的两种方法,蒙特卡洛强化学习和时序差分强化学习两种方法有什么联系和区别?
|
||||
|
||||
(1)两者的更新频率不同。蒙特卡洛强化学习方法是每一个回合更新一次,即需要经历完整的状态序列后再更新,比如贪吃蛇游戏,贪吃蛇“死了”即游戏结束后再更新。而时序差分强化学习方法是每一步就更新一次,比如贪吃蛇游戏,贪吃蛇每移动一次(或几次)就进行更新。相对来说,时序差分强化学习方法比蒙特卡洛强化学习方法更新的频率更高。
|
||||
|
||||
(2)时序差分强化学习方法能够在知道一个小步后就进行学习,相比于蒙特卡洛强化学习方法,其更加快速和灵活。
|
||||
|
||||
(3)具体例如:假如我们要优化开车去公司的通勤时间。对于此问题,每一次通勤,我们将到达不同的路口。对于时序差分强化学习方法,其会对每一个经过的路口计算时间,例如在路口 A 就开始更新预计到达路口 B、路口 C $\cdots \cdots$ ,以及到达公司的时间;对于蒙特卡洛强化学习方法,其不会每经过一个路口就更新时间,而是到达最终的目的地后,再修改到达每一个路口和到达公司对应的时间。
|
||||
|
||||
**4-8** 请详细描述REINFORCE算法的计算过程。
|
||||
|
||||
首先我们需要根据一个确定好的策略模型来输出每一个可能动作的概率,对于所有动作的概率,我们使用采样方法(或者是随机的方法)选择一个动作与环境进行交互,同时环境会给我们反馈整个回合的数据。将此回合数据输入学习函数中,并根据回合数据进行损失函数的构造,通过Adam等优化器的优化,再更新我们的策略模型。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
## 面试题
|
||||
|
||||
- 高冷的面试官:同学来吧,给我手工推导一下策略梯度公式的计算过程。
|
||||
**4-1** 友善的面试官:同学来吧,给我手动推导一下策略梯度公式的计算过程。
|
||||
|
||||
答:首先我们目的是最大化reward函数,即调整 $\theta$ ,使得期望回报最大,可以用公式表示如下
|
||||
$$
|
||||
J(\theta)=E_{\tau \sim p_{\theta(\mathcal{T})}}[\sum_tr(s_t,a_t)]
|
||||
$$
|
||||
对于上面的式子, $\tau$ 表示从从开始到结束的一条完整路径。通常,对于最大化问题,我们可以使用梯度上升算法来找到最大值,即
|
||||
$$
|
||||
\theta^* = \theta + \alpha\nabla J({\theta})
|
||||
$$
|
||||
所以我们仅仅需要计算(更新)$\nabla J({\theta})$ ,也就是计算回报函数 $J({\theta})$ 关于 $\theta$ 的梯度,也就是策略梯度,计算方法如下:
|
||||
$$\begin{aligned}
|
||||
\nabla_{\theta}J(\theta) &= \int {\nabla}_{\theta}p_{\theta}(\tau)r(\tau)d_{\tau} \\
|
||||
&= \int p_{\theta}{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)d_{\tau} \\
|
||||
&= E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)]
|
||||
\end{aligned}$$
|
||||
接着我们继续讲上式展开,对于 $p_{\theta}(\tau)$ ,即 $p_{\theta}(\tau|{\theta})$ :
|
||||
$$
|
||||
p_{\theta}(\tau|{\theta}) = p(s_1)\prod_{t=1}^T \pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
|
||||
$$
|
||||
取对数后为:
|
||||
$$
|
||||
logp_{\theta}(\tau|{\theta}) = logp(s_1)+\sum_{t=1}^T log\pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
|
||||
$$
|
||||
继续求导:
|
||||
$$
|
||||
\nabla logp_{\theta}(\tau|{\theta}) = \sum_{t=1}^T \nabla_{\theta}log \pi_{\theta}(a_t|s_t)
|
||||
$$
|
||||
带入第三个式子,可以将其化简为:
|
||||
$$\begin{aligned}
|
||||
\nabla_{\theta}J(\theta) &= E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)] \\
|
||||
&= E_{\tau \sim p_{\theta}}[(\nabla_{\theta}log\pi_{\theta}(a_t|s_t))(\sum_{t=1}^Tr(s_t,a_t))] \\
|
||||
&= \frac{1}{N}\sum_{i=1}^N[(\sum_{t=1}^T\nabla_{\theta}log \pi_{\theta}(a_{i,t}|s_{i,t}))(\sum_{t=1}^Nr(s_{i,t},a_{i,t}))]
|
||||
\end{aligned}$$
|
||||
|
||||
- 高冷的面试官:可以说一下你了解到的基于梯度策略的优化时的小技巧吗?
|
||||
首先我们的目的是最大化奖励函数,即调整 $\theta$ ,使得期望回报最大,可以用公式表示如下:
|
||||
|
||||
答:
|
||||
$$
|
||||
J(\theta)=E_{\tau \sim p_{\theta(\tau)}}\left[\sum_tr(s_t,a_t)\right]
|
||||
$$
|
||||
|
||||
1. **Add a baseline:**为了防止所有的reward都大于0,从而导致每一个stage和action的变换,会使得每一项的概率都会上升。所以通常为了解决这个问题,我们把reward 减掉一项叫做 b,这项 b 叫做 baseline。你减掉这项 b 以后,就可以让 $R(\tau^n)-b$ 这一项, 有正有负。 所以如果得到的 total reward $R(\tau^n)$ 大于 b 的话,就让它的概率上升。如果这个 total reward 小于 b,就算它是正的,正的很小也是不好的,你就要让这一项的概率下降。 如果$R(\tau^n)<b$ , 你就要让这个 state 采取这个 action 的分数下降 。这样也符合常理。但是使用baseline会让本来reward很大的“行为”的reward变小,降低更新速率。
|
||||
2. **Assign suitable credit:** 首先第一层,本来的 weight 是整场游戏的 reward 的总和。那现在改成从某个时间 $t$ 开始,假设这个 action 是在 t 这个时间点所执行的,从 $t$ 这个时间点,一直到游戏结束所有 reward 的总和,才真的代表这个 action 是好的还是不好的;接下来我们再进一步,我们把未来的reward做一个discount,这里我们称由此得到的reward的和为**Discounted Return(折扣回报)** 。
|
||||
3. 综合以上两种tip,我们将其统称为**Advantage function**, 用 `A` 来代表 advantage function。Advantage function 是 dependent on s and a,我们就是要计算的是在某一个 state s 采取某一个 action a 的时候,advantage function 有多大。
|
||||
其中 $\tau$ 表示从开始到结束的一条完整轨迹。通常对于最大化问题,我们可以使用梯度上升算法找到最大值,即
|
||||
|
||||
$$
|
||||
\theta^* = \theta + \alpha\nabla J({\theta})
|
||||
$$
|
||||
|
||||
所以我们仅仅需要计算并更新 $\nabla J({\theta})$ ,也就是计算奖励函数 $J({\theta})$ 关于 $\theta$ 的梯度,也就是策略梯度,计算方法如下:
|
||||
|
||||
$$
|
||||
\nabla_{\theta}J(\theta) = \int {\nabla}_{\theta}p_{\theta}(\tau)r(\tau) \mathrm{d}{\tau}=\int p_{\theta}{\nabla}_{\theta} \mathrm{log}p_{\theta}(\tau)r(\tau)\mathrm{d}{\tau}=E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau)]
|
||||
$$
|
||||
|
||||
接着我们继续展开,对于 $p_{\theta}(\tau)$ ,即 $p_{\theta}(\tau|{\theta})$ :
|
||||
|
||||
$$
|
||||
p_{\theta}(\tau|{\theta}) = p(s_1)\prod_{t=1}^T \pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
|
||||
$$
|
||||
|
||||
取对数后为:
|
||||
|
||||
$$
|
||||
\mathrm{log}p_{\theta}(\tau|{\theta}) = \mathrm{log}p(s_1)+\sum_{t=1}^T \mathrm{log}\pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
|
||||
$$
|
||||
|
||||
继续求导:
|
||||
|
||||
$$
|
||||
\nabla \mathrm{log}p_{\theta}(\tau|{\theta}) = \sum_{t=1}^T \nabla_{\theta}\mathrm{log} \pi_{\theta}(a_t|s_t)
|
||||
$$
|
||||
|
||||
代入第3个式子,可以将其化简为:
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
\nabla_{\theta}J(\theta)
|
||||
&= E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau)] \\
|
||||
&= E_{\tau \sim p_{\theta}}[(\nabla_{\theta}\mathrm{log}\pi_{\theta}(a_t|s_t))(\sum_{t=1}^Tr(s_t,a_t))] \\
|
||||
&= \frac{1}{N}\sum_{i=1}^N[(\sum_{t=1}^T\nabla_{\theta}\mathrm{log} \pi_{\theta}(a_{i,t}|s_{i,t}))(\sum_{t=1}^Nr(s_{i,t},a_{i,t}))]
|
||||
\end{aligned}
|
||||
$$
|
||||
|
||||
**4-2** 友善的面试官:可以说一下你所了解的基于策略梯度优化的技巧吗?
|
||||
|
||||
(1)增加基线:为了防止所有奖励都为正,从而导致每一个状态和动作的变换,都会使得每一个变换的概率上升,我们把奖励减去一项 $b$,称 $b$ 为基线。当减去 $b$ 以后,就可以让奖励 $R(\tau^n)-b$ 有正有负。如果得到的总奖励 $R(\tau^n)$ 大于 $b$ ,就让它的概率上升。如果总奖励小于 $b$,就算它是正的,值很小也是不好的,就需要让它的概率下降。如果总奖励小于 $b$ ,就要让采取这个动作的奖励下降,这样也符合常理。但是使用基线会让本来奖励很大的“动作”的奖励变小,降低更新速率。
|
||||
|
||||
(2)指派合适的分数:首先,原始权重是整个回合的总奖励。现在改成从某个时间点 $t$ 开始,假设这个动作是在时间点 $t$ 被执行的,那么从时间点 $t$ ,一直到游戏结束所有奖励的总和,才真的代表这个动作是好的还是不好的;接下来我们再进一步,把未来的奖励打一个折扣,这里我们称由此得到的奖励的和为折扣回报。
|
||||
|
||||
(3)综合以上两种技巧,我们将其统称为优势函数,用 $A$ 来代表优势函数。优势函数取决于状态和动作,即我们需计算的是在某一个状态 $s$ 采取某一个动作 $a$ 的时候,优势函数有多大。
|
||||
|
||||
@@ -1,51 +1,57 @@
|
||||
# Chapter5 Proximal Policy Optimization(PPO)
|
||||
# 第五章 近端策略优化 (PPO) 算法
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **on-policy(同策略):** 要learn的agent和环境互动的agent是同一个时,对应的policy。
|
||||
- **off-policy(异策略):** 要learn的agent和环境互动的agent不是同一个时,对应的policy。
|
||||
- **important sampling(重要性采样):** 使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用,公式如下:$\int f(x) p(x) d x=\int f(x) \frac{p(x)}{q(x)} q(x) d x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}]=E_{x \sim p}[f(x)]$ 我们在已知 $q$ 的分布后,可以使用上述公式计算出从 $p$ 这个distribution sample x 代入 $f$ 以后所算出来的期望值。
|
||||
- **Proximal Policy Optimization (PPO):** 避免在使用important sampling时由于在 $\theta$ 下的 $p_{\theta}\left(a_{t} | s_{t}\right)$ 跟 在 $\theta '$ 下的 $p_{\theta'}\left(a_{t} | s_{t}\right)$ 差太多,导致important sampling结果偏差较大而采取的算法。具体来说就是在training的过程中增加一个constrain,这个constrain对应着 $\theta$ 跟 $\theta'$ output 的 action 的 KL divergence,来衡量 $\theta$ 与 $\theta'$ 的相似程度。
|
||||
- **同策略(on-policy)**:要学习的智能体和与环境交互的智能体是同一个时对应的策略。
|
||||
|
||||
## 2 Questions
|
||||
- **异策略(off-policy)**:要学习的智能体和与环境交互的智能体不是同一个时对应的策略。
|
||||
|
||||
- 基于on-policy的policy gradient有什么可改进之处?或者说其效率较低的原因在于?
|
||||
- **重要性采样(important sampling)**:使用另外一种分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡洛方法结合使用,公式如下:
|
||||
$$
|
||||
\int f(x) p(x) \mathrm{d} x=\int f(x) \frac{p(x)}{q(x)} q(x) \mathrm{d} x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}]=E_{x \sim p}[f(x)]
|
||||
$$
|
||||
我们在已知 $q$ 的分布后,可以使用上式计算出从 $p$ 这个分布采样 $x$ 代入 $f$ 以后得到的期望值。
|
||||
|
||||
答:
|
||||
|
||||
- 经典policy gradient的大部分时间花在sample data处,即当我们的agent与环境做了交互后,我们就要进行policy model的更新。但是对于一个回合我们仅能更新policy model一次,更新完后我们就要花时间去重新collect data,然后才能再次进行如上的更新。
|
||||
|
||||
- 所以我们的可以自然而然地想到,使用off-policy方法使用另一个不同的policy和actor,与环境进行互动并用collect data进行原先的policy的更新。这样等价于使用同一组data,在同一个回合,我们对于整个的policy model更新了多次,这样会更加有效率。
|
||||
|
||||
- 使用important sampling时需要注意的问题有哪些。
|
||||
|
||||
答:我们可以在important sampling中将 $p$ 替换为任意的 $q$,但是本质上需要要求两者的分布不能差的太多,即使我们补偿了不同数据分布的权重 $\frac{p(x)}{q(x)}$ 。 $E_{x \sim p}[f(x)]=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$ 当我们对于两者的采样次数都比较多时,最终的结果时一样的,没有影响的。但是通常我们不会取理想的数量的sample data,所以如果两者的分布相差较大,最后结果的variance差距(平方级)将会很大。
|
||||
|
||||
- 基于off-policy的importance sampling中的 data 是从 $\theta'$ sample 出来的,从 $\theta$ 换成 $\theta'$ 有什么优势?
|
||||
|
||||
答:使用off-policy的importance sampling后,我们不用 $\theta$ 去跟环境做互动,假设有另外一个 policy $\theta'$,它就是另外一个actor。它的工作是他要去做demonstration,$\theta'$ 的工作是要去示范给 $\theta$ 看。它去跟环境做互动,告诉 $\theta$ 说,它跟环境做互动会发生什么事。然后,借此来训练$\theta$。我们要训练的是 $\theta$ ,$\theta'$ 只是负责做 demo,负责跟环境做互动,所以 sample 出来的东西跟 $\theta$ 本身是没有关系的。所以你就可以让 $\theta'$ 做互动 sample 一大堆的data,$\theta$ 可以update 参数很多次。然后一直到 $\theta$ train 到一定的程度,update 很多次以后,$\theta'$ 再重新去做 sample,这就是 on-policy 换成 off-policy 的妙用。
|
||||
|
||||
- 在本节中PPO中的KL divergence指的是什么?
|
||||
|
||||
答:本质来说,KL divergence是一个function,其度量的是两个action (对应的参数分别为$\theta$ 和 $\theta'$ )间的行为上的差距,而不是参数上的差距。这里行为上的差距(behavior distance)可以理解为在相同的state的情况下,输出的action的差距(他们的概率分布上的差距),这里的概率分布即为KL divergence。
|
||||
- **近端策略优化(proximal policy optimization,PPO)**:避免在使用重要性采样时由于在 $\theta$ 下的 $p_{\theta}\left(a_{t} | s_{t}\right)$ 与在 $\theta '$ 下的 $p_{\theta'}\left(a_{t} | s_{t}\right)$ 相差太多,导致重要性采样结果偏差较大而采取的算法。具体来说就是在训练的过程中增加一个限制,这个限制对应 $\theta$ 和 $\theta'$ 输出的动作的KL散度,来衡量 $\theta$ 与 $\theta'$ 的相似程度。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
## 习题
|
||||
|
||||
- 高冷的面试官:请问什么是重要性采样呀?
|
||||
**5-1** 基于同策略的策略梯度有什么可改进之处?或者说其效率较低的原因在于什么?
|
||||
|
||||
答:使用另外一种数据分布,来逼近所求分布的一种方法,算是一种期望修正的方法,公式是:
|
||||
$$\begin{aligned}
|
||||
\int f(x) p(x) d x &= \int f(x) \frac{p(x)}{q(x)} q(x) d x \\
|
||||
&= E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}] \\
|
||||
&= E_{x \sim p}[f(x)]
|
||||
\end{aligned}$$
|
||||
我们在已知 $q$ 的分布后,可以使用上述公式计算出从 $p$ 分布的期望值。也就可以使用 $q$ 来对于 $p$ 进行采样了,即为重要性采样。
|
||||
经典策略梯度的大部分时间花在数据采样上,即当我们的智能体与环境交互后,我们就要进行策略模型的更新。但是对于一个回合我们仅能更新策略模型一次,更新完后我们就要花时间重新采样数据,然后才能再次进行如上的更新。
|
||||
|
||||
- 高冷的面试官:请问on-policy跟off-policy的区别是什么?
|
||||
所以我们可以使用异策略的方法,即使用另一个不同的策略和演员,与环境进行交互并用所采样的数据进行原先策略的更新。这样等价于使用同一组数据,在同一个回合,我们对整个策略模型更新了多次,这样会更加有效率。
|
||||
|
||||
答:用一句话概括两者的区别,生成样本的policy(value-funciton)和网络参数更新时的policy(value-funciton)是否相同。具体来说,on-policy:生成样本的policy(value function)跟网络更新参数时使用的policy(value function)相同。SARAS算法就是on-policy的,基于当前的policy直接执行一次action,然后用这个样本更新当前的policy,因此生成样本的policy和学习时的policy相同,算法为on-policy算法。该方法会遭遇探索-利用的矛盾,仅利用目前已知的最优选择,可能学不到最优解,收敛到局部最优,而加入探索又降低了学习效率。epsilon-greedy 算法是这种矛盾下的折衷。优点是直接了当,速度快,劣势是不一定找到最优策略。off-policy:生成样本的policy(value function)跟网络更新参数时使用的policy(value function)不同。例如,Q-learning在计算下一状态的预期收益时使用了max操作,直接选择最优动作,而当前policy并不一定能选择到最优动作,因此这里生成样本的policy和学习时的policy不同,即为off-policy算法。
|
||||
**5-2** 使用重要性采样时需要注意的问题有哪些?
|
||||
|
||||
- 高冷的面试官:请简述下PPO算法。其与TRPO算法有何关系呢?
|
||||
我们可以在重要性采样中将 $p$ 替换为任意的 $q$,但是本质上要求两者的分布不能差太多,即使我们补偿了不同数据分布的权重 $\frac{p(x)}{q(x)}$ 。 $E_{x \sim p}[f(x)]=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$ ,当我们对于两者的采样次数都比较多时,最终的结果会是较为接近的。但是通常我们不会取理想数量的采样数据,所以如果两者的分布相差较大,最后结果的方差将会很大。
|
||||
|
||||
答:PPO算法的提出:旨在借鉴TRPO算法,使用一阶优化,在采样效率、算法表现,以及实现和调试的复杂度之间取得了新的平衡。这是因为PPO会在每一次迭代中尝试计算新的策略,让损失函数最小化,并且保证每一次新计算出的策略能够和原策略相差不大。具体来说,在避免使用important sampling时由于在 $\theta$ 下的 $p_{\theta}\left(a_{t} | s_{t}\right)$ 跟 在 $\theta'$ 下的 $ p_{\theta'}\left(a_{t} | s_{t}\right) $ 差太多,导致important sampling结果偏差较大而采取的算法。
|
||||
**5-3** 基于异策略的重要性采样中的数据是从 $\theta'$ 中采样出来的,从 $\theta$ 换成 $\theta'$ 有什么优势?
|
||||
|
||||
使用基于异策略的重要性采样后,我们不用 $\theta$ 与环境交互,而是由另外一个策略 $\theta'$ 进行示范。 $\theta'$ 的任务就是示范给 $\theta$ 看,它和环境交互,告诉 $\theta$ 它与环境交互会发生什么事,以此来训练 $\theta$ 。我们要训练的是 $\theta$ ,$\theta'$ 只负责做示范,负责与环境交互,所以采样出来的数据与 $\theta$ 本身是没有关系的。所以就可以让 $\theta'$ 与环境交互采样大量数据,$\theta$ 可以更新参数多次。一直到 $\theta$ 训练到一定的程度、参数更新多次以后,$\theta'$ 再重新采样,这就是同策略换成异策略的妙处。
|
||||
|
||||
**5-4** 在本节中近端策略优化中的KL散度指的是什么?
|
||||
|
||||
本质来说,KL散度是一个函数,其度量的是两个动作(对应的参数分别为 $\theta$ 和 $\theta'$ )间的行为距离,而不是参数距离。这里的行为距离可以理解为在相同状态下输出动作的差距(概率分布上的差距),概率分布即KL散度。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**5-1** 友善的面试官:请问什么是重要性采样呀?
|
||||
|
||||
使用另外一种分布,来逼近所求分布的一种方法,算是一种期望修正的方法,公式如下:
|
||||
|
||||
$$
|
||||
\int f(x) p(x) \mathrm{d} x=\int f(x) \frac{p(x)}{q(x)} q(x) \mathrm{d} x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}]=E_{x \sim p}[f(x)]
|
||||
$$
|
||||
|
||||
我们在已知 $q$ 的分布后,可以使用上式计算出从 $p$ 分布的期望值。也就可以使用 $q$ 来对 $p$ 进行采样了,即重要性采样。
|
||||
|
||||
**5-2** 友善的面试官:请问同策略和异策略的区别是什么?
|
||||
|
||||
我可以用一句话概括两者的区别,即生成样本的策略(价值函数)和网络参数更新时的策略(价值函数)是否相同。具体来说,同策略,生成样本的策略(价值函数)与网络更新参数时使用的策略(价值函数)相同。Sarsa算法就是同策略的,其基于当前的策略直接执行一次动作,然后用价值函数的值更新当前的策略,因此生成样本的策略和学习时的策略相同,算法为同策略算法。该算法会遭遇探索-利用窘境,仅利用目前已知的最优选择,可能学不到最优解,不能收敛到局部最优,而加入探索又降低了学习效率。 $\varepsilon$-贪心算法是这种矛盾下的折中,其优点是直接了当、速度快,缺点是不一定能够找到最优策略。异策略,生成样本的策略(价值函数)与网络更新参数时使用的策略(价值函数)不同。例如,Q学习算法在计算下一状态的预期奖励时使用了最大化操作,直接选择最优动作,而当前策略并不一定能选择到最优动作,因此这里生成样本的策略和学习时的策略不同,即异策略算法。
|
||||
|
||||
**5-3** 友善的面试官:请简述一下近端策略优化算法。其与信任区域策略优化算法有何关系呢?
|
||||
|
||||
近端策略优化算法借鉴了信任区域策略优化算法,通过采用一阶优化,在采样效率、算法表现以及实现和调试的复杂度之间取得了新的平衡。这是因为近端策略优化算法会在每一次迭代中尝试计算新的策略,让损失函数最小化,并且保证每一次新计算出的策略能够和原策略相差不大。换句话说,其为在避免使用重要性采样时由于在 $\theta$ 下的 $p_{\theta}\left(a_{t} | s_{t}\right)$ 与在 $\theta'$ 下的 $p_{\theta'}\left(a_{t} | s_{t}\right)$ 差太多,导致重要性采样结果偏差较大而采取的算法。
|
||||
|
||||
@@ -1,114 +1,107 @@
|
||||
# Chapter6 Q-learning-State Value Function
|
||||
# 第六章 DQN (基本概念)
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **DQN(Deep Q-Network):** 基于深度学习的Q-learninyang算法,其结合了 Value Function Approximation(价值函数近似)与神经网络技术,并采用了目标网络(Target Network)和经验回放(Experience Replay)等方法进行网络的训练。
|
||||
- **State-value Function:** 本质是一种critic。其输入为actor某一时刻的state,对应的输出为一个标量,即当actor在对应的state时,预期的到过程结束时间段中获得的value的数值。
|
||||
- **State-value Function Bellman Equation:** 基于state-value function的Bellman Equation,它表示在状态 $s_t$ 下带来的累积奖励 $G_t$ 的期望。
|
||||
- **Q-function:** 其也被称为state-action value function。其input 是一个 state 跟 action 的 pair,即在某一个 state 采取某一个action,假设我们都使用 actor $\pi$ ,得到的 accumulated reward 的期望值有多大。
|
||||
- **Target Network:** 为了解决在基于TD的Network的问题时,优化目标 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right)
|
||||
=r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 左右两侧会同时变化使得训练过程不稳定,从而增大regression的难度。target network选择将上式的右部分即 $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 固定,通过改变上式左部分的network的参数,进行regression,这也是一个DQN中比较重要的tip。
|
||||
- **Exploration:** 在我们使用Q-function的时候,我们的policy完全取决于Q-function,有可能导致出现对应的action是固定的某几个数值的情况,而不像policy gradient中的output为随机的,我们再从随机的distribution中sample选择action。这样会导致我们继续训练的input的值一样,从而“加重”output的固定性,导致整个模型的表达能力的急剧下降,这也就是`探索-利用窘境难题(Exploration-Exploitation dilemma)`。所以我们使用`Epsilon Greedy`和 `Boltzmann Exploration`等Exploration方法进行优化。
|
||||
- **Experience Replay(经验回放):** 其会构建一个Replay Buffer(Replay Memory),用来保存许多data,每一个data的形式如下:在某一个 state $s_t$,采取某一个action $a_t$,得到了 reward $r_t$,然后跳到 state $s_{t+1}$。我们使用 $\pi$ 去跟环境互动很多次,把收集到的数据都放到这个 replay buffer 中。当我们的buffer”装满“后,就会自动删去最早进入buffer的data。在训练时,对于每一轮迭代都有相对应的batch(与我们训练普通的Network一样通过sample得到),然后用这个batch中的data去update我们的Q-function。综上,Q-function再sample和训练的时候,会用到过去的经验数据,所以这里称这个方法为Experience Replay,其也是DQN中比较重要的tip。
|
||||
- **深度Q网络(deep Q-network,DQN)**:基于深度学习的Q学习算法,其结合了价值函数近似(value function approximation)与神经网络技术,并采用目标网络和经验回放等方法进行网络的训练。
|
||||
|
||||
## 2 Questions
|
||||
- **状态-价值函数(state-value function)**:其输入为演员某一时刻的状态,输出为一个标量,即当演员在对应的状态时,预期的到过程结束时间段内所能获得的价值。
|
||||
|
||||
- 为什么在DQN中采用价值函数近似(Value Function Approximation)的表示方法?
|
||||
- **状态-价值函数贝尔曼方程(state-value function Bellman equation)**:基于状态-价值函数的贝尔曼方程,它表示在状态 $s_t$ 下对累积奖励 $G_t$ 的期望。
|
||||
|
||||
答:首先DQN为基于深度学习的Q-learning算法,而在Q-learning中,我们使用表格来存储每一个state下action的reward,即我们前面所讲的状态-动作值函数 $Q(s,a)$ 。但是在我们的实际任务中,状态量通常数量巨大并且在连续的任务中,会遇到维度灾难的问题,所以使用真正的Value Function通常是不切实际的,所以使用了价值函数近似(Value Function Approximation)的表示方法。
|
||||
- **Q函数(Q-function)**: 其也被称为动作价值函数(action-value function)。其输入是一个状态-动作对,即在某一具体的状态采取对应的动作,假设我们都使用某个策略 $\pi$ ,得到的累积奖励的期望值有多大。
|
||||
|
||||
- critic output通常与哪几个值直接相关?
|
||||
- **目标网络(target network)**:其可解决在基于时序差分的网络中,优化目标 $Q_{\pi}\left(s_{t}, a_{t}\right) = r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 左右两侧会同时变化使得训练过程不稳定,从而增大回归的难度的问题。目标网络选择将右边部分,即 $r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 固定,通过改变左边部分,即 $Q_{\pi}\left(s_{t}, a_{t}\right)$ 中的参数进行回归,这也是深度Q网络应用中比较重要的技巧。
|
||||
|
||||
答:critic output与state和actor有关。我们在讨论output时通常是对于一个actor下来衡量一个state的好坏,也就是state value本质上来说是依赖于actor。不同的actor在相同的state下也会有不同的output。
|
||||
- **探索(exploration)**:我们在使用Q函数的时候,我们的策略完全取决于Q函数,这有可能导致出现对应的动作是固定的某几个数值的情况,而不像策略梯度中的输出是随机的,我们再从随机分布中采样选择动作。这会导致我们继续训练的输入值一样,从而“加重”输出的固定性,导致整个模型的表达能力急剧下降,这就是探索-利用窘境(exploration-exploitation dilemma)问题。我们可以使用 $\varepsilon$-贪心和玻尔兹曼探索(Boltzmann exploration)等探索方法进行优化。
|
||||
|
||||
- 我们通常怎么衡量state value function $V^{\pi}(s)$ ?分别的优势和劣势有哪些?
|
||||
|
||||
答:
|
||||
|
||||
- **基于Monte-Carlo(MC)的方法** :本质上就是让actor与environment做互动。critic根据”统计“的结果,将actor和state对应起来,即当actor如果看到某一state $s_a$ ,将预测接下来的accumulated reward有多大如果它看到 state $s_b$,接下来accumulated reward 会有多大。 但是因为其普适性不好,其需要把所有的state都匹配到,如果我们我们是做一个简单的贪吃蛇游戏等state有限的问题,还可以进行。但是如果我们做的是一个图片型的任务,我们几乎不可能将所有的state(对应每一帧的图像)的都”记录“下来。总之,其不能对于未出现过的input state进行对应的value的输出。
|
||||
- **基于MC的Network方法:** 为了解决上面描述的Monte-Carlo(MC)方法的不足,我们将其中的state value function $V^{\pi}(s)$ 定义为一个Network,其可以对于从未出现过的input state,根据network的泛化和拟合能力,也可以”估测“出一个value output。
|
||||
- **基于Temporal-difference(时序差分)的Network方法,即TD based Network:** 与我们再前4章介绍的MC与TD的区别一样,这里两者的区别也相同。在 MC based 的方法中,每次我们都要算 accumulated reward,也就是从某一个 state $s_a$ 一直玩到游戏结束的时候,得到的所有 reward 的总和。所以要应用 MC based 方法时,我们必须至少把这个游戏玩到结束。但有些游戏非常的长,你要玩到游戏结束才能够 update network,花的时间太长了。因此我们会采用 TD based 的方法。TD based 的方法不需要把游戏玩到底,只要在游戏的某一个情况,某一个 state $s_t$ 的时候,采取 action $a_t$ 得到 reward $r_t$ ,跳到 state $s_{t+1}$,就可以应用 TD 的方法。公式与之前介绍的TD方法类似,即:$V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}$。
|
||||
- **基于MC和基于TD的区别在于:** MC本身具有很大的随机性,我们可以将其 $G_a$ 堪称一个random的变量,所以其最终的variance很大。而对于TD,其具有随机性的变量为 $r$ ,因为计算 $s_t$ 我们采取同一个 action,你得到的 reward 也不一定是一样的,所以对于TD来说,$r$ 是一个 random 变量。但是相对于MC的 $G_a$ 的随机程度来说, $r$ 的随机性非常小,这是因为本身 $G_a$ 就是由很多的 $r$ 组合而成的。但另一个角度来说, 在TD中,我们的前提是 $r_t=V^{\pi}\left(s_{t+1}\right)-V^{\pi}\left(s_{t}\right)$ ,但是我们通常无法保证 $V^{\pi}\left(s_{t+1}\right)、V^{\pi}\left(s_{t}\right)$ 计算的误差为零。所以当 $V^{\pi}\left(s_{t+1}\right)、V^{\pi}\left(s_{t}\right)$ 计算的不准确的话,那应用上式得到的结果,其实也会是不准的。所以 MC 跟 TD各有优劣。
|
||||
- **目前, TD 的方法是比较常见的,MC 的方法其实是比较少用的。**
|
||||
|
||||
- 基于我们上面说的network(基于MC)的方法,我们怎么训练这个网络呢?或者我们应该将其看做ML中什么类型的问题呢?
|
||||
|
||||
答:理想状态,我们期望对于一个input state输出其无误差的reward value。也就是说这个 value function 来说,如果 input 是 state $s_a$,正确的 output 应该是$G_a$。如果 input state $s_b$,正确的output 应该是value $G_b$。所以在训练的时候,其就是一个典型的ML中的回归问题(regression problem)。所以我们实际中需要输出的仅仅是一个非精确值,即你希望在 input $s_a$ 的时候,output value 跟 $G_a$ 越近越好,input $s_b$ 的时候,output value 跟 $G_b$ 越近越好。其训练方法,和我们在训练CNN、DNN时的方法类似,就不再一一赘述。
|
||||
|
||||
- 基于上面介绍的基于TD的network方法,具体地,我们应该怎么训练模型呢?
|
||||
|
||||
答:核心的函数为 $V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}$。我们将state $s_t$ 作为input输入network 里,因为 $s_t$ 丢到 network 里面会得到output $V^{\pi}(s_t)$,同样将 $s_{t+1}$ 作为input输入 network 里面会得到$V^{\pi}(s_{t+1})$。同时核心函数:$V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}$ 告诉我们, $V^{\pi}(s_t)$ 减 $V^{\pi}(s_{t+1})$ 的值应该是 $r_t$。然后希望它们两个相减的 loss 跟 $r_t$ 尽可能地接近。这也就是我们这个network的优化目标或者说loss function。
|
||||
|
||||
- state-action value function(Q-function)和 state value function的有什么区别和联系?
|
||||
|
||||
答:
|
||||
|
||||
- state value function 的 input 是一个 state,它是根据 state 去计算出,看到这个state 以后的 expected accumulated reward 是多少。
|
||||
- state-action value function 的 input 是一个 state 跟 action 的 pair,即在某一个 state 采取某一个action,假设我们都使用 actor $\pi$ ,得到的 accumulated reward 的期望值有多大。
|
||||
|
||||
- Q-function的两种表示方法?
|
||||
|
||||
答:
|
||||
|
||||
- 当input 是 state和action的pair时,output 就是一个 scalar。
|
||||
- 当input 仅是一个 state时,output 就是好几个 value。
|
||||
|
||||
- 当我们有了Q-function后,我们怎么找到更好的策略 $\pi'$ 呢?或者说这个 $\pi'$ 本质来说是什么?
|
||||
|
||||
答:首先, $\pi'$ 是由 $\pi^{\prime}(s)=\arg \max _{a} Q^{\pi}(s, a)$ 计算而得,其表示假设你已经 learn 出 $\pi$ 的Q-function,今天在某一个 state s,把所有可能的 action a 都一一带入这个 Q-function,看看说那一个 a 可以让 Q-function 的 value 最大,那这一个 action,就是 $\pi'$ 会采取的 action。所以根据上式决定的actoin的步骤一定比原来的 $\pi$ 要好,即$V^{\pi^{\prime}}(s) \geq V^{\pi}(s)$。
|
||||
|
||||
- 解决`探索-利用窘境(Exploration-Exploitation dilemma)`问题的Exploration的方法有哪些?他们具体的方法是怎样的?
|
||||
|
||||
答:
|
||||
|
||||
1. **Epsilon Greedy:** 我们有$1-\varepsilon$ 的机率,通常 $\varepsilon$ 很小,完全按照Q-function 来决定action。但是有 $\varepsilon$ 的机率是随机的。通常在实现上 $\varepsilon$ 会随着时间递减。也就是在最开始的时候。因为还不知道那个action 是比较好的,所以你会花比较大的力气在做 exploration。接下来随着training 的次数越来越多。已经比较确定说哪一个Q 是比较好的。你就会减少你的exploration,你会把 $\varepsilon$ 的值变小,主要根据Q-function 来决定你的action,比较少做random,这是**Epsilon Greedy**。
|
||||
2. **Boltzmann Exploration:** 这个方法就比较像是 policy gradient。在 policy gradient 里面network 的output 是一个 expected action space 上面的一个的 probability distribution。再根据 probability distribution 去做 sample。所以也可以根据Q value 去定一个 probability distribution,假设某一个 action 的 Q value 越大,代表它越好,我们采取这个 action 的机率就越高。这是**Boltzmann Exploration**。
|
||||
|
||||
- 我们使用Experience Replay(经验回放)有什么好处?
|
||||
|
||||
答:
|
||||
|
||||
1. 首先,在强化学习的整个过程中, 最花时间的 step 是在跟环境做互动,使用GPU乃至TPU加速来训练 network 相对来说是比较快的。而用 replay buffer 可以减少跟环境做互动的次数,因为在训练的时候,我们的 experience 不需要通通来自于某一个policy(或者当前时刻的policy)。一些过去的 policy 所得到的 experience 可以放在 buffer 里面被使用很多次,被反复的再利用,这样让你的 sample 到 experience 的利用是高效的。
|
||||
2. 另外,在训练网络的时候,其实我们希望一个 batch 里面的 data 越 diverse 越好。如果你的 batch 里面的 data 都是同样性质的,我们的训练出的模型拟合能力不会很乐观。如果 batch 里面都是一样的 data,你 train 的时候,performance 会比较差。我们希望 batch data 越 diverse 越好。那如果 buffer 里面的那些 experience 通通来自于不同的 policy ,那你 sample 到的一个 batch 里面的 data 会是比较 diverse 。这样可以保证我们模型的性能至少不会很差。
|
||||
|
||||
- 在Experience Replay中我们是要观察 $\pi$ 的 value,里面混杂了一些不是 $\pi$ 的 experience ,这会有影响吗?
|
||||
|
||||
答:没关系。这并不是因为过去的 $\pi$ 跟现在的 $\pi$ 很像, 就算过去的$\pi$ 没有很像,其实也是没有关系的。主要的原因是我们并不是去sample 一个trajectory,我们只sample 了一个experience,所以跟是不是 off-policy 这件事是没有关系的。就算是off-policy,就算是这些 experience 不是来自于 $\pi$,我们其实还是可以拿这些 experience 来估测 $Q^{\pi}(s,a)$。
|
||||
|
||||
- DQN(Deep Q-learning)和Q-learning有什么异同点?
|
||||
|
||||
答:整体来说,从名称就可以看出,两者的目标价值以及价值的update方式基本相同,另外一方面,不同点在于:
|
||||
|
||||
- 首先,DQN 将 Q-learning 与深度学习结合,用深度网络来近似动作价值函数,而 Q-learning 则是采用表格存储。
|
||||
- DQN 采用了我们前面所描述的经验回放(Experience Replay)训练方法,从历史数据中随机采样,而 Q-learning 直接采用下一个状态的数据进行学习。
|
||||
- **经验回放(experience replay)**:其会构建一个回放缓冲区(replay buffer)来保存许多经验,每一个经验的形式如下:在某一个状态 $s_t$,采取某一个动作 $a_t$,得到奖励 $r_t$,然后进入状态 $s_{t+1}$。我们使用 $\pi$ 与环境交互多次,把收集到的经验都存储在回放缓冲区中。当我们的缓冲区“装满”后,就会自动删去最早进入缓冲区的经验。在训练时,对于每一轮迭代都有相对应的批量(batch)(与我们训练普通的网络一样,都是通过采样得到的),然后用这个批量中的经验去更新我们的Q函数。综上,Q函数在采样和训练的时候,会用到过去的经验,所以这里称这个方法为经验回放,其也是深度Q网络应用中比较重要的技巧。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
## 习题
|
||||
|
||||
- 高冷的面试官:请问DQN(Deep Q-Network)是什么?其两个关键性的技巧分别是什么?
|
||||
**6-1** 为什么在深度Q网络中采用价值函数近似的表示方法?
|
||||
|
||||
答:Deep Q-Network是基于深度学习的Q-learning算法,其结合了 Value Function Approximation(价值函数近似)与神经网络技术,并采用了目标网络(Target Network)和经验回放(Experience Replay)的方法进行网络的训练。
|
||||
首先深度Q网络为基于深度学习的Q学习算法,而在Q学习中,我们使用表格来存储每一个状态下动作的奖励,即我们在正文中介绍的动作价值函数 $Q(s,a)$ 。但是在我们的实际任务中,状态量通常数量巨大,并且在连续任务中会遇到维度灾难等问题,使用真正的价值函数通常是不切实际的,所以使用了与价值函数近似的表示方法。
|
||||
|
||||
- 高冷的面试官:接上题,DQN中的两个trick:目标网络和experience replay的具体作用是什么呢?
|
||||
**6-2** 评论员的输出通常与哪几个值直接相关?
|
||||
|
||||
答:在DQN中某个动作值函数的更新依赖于其他动作值函数。如果我们一直更新值网络的参数,会导致
|
||||
更新目标不断变化,也就是我们在追逐一个不断变化的目标,这样势必会不太稳定。 为了解决在基于TD的Network的问题时,优化目标 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) =r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 左右两侧会同时变化使得训练过程不稳定,从而增大regression的难度。target network选择将上式的右部分即 $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 固定,通过改变上式左部分的network的参数,进行regression。对于经验回放,其会构建一个Replay Buffer(Replay Memory),用来保存许多data,每一个data的形式如下:在某一个 state $s_t$,采取某一个action $a_t$,得到了 reward $r_t$,然后跳到 state $s_{t+1}$。我们使用 $\pi$ 去跟环境互动很多次,把收集到的数据都放到这个 replay buffer 中。当我们的buffer”装满“后,就会自动删去最早进入buffer的data。在训练时,对于每一轮迭代都有相对应的batch(与我们训练普通的Network一样通过sample得到),然后用这个batch中的data去update我们的Q-function。也就是,Q-function再sample和训练的时候,会用到过去的经验数据,也可以消除样本之间的相关性。
|
||||
与状态和演员直接相关。我们在讨论输出时通常是针对一个演员衡量一个状态的好坏,也就是状态、价值从本质上来说是依赖于演员的。不同的演员在相同的状态下也会有不同的输出。
|
||||
|
||||
- 高冷的面试官:DQN(Deep Q-learning)和Q-learning有什么异同点?
|
||||
**6-3** 我们通常怎么衡量状态价值函数 $V_{\pi}(s)$ ?其优势和劣势分别有哪些?
|
||||
|
||||
答:整体来说,从名称就可以看出,两者的目标价值以及价值的update方式基本相同,另外一方面,不同点在于:
|
||||
(1)基于蒙特卡洛的方法:本质上就是让演员与环境交互。评论员根据统计结果,将演员和状态对应起来,即如果演员看到某一状态 $s_a$ ,将预测接下来的累积奖励有多大,如果看到另一个状态 $s_b$,将预测接下来的累积奖励有多大。但是其普适性不好,其需要匹配到所有的状态。如果我们面对的是一个简单的例如贪吃蛇游戏等状态有限的问题还可以应对,但是如果我们面对的是一个图片型的任务,我们几乎不可能将所有的状态(对应每一帧的图像)的都“记录”下来。总之,其不能对未出现过的输入状态进行对应价值的输出。
|
||||
|
||||
- 首先,DQN 将 Q-learning 与深度学习结合,用深度网络来近似动作价值函数,而 Q-learning 则是采用表格存储。
|
||||
- DQN 采用了我们前面所描述的经验回放(Experience Replay)训练方法,从历史数据中随机采样,而 Q-learning 直接采用下一个状态的数据进行学习。
|
||||
(2)基于蒙特卡洛的网络方法:为了弥补上面描述的基于蒙特卡洛的方法的不足,我们将其中的状态价值函数 $V_{\pi}(s)$ 定义为一个网络,其可以对于从未出现过的输入状态,根据网络的泛化和拟合能力,“估测”出一个价值输出。
|
||||
|
||||
- 高冷的面试官:请问,随机性策略和确定性策略有什么区别吗?
|
||||
(3)基于时序差分的网络方法,即基于时序差分的网络:与我们在前4章介绍的蒙特卡洛方法与时序差分方法的区别一样,基于时序差分的网络方法和基于蒙特卡洛的网络方法的区别也相同。在基于蒙特卡洛的方法中,每次我们都要计算累积奖励,也就是从某一个状态 $s_a$ 一直到游戏结束的时候,得到的所有奖励的总和。所以要应用基于蒙特卡洛的方法时,我们必须至少把游戏玩到结束。但有些游戏要玩到游戏结束才能够更新网络花费的时间太长了,因此我们会采用基于时序差分的网络方法。基于时序差分的网络方法不需要把游戏玩到结束,只要在游戏某一个状态 $s_t$ 的时候,采取动作 $a_t$ 得到奖励 $r_t$ ,进入状态 $s_{t+1}$,就可以应用基于时序差分的网络方法。其公式与之前介绍的时序差分方法类似,即 $V_{\pi}\left(s_{t}\right)=V_{\pi}\left(s_{t+1}\right)+r_{t}$。
|
||||
|
||||
答:随机策略表示为某个状态下动作取值的分布,确定性策略在每个状态只有一个确定的动作可以选。
|
||||
从熵的角度来说,确定性策略的熵为0,没有任何随机性。随机策略有利于我们进行适度的探索,确定
|
||||
性策略的探索问题更为严峻。
|
||||
(4)基于蒙特卡洛方法和基于时序差分方法的区别在于: 蒙特卡洛方法本身具有很大的随机性,我们可以将其 $G_a$ 视为一个随机变量,所以其最终的偏差很大。而对于时序差分,其具有随机的变量 $r$ 。因为在状态 $s_t$ 采取同一个动作,所得的奖励也不一定是一样的,所以对于时序差分方法来说,$r$ 是一个随机变量。但是相对于蒙特卡洛方法的 $G_a$ 来说,$r$ 的随机性非常小,这是因为 $G_a$ 本身就是由很多的 $r$ 组合而成的。从另一个角度来说,在时序差分方法中,我们的前提是 $r_t=V_{\pi}\left(s_{t+1}\right)-V_{\pi}\left(s_{t}\right)$ ,但是我们通常无法保证 $V_{\pi}\left(s_{t+1}\right)$ 、$V_{\pi}\left(s_{t}\right)$ 计算的误差为0。所以当 $V_{\pi}\left(s_{t+1}\right)$ 、$V_{\pi}\left(s_{t}\right)$ 计算得不准确,得到的结果也会是不准确的。总之,两者各有优劣。
|
||||
|
||||
- 高冷的面试官:请问不打破数据相关性,神经网络的训练效果为什么就不好?
|
||||
(5)目前,基于时序差分的方法是比较常用的,基于蒙特卡洛的方法其实是比较少用的。
|
||||
|
||||
答:在神经网络中通常使用随机梯度下降法。随机的意思是我们随机选择一些样本来增量式的估计梯度,比如常用的
|
||||
采用batch训练。如果样本是相关的,那就意味着前后两个batch的很可能也是相关的,那么估计的梯度也会呈现
|
||||
出某种相关性。如果不幸的情况下,后面的梯度估计可能会抵消掉前面的梯度量。从而使得训练难以收敛。
|
||||
**6-4** 基于本章正文介绍的基于蒙特卡洛的网络方法,我们怎么训练模型呢?或者我们应该将其看作机器学习中什么类型的问题呢?
|
||||
|
||||
理想状态下,我们期望对于一个输入状态,输出其无误差的奖励价值。对于价值函数,如果输入状态是 $s_a$,正确的输出价值应该是 $G_a$。如果输入状态是 $s_b$,正确的输出价值应该是 $G_b$。所以在训练的时候,其就是一个典型的机器学习中的回归问题。我们实际中需要输出的仅仅是一个非精确值,即我们希望在输入状态 $s_a$ 的时候,输出价值与 $G_a$ 越近越好;输入 $s_b$ 的时候,输出价值与 $G_b$ 越近越好。其训练方法与我们在训练卷积神经网络等深度神经网络时的方法类似。
|
||||
|
||||
**6-5** 基于本章正文中介绍的基于时序差分的网络方法,具体地,我们应该怎么训练模型呢?
|
||||
|
||||
基于时序差分网络的核心函数为 $V_{\pi}\left(s_{t}\right)=V_{\pi}\left(s_{t+1}\right)+r_{t}$。我们将状态 $s_t$ 输入网络,因为将 $s_t$ 输入网络会得到输出 $V_{\pi}(s_t)$,同样将 $s_{t+1}$ 输入网络会得到$V_{\pi}(s_{t+1})$。同时核心函数 $V_{\pi}\left(s_{t}\right)=V_{\pi}\left(s_{t+1}\right)+r_{t}$ 告诉我们, $V_{\pi}(s_t)$ 减 $V_{\pi}(s_{t+1})$ 的值应该是 $r_t$。我们希望它们两个相减的损失值与 $r_t$ 尽可能地接近。这也是网络的优化目标,我们称之为损失函数。
|
||||
|
||||
**6-6** 动作价值函数和状态价值函数的有什么区别和联系?
|
||||
|
||||
(1)状态价值函数的输入是一个状态,它根据状态计算出当前这个状态以后的累积奖励的期望值是多少。
|
||||
|
||||
(2)动作价值函数的输入是状态-动作对,即在某一个状态采取某一个动作,同时假设我们都使用策略 $\pi$ ,得到的累积奖励的期望值是多少。
|
||||
|
||||
**6-7** 请介绍Q函数的两种表示方法。
|
||||
|
||||
(1)使用状态-动作对表示时,即当Q函数的输入是状态-动作对时,输出就是一个标量。
|
||||
|
||||
(2)仅使用状态表示时,即当Q函数的输入仅是一个状态时,输出就是多个价值。
|
||||
|
||||
**6-8** 当得到了Q函数后,我们应当如何找到更好的策略 $\pi'$ 呢?或者说 $\pi'$ 的本质是什么?
|
||||
|
||||
首先, $\pi'$ 由 $\pi^{\prime}(s)=\underset{a}{\arg \max} Q_{\pi}(s, a)$ 计算而得,其表示假设我们已经学习出 $\pi$ 的Q函数,对于某一个状态 $s$ ,把所有可能的动作 $a$ 一一代入这个Q函数,看看哪一个动作 $a$ 可以让Q函数的价值最大,那么该动作就是 $\pi'$ 将会执行的动作。所以根据以上方法决定动作的策略 $\pi'$ 一定比原来的策略 $\pi$ 要好,即 $V_{\pi^{\prime}}(s) \geqslant V_{\pi}(s)$ 。
|
||||
|
||||
**6-9** 解决探索-利用窘境问题的探索的方法有哪些?
|
||||
|
||||
(1) $\varepsilon$-贪心: 我们有 $1-\varepsilon$ 的概率(通常 $\varepsilon$ 很小)完全按照Q函数决定动作,但是有 $\varepsilon$ 的概率使得动作是随机的。通常在实现上, $\varepsilon$的值会随着时间递减。也就是在最开始的时候,因为还不知道哪个动作是比较好的,所以我们会花比较大的力气做探索。接下来随着训练的次数越来越多,我们已经比较确定哪一种策略是比较好的,就会减少探索,从而把 $\varepsilon$ 的值变小,主要根据Q函数来决定未来的动作,随机性就会变小。
|
||||
|
||||
(2) 玻尔兹曼探索:这个方法比较像策略梯度。在策略梯度里面,网络的输出是一个期望动作空间上的一个概率分布,我们根据概率分布去采样。所以也可以根据Q值确定一个概率分布,假设某一个动作的Q值越大,代表它越好,我们采取这个动作的概率就越高。
|
||||
|
||||
**6-10** 我们使用经验回放有什么好处?
|
||||
|
||||
(1)首先,在强化学习的整个过程中,最花时间的过程是与环境交互,使用GPU乃至TPU来训练网络相对来说是比较快的。而用回放缓冲区可以减少与环境交互的次数。因为在训练的时候,我们的经验不需要通通来自于某一个策略(或者当前时刻的策略)。一些由过去的策略所得到的经验可以放在回放缓冲区中被使用多次,被反复地再利用,这样采样到的经验才能被高效地利用。
|
||||
|
||||
(2)另外,在训练网络的时候,我们其实希望一个批量里面的数据越多样越好。如果一个批量里面的数据都是同性质的,我们训练出的模型的拟合能力可能不会很乐观。如果一个批量里面都是一样的数据,在训练的时候,拟合效果会比较差。如果回放缓冲区里面的经验通通来自于不同的策略,那么采样到的一个批量里面的数据会是比较多样的。这样可以保证我们的模型的性能至少不会很差。
|
||||
|
||||
**6-11** 在经验回放中我们观察 $\pi$ 的价值,发现里面混杂了一些不是 $\pi$ 的经验,这会有影响吗?
|
||||
|
||||
没影响。这并不是因为过去的 $\pi$ 与现在的 $\pi'$ 很相似,就算过去的$\pi$ 不是很相似,其实也是没有关系的。主要的原因是我们并不是去采样一条轨迹,我们只能采样一个经验,所以与是不是异策略是没有关系的。就算是异策略,就算是这些经验不是来自 $\pi$,我们还是可以使用这些经验来估测 $Q_{\pi}(s,a)$。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**6-1** 友善的面试官:请问深度Q网络是什么?其两个关键性的技巧分别是什么?
|
||||
|
||||
深度Q网络是基于深度学习的Q学习算法,其结合了价值函数近似与神经网络技术,并采用了目标网络和经验回放技巧进行网络的训练。
|
||||
|
||||
**6-2** 友善的面试官:那我们继续分析!你刚才提到的深度Q网络中的两个技巧————目标网络和经验回放,其具体作用是什么呢?
|
||||
|
||||
在深度Q网络中某个动作价值函数的更新依赖于其他动作价值函数。如果我们一直更新价值网络的参数,会导致更新目标不断变化,也就是我们在追逐一个不断变化的目标,这样势必会不太稳定。为了解决基于时序差分的网络中,优化目标 $Q_{\pi}\left(s_{t}, a_{t}\right) =r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 左右两侧会同时变化使得训练过程不稳定,从而增大回归难度的问题,目标网络选择将优化目标的右边即 $r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 固定,通过改变优化目标左边的网络参数进行回归。对于经验回放,其会构建一个回放缓冲区,用来保存许多数据,每一个数据的内容包括:状态 $s_t$、采取的动作 $a_t$、得到的奖励 $r_t$、下一个状态 $s_{t+1}$。我们使用 $\pi$ 与环境交互多次,把收集到的数据都放到回放缓冲区中。当回放缓冲区“装满”后,就会自动删去最早进入缓冲区的数据。在训练时,对于每一轮迭代都有相对应的批量(与我们训练普通网络一样,通过采样得到),然后用这个批量中的数据去更新Q函数。即Q函数在采样和训练的时候会用到过去的经验数据,也可以消除样本之间的相关性。
|
||||
|
||||
**6-3** 友善的面试官:深度Q网络和Q学习有什么异同点?
|
||||
|
||||
整体来说,从名称就可以看出,两者的目标价值以及价值的更新方式基本相同。但有如下不同点:
|
||||
|
||||
(1)首先,深度Q网络将Q学习与深度学习结合,用深度网络来近似动作价值函数,而Q学习则是采用表格进行存储。
|
||||
|
||||
(2)深度Q网络采用了经验回放的技巧,从历史数据中随机采样,而Q学习直接采用下一个状态的数据进行学习。
|
||||
|
||||
**6-4** 友善的面试官:请问,随机性策略和确定性策略有什么区别吗?
|
||||
|
||||
随机性策略表示为某个状态下动作取值的分布,确定性策略在每个状态只有一个确定的动作可以选。从熵的角度来说,确定性策略的熵为0,没有任何随机性。随机性策略有利于我们进行适度的探索,确定性策略不利于进行探索。
|
||||
|
||||
**6-5** 友善的面试官:请问不打破数据相关性,神经网络的训练效果为什么就不好?
|
||||
|
||||
在神经网络中通常使用随机梯度下降法。随机的意思是我们随机选择一些样本来增量式地估计梯度,比如常用的批量训练方法。如果样本是相关的,就意味着前后两个批量很可能也是相关的,那么估计的梯度也会呈现出某种相关性。但是在极端条件下,后面的梯度估计可能会抵消掉前面的梯度估计量,从而使得训练难以收敛。
|
||||
|
||||
@@ -1,57 +1,63 @@
|
||||
# Chapter7 Q-learning-Double DQN
|
||||
# 第七章 DQN (进阶技巧)
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **Double DQN:** 在Double DQN中存在有两个 Q-network,首先,第一个 Q-network,决定的是哪一个 action 的 Q value 最大,从而决定了你的action。另一方面, Q value 是用 $Q'$ 算出来的,这样就可以避免 over estimate 的问题。具体来说,假设我们有两个 Q-function,假设第一个Q-function 它高估了它现在选出来的action a,那没关系,只要第二个Q-function $Q'$ 没有高估这个action a 的值,那你算出来的,就还是正常的值。
|
||||
- **Dueling DQN:** 将原来的DQN的计算过程分为**两个path**。对于第一个path,会计算一个于input state有关的一个标量 $V(s)$;对于第二个path,会计算出一个vector $A(s,a)$ ,其对应每一个action。最后的网络是将两个path的结果相加,得到我们最终需要的Q value。用一个公式表示也就是 $Q(s,a)=V(s)+A(s,a)$ 。
|
||||
- **Prioritized Experience Replay (优先经验回放):** 这个方法是为了解决我们在chapter6中提出的**Experience Replay(经验回放)**方法不足进一步优化提出的。我们在使用Experience Replay时是uniformly取出的experience buffer中的sample data,这里并没有考虑数据间的权重大小。例如,我们应该将那些train的效果不好的data对应的权重加大,即其应该有更大的概率被sample到。综上, prioritized experience replay 不仅改变了 sample data 的 distribution,还改变了 training process。
|
||||
- **Noisy Net:** 其在每一个episode 开始的时候,即要和环境互动的时候,将原来的Q-function 的每一个参数上面加上一个Gaussian noise。那你就把原来的Q-function 变成$\tilde{Q}$ ,即**Noisy Q-function**。同样的我们把每一个network的权重等参数都加上一个Gaussian noise,就得到一个新的network $\tilde{Q}$。我们会使用这个新的network从与环境互动开始到互动结束。
|
||||
- **Distributional Q-function:** 对于DQN进行model distribution。将最终的网络的output的每一类别的action再进行distribution。
|
||||
- **Rainbow:** 也就是将我们这两节内容所有的七个tips综合起来的方法,7个方法分别包括:DQN、DDQN、Prioritized DDQN、Dueling DDQN、A3C、Distributional DQN、Noisy DQN,进而考察每一个方法的贡献度或者是否对于与环境的交互式正反馈的。
|
||||
- **双深度Q网络(double DQN)**:在双深度Q网络中存在两个Q网络,第一个Q网络决定哪一个动作的Q值最大,从而决定对应的动作。另一方面,Q值是用 $Q'$ 计算得到的,这样就可以避免过度估计的问题。具体地,假设我们有两个Q函数并且第一个Q函数高估了它现在执行的动作 $a$ 的值,这没关系,只要第二个Q函数 $Q'$ 没有高估动作 $a$ 的值,那么计算得到的就还是正常的值。
|
||||
|
||||
## 2 Questions
|
||||
- **竞争深度Q网络(dueling DQN)**:将原来的深度Q网络的计算过程分为两步。第一步计算一个与输入有关的标量 $\mathrm{V(s)}$;第二步计算一个向量 $\mathrm{A(s,a)}$ 对应每一个动作。最后的网络将两步的结果相加,得到我们最终需要的Q值。用一个公式表示就是 $\mathrm{Q(s,a)=V(s)+A(s,a)}$ 。另外,竞争深度Q网络,使用状态价值函数与动作价值函数来评估Q值。
|
||||
|
||||
- 为什么传统的DQN的效果并不好?参考公式 $Q(s_t ,a_t)=r_t+\max_{a}Q(s_{t+1},a)$
|
||||
- **优先级经验回放(prioritized experience replay,PER)**:这个方法是为了解决我们在第6章中提出的经验回放方法的不足而提出的。我们在使用经验回放时,均匀地取出回放缓冲区(reply buffer)中的采样数据,这里并没有考虑数据间的权重大小。但是我们应该将那些训练效果不好的数据对应的权重加大,即其应该有更大的概率被采样到。综上,优先级经验回放不仅改变了被采样数据的分布,还改变了训练过程。
|
||||
|
||||
答:因为实际上在做的时候,是要让左边这个式子跟右边这个 target 越接近越好。比较容易可以发现target 的值很容易一不小心就被设得太高。因为在算这个 target 的时候,我们实际上在做的事情是看哪一个a 可以得到最大的Q value,就把它加上去,就变成我们的target。
|
||||
- **噪声网络(noisy net)**:其在每一个回合开始的时候,即智能体要和环境交互的时候,在原来的Q函数的每一个参数上加上一个高斯噪声(Gaussian noise),把原来的Q函数变成 $\tilde{Q}$ ,即噪声Q函数。同样,我们把每一个网络的权重等参数都加上一个高斯噪声,就得到一个新的网络 $\tilde{Q}$ 。我们会使用这个新的网络与环境交互直到结束。
|
||||
|
||||
举例来说,现在有 4 个 actions,本来其实它们得到的值都是差不多的,它们得到的reward 都是差不多的。但是在estimate 的时候,那毕竟是个network。所以estimate 的时候是有误差的。所以假设今天是第一个action它被高估了,假设绿色的东西代表是被高估的量,它被高估了,那这个target 就会选这个action。然后就会选这个高估的Q value来加上$r_t$,来当作你的target。如果第4 个action 被高估了,那就会选第4 个action 来加上$r_t$ 来当作你的target value。所以你总是会选那个Q value 被高估的,你总是会选那个reward 被高估的action 当作这个max 的结果去加上$r_t$ 当作你的target。所以你的target 总是太大。
|
||||
- **分布式Q函数(distributional Q-function)**:对深度Q网络进行模型分布,将最终网络的输出的每一类别的动作再进行分布操作。
|
||||
|
||||
- 接着上个思考题,我们应该怎么解决target 总是太大的问题呢?
|
||||
|
||||
答: 我们可以使用Double DQN解决这个问题。首先,在 Double DQN 里面,选 action 的 Q-function 跟算 value 的 Q-function不同。在原来的DQN 里面,你穷举所有的 a,把每一个a 都带进去, 看哪一个 a 可以给你的 Q value 最高,那你就把那个 Q value 加上$r_t$。但是在 Double DQN 里面,你**有两个 Q-network**,第一个 Q-network,决定哪一个 action 的 Q value 最大,你用第一个 Q-network 去带入所有的 a,去看看哪一个Q value 最大。然后你决定你的action 以后,你的 Q value 是用 $Q'$ 算出来的,这样子有什么好处呢?为什么这样就可以避免 over estimate 的问题呢?因为今天假设我们有两个 Q-function,假设第一个Q-function 它高估了它现在选出来的action a,那没关系,只要第二个Q-function $Q'$ 没有高估这个action a 的值,那你算出来的,就还是正常的值。假设反过来是 $Q'$ 高估了某一个action 的值,那也没差, 因为反正只要前面这个Q 不要选那个action 出来就没事了。
|
||||
|
||||
- 哪来 Q 跟 $Q'$ 呢?哪来两个 network 呢?
|
||||
|
||||
答:在实现上,你有两个 Q-network, 一个是 target 的 Q-network,一个是真正你会 update 的 Q-network。所以在 Double DQN 里面,你的实现方法会是拿你会 update 参数的那个 Q-network 去选action,然后你拿target 的network,那个固定住不动的network 去算value。而 Double DQN 相较于原来的 DQN 的更改是最少的,它几乎没有增加任何的运算量,连新的network 都不用,因为你原来就有两个network 了。你唯一要做的事情只有,本来你在找最大的a 的时候,你在决定这个a 要放哪一个的时候,你是用$Q'$ 来算,你是用target network 来算,现在改成用另外一个会 update 的 Q-network 来算。
|
||||
|
||||
- 如何理解Dueling DQN的模型变化带来的好处?
|
||||
|
||||
答:对于我们的 $Q(s,a)$ 其对应的state由于为table的形式,所以是离散的,而实际中的state不是离散的。对于 $Q(s,a)$ 的计算公式, $Q(s,a)=V(s)+A(s,a)$ 。其中的 $V(s)$ 是对于不同的state都有值,对于 $A(s,a)$ 对于不同的state都有不同的action对应的值。所以本质上来说,我们最终的矩阵 $Q(s,a)$ 的结果是将每一个 $V(s)$ 加到矩阵 $A(s,a)$ 中得到的。从模型的角度考虑,我们的network直接改变的 $Q(s,a)$ 而是 更改的 $V、A$ 。但是有时我们update时不一定会将 $V(s)$ 和 $Q(s,a)$ 都更新。我们将其分成两个path后,我们就不需要将所有的state-action pair都sample一遍,我们可以使用更高效的estimate Q value方法将最终的 $Q(s,a)$ 计算出来。
|
||||
|
||||
- 使用MC和TD平衡方法的优劣分别有哪些?
|
||||
|
||||
答:
|
||||
|
||||
- 优势:因为我们现在 sample 了比较多的step,之前是只sample 了一个step, 所以某一个step 得到的data 是真实值,接下来都是Q value 估测出来的。现在sample 比较多step,sample N 个step 才估测value,所以估测的部分所造成的影响就会比小。
|
||||
- 劣势:因为我们的 reward 比较多,当我们把 N 步的 reward 加起来,对应的 variance 就会比较大。但是我们可以选择通过调整 N 值,去在variance 跟不精确的 Q 之间取得一个平衡。这里介绍的参数 N 就是一个hyper parameter,你要调这个N 到底是多少,你是要多 sample 三步,还是多 sample 五步。
|
||||
- **彩虹(rainbow)**:将7个技巧/算法综合起来的方法,7个技巧分别是——深度Q网络、双深度Q网络、优先级经验回放的双深度Q网络、竞争深度Q网络、异步优势演员-评论员算法(A3C)、分布式Q函数、噪声网络,进而考察每一个技巧的贡献度或者与环境的交互是否是正反馈的。
|
||||
|
||||
|
||||
## 习题
|
||||
|
||||
## 3 Something About Interview
|
||||
**7-1** 为什么传统的深度Q网络的效果并不好?可以参考其公式 $Q(s_t ,a_t)=r_t+\max_{a}Q(s_{t+1},a)$ 来描述。
|
||||
|
||||
- 高冷的面试官:DQN都有哪些变种?引入状态奖励的是哪种?
|
||||
因为实际应用时,需要让 $Q(s_t ,a_t)$ 与 $r_t+\max_{a}Q(s_{t+1},a)$ 尽可能相等,即与我们的目标越接近越好。可以发现,目标值很容易一不小心就被设置得太高,因为在计算该目标值的时候,我们实际上在做的事情是看哪一个动作 $a$ 可以得到最大的Q值,就把它加上去,使其成为我们的目标。
|
||||
|
||||
例如,现在有4个动作,本来它们得到的Q值都是差不多的,它们得到的奖励也都是差不多的,但是在估算的时候是有误差的。如果第1个动作被高估了,那目标就会执行该动作,然后就会选这个高估的动作的Q值加上 $r_t$ 当作目标值。如果第4个动作被高估了,那目标就会选第4个动作的Q值加上 $r_t$ 当作目标值。所以目标总是会选那个Q值被高估的动作,我们也总是会选那个奖励被高估的动作的Q值当作Q值的最大值的结果去加上 $r_t$ 当作新目标值,因此目标值总是太大。
|
||||
|
||||
答:DQN三个经典的变种:Double DQN、Dueling DQN、Prioritized Replay Buffer。
|
||||
**7-2** 在传统的深度Q网络中,我们应该怎么解决目标值太大的问题呢?
|
||||
|
||||
- Double-DQN:将动作选择和价值估计分开,避免价值过高估计。
|
||||
- Dueling-DQN:将Q值分解为状态价值和优势函数,得到更多有用信息。
|
||||
- Prioritized Replay Buffer:将经验池中的经验按照优先级进行采样。
|
||||
我们可以使用双深度Q网络解决这个问题。首先,在双深度Q网络里面,选动作的Q函数与计算价值的Q函数不同。在深度Q网络中,需要穷举所有的动作 $a$,把每一个动作 $a$ 都代入Q函数并计算哪一个动作 $a$ 反馈的Q值最大,就把这个Q值加上 $r_t$ 。但是对于双深度Q网络的两个Q网络,第一个Q网络决定哪一个动作的Q值最大,以此来决定选取的动作。我们的Q值是用 $Q'$ 算出来的,这样有什么好处呢?为什么这样就可以避免过度估计的问题呢?假设我们有两个Q函数,如果第一个Q函数高估了它现在选出来的动作 $a$ 的值,那没关系,只要第二个Q函数 $Q'$ 没有高估这个动作 $a$ 的值,计算得到的就还是正常值。假设反过来是 $Q'$ 高估了某一个动作的值,那也不会产生过度估计的问题。
|
||||
|
||||
- 简述double DQN原理?
|
||||
**7-3** 请问双深度Q网络中所谓的 $Q$ 与 $Q'$ 两个网络的功能是什么?
|
||||
|
||||
答:DQN由于总是选择当前值函数最大的动作值函数来更新当前的动作值函数,因此存在着过估计问题(估计的值函数大于真实的值函数)。为了解耦这两个过程,double DQN 使用了两个值网络,一个网络用来执行动作选择,然后用另一个值函数对一个的动作值更新当前网络。
|
||||
在双深度Q网络中存在两个Q网络,一个是目标的Q网络,一个是真正需要更新的Q网络。具体实现方法是使用需要更新的Q网络选动作,然后使用目标的Q网络计算价值。双深度Q网络相较于深度Q网络的更改是最少的,它几乎没有增加任何的运算量,甚至连新的网络都不需要。唯一要改变的就是在找最佳动作 $a$ 的时候,本来使用 $Q'$ 来计算,即用目标的Q网络来计算,现在改成用需要更新的Q网络来计算。
|
||||
|
||||
- 高冷的面试官:请问Dueling DQN模型有什么优势呢?
|
||||
**7-4** 如何理解竞争深度Q网络的模型变化带来的好处?
|
||||
|
||||
答:对于我们的 $Q(s,a)$ 其对应的state由于为table的形式,所以是离散的,而实际中的state不是离散的。对于 $Q(s,a)$ 的计算公式, $Q(s,a)=V(s)+A(s,a)$ 。其中的 $V(s)$ 是对于不同的state都有值,对于 $A(s,a)$ 对于不同的state都有不同的action对应的值。所以本质上来说,我们最终的矩阵 $Q(s,a)$ 的结果是将每一个 $V(s)$ 加到矩阵 $A(s,a)$ 中得到的。从模型的角度考虑,我们的network直接改变的 $Q(s,a)$ 而是更改的 $V、A$ 。但是有时我们update时不一定会将 $V(s)$ 和 $Q(s,a)$ 都更新。我们将其分成两个path后,我们就不需要将所有的state-action pair都sample一遍,我们可以使用更高效的estimate Q value方法将最终的 $Q(s,a)$ 计算出来。
|
||||
对于 $\mathrm{Q}(s,a)$ ,其对应的状态由于为表格的形式,因此是离散的,而实际中的状态却不是离散的。对于 $\mathrm{Q}(s,a)$ 的计算公式—— $\mathrm{Q}(s,a)=\mathrm{V}(s)+\mathrm{A}(s,a)$ 。其中的 $\mathrm{V}(s)$ 对于不同的状态都有值, $\mathrm{A}(s,a)$ 对于不同的状态都有不同的动作对应的值。所以从本质上来说,我们最终矩阵 $\mathrm{Q}(s,a)$ 的结果是将每一个 $\mathrm{V}(s)$ 加到矩阵 $\mathrm{A}(s,a)$ 中得到的。从模型的角度考虑,我们的网络直接改变的不是 $\mathrm{Q}(s,a)$ ,而是改变的 $\mathrm{V}$、$\mathrm{A}$ 。但是有时我们更新时不一定会将 $\mathrm{V}(s)$ 和 $\mathrm{Q}(s,a)$ 都更新。将状态和动作对分成两个部分后,我们就不需要将所有的状态-动作对都采样一遍,我们可以使用更高效的估计Q值的方法将最终的 $\mathrm{Q}(s,a)$ 计算出来。
|
||||
|
||||
**7-5** 使用蒙特卡洛和时序差分平衡方法的优劣分别有哪些?
|
||||
|
||||
优势:时序差分方法只采样了一步,所以某一步得到的数据是真实值,接下来的都是Q值估测出来的。使用蒙特卡洛和时序差分平衡方法采样比较多步,如采样$N$步才估测价值,所以估测的部分所造成的影响就会比较小。
|
||||
|
||||
劣势:因为智能体的奖励比较多,所以当我们把$N$步的奖励加起来时,对应的方差就会比较大。为了缓解方差大的问题,我们可以通过调整$N$值,在方差与不精确的Q值之间取得一个平衡。这里介绍的参数$N$是超参数,需要微调参数 $N$,例如是要多采样3步、还是多采样5步。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**7-1** 友善的面试官:深度Q网络都有哪些变种?引入状态奖励的是哪种?
|
||||
|
||||
深度Q网络有3个经典的变种:双深度Q网络、竞争深度Q网络、优先级双深度Q网络。
|
||||
|
||||
(1)双深度Q网络:将动作选择和价值估计分开,避免Q值被过高估计。
|
||||
|
||||
(2)竞争深度Q网络:将Q值分解为状态价值和优势函数,得到更多有用信息。
|
||||
|
||||
(3)优先级双深度Q网络:将经验池中的经验按照优先级进行采样。
|
||||
|
||||
**7-2** 友善的面试官:请简述双深度Q网络原理。
|
||||
|
||||
深度Q网络由于总是选择当前最优的动作价值函数来更新当前的动作价值函数,因此存在过估计问题(估计的价值函数值大于真实的价值函数值)。为了解耦这两个过程,双深度Q网络使用两个价值网络,一个网络用来执行动作选择,然后用另一个网络的价值函数对应的动作值更新当前网络。
|
||||
|
||||
**7-3** 友善的面试官:请问竞争深度Q网络模型有什么优势呢?
|
||||
|
||||
对于 $\boldsymbol{Q}(s,a)$ ,其对应的状态由于为表格的形式,因此是离散的,而实际的状态大多不是离散的。对于Q值 $\boldsymbol{Q}(s,a)=V(s)+\boldsymbol{A}(s,a)$ 。其中的 $V(s)$ 是对于不同的状态都有值, $\boldsymbol{A}(s,a)$ 对于不同的状态都有不同的动作对应的值。所以本质上,我们最终的矩阵 $\boldsymbol{Q}(s,a)$ 是将每一个 $V(s)$ 加到矩阵 $\boldsymbol{A}(s,a)$ 中得到的。但是有时我们更新时不一定会将 $V(s)$ 和 $\boldsymbol{Q}(s,a)$ 都更新。我们将其分成两个部分后,就不需要将所有的状态-动作对都采样一遍,我们可以使用更高效的估计Q值的方法将最终的 $\boldsymbol{Q}(s,a)$ 计算出来。
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
# Chapter8 Q-learning for Continuous Actions
|
||||
# 第八章 DQN (连续动作)
|
||||
|
||||
## Questions
|
||||
## 习题
|
||||
|
||||
- Q-learning相比于policy gradient based方法为什么训练起来效果更好,更平稳?
|
||||
**8-1** 深度Q网络相比基于策略梯度的方法为什么训练效果更好、更平稳?
|
||||
|
||||
答:在 Q-learning 中,只要能够 estimate 出Q-function,就可以保证找到一个比较好的 policy,同样的只要能够 estimate 出 Q-function,就保证可以 improve 对应的 policy。而因为 estimate Q-function 作为一个回归问题,是比较容易的。在这个回归问题中, 我们可以时刻观察我们的模型训练的效果是不是越来越好,一般情况下我们只需要关注 regression 的 loss 有没有下降,你就知道你的 model learn 的好不好。所以 estimate Q-function 相较于 learn 一个 policy 是比较容易的。你只要 estimate Q-function,就可以保证说现在一定会得到比较好的 policy,同样其也比较容易操作。
|
||||
在深度Q网络中,只要能够估计出Q函数,就可以找到一个比较好的策略。同样地,只要能够估计出Q函数,就可以增强对应的策略。因为估计Q函数是一个比较容易的回归问题,在这个回归问题中,我们可以时刻观察模型训练的效果是不是越来越好(一般情况下我们只需要关注回归的损失有没有下降,就可以判断模型学习得好不好),所以估计Q函数相较于学习一个策略来说是比较容易的。只需要估计Q函数,就可以保证现在一定会得到比较好的策略,同样其也比较容易操作。对比来说,策略梯度方法中的优化目标是最大化总回报,但是我们很难找到一个明确的损失函数来进行优化,其本质上是一个策略搜索问题,也就是一个无约束的优化问题。
|
||||
|
||||
- Q-learning在处理continuous action时存在什么样的问题呢?
|
||||
**8-2** 深度Q网络在处理连续动作时存在什么样的问题呢?对应的解决方法有哪些呢?
|
||||
|
||||
答:在日常的问题中,我们的问题都是continuous action的,例如我们的 agent 要做的事情是开自驾车,它要决定说它方向盘要左转几度, 右转几度,这就是 continuous 的;假设我们的 agent 是一个机器人,假设它身上有 50 个关节,它的每一个 action 就对应到它身上的这 50 个关节的角度,而那些角度也是 continuous 的。
|
||||
我们在日常生活中常见的问题大都是包含连续动作的,例如智能体要进行自动驾驶,其就需要决定方向盘要左转几度或右转几度,这就是连续的动作;假设智能体是一个机器人,它身上有50个关节,它的每一个动作就对应到这50个关节的角度,这些角度也是连续的。
|
||||
|
||||
然而在解决Q-learning问题时,很重要的一步是要求能够解对应的优化问题。当我们 estimate 出Q-function $Q(s,a)$ 以后,必须要找到一个 action,它可以让 $Q(s,a)$ 最大。假设 action 是 discrete 的,那 a 的可能性都是有限的。但如果action是continuous的情况下,我们就不能像离散的action一样,穷举所有可能的continuous action了。
|
||||
然而在使用深度Q网络时,很重要的一步是要求能够解决对应的优化问题。当我们预估出Q函数 $Q(s,a)$ 以后,必须要找到一个动作,它可以让 $Q(s,a)$ 最大。假设动作是离散的,那么动作 $a$ 的可能性是有限的。但如果动作是连续的,我们就不能像对离散的动作一样,穷举所有可能的动作了。
|
||||
|
||||
为了解决这个问题,有以下几种solutions:
|
||||
为了解决这个问题,有以下几种方案。
|
||||
|
||||
- 第一个解决方法:我们可以使用所谓的sample方法,即随机sample出N个可能的action,然后一个一个带到我们的Q-function中,计算对应的N个Q value比较哪一个的值最大。但是这个方法因为是sample所以不会非常的精确。
|
||||
- 第二个解决方法:我们将这个continuous action问题,看为一个优化问题,从而自然而然地想到了可以用gradient ascend去最大化我们的目标函数。具体地,我们将action看为我们的变量,使用gradient ascend方法去update action对应的Q-value。但是这个方法通常的时间花销比较大,因为是需要迭代运算的。
|
||||
- 第三个解决方法:设计一个特别的network架构,设计一个特别的Q-function,使得解我们 argmax Q-value的问题变得非常容易。也就是这边的 Q-function 不是一个 general 的 Q-function,特别设计一下它的样子,让你要找让这个 Q-function 最大的 a 的时候非常容易。但是这个方法的function不能随意乱设,其必须有一些额外的限制。具体的设计方法,可以我们的chapter8的详细教程。
|
||||
- 第四个解决方法:不用Q-learning,毕竟用其处理continuous的action比较麻烦。
|
||||
(1)第一个方案:我们可以使用采样方法,即随机采样出$N$个可能的动作,然后一个一个代入Q函数中,计算对应的$N$个Q值,并比较哪一个最大。但是这个方案因为使用采样方法所以不会非常精确。
|
||||
|
||||
(2)第二个方案:我们将这个连续动作问题,建模为一个优化问题,从而可以用梯度上升去最大化我们的目标函数。具体地,我们将动作视为变量,使用梯度上升更新动作对应的Q值。但是这个方案通常时间花销比较大,因为其需要迭代计算。
|
||||
|
||||
(3)第三个方案:设计一个特别的网络架构,即设计一个特别的Q函数,使得求解让Q函数最大化的动作 $a$ 变得非常容易。也就是这里的Q函数不是一个广义的Q函数,我们可以使用特殊方法设计Q函数,使得寻找让这个Q函数最大的动作 $a$ 非常容易。但是这个方案的Q函数不能随意设计,其必须有一些额外的限制。
|
||||
|
||||
(4)第四个方案:不用深度Q网络,毕竟用其处理连续动作比较麻烦。
|
||||
|
||||
@@ -1,89 +1,97 @@
|
||||
# Chapter9 Actor-Critic
|
||||
# 第九章 演员-评论员算法
|
||||
|
||||
## 1 Keywords
|
||||
## 关键词
|
||||
|
||||
- **A2C:** Advantage Actor-Critic的缩写,一种Actor-Critic方法。
|
||||
- **优势演员-评论员(advantage actor-critic,A2C)算法**:一种改进的演员-评论员(actor-critic)算法。
|
||||
|
||||
- **A3C:** Asynchronous(异步的)Advantage Actor-Critic的缩写,一种改进的Actor-Critic方法,通过异步的操作,进行RL模型训练的加速。
|
||||
- **Pathwise Derivative Policy Gradient:** 其为使用 Q-learning 解 continuous action 的方法,也是一种 Actor-Critic 方法。其会对于actor提供value最大的action,而不仅仅是提供某一个action的好坏程度。
|
||||
- **异步优势演员-评论员(asynchronous advantage actor-critic,A3C)算法**:一种改进的演员-评论员算法,通过异步的操作,实现强化学习模型训练的加速。
|
||||
|
||||
## 2 Questions
|
||||
|
||||
- 整个Advantage actor-critic(A2C)算法的工作流程是怎样的?
|
||||
|
||||
答:在传统的方法中,我们有一个policy $\pi$ 以及一个初始的actor与environment去做互动,收集数据以及反馈。通过这些每一步得到的数据与反馈,我们就要进一步更新我们的policy $\pi$ ,通常我们所使用的方式是policy gradient。但是对于actor-critic方法,我们不是直接使用每一步得到的数据和反馈进行policy $\pi$ 的更新,而是使用这些数据进行 estimate value function,这里我们通常使用的算法包括前几个chapters重点介绍的TD和MC等算法以及他们的优化算法。接下来我们再基于value function来更新我们的policy,公式如下:
|
||||
$$
|
||||
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
|
||||
$$
|
||||
其中,上式中的 $r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)$ 我们称为Advantage function,我们通过上式得到新的policy后,再去与environment进行交互,然后再重复我们的estimate value function的操作,再用value function来更新我们的policy。以上的整个方法我们称为Advantage Actor-Critic。
|
||||
|
||||
- 在实现 Actor-Critic 的时候,有哪些我们用到的tips?
|
||||
|
||||
答:与我们上一章讲述的东西有关:
|
||||
|
||||
1. **estimate 两个 network:** 一个是estimate V function,另外一个是 policy 的 network,也就是你的 actor。 V-network的input 是一个 state,output 是一个 scalar。然后 actor 这个 network的input 是一个 state,output 是一个 action 的 distribution。这两个 network,actor 和 critic 的 input 都是 s,所以它们前面几个 layer,其实是可以 share 的。尤其是假设你今天是玩 Atari 游戏,input 都是 image。那 input 那个 image 都非常复杂,image 很大,通常前面都会用一些 CNN 来处理,把那些 image 抽象成 high level 的 information,所以对 actor 跟 critic 来说是可以共用的。我们可以让 actor 跟 critic 的前面几个 layer 共用同一组参数。那这一组参数可能是 CNN。先把 input 的 pixel 变成比较 high level 的信息,然后再给 actor 去决定说它要采取什么样的行为,给这个 critic,给 value function 去计算 expected reward。
|
||||
2. **exploration 机制:** 其目的是对policy $\pi$ 的 output 的分布进行一个限制,从而使得 distribution 的 entropy 不要太小,即希望不同的 action 被采用的机率平均一点。这样在 testing 的时候,它才会多尝试各种不同的 action,才会把这个环境探索的比较好,才会得到比较好的结果。
|
||||
|
||||
- A3C(Asynchronous Advantage Actor-Critic)在训练是回有很多的worker进行异步的工作,最后再讲他们所获得的“结果”再集合到一起。那么其具体的如何运作的呢?
|
||||
|
||||
答:A3C一开始会有一个 global network。它们有包含 policy 的部分和 value 的部分,假设它的参数就是 $\theta_1$。对于每一个 worker 都用一张 CPU 训练(举例子说明),第一个 worker 就把 global network 的参数 copy 过来,每一个 worker 工作前都会global network 的参数 copy 过来。然后这个worker就要去跟environment进行交互,每一个 actor 去跟environment做互动后,就会计算出 gradient并且更新global network的参数。这里要注意的是,所有的 actor 都是平行跑的、之间没有交叉。所以每个worker都是在global network“要”了一个参数以后,做完就把参数传回去。所以当第一个 worker 做完想要把参数传回去的时候,本来它要的参数是 $\theta_1$,等它要把 gradient 传回去的时候。可能别人已经把原来的参数覆盖掉,变成 $\theta_2$了。但是没有关系,它一样会把这个 gradient 就覆盖过去就是了。
|
||||
|
||||
- 对比经典的Q-learning算法,我们的Pathwise Derivative Policy Gradient有哪些改进之处?
|
||||
|
||||
答:
|
||||
|
||||
1. 首先,把 $Q(s,a)$ 换成 了 $\pi$,之前是用 $Q(s,a)$ 来决定在 state $s_t$ 产生那一个 action, $a_{t}$ 现在是直接用 $\pi$ 。原先我们需要解 argmax 的问题,现在我们直接训练了一个 actor。这个 actor input $s_t$ 就会告诉我们应该采取哪一个 $a_{t}$。综上,本来 input $s_t$,采取哪一个 $a_t$,是 $Q(s,a)$ 决定的。在 Pathwise Derivative Policy Gradient 里面,我们会直接用 $\pi$ 来决定。
|
||||
2. 另外,原本是要计算在 $s_{i+1}$ 时对应的 policy 采取的 action a 会得到多少的 Q value,那你会采取让 $\hat{Q}$ 最大的那个 action a。现在因为我们不需要再解argmax 的问题。所以现在我们就直接把 $s_{i+1}$ 代入到 policy $\pi$ 里面,直接就会得到在 $s_{i+1}$ 下,哪一个 action 会给我们最大的 Q value,那你在这边就会 take 那一个 action。在 Q-function 里面,有两个 Q network,一个是真正的 Q network,另外一个是 target Q network。那实际上你在 implement 这个 algorithm 的时候,你也会有两个 actor,你会有一个真正要 learn 的 actor $\pi$,你会有一个 target actor $\hat{\pi}$ 。但现在因为哪一个 action a 可以让 $\hat{Q}$ 最大这件事情已经被用那个 policy 取代掉了,所以我们要知道哪一个 action a 可以让 $\hat{Q}$ 最大,就直接把那个 state 带到 $\hat{\pi}$ 里面,看它得到哪一个 a,就用那一个 a,其也就是会让 $\hat{Q}(s,a)$ 的值最大的那个 a 。
|
||||
3. 还有,之前只要 learn Q,现在你多 learn 一个 $\pi$,其目的在于maximize Q-function,希望你得到的这个 actor,它可以让你的 Q-function output 越大越好,这个跟 learn GAN 里面的 generator 的概念类似。
|
||||
4. 最后,与原来的 Q-function 一样。我们要把 target 的 Q-network 取代掉,你现在也要把 target policy 取代掉。
|
||||
- **路径衍生策略梯度(pathwise derivative policy gradient)**:一种使用Q学习来求解连续动作的算法,也是一种演员-评论员算法。其会对演员提供价值最大的动作,而不仅仅是提供某一个动作的好坏程度。
|
||||
|
||||
|
||||
## 3 Something About Interview
|
||||
## 习题
|
||||
|
||||
- 高冷的面试官:请简述一下A3C算法吧,另外A3C是on-policy还是off-policy呀?
|
||||
**9-1** 完整的优势演员-评论员算法的工作流程是怎样的?
|
||||
|
||||
答:A3C就是异步优势演员-评论家方法(Asynchronous Advantage Actor-Critic):评论家学习值函数,同时有多个actor并行训练并且不时与全局参数同步。A3C旨在用于并行训练,是 on-policy 的方法。
|
||||
在传统的方法中,我们有一个策略 $\pi$ 以及一个初始的演员与环境交互、收集数据以及反馈。通过每一步得到的反馈,我们进一步更新我们的策略 $\pi$ ,通常我们使用的更新方式是策略梯度。但是对于演员-评论员算法,我们不是直接使用每一步得到的数据和反馈进行策略 $\pi$ 的更新,而是使用这些数据和反馈进行价值函数的估计,这里我们通常使用的算法包括时序差分和蒙特卡洛等算法以及基于它们的优化算法。接下来我们再基于价值函数来更新策略,公式如下:
|
||||
|
||||
- 高冷的面试官:请问Actor - Critic有何优点呢?
|
||||
$$
|
||||
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right)-V_{\pi}\left(s_{t}^{n}\right)\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
|
||||
$$
|
||||
|
||||
答:
|
||||
其中 $r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right)-V_{\pi}\left(s_{t}^{n}\right)$ 为优势函数。我们通过以上方法得到新的策略后,再与环境交互,然后重复预估价值函数的操作,用价值函数来更新我们的策略。以上的整个方法我们称为优势演员-评论员算法。
|
||||
|
||||
- 相比以值函数为中心的算法,Actor - Critic应用了策略梯度的做法,这能让它在连续动作或者高维动作空间中选取合适的动作,而 Q-learning 做这件事会很困难甚至瘫痪。
|
||||
- 相比单纯策略梯度,Actor - Critic应用了Q-learning或其他策略评估的做法,使得Actor Critic能进行单步更新而不是回合更新,比单纯的Policy Gradient的效率要高。
|
||||
**9-2** 在实现演员-评论员算法的时候有哪些技巧?
|
||||
|
||||
- 高冷的面试官:请问A3C算法具体是如何异步更新的?
|
||||
(1)预估两个网络:一个是价值网络;另外一个是策略网络。价值网络的输入是一个状态,输出是一个标签;策略网络的输入是一个状态,输出是一个动作的分布。这两个网络中,演员和评论员的输入都是状态,所以它们前面几层是可以共享的。例如,玩雅达利游戏时,输入都是图片。输入的图片都非常复杂,且比较大,通常前期我们都会用一些卷积神经网络来处理这些图片,把图片抽象成深层次的特征,这些网络对演员与评论员网络来说是可以共用的。我们可以让演员与评论员的前面几层共用同一组参数,这一组参数可能是卷积神经网络中的参数。先把输入的像素变成比较高维度的特征信息,然后输入演员网络决定要采取什么样的动作,评论员网络使用价值函数计算期望奖励。
|
||||
|
||||
答:下面是算法大纲:
|
||||
(2)探索机制:其目的是对策略 $\pi$ 的输出分布进行限制,从而使得分布的熵不要太小,即希望不同的动作被采用的概率平均一些。这样在测试的时候,智能体才会多尝试各种不同的动作,才会对环境进行充分探索,从而得到比较好的结果。
|
||||
|
||||
- 定义全局参数 $\theta$ 和 $w$ 以及特定线程参数 $θ′$ 和 $w′$。
|
||||
- 初始化时间步 $t=1$。
|
||||
- 当 $T<=T_{max}$:
|
||||
- 重置梯度:$dθ=0$ 并且 $dw=0$。
|
||||
- 将特定于线程的参数与全局参数同步:$θ′=θ$ 以及 $w′=w$。
|
||||
- 令 $t_{start} =t$ 并且随机采样一个初始状态 $s_t$。
|
||||
- 当 ($s_t!=$ 终止状态)并$t−t_{start}<=t_{max}$:
|
||||
- 根据当前线程的策略选择当前执行的动作 $a_t∼π_{θ′}(a_t|s_t)$,执行动作后接收回报$r_t$然后转移到下一个状态st+1。
|
||||
- 更新 t 以及 T:t=t+1 并且 T=T+1。
|
||||
- 初始化保存累积回报估计值的变量
|
||||
- 对于 $i=t_1,…,t_{start}$:
|
||||
- r←γr+ri;这里 r 是 Gi 的蒙特卡洛估计。
|
||||
- 累积关于参数 θ′的梯度:$dθ←dθ+∇θ′logπθ′(ai|si)(r−Vw′(si))$;
|
||||
- 累积关于参数 w′ 的梯度:$dw←dw+2(r−Vw′(si))∇w′(r−Vw′(si))$.
|
||||
- 分别使用 dθ以及 dw异步更新 θ以及 w。
|
||||
|
||||
- 高冷的面试官:Actor-Critic两者的区别是什么?
|
||||
**9-3** 异步优势演员-评论员算法在训练时有很多的进程进行异步的工作,最后再将他们所获得的“结果”集合到一起。那么其具体是如何运作的呢?
|
||||
|
||||
答:Actor是策略模块,输出动作;critic是判别器,用来计算值函数。
|
||||
异步优势演员-评论员算法,即算法一开始会有一个全局网络,其包含策略部分和价值部分。假设它的参数是 $\theta_1$,假设对于每一个演员都用一个CPU训练,每一个演员工作前都会将全局网络的参数复制进来。然后演员与环境进行交互,每一个演员与环境交互后,都会计算出梯度并且更新全局网络的参数。这里要注意的是,所有的演员都是并行运行的。所以每个演员都是在全局网络复制了参数以后,执行完再把参数传回去。所以当第一个演员执行完想要把参数传回去的时候,本来它要的参数是 $\theta_1$,等它把梯度传回去的时候,可能原来的参数已经被覆盖,变成 $\theta_2$ 了。
|
||||
|
||||
- 高冷的面试官:actor-critic框架中的critic起了什么作用?
|
||||
**9-4** 对比经典的Q学习算法,路径衍生策略梯度有哪些改进之处?
|
||||
|
||||
答:critic表示了对于当前决策好坏的衡量。结合策略模块,当critic判别某个动作的选择时有益的,策略就更新参数以增大该动作出现的概率,反之降低动作出现的概率。
|
||||
(1)把 $Q(s,a)$ 换成了 $\pi$。经典的Q学习算法是用 $Q(s,a)$ 来决定在状态 $s_t$ 产生哪一个动作 $a_{t}$ ,路径衍生策略梯度是直接用 $\pi$ 来决定。面对前者,我们需要解决最大值的问题,现在的路径衍生策略梯度直接训练了一个演员网络。其输入状态 $s_t$ 就会告诉我们应该采取哪一个动作 $a_{t}$。综上,经典的Q学习算法输入状态 $s_t$,采取哪一个动作 $a_t$ 是 $Q(s,a)$ 决定的,在路径衍生策略梯度里面,我们会直接用 $\pi$ 来决定。
|
||||
|
||||
- 高冷的面试官:简述A3C的优势函数?
|
||||
|
||||
答:$A(s,a)=Q(s,a)-V(s)$是为了解决value-based方法具有高变异性。它代表着与该状态下采取的平均行动相比所取得的进步。
|
||||
(2)经典的Q学习算法计算在 $s_{i+1}$ 下对应的策略采取的动作 $a$ 得到的Q值,我们会采取让 $\hat{Q}$ 最大的动作 $a$。现在的路径衍生策略梯度因为我们不需要再求解决最大化的问题,所以我们直接把状态 $s_{i+1}$ 代入策略 $\pi$ 中,就会得到在状态 $s_{i+1}$ 下,哪一个动作会带给我们最大的Q值,就执行这个动作。在Q函数中,有两个Q网络,一个是真正的Q网络,另外一个是目标Q网络。实际上在执行时,也会有两个演员网络,一个真正要学习的演员网络 $\pi$ 和一个目标演员网络 $\hat{\pi}$ 。
|
||||
|
||||
- 如果 A(s,a)>0: 梯度被推向了该方向
|
||||
- 如果 A(s,a)<0: (我们的action比该state下的平均值还差) 梯度被推向了反方
|
||||
(3)经典的Q学习算法只需要学习Q函数,路径衍生策略梯度需要多学习一个策略 $\pi$,其目的在于最大化Q函数,希望得到的演员可以让Q函数的输出尽可能的大,这与生成对抗网络里面的生成器的概念类似。
|
||||
|
||||
但是这样就需要两套 value function,所以可以使用TD error 做估计:$A(s,a)=r+\gamma V(s')-V(s)$。
|
||||
(4)与原来的Q函数一样,我们要把目标Q网络取代掉,路径衍生策略梯度中也要把目标策略取代掉。
|
||||
|
||||
|
||||
## 面试题
|
||||
|
||||
**9-1** 友善的面试官:请简述一下异步优势演员-评论员算法(A3C),另外A3C是同策略还是异策略的模型呀?
|
||||
|
||||
A3C是异步优势演员-评论员算法,其中,评论员学习价值函数,同时有多个演员并行训练并且不时与全局参数同步。A3C旨在并行训练,是同策略算法。
|
||||
|
||||
**9-2** 友善的面试官:请问演员-评论员算法有何优点呢?
|
||||
|
||||
(1)相比以价值函数为中心的算法,演员-评论员算法应用了策略梯度的技巧,这能让它在连续动作或者高维动作空间中选取合适的动作,而Q学习做这件事会很困难。
|
||||
|
||||
(2)相比单纯策略梯度,演员-评论员算法应用了Q学习或其他策略评估的做法,使得演员-评论员算法能进行单步更新而不是回合更新,比单纯的策略梯度的效率要高。
|
||||
|
||||
**9-3** 友善的面试官:请问异步优势演员-评论员算法具体是如何异步更新的?
|
||||
|
||||
下面是异步优势演员-评论员算法的大纲,由于其为异步多线程算法,我们只对其中某一单线程进行分析。
|
||||
|
||||
(1)定义全局参数 $\theta$ 和 $w$ 以及特定线程参数 $\theta'$ 和 $w'$。
|
||||
|
||||
(2)初始化时间步 $t=1$。
|
||||
|
||||
(3)当 $T \leqslant T_{\mathrm{max}}$:
|
||||
|
||||
- 重置梯度:$\mathrm{d} \theta = 0$ 并且 $\mathrm{d}w = 0$。
|
||||
|
||||
- 将特定于线程的参数与全局参数同步:$\theta' = \theta$ 以及 $w'=w$。
|
||||
- 令 $t_{\mathrm{start}} =t$ 并且随机采样一个初始状态 $s_t$。
|
||||
- 当 ($s_t!=$ 终止状态)并且$t−t_{\mathrm{start}} \leqslant t_{\mathrm{max}}$。
|
||||
- 根据当前线程的策略选择当前执行的动作 $a_t\sim\pi_{\theta'}(a_t|s_t)$,执行动作后接收奖励 $r_t$ 然后转移到下一个状态 $s_{t+1}$。
|
||||
- 更新 $t$ 以及 $T$:$t=t+1$ 并且 $T=T+1$。
|
||||
- 初始化保存累积奖励估计值的变量。
|
||||
- 对于 $i=t_1, \dots ,t_{\mathrm{start}}$:
|
||||
- $r \gets \gamma r+r_i$;这里的 $r$ 是 $G_i$ 的蒙特卡洛估计。
|
||||
- 累积关于参数 $\theta'$ 的梯度:$\mathrm{d} \theta \gets \mathrm{d}\theta + \nabla_{\theta'} \mathrm{log} \pi_{\theta'}(a_i|s_i)(r−V_{w'}(s_i))$。
|
||||
- 累积关于参数 $w'$ 的梯度:$\mathrm{d}w \gets \mathrm{d}w+ \mathrm{\partial} (r-V_{w'}(s_i))^2 / \mathrm{\partial} w'$。
|
||||
- 分别使用 $\mathrm{d}\theta$ 以及 $\mathrm{d}w$ 异步更新 $\theta$ 以及 $w$。
|
||||
|
||||
**9-4** 友善的面试官:演员-评论员算法中,演员和评论员两者的区别是什么?
|
||||
|
||||
演员是策略模块,输出动作;评论员是判别器,用来计算价值函数。
|
||||
|
||||
**9-5** 友善的面试官:演员-评论员算法框架中的评论员起了什么作用?
|
||||
|
||||
评论员衡量当前决策的好坏。结合策略模块,当评论员判别某个动作的选择是有益的时候,策略就更新参数以增大该动作出现的概率,反之减小该动作出现的概率。
|
||||
|
||||
**9-6** 友善的面试官:简述异步优势演员-评论员算法的优势函数。
|
||||
|
||||
优势函数的计算公式为 $A(s,a)=Q(s,a)-V(s)=r+\gamma V(s')-V(s)$ ,其可以定量地表示选择动作 $a$ 的优势。即当动作 $a$ 低于价值函数的平均值的时候,优势函数为负值;反之为正值。其是一个标量,具体来说:
|
||||
|
||||
(1)如果 $A(s,a)>0$ ,梯度被推向正方向;
|
||||
|
||||
(2)如果 $A(s,a)<0$ ,即我们的动作比该状态下的平均值还差,则梯度被推向反方向。
|
||||
|
||||
这样就需要两个价值函数,所以可以使用时序差分方法做误差估计:$A(s,a)=r+\gamma V(s')-V(s)$ 。
|
||||
|
||||
BIN
docs/img/ch13/13.1.png
Normal file
|
After Width: | Height: | Size: 292 KiB |
BIN
docs/img/ch13/13.2.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
docs/img/ch13/13.3.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
docs/img/ch13/13.4.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
docs/img/ch13/13.5.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
docs/img/ch13/13.6.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
docs/img/ch13/13.7.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
docs/img/ch13/13.8.png
Normal file
|
After Width: | Height: | Size: 696 KiB |