强化学习导论 | 第五章 蒙特卡洛方法

第四章 动态规划中,已知模型(即状态转换概率)能够对策略进行评估和更新,最终得到最优的策略和最优价值函数。但是,很多情况下,状态转移概率 p ( s ′ , r ∣ s , a ) p(s', r | s, a) p(s,rs,a)并不知道,那要怎么求解最优策略呢?

本章将的蒙特卡洛方法可以利用经验学习到价值函数和策略。经验是指agent和环境交互生成的(状态,动作,奖励)的轨迹序列。

5.1 蒙特卡洛预测 (Monte Carlo Prediction)

上一章的动态规划方法是model-based的方法,因为我们已知模型。蒙特卡洛方法是model-free的,不知道具体的模型,只是根据完整的状态序列(episode)来估算价值函数。

这里的序列指的是在某个策略 π \pi π下的一系列状态、动作、奖励,表示为: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , ⋯   , S T − 1 , A T − 1 , R T S_0, A_0, R_1, S_1, A_1, R_2, \cdots, S_{T-1}, A_{T-1}, R_T S0,A0,R1,S1,A1,R2,,ST1,AT1,RT

怎样根据这样的序列来估计价值呢?比如,对于某个状态 s s s来说,它的状态价值 v π ( s ) v_{\pi}(s) vπ(s)等于所有该状态获得奖励的期望,表示为:
v π ( s ) = E π ( G t ∣ S t = s ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ ∣ S t = s ) v_{\pi}(s) = E_{\pi}(G_t | S_t = s) = E_{\pi}(R_{t+1}+\gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots | S_t = s) vπ(s)=Eπ(GtSt=s)=Eπ(Rt+1+γRt+2+γ2Rt+3+St=s)

那么,在蒙特卡洛方法中,要求某个状态的价值,可以计算出所有序列中从这个状态开始到最终状态的累积奖励,再对其取平均。

但是还有一个问题是:如果一个状态在一个序列中出现了多次,该怎么处理?这里对应两种方法,一种是只计算这个状态在序列中第一次出现的累积奖励,这种方法称为"first-visit MC method";另一种方法是这个状态每次出现时都计算积累奖励,再取平均,称为"every-visit MC method"。

下面给出了"first-visit MC method"计算状态价值函数的伪代码:
在这里插入图片描述

5.2 动作价值的蒙特卡洛估计 (MC Estimation of action values)

在模型未知的情况下,如果我们只计算出状态价值 V ( s ) V(s) V(s),将难以指导agent学习策略。所以,我们可以计算动作价值 q ( s , a ) q(s, a) q(s,a),这样对于选择最优策略是非常方便的。

计算动作价值的方法和5.1中计算状态价值的方法基本一致,只是将 v ( s ) v(s) v(s)变为 q ( s , a ) q(s,a) q(s,a)。即计算状态 s s s下采取动作 a a a能得到的奖励的平均值。

但是这里也存在一个问题:有许多状态-动作对没有被访问到,就没有办法更新他们的动作价值。

针对这个问题,书中给出了两个解决方案:

  • exploring starts:要求每个状态-动作对都有机会作为序列的起始,即如果无限次采样,每个状态-动作对也被采样了很多次,这样就可以计算出对应的动作价值。
  • stochastic policy:选择一个随机的策略,这个策略能够保证在每个状态下,每个动作被选择的概率都是非0的。

5.3 蒙特卡洛控制 (Monte Carlo Control)

蒙特卡洛控制就是进行策略提升,得出最优策略。

我们首先考虑经典的策略迭代版本的蒙特卡洛控制,与动态规划中的策略迭代思想一致,即不断迭代以下过程,直至策略收敛到最优策略,价值函数也收敛至最优。
π 0 → E q π 0 → I π 1 → E q π 1 → I π 2 → E ⋯ → I π ∗ → E q π ∗ \pi_0 \overset{E}{\rightarrow} q_{\pi_0} \overset{I}{\rightarrow} \pi_1 \overset{E}{\rightarrow} q_{\pi_1} \overset{I}{\rightarrow} \pi_2 \overset{E}{\rightarrow} \cdots \overset{I}{\rightarrow} \pi_* \overset{E}{\rightarrow} q_{\pi_*} π0Eqπ0Iπ1Eqπ1Iπ2EIπEqπ

其中, → E \overset{E}{\rightarrow} E表示策略评估, → I \overset{I}{\rightarrow} I表示策略提升。策略评估就是5.2节中讲到的计算动作价值函数 q ( s , a ) q(s, a) q(s,a)。策略提升是指根据动作价值函数改进策略。

如果使用贪心方法进行策略提升,状态 s s s下的策略为:
π ( s ) ≐ arg max ⁡ a q ( s , a ) \pi(s) \doteq \argmax_{a} q(s, a) π(s)aargmaxq(s,a)

利用Exploring starts的蒙特卡洛控制伪代码如下:
在这里插入图片描述
为了使蒙特卡洛算法能收敛到最优价值,得到最优策略,这里用了两个假设:

  • 探索式开端(exploring starts),即每个状态-动作对都有可能作为开端,并执行多次。
  • agent和环境交互无限次,得到了无限的状态序列。

针对这两个假设在实际应用中,不太可能满足的情况,也需要进行一些改进。比如,下一节会讲到非探索开端的蒙特卡洛控制。以及为了避免无限状态序列,改变策略评估和策略提升的粒度等。

5.4 非探索开端的蒙特卡洛控制 (Monte Carlo Control without Exploring Starts)

5.2节中也提到了,针对许多状态-动作对没有被访问到的问题,其中一个解决方法是exploring starts,还有一个方法是选择一个策略,这个策略能保证在每一个状态下,所有动作被选择的概率都是非0的。

接下来第二种方法进行介绍,这种方法中有分为两类,一类是on-policy的, 一类是off-policy的。本节中介绍on-policy方法,下一节介绍off-policy方法。

关于on-policy和off-policy的区别:

  • on-policy是指生成状态序列的策略和要评估改进的策略是同一个。
  • off-policy是指生成状态序列的策略和要评估改进的策略不同。

on-policy方法中, ϵ \epsilon ϵ-greedy策略常用且简单。即在每个状态下,有 ϵ \epsilon ϵ的概率随机选择动作。所以,对于当前状态下非贪心动作,选择它的概率为 ϵ ∣ A ( s ) ∣ \frac{\epsilon}{|\mathcal{A}(s)|} A(s)ϵ。选择当状态下Q值最大的动作的概率为 1 − ϵ + ϵ ∣ A ( s ) ∣ 1-\epsilon+\frac{\epsilon}{|\mathcal{A}(s)|} 1ϵ+A(s)ϵ。其中的 ∣ A ( s ) ∣ |\mathcal{A(s)}| A(s)表示状态 s s s下的动作空间大小。

所以, ϵ \epsilon ϵ-greedy策略和之前的蒙特卡洛控制方法的区别就在于更新策略的部分,之前是选择一个贪心动作,现在也给其他非贪心动作一定的机会被选择。对应的伪代码为(first-visit):
在这里插入图片描述

5.5 通过重要性采样的off-policy 预测 (Off-policy Prediction via Importance Sampling)

on-policy的方法实际上是做了一个折中,它学到的不是一个最优的策略,而是一个带有探索的接近最优策略(near-optimal policy)。

另一个更直接的方法是使用两个策略,一个是我们要评估的策略,另一个探索性的策略用来生成状态序列。我们要评估的策略称为目标策略,生成状态序列的策略称为行为策略

目标策略可以是确定性的,在每个状态下选择贪心动作。行为策略需要保持随机性和更多的探索性,比如一个 ϵ \epsilon ϵ-greedy策略。

几乎所有的off-policy方法都使用了重要性采样。它用来评估随机变量在一个分布上的期望值,但采样的样本来自另一个分布。我们在off-policy的方法中使用重要性采样,可以根据目标策略和行为策略下发生某个轨迹的概率,得到加权的奖励。某个状态动作轨迹在两个策略下出现的概率的比值称为重要性采样率

比如,给定初始状态 S t S_t St,接下来的状态动作轨迹为: A t , S t + 1 , A t + 1 , ⋯   , S T A_t, S_{t+1}, A_{t+1}, \cdots, S_T At,St+1,At+1,,ST。其在策略 π \pi π下发生的概率为:

P r { A t , S t + 1 , A t + 1 , ⋯   , S T ∣ S t , A t : T − 1 ∼ π } = π ( A t ∣ S t ) p ( S t + 1 ∣ S t , A t ) π ( A t + 1 ∣ S t + 1 ) ⋯ p ( S T ∣ S T − 1 , A T − 1 ) = ∏ k = t T − 1 π ( A k ∣ S k ) p ( S k + 1 ∣ S k , A k ) Pr\{A_t, S_{t+1}, A_{t+1}, \cdots, S_T | S_t, A_{t: T-1} \sim \pi\} \\ = \pi(A_t | S_t) p(S_{t+1}|S_t, A_t)\pi(A_{t+1}|S_{t+1}) \cdots p(S_T | S_{T-1}, A_{T-1}) \\ = \prod_{k=t}^{T-1} \pi(A_k | S_k)p(S_{k+1}| S_k, A_k) Pr{At,St+1,At+1,,STSt,At:T1π}=π(AtSt)p(St+1St,At)π(At+1St+1)p(STST1,AT1)=k=tT1π(AkSk)p(Sk+1Sk,Ak)

所以,该状态动作轨迹发生的相对概率为:
ρ t : T − 1 ≐ ∏ k = t T − 1 π ( A k ∣ S k ) p ( S k + 1 ∣ S k , A k ) ∏ k = t T − 1 b ( A k ∣ S k ) p ( S k + 1 ∣ S k , A k ) = ∏ k = t T − 1 π ( A k ∣ S k ) b ( A k ∣ S k ) \rho_{t:T-1} \doteq \frac{\prod_{k = t}^{T-1} \pi(A_k | S_k)p(S_{k+1}| S_k, A_k)}{\prod_{k = t}^{T-1} b(A_k | S_k)p(S_{k+1}| S_k, A_k)} = \prod_{k =t}^{T-1}\frac{\pi(A_k|S_k)}{b(A_k|S_k)} ρt:T1k=tT1b(AkSk)p(Sk+1Sk,Ak)k=tT1π(AkSk)p(Sk+1Sk,Ak)=k=tT1b(AkSk)π(AkSk)

从上式可以看出,重要性采样率和转移概率无关,仅依赖于两个策略和状态动作轨迹。

由于状态动作轨迹是通过策略 b b b生成的,我们要计算的是策略 π \pi π下的状态价值函数。所以,在得到累积奖励之后,需要乘以重要性采样率来预测策略 π \pi π下的奖励值。
v π ( s ) = E [ ρ t : T − 1 G t ∣ S t = s ] v_{\pi}(s) = \mathbb{E}[\rho_{t:T-1}G_t | S_t = s] vπ(s)=E[ρt:T1GtSt=s]

这里不能直接得到期望值,所以对于状态 s s s和价值估计 V ( s ) V(s) V(s)是用它在多个轨迹中得到的 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T1Gt求和取平均。公式表达为:
V ( s ) ≐ ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t ∣ T ( s ) ∣ V(s) \doteq \frac{\sum_{t \in \mathcal{T}(s)}\rho_{t:T(t)-1}G_t}{|\mathcal{T}(s)|} V(s)T(s)tT(s)ρt:T(t)1Gt

其中的 T ( s ) \mathcal{T}(s) T(s)是一个集合,存储着各个轨迹中第一次访问到状态 s s s的时间点, ∣ T ( s ) ∣ |\mathcal{T}(s)| T(s)表示的就是状态 s s s出现在了多少个轨迹中。

这种方式是对采样得到的轨迹中所有第一次访问到状态 s s s得到的奖励,乘以重要性采样率,然后直接除以 s s s第一次出现在轨迹中的次数。这种称为原始重要性采样

另一种是加权重要性采样,定义为:
V ( s ) ≐ ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 V(s) \doteq \frac{\sum_{t \in \mathcal{T}(s)}\rho_{t:T(t)-1}G_t}{\sum_{t \in \mathcal{T}(s)}\rho_{t:T(t)-1}} V(s)tT(s)ρt:T(t)1tT(s)ρt:T(t)1Gt

原始重要性采样和加权重要性采样的区别就在于偏差和方差。原始重要性采样是对 v π ( s ) v_{\pi}(s) vπ(s)的无偏估计,但是方差很大。加权重要性采样是有偏的,但方差更小。

举个例子,当我们仅采样了一个轨迹序列,如: s 1 , a 1 , r 2 , s 2 , a 2 , s T s_1, a_1, r_2, s_2, a_2, s_T s1,a1,r2,s2,a2,sT。这个轨迹中的 s 2 s_2 s2的状态价值用两种加权方法计算出来为:

  • 原始重要性采样: V ( s 2 ) = ρ ∗ r 3 1 = ρ ∗ r 3 V(s_2) = \frac{\rho * r_3}{1}= \rho* r_3 V(s2)=1ρr3=ρr3
  • 加权重要性采样: V ( s 2 ) = ρ ∗ r 3 ρ = r 3 V(s_2) = \frac{\rho * r_3}{\rho} = r_3 V(s2)=ρρr3=r3

从上面的结果可以看出,加权重要性采样的估计值是 r 3 r_3 r3,但 r 3 r_3 r3是根据行为策略估计出来的,所以这种估计是有偏的。但由于它对采样比进行了加权,使得比值最大为1,所以得到的估计值差距不大,方差较小。原始重要性采样理论上是无偏估计,但有时采样比会很大,导致方差较大。

增量式实现:即不用每次存储这次的奖励,而是将之前的所有奖励用一个值表示,当新得到一个奖励就直接计算之前的奖励和这个奖励即可。

伪代码中给出了off-policy MC的预测步骤,在计算动作价值函数 Q ( s , a ) Q(s, a) Q(s,a)使用了加权重要性采样的方法,并采用增量式的实现。
在这里插入图片描述

5.6 off-policy蒙特卡洛控制 (off-policy MC control)

所谓控制,就是根据计算出来的动作价值函数,更新策略 π \pi π

所以,如果 π \pi π采用的是贪心策略,只需要在5.5节中计算出来的Q(s, a)中选择一个最大的,作为状态 s s s下要采取的动作就可以了。即:
π ( s ) = arg max ⁡ a Q ( s , a ) \pi(s) = \argmax_{a}Q(s, a) π(s)=aargmaxQ(s,a)

5.7 总结

在蒙特卡洛方法中,最重要的特点是使用生成的轨迹来计算价值函数。计算的方法是求和平均。在计算出动作价值函数 Q ( s , a ) Q(s, a) Q(s,a)之后,就很容易的能确定策略。

比较难的一点是理解off-policy的方法,使用一个策略生成轨迹,另一个是我们要评估的策略。这样做的目的是为了让行为策略更多的探索,目标策略贪心达到最优。其中用到的重要性采样需要好好理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度强化学习中,卷积神经网络(CNN)是一种常用的模型,广泛应用于图像和视频处理等领域。CNN模型采用了一种特殊的神经网络结构,利用卷积层和池化层来提取特征,具有高效、准确和自适应的特点。 卷积层是CNN模型的核心,通过一系列的卷积运算提取输入图像中的特征,并生成一组输出图像,每个输出图像对应一个特征。卷积运算是一种局部连接的运算方式,它根据预设的卷积核对输入数据进行卷积,得到卷积后的输出数据。卷积窗口大小和卷积核数量的设置,决定了卷积层能够提取的特征类型和数量。而池化层则是在卷积层后,通过降采样操作将卷积层得到的特征进行压缩,从而减少数据的规模,同时也能够提高模型的抗噪声能力。 CNN模型中,卷积层和池化层的替换、分组、重叠等操作形成了各种不同类型的网络结构,如LeNet、AlexNet、VGG、GoogLeNet等。这些网络结构在卷积层和池化层的设置、激活函数的选择、正则化等方面存在差异,适用于不同类型的任务和数据集。 总的来说,CNN模型是一种非常强大的图像和视频处理模型,它能够自动识别图像和视频中的多种特征,并学习出对应的特征表达方式。随着深度强化学习的不断发展,CNN模型的应用前景将会更加广泛和深入,为我们带来更多的惊喜和挑战。 ### 回答2: 卷积神经网络(CNN)是一种基于深度学习的神经网络,在计算机视觉和语音识别等领域表现出了很好的性能。它的核心是卷积层和池化层,以及全连接层和激活函数。本文将对CNN进行详细介绍,以揭示深度强化学习的原理及其数学基础。 卷积层是神经网络的核心组成部分,它通过对输入数据进行卷积运算,将其转化为更具有可解释性的特征向量。池化层可以用于减小特征向量的大小,从而进一步降低计算复杂度。全连接层借助于线性代数的矩阵乘法,将卷积层和池化层的输出转化为一个向量,以供后续的分类任务使用。激活函数是神经网络的非线性映射函数,可以引入非线性,从而使得神经网络能够处理更复杂的决策任务。 深度强化学习的核心在于通过多步决策来优化策略,而CNN作为一个强大的组件,可以用于处理决策任务中的视觉和语音信息。例如,在AlphaGo中,CNN网络用于对棋局进行图像分类,从而为RL算法提供更具可解释性的特征向量。在机器人控制中,CNN可以训练以将摄像头输入映射到动作空间中,从而完成类似人类视觉的场景理解和物体识别任务。 总之,CNN作为深度强化学习中不可或缺的一部分,为多种决策任务提供了强大的视觉处理能力,提高了决策精度,并为未来的深度强化学习研究提供了更加广阔的发展空间。 ### 回答3: 卷积神经网络是一种被广泛应用于图像、视频和语音等领域的深度学习技术,其主要特点是使用卷积层提取特征,加快了计算速度和模型的训练,同时避免了图像等长尾数据的问题。 CNN中的卷积操作是一种优秀的特征提取方法,它采用固定大小、共享参数的卷积核进行特征提取。此外,卷积核还可以通过扩展至多通道、空洞卷积等方法提高模型的准确度。 在实际应用时,我们通常会使用多个卷积层进行特征提取,经过卷积和池化操作后再接上多个全连接层进行分类,这样可以大大提高模型的准确度和泛化能力。 CNN还有很多优化方式,如Batch Normalization、Dropout、Residual Network等,可以有效避免模型过拟合、提高训练速度和精度,对于一些具有高度噪声数据的场景,适当加入dropout或者BatchNorm批归一化对于模型的缩小过拟合的水平大都有帮助。 总之,CNN是一种非常强大实用的深度学习技术,在计算机视觉和语音识别领域有着广泛的应用和深远的影响,能够帮助人们更好地理解图像和声音中蕴含的信息,实现更加高效、精确和智能的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值