DQN 笔记 State-action Value Function(Q-function)
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DQN 笔记 State-action Value Function(Q-function)相关的知识,希望对你有一定的参考价值。
1 State-action Value Function(Q-function)
1.1 和 状态价值函数的对比
在DQN笔记:MC & TD_UQI-LIUWJ的博客-CSDN博客 中,状态价值函数的输入是一个状态。它是根据状态去计算出,看到这个状态以后,累积奖励的期望是多少。
状态-动作价值函数【State-action Value Function】的输入是一个状态、动作对。它的意思是说,在某一个状态采取某一个动作,假设我们都使用演员 π ,得到的累积奖励的期望值有多大。
1.2 一个需要注意的问题
有一个需要注意的问题是,这个演员π,在看到状态 s 的时候,它采取的动作不一定是 a。
Q-function 假设在状态 s 强制采取动作 a。不管你现在考虑的这个演员π, 它会不会采取动作 a,这不重要。在状态 s 强制采取动作 a。
接下来的状态就进入”自动模式“,让演员π 按照他设定的策略继续玩下去。这样得到的期望奖励才是
1.3 两种写法
Q-function 有两种写法:
- 输入是状态跟动作,输出就是一个标量;
- 输入是一个状态,输出就是好几个值。
假设动作是离散的,动作就只有 3 个可能:往左往右或是开火。
那这个 Q-function 输出的 3 个值就分别代表 a 是向左的时候的 Q 值,a 是向右的时候的 Q 值,还有 a 是开火的时候的 Q 值。
要注意的事情是,这种写法只有离散动作才能够使用。如果动作是无法穷举的,你只能够用第一种写法,不能用第二种写法。
2 策略改进
有了这个 Q-function,我们就可以决定要采取哪一个动作,我们就可以进行策略改进(Policy Improvement)了
。
2.1 大致思路
大致思路如下,假设你有一个初始的演员π,这个 π 跟环境互动,会收集数据。
接下来学习一个演员π的 Q 值(衡量一下π 在某一个状态强制采取某一个动作,接下来用π 这个策略 会得到的期望奖励)【TD,MC皆可】
学习出一个 Q-function 以后,就可以去找一个新的策略 π′ ,π′ 一定会比原来的策略π 还要好。
这样一直循环下去,policy 就会越来越好。
2.2 什么是更好的策略?
这边”好“是说,对所有可能的状态 s 而言,。
也就是说我们走到同一个状态 s 的时候,如果拿π 继续跟环境互动下去,我们得到的奖励一定会小于等于用π′ 跟环境互动下去得到的奖励。
2.3 如何找更好的策略?
有了 Q-function 以后,怎么找这个 π′ 呢?
我们可以根据上式来查找 π′
假设你已经学习出π 的 Q-function,今天在某一个状态 s,你把所有可能的动作 a 都一一带入这个 Q-function,看看哪一个 a 可以让 Q-function 的值最大,那这个动作就是π′ 会采取的动作。
这边要注意一下,给定这个状态 s,你的策略π 并不一定会采取动作a,我们是给定某一个状态 s 强制采取动作 a,用π 继续互动下去得到的期望奖励,这个才是 Q-function 的定义。
2.4 为什么用决定出来的 π′ 一定会比π 好?
这里也就是要说明,假设有一个策略叫做 π′,它是由决定的。我们要证对所有的状态 s 而言,。
首先,。因为在状态 s根据π 这个演员,它会采取的动作就是π(s)
同时,我们根据策略更新的方式,知道:(因为 a 是所有动作里面可以让 Q 最大的那个动作)
而最大的那个动作就是π′(s),所以有:
于是有:
而 π只是当前状态为s的时候,是会导致最大的Q(s,a),之后的各个状态s',则不一定是最大的Q(s',a)。而π' 会保证所有的状态s,Q(s,a)都是最大的。所以后者一定大于等于前者。
所以,我们可以估计某一个策略的 Q-function,接下来你就可以找到另外一个策略 π′ 比原来的策略还要更好。
3 target network
我们在学习 Q-function 的时候,也会用到 TD:在状态st,你采取动作at 以后,你得到奖励rt ,然后跳到状态。然后根据这个 Q-function,会得到:
所以在学习的时候,我们希望我们的Q-function,输入st,at 得到的值,跟输入, 得到的值中间,我们希望它差了一个rt。
但是实际上这样的一个输入并不好学习。
假设这是一个回归问题, 是网络的输出,是目标,你会发现目标也是会随着训练过程而动的。
当然要实现这样的训练,其实也没有问题,就是你在做反向传播的时候,的参数会被更新,这样会导致训练变得不太稳定,因为假设你把当作你模型的输出,当作目标的话,你要去拟合的目标是一直在变的,这种一直在变的目标的训练是不太好训练的。
解决方法是,你会把其中一个 Q 网络,通常是你会把右边这个 Q 网络固定住。
也就是说你在训练的时候,你只更新左边的 Q 网络的参数,而右边的 Q 网络的参数会被固定住。
因为右边的 Q 网络负责产生目标,所以叫
目标网络 target network
。
因为目标网络是固定的,所以你现在得到的目标的值也是固定的。因为目标网络是固定的,我们只调左边网络的参数,它就变成是一个回归问题。
在实现的时候,可以左边的 Q 网络更新好几次以后,再去用更新过的 Q 网络替换这个目标网络。
但左右两个Q网络不要一起动,它们两个一起动的话,结果会很容易不稳定。
(思路和PPO 有点类似强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】_UQI-LIUWJ的博客-CSDN博客_ppo算法
3.1 形象的例子诠释target network
我们可以通过猫追老鼠的例子来直观地理解为什么要 fix target network。猫是
Q estimation
,老鼠是Q target
。一开始的话,猫离老鼠很远,所以我们想让这个猫追上老鼠。
因为 Q target 也是跟模型参数相关的,所以每次优化后,Q target 也会动。这就导致一个问题,猫和老鼠都在动。
然后它们就会在优化空间里面到处乱动,就会产生非常奇怪的优化轨迹,这就使得训练过程十分不稳定。
所以我们可以固定 Q target,让老鼠动得不是那么频繁,可能让它每 5 步动一次,猫则是每一步都在动。
如果老鼠每 5 次动一步的话,猫就有足够的时间来接近老鼠。然后它们之间的距离会随着优化过程越来越小,最后它们就可以拟合,拟合过后就可以得到一个最好的Q 网络。
4 探索
4.1 遇到的问题
当我们使用 Q-function 的时候,policy 完全取决于 Q-function。给定某一个状态,你就穷举所有的 a, 看哪个 a 可以让 Q 值最大,它就是采取的动作。——value based
这个跟策略梯度不一样,在做策略梯度的时候,输出其实是随机的。我们输出一组动作的概率分布,根据这组动作的概率分布去做采样, 所以在策略梯度里面,你每次采取的动作是不一样的,是有随机性的。——policy based
而对于Q-function,如果每次采取的动作总是固定的,会有什么问题呢?
会遇到的问题就是这不是一个好的收集数据的方式。因为计算Q(S,a)的时候,除了第一步强制指定的动作a之外,之后的每一步都只确定性地取决策,丧失了exploration的机制。
4.2 解决方法
这个问题其实就是探索-利用窘境(Exploration-Exploitation dilemma)
问题。
我们使用Epsilon Greedy(ε-greedy) ,和generalized policy iteration with MC 中的一致
以上是关于DQN 笔记 State-action Value Function(Q-function)的主要内容,如果未能解决你的问题,请参考以下文章
DQN笔记:高估问题 & target network & Double DQN