强化学习2-动作价值函数&DQN
回顾动作价值函数
之前的笔记强化学习1-基础概念(state,action,reward,policy)介绍了强化学习的基础概念以及动作价值函数,这里再回顾一下:
Discounted return: $U_{t}=R_{t}+\gamma R_{t+1}+\gamma^{2} R_{t+2}+\gamma^{3} R_{t+3}+\cdots$
策略$\pi$的动作价值函数:
最优动作价值函数:$Q^{\star}\left(s_{t}, a_{t}\right)=\max {\pi} Q{\pi}\left(s_{t}, a_{t}\right)$
如果我们知道$Q^{\star}$,我们就能知道任意时刻$s$应该执行的操作$a^{\star}=\underset{a}{\operatorname{argmax}} Q^{\star}(s, a)$
但是我们是不知道$Q^{\star}$的,所以一种解决办法是使用Deep Q-Netwrok (DQN),即使用一个神经网络$Q(s, a ; \mathbf{w})$去近似$Q(s, a)$,下面介绍DQN原理。
Deep Q-Netwrok (DQN)

DQN的示意图如上,state $s_t$作为DQN的输入,其输出是对每个action的价值预测,比如left, right和up的价值分别预测2000,1000和3000。

上图展示了DQN的执行过程,可以看到每次都是选择价值最大的动作,之后再下一个状态继续预测并执行价值最大的动作。
这个执行逻辑很好理解,但是这与传统的监督任务不同,我们没有真实的label,那DQN该如何更新呢?为了解决这个问题,我们需要用到 Temporal Difference (TD)。为方便理解,我们首先看一个例子来帮助理解TD。
Temporal Difference (TD)

假设我们现在需要从纽约(NYC)开车到亚特兰大(Atlanta),我们想用DQN来预测这个路程要花的时间。
- 假设一开始模型预测要花费$q=1000$分钟。(这个值很可能只是模型瞎猜的,后面我们需要更新模型参数来使模型预测更精准)
- 假设我们真实地从NYC开车到Atlanta后,实测时间是$y=860$分钟。
这个实测时间860分钟其实就可以当做是真实的label,所以我们可以求出$loss=\frac{1}{2}(q-y)^2$
- 通过上面的loss我们就可以进一步更新DQN
上面的例子中如果要更新DQN需要我们真实地开车从NYC到Atlanta,但是也许我们并不能真的开车到Atlanta,很可能开到华盛顿的时候就没法继续前进了(比如车坏了,路被封了等),那这个时候岂不是就没法更新DQN了?但是我们要相信,只要不放弃,方法总比困难多,即使中途停止,我们也可以利用这个信息来更新DQN。

如上图示,假如我们开车到了DC后就没法继续前进了,但是NYC到DC之间实际消耗时间我们知道是300分钟,并且我们继续利用DQN预测DC到Atlanta的时间是600分钟。此时可以知道,这个时候预测的NYC到Atlanta的时间变成了300+600=900,这和最开始预测的1000分钟有了出入。
尽管预测的600也不一定准确,但是300是真实的数据,那300+600我们认为要比最开始预测的1000肯定要准确一些,所以我们可以把300+600看作是真实的label,即TD target:y=300+600=900。
综上,我们可以通过TD target y和最开始的预测值$Q(W)$计算得到$L=\frac{1}{2}(Q(\mathbf{w})-y)^{2}$,同样通过梯度下降更新DQN。
类似于TD target,还有一个概念是TD error。什么意思呢?还是前面的例子,DQN一开始预测NYC到Atlanta的时间是1000分钟,然后从NYC到了DC又预测 DC到Atlanta的时间是600分钟,那么换句话说,他预测NYC到DC的时间是400分钟,而真实的时间是300分钟,那么TD error $\delta$=400-300=100

将TD learning应用到DQN

在上面的开车时间预测例子中,我们是希望下面等式两边能尽可能地接近,方法是通过二者之间组成的loss来更新DQN的权重
\[T_{\mathrm{NYC} \rightarrow \mathrm{ATL}} \approx T_{\mathrm{NYC} \rightarrow \mathrm{DC}}+T_{\mathrm{DC} \rightarrow \mathrm{ATL}} \\\]那么对应到深度强化学习,就是如下等式
\[Q\left(s_{t}, a_{t} ; \mathbf{w}\right) \approx r_{t}+\gamma \cdot Q\left(s_{t+1}, a_{t+1} ; \mathbf{w}\right) \tag{1}\]你可能会问为什么上面式子右边要乘上一个因子$\gamma$呢?这里我们就需要再次回顾一下价值函数$Q$的定义了。
首先我们可以得到下式
\[\begin{aligned} U_{t} &=R_{t}+\gamma \cdot R_{t+1}+\gamma^{2} \cdot R_{t+2}+\gamma^{3} \cdot R_{t+3}+\gamma^{4} \cdot R_{t+4}+\cdots \\ &=R_{t}+\gamma \cdot\left(R_{t+1}+\gamma \cdot R_{t+2}+\gamma^{2} \cdot R_{t+3}+\gamma^{3} \cdot R_{t+4}+\cdots\right) \end{aligned}\tag{2}\]进而知道
\[U_{t}=R_{t}+\gamma \cdot U_{t+1}\tag{3}\]而,所以
注意比对公式1和4,我们可以看到区别是前者是$r_t$,后者是。因为我们可能没法精准地求出
,所以每次只用一个时刻的奖励来近似计算。
总结起来:
预测的value是:$Q\left(s_{t}, a_{t} ; \mathbf{w}_{t}\right)$
- TD target:
- 那么loss就是
- 最后更新梯度
总结


微信公众号:AutoML机器学习
http://weixin.qq.com/r/HD8gOHzEmiHlrThb92oO (二维码自动识别)
MARSGGBO♥
如有意合作或学术讨论欢迎私戳联系~
邮箱:marsggbo@foxmail.com
2021-03-22 21:06:04