回顾动作价值函数
之前的笔记强化学习1-基础概念(state,action,reward,policy)[1]介绍了强化学习的基础概念以及动作价值函数,这里再回顾一下:
- Discounted return:
- 策略 的动作价值函数:
- 最优动作价值函数:
如果我们知道 ,我们就能知道任意时刻 应该执行的操作
但是我们是不知道 的,所以一种解决办法是使用Deep Q-Netwrok (DQN),即使用一个神经网络 去近似 ,下面介绍DQN原理。
Deep Q-Netwrok (DQN)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SY4IWN3ATY0U2NzE2Y5QTM2ETZ4ITZmNzY1UjMjJTOj9CX2IzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
DQN
DQN的示意图如上,state 作为DQN的输入,其输出是对每个action的价值预测,比如left, right和up的价值分别预测2000,1000和3000。
上图展示了DQN的执行过程,可以看到每次都是选择价值最大的动作,之后再下一个状态继续预测并执行价值最大的动作。
这个执行逻辑很好理解,但是这与传统的监督任务不同,我们没有真实的label,那DQN该如何更新呢?为了解决这个问题,我们需要用到 Temporal Difference (TD)。为方便理解,我们首先看一个例子来帮助理解TD。
Temporal Difference (TD)
Temporal Difference
假设我们现在需要从纽约(NYC)开车到亚特兰大(Atlanta),我们想用DQN来预测这个路程要花的时间。
- 假设一开始模型预测要花费 分钟。(这个值很可能只是模型瞎猜的,后面我们需要更新模型参数来使模型预测更精准)
- 假设我们真实地从NYC开车到Atlanta后,实测时间是 分钟。
- 这个实测时间860分钟其实就可以当做是真实的label,所以我们可以求出
- 通过上面的loss我们就可以进一步更新DQN
上面的例子中如果要更新DQN需要我们真实地开车从NYC到Atlanta,但是也许我们并不能真的开车到Atlanta,很可能开到华盛顿的时候就没法继续前进了(比如车坏了,路被封了等),那这个时候岂不是就没法更新DQN了?但是我们要相信,只要不放弃,方法总比困难多,即使中途停止,我们也可以利用这个信息来更新DQN。
TD learning
如上图示,假如我们开车到了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和最开始的预测值 计算得到 ,同样通过梯度下降更新DQN。
类似于TD target,还有一个概念是TD error。什么意思呢?还是前面的例子,DQN一开始预测NYC到Atlanta的时间是1000分钟,然后从NYC到了DC又预测 DC到Atlanta的时间是600分钟,那么换句话说,他预测NYC到DC的时间是400分钟,而真实的时间是300分钟,那么TD error =400-300=100
TD error
将TD learning应用到DQN
Apply TD to DQN
在上面的开车时间预测例子中,我们是希望下面等式两边能尽可能地接近,方法是通过二者之间组成的loss来更新DQN的权重
那么对应到深度强化学习,就是如下等式
你可能会问为什么上面式子右边要乘上一个因子 呢?这里我们就需要再次回顾一下价值函数 的定义了。
首先我们可以得到下式
进而知道
而 ,所以
- 预测的value是:
- TD target:
- 那么loss就是
- 最后更新梯度
总结
Value-based RL
TD