强化学习Q-learning(超详解)

如何估计 V π ( s ) V^{\pi}(s) Vπ(s)

V π ( s ) V^{\pi}(s) Vπ(s)代表我们的主体是 π \pi π在当前局面 s s s得分的期望值。

Monte-Carlo(MC) based approach

使用基于蒙特卡罗的方法,让我们的模型与环境做互动。我们输入一个 S a S_a Sa得到一个估计值,我们希望我们的估计值与 G a G_a Ga越接近越好,所以可以当做一个回归问题来训练我们的神经网络。
具体过程如下:
在这里插入图片描述
但是这个方法也有问题,这样必须等每局游戏结束,才能得到数据,如果游戏的时间特别长,使用这种方法是十分缓慢的。

Temporal-difference(TD) approach

Monte-Carlo的方法,比较把游戏进行到结束。而这种方式不需要将游戏玩到结束。
V π ( s t ) = V π ( s t + 1 ) + r t V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t} Vπ(st)=Vπ(st+1)+rt我们可以得到 V π ( s t ) V^{\pi}\left(s_{t}\right) Vπ(st)已经 V π ( s t + 1 ) V^{\pi}\left(s_{t+1}\right) Vπ(st+1)的值,然后把这两个值的差值丢入我们的神经网络中进行计算: V π ( s t ) − V π ( s t + 1 ) ↔ r t V^{\pi}\left(s_{t}\right)-V^{\pi}\left(s_{t+1}\right) \leftrightarrow r_{t} Vπ(st)Vπ(st+1)rt
在这里插入图片描述

两种方式比较

MC: 使用这种方式的时候方差很大,因为一场完整的游戏过程中有很多的偶然因素影响。即使你使用完全一样的策略,最后得到的 G a G_a Ga也会不一样。
TD: 因为这里训练的是 r r r的值,而 r r r只是单独的一步,所以它的方差会比较小。这里也有一个问题,就是你的 V V V值不一定能够估计的准,因此也会造成误差。
总体来说,两种方法各有优劣。在这里插入图片描述

Q-learning

Q π ( s , a ) Q^\pi (s,a) Qπ(s,a)表示在状态 s s s下采取行动 a a a预计获得的收益。
Q-learning的思路就是通过与环境互动使用更好的 π ′ \pi' π来更新原来的 π \pi π。具体过程如下:
在这里插入图片描述
什么是更好的 π \pi π呢?定义如下:对于任意的状态 s s s V π ′ ( s ) ≥ V π ( s ) V^{\pi^{\prime}}(s) \geq V^{\pi}(s) Vπ(s)Vπ(s)如何寻找 π ′ ( s ) \pi^{\prime}(s) π(s)呢? π ′ ( s ) = arg ⁡ max ⁡ a Q π ( s , a ) \pi^{\prime}(s)=\arg \max _{a} Q^{\pi}(s, a) π(s)=argamaxQπ(s,a)实际上, π ′ \pi' π并没有额外的参数或者另一个神经网络去表示,它只是依靠 Q Q Q推导出来的。
注意: 如果动作是一个连续值的话则不适合使用这种方法。
为什么使用 Q Q Q决定出来的 π ′ \pi' π一定比 π \pi π好呢?具体的证明如下: V π ( s ) = Q π ( s , π ( s ) ) ≤ max ⁡ a Q π ( 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 [ r t + 1 + V π ( s t + 1 ) ∣ s t = s , a t = π ′ ( s t ) ] ≤ E [ r t + 1 + Q π ( s t + 1 , π ′ ( s t + 1 ) ) ∣ s t = s , a t = π ′ ( s t ) ] = E [ r t + 1 + r t + 2 + V π ( s t + 2 ) ∣ … ] ≤ E [ r t + 1 + r t + 2 + Q π ( s t + 2 , π ′ ( s t + 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 π ( s t , a t ) = r t + Q π ( s t + 1 , π ( s t + 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方法是类似的(同样都有 r r r值)。
因为我们训练的时候不希望改变我们的Target,因为我们要拟合一个不停变化的值是相当困难的。所以我们选择固定Target的值,不改变他的参数,在这种情况下进行训练。
具体过程如下:
在这里插入图片描述

Exploration

在我们搜索的时候,我们使用的是如下公式 a = arg ⁡ max ⁡ a Q ( s , a ) a=\arg \max _{a} Q(s, a) a=argamaxQ(s,a)所以没有探索到的位置的 Q Q Q值始终为0,因而一直不会被选中(如果使用的是神经网络这种现象较弱,但是依然存在)具体如下图所示:
在这里插入图片描述
所以为了避免每次都做出同样的选择,我们可以采用以下的方法:
Epsilon Greedy
a = { arg ⁡ max ⁡ a Q ( 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 ) ) ∑ a exp ⁡ ( Q ( s , a ) ) P(a \mid s)=\frac{\exp (Q(s, a))}{\sum_{a} \exp (Q(s, a))} P(as)=aexp(Q(s,a))exp(Q(s,a))

Replay Buffer

这个方法把最近的与环境交互结果数据(不一定是同一个 π \pi π出来的数据)都放到缓存区里,利用这些数据进行训练。但是使用不同的 π \pi π值会不会影响我们的训练呢?结论是不会的。
在这里插入图片描述

算法执行过程

在这里插入图片描述

连续Q-learning

当动作是一个连续的向量 a = arg ⁡ max ⁡ a Q ( s , a ) a=\arg \max _{a} Q(s, a) a=argamaxQ(s,a)这个式子就不能通过穷举计算得出,所以我们要怎样进行选择呢。
方法一会丢失精度,方法二会大幅降低速度。
在这里插入图片描述
方法三实现起来十分复杂。
在这里插入图片描述
我们还可以使用别的方法。
在这里插入图片描述

  • 22
    点赞
  • 221
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值