强化学习Q-learning(超详解)
如何估计Vπ(s)V^{\pi}(s)Vπ(s)
Vπ(s)V^{\pi}(s)Vπ(s)代表我们的主体是π\piπ在当前局面sss得分的期望值。
Monte-Carlo(MC) based approach
使用基于蒙特卡罗的方法,让我们的模型与环境做互动。我们输入一个SaS_aSa得到一个估计值,我们希望我们的估计值与GaG_aGa越接近越好,所以可以当做一个回归问题来训练我们的神经网络。
具体过程如下:
但是这个方法也有问题,这样必须等每局游戏结束,才能得到数据,如果游戏的时间特别长,使用这种方法是十分缓慢的。
Temporal-difference(TD) approach
Monte-Carlo的方法,比较把游戏进行到结束。而这种方式不需要将游戏玩到结束。
Vπ(st)=Vπ(st+1)+rtV^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}Vπ(st)=Vπ(st+1)+rt我们可以得到Vπ(st)V^{\pi}\left(s_{t}\right)Vπ(st)已经Vπ(st+1)V^{\pi}\left(s_{t+1}\right)Vπ(st+1)的值,然后把这两个值的差值丢入我们的神经网络中进行计算:Vπ(st)−Vπ(st+1)↔rtV^{\pi}\left(s_{t}\right)-V^{\pi}\left(s_{t+1}\right) \leftrightarrow r_{t}Vπ(st)−Vπ(st+1)↔rt
两种方式比较
MC: 使用这种方式的时候方差很大,因为一场完整的游戏过程中有很多的偶然因素影响。即使你使用完全一样的策略,最后得到的GaG_aGa也会不一样。
TD: 因为这里训练的是rrr的值,而rrr只是单独的一步,所以它的方差会比较小。这里也有一个问题,就是你的VVV值不一定能够估计的准,因此也会造成误差。
总体来说,两种方法各有优劣。
Q-learning
Qπ(s,a)Q^\pi (s,a)Qπ(s,a)表示在状态sss下采取行动aaa预计获得的收益。
Q-learning的思路就是通过与环境互动使用更好的π′\pi'π′来更新原来的π\piπ。具体过程如下:
什么是更好的π\piπ呢?定义如下:对于任意的状态sssVπ′(s)≥Vπ(s)V^{\pi^{\prime}}(s) \geq V^{\pi}(s)Vπ′(s)≥Vπ(s)如何寻找π′(s)\pi^{\prime}(s)π′(s)呢? π′(s)=argmaxaQπ(s,a)\pi^{\prime}(s)=\arg \max _{a} Q^{\pi}(s, a)π′(s)=argamaxQπ(s,a)实际上,π′\pi'π′并没有额外的参数或者另一个神经网络去表示,它只是依靠QQQ推导出来的。
注意: 如果动作是一个连续值的话则不适合使用这种方法。
为什么使用QQQ决定出来的π′\pi'π′一定比π\piπ好呢?具体的证明如下:Vπ(s)=Qπ(s,π(s))≤maxaQπ(s,a)=Qπ(s,π′(s))\begin{aligned} V^{\pi}(s)=Q^{\pi}(s, \pi(s)) \leq \max _{a} Q^{\pi}(s, a)=Q^{\pi}\left(s, \pi^{\prime}(s)\right) \end{aligned}Vπ(s)=Qπ(s,π(s))≤amaxQπ(s,a)=Qπ(s,π′(s))我们可以看到对于某一步,这个规则成立,对于多步时,证明如下:
Vπ(s)≤Qπ(s,π′(s))=E[rt+1+Vπ(st+1)∣st=s,at=π′(st)]≤E[rt+1+Qπ(st+1,π′(st+1))∣st=s,at=π′(st)]=E[rt+1+rt+2+Vπ(st+2)∣…]≤E[rt+1+rt+2+Qπ(st+2,π′(st+2))∣…]…≤Vπ′(s)\begin{array}{l} V^{\pi}(s) \leq Q^{\pi}\left(s, \pi^{\prime}(s)\right) \\ =E\left[r_{t+1}+V^{\pi}\left(s_{t+1}\right) \mid s_{t}=s, a_{t}=\pi^{\prime}\left(s_{t}\right)\right] \\ \leq E\left[r_{t+1}+Q^{\pi}\left(s_{t+1}, \pi^{\prime}\left(s_{t+1}\right)\right) \mid s_{t}=s, a_{t}=\pi^{\prime}\left(s_{t}\right)\right] \\ =E\left[r_{t+1}+r_{t+2}+V^{\pi}\left(s_{t+2}\right) \mid \ldots\right] \\ \leq E\left[r_{t+1}+r_{t+2}+Q^{\pi}\left(s_{t+2}, \pi^{\prime}\left(s_{t+2}\right)\right) \mid \ldots\right] \ldots \leq V^{\pi^{\prime}}(s) \end{array}Vπ(s)≤Qπ(s,π′(s))=E[rt+1+Vπ(st+1)∣st=s,at=π′(st)]≤E[rt+1+Qπ(st+1,π′(st+1))∣st=s,at=π′(st)]=E[rt+1+rt+2+Vπ(st+2)∣…]≤E[rt+1+rt+2+Qπ(st+2,π′(st+2))∣…]…≤Vπ′(s)
Q-learning技巧
Target Network
我们使用Q-learning的时候,有一个部分Qπ(st,at)=rt+Qπ(st+1,π(st+1))\begin{array}{l} \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) \end{array}Qπ(st,at)=rt+Qπ(st+1,π(st+1))这和之前的TD方法是类似的(同样都有rrr值)。
因为我们训练的时候不希望改变我们的Target,因为我们要拟合一个不停变化的值是相当困难的。所以我们选择固定Target的值,不改变他的参数,在这种情况下进行训练。
具体过程如下:
Exploration
在我们搜索的时候,我们使用的是如下公式a=argmaxaQ(s,a)a=\arg \max _{a} Q(s, a)a=argamaxQ(s,a)所以没有探索到的位置的QQQ值始终为0,因而一直不会被选中(如果使用的是神经网络这种现象较弱,但是依然存在)具体如下图所示:
所以为了避免每次都做出同样的选择,我们可以采用以下的方法:
Epsilon Greedy
a={argmaxaQ(s,a), with probability 1−ε random, otherwise a=\left\{\begin{array}{cl} \arg \max _{a} Q(s, a), & \text { with probability } 1-\varepsilon \\ \text { random, } & \text { otherwise } \end{array}\right.a={argmaxaQ(s,a), random, with probability 1−ε otherwise 其中ε\varepsilonε的值会随着学习的进行而衰减。
Boltzmann Exploration
P(a∣s)=exp(Q(s,a))∑aexp(Q(s,a))P(a \mid s)=\frac{\exp (Q(s, a))}{\sum_{a} \exp (Q(s, a))}P(a∣s)=∑aexp(Q(s,a))exp(Q(s,a))
Replay Buffer
这个方法把最近的与环境交互结果数据(不一定是同一个π\piπ出来的数据)都放到缓存区里,利用这些数据进行训练。但是使用不同的π\piπ值会不会影响我们的训练呢?结论是不会的。
算法执行过程

连续Q-learning
当动作是一个连续的向量a=argmaxaQ(s,a)a=\arg \max _{a} Q(s, a)a=argamaxQ(s,a)这个式子就不能通过穷举计算得出,所以我们要怎样进行选择呢。
方法一会丢失精度,方法二会大幅降低速度。
方法三实现起来十分复杂。
我们还可以使用别的方法。
更多推荐
所有评论(0)