Update chapter8_questions&keywords.md
This commit is contained in:
@@ -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所以不会非常的精确。
|
(1)第一个方案:我们可以使用采样方法,即随机采样出$N$个可能的动作,然后一个一个代入Q函数中,计算对应的$N$个Q值,并比较哪一个最大。但是这个方案因为使用采样方法所以不会非常精确。
|
||||||
- 第二个解决方法:我们将这个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的详细教程。
|
(2)第二个方案:我们将这个连续动作问题,建模为一个优化问题,从而可以用梯度上升去最大化我们的目标函数。具体地,我们将动作视为变量,使用梯度上升更新动作对应的Q值。但是这个方案通常时间花销比较大,因为其需要迭代计算。
|
||||||
- 第四个解决方法:不用Q-learning,毕竟用其处理continuous的action比较麻烦。
|
|
||||||
|
(3)第三个方案:设计一个特别的网络架构,即设计一个特别的Q函数,使得求解让Q函数最大化的动作 $a$ 变得非常容易。也就是这里的Q函数不是一个广义的Q函数,我们可以使用特殊方法设计Q函数,使得寻找让这个Q函数最大的动作 $a$ 非常容易。但是这个方案的Q函数不能随意设计,其必须有一些额外的限制。
|
||||||
|
|
||||||
|
(4)第四个方案:不用深度Q网络,毕竟用其处理连续动作比较麻烦。
|
||||||
|
|||||||
Reference in New Issue
Block a user