Update chapter6_questions&keywords.md

This commit is contained in:
Yiyuan Yang
2022-09-21 16:15:01 +08:00
committed by GitHub
parent 72b2d5047a
commit 90478c9f23

View File

@@ -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 BufferReplay 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-networkDQN**基于深度学习的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-CarloMC的方法** 本质上就是让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-CarloMC方法的不足我们将其中的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 functionQ-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)$。
- DQNDeep 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
## 习题
- 高冷的面试官请问DQNDeep 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 BufferReplay 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和训练的时候会用到过去的经验数据也可以消除样本之间的相关性。
与状态和演员直接相关。我们在讨论输出时通常是针对一个演员衡量一个状态的好坏,也就是状态、价值从本质上来说是依赖于演员的。不同的演员在相同的状态下也会有不同的输出。
- 高冷的面试官DQNDeep 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** 友善的面试官:请问不打破数据相关性,神经网络的训练效果为什么就不好?
在神经网络中通常使用随机梯度下降法。随机的意思是我们随机选择一些样本来增量式地估计梯度,比如常用的批量训练方法。如果样本是相关的,就意味着前后两个批量很可能也是相关的,那么估计的梯度也会呈现出某种相关性。但是在极端条件下,后面的梯度估计可能会抵消掉前面的梯度估计量,从而使得训练难以收敛。