第4章 蒙特卡洛方法:无模型强化学习的起点

说实话,我第一次接触蒙特卡洛方法时,心里是有点抵触的。你想啊,一个靠随机采样来估计价值的方法,能靠谱吗?但后来在实际项目中,我发现它恰恰是解决很多复杂问题的钥匙。今天我们就来聊聊这个无模型强化学习的起点。

4.1 为什么需要蒙特卡洛方法?

先说说背景。在动态规划那章,我们假设环境模型是已知的——也就是状态转移概率 P 和奖励函数 R 都摆在眼前。但现实世界哪有这么理想?

我在做机器人导航项目时,环境中的障碍物分布、地面摩擦系数,这些参数根本没法精确建模。这时候,无模型方法就派上用场了。蒙特卡洛方法的核心思想很简单:通过完整的轨迹采样来估计价值。

核心观点:蒙特卡洛方法不需要环境模型,它直接从经验中学习。你让智能体与环境交互,记录下完整的轨迹,然后根据实际获得的回报来更新价值估计。

4.2 蒙特卡洛预测:从完整轨迹中学习

预测问题,说白了就是估计状态价值函数 V(s) 或动作价值函数 Q(s,a)。蒙特卡洛的做法很直观:

  1. 让智能体从初始状态开始,按照当前策略执行,直到终止状态
  2. 记录下整条轨迹:S1, A1, R2, S2, A2, R3, ..., ST
  3. 对于轨迹中的每个状态,计算从该状态开始的累积折扣回报 Gt
  4. 用这些 Gt 的平均值来估计 V(s) 或 Q(s,a)

嗯,这里要注意一个细节:首次访问 vs 每次访问。我个人习惯用首次访问蒙特卡洛,因为它在理论上更简洁,方差也更小。

小技巧:如果你在同一个 episode 中多次访问同一个状态,首次访问法只使用第一次出现的回报,而每次访问法会使用所有出现的回报。我建议初学者先掌握首次访问法。

4.2.1 蒙特卡洛预测的伪代码

Initialize:
    V(s) = 0 for all s
    Returns(s) = empty list for all s

Loop for each episode:
    Generate an episode following policy π:
        S0, A0, R1, S1, A1, R2, ..., ST-1, AT-1, RT
    
    G = 0
    Loop for t = T-1 down to 0:
        G = γ * G + Rt+1
        If St is not in S0, S1, ..., St-1:  # 首次访问检查
            Append G to Returns(St)
            V(St) = average(Returns(St))

你看,代码其实很简单。但我在项目中踩过一个坑:episode 必须足够长。有一次做游戏 AI,episode 太短导致采样不足,价值估计偏差很大。后来我加了个最小 episode 长度的限制,问题就解决了。

4.3 蒙特卡洛控制:策略迭代的无模型版本

控制问题,就是找到最优策略。蒙特卡洛控制遵循一个经典的框架:广义策略迭代。

具体来说,我们交替进行两个步骤:

  • 策略评估:用蒙特卡洛方法估计当前策略的 Q 函数
  • 策略改进:基于 Q 函数,贪心地选择动作

我曾经在自动驾驶决策模块中用过这个框架。车辆在十字路口需要决定是左转、右转还是直行。我们用蒙特卡洛方法评估每个动作的长期回报,然后选择最优的。效果还不错,就是训练时间有点长。

4.3.1 探索性初始化

这里有个关键问题:如果策略是贪心的,那智能体只会选择当前认为最优的动作,很多状态-动作对可能永远没机会探索。怎么办?

一个简单的办法是探索性初始化——让每个 episode 的起始状态-动作对都不同,确保所有 (s,a) 对都有机会被访问到。

避坑指南:我曾经在围棋 AI 项目中使用探索性初始化,结果发现状态空间太大,根本覆盖不完。后来我意识到,探索性初始化只适用于状态空间有限且可枚举的情况。对于大规模问题,需要更高级的探索策略。

4.4 探索与利用的平衡

这是强化学习中最经典的问题之一。你想想看,如果智能体总是利用已知的最优动作,那它可能永远发现不了更好的策略。但如果它总是探索,那又无法积累足够的经验来做出好的决策。

蒙特卡洛方法中,常用的平衡策略是 ε-贪心策略:

  • 以概率 1-ε 选择当前最优动作(利用)
  • 以概率 ε 随机选择动作(探索)

我个人的经验是,ε 的取值很关键。一开始可以设大一点(比如 0.3),让智能体充分探索。随着训练进行,逐渐减小 ε 到 0.01 左右。这个衰减过程,我习惯用指数衰减:

epsilon = max(0.01, 0.3 * (0.99 ** episode_count))

为什么这样设计?因为早期探索能发现更多可能性,后期则要收敛到最优策略。我在机器人抓取任务中试过,这个策略比固定 ε 的效果好很多。

4.5 蒙特卡洛方法的优缺点

优点 缺点
不需要环境模型,直接从经验学习 只能用于 episodic 任务,不能处理连续任务
概念简单,容易实现 方差较大,需要大量采样
对每个状态独立估计,没有偏差 学习速度慢,尤其是状态空间大时
可以处理非马尔可夫环境 无法进行增量式学习(需要完整轨迹)

说白了,蒙特卡洛方法就像是一个经验丰富的老师傅,他见过足够多的案例,所以能给出靠谱的判断。但前提是,你得给他足够多的案例。

4.6 知识体系图

下面这张图展示了蒙特卡洛方法在强化学习中的位置,以及它与其他方法的关系:

蒙特卡洛方法知识体系 蒙特卡洛方法 蒙特卡洛预测 蒙特卡洛控制 首次访问法 每次访问法 探索性初始化 ε-贪心策略 核心:基于完整轨迹的回报平均 优点:无模型、简单直观 缺点:高方差、仅适用于episodic任务 关键:探索与利用的平衡

4.7 实践中的注意事项

最后,分享几个我在实际项目中的经验:

  • 采样效率:蒙特卡洛方法需要大量采样。我建议至少跑几千个 episode 才能看到稳定的结果。如果计算资源有限,可以考虑用重要性采样来复用旧数据。
  • 折扣因子 γ:这个参数很敏感。γ 接近 1 时,智能体会考虑长远回报,但方差也大。我一般从 0.9 开始调。
  • 终止状态设计:确保每个 episode 都能在合理步数内终止。否则,无限长的轨迹会让蒙特卡洛方法失效。

个人建议:刚开始学蒙特卡洛时,先在一个简单环境(比如 4x4 网格世界)上跑通代码。这样你能直观地看到价值函数的收敛过程,对理解算法本质很有帮助。

好了,蒙特卡洛方法就聊到这里。它是无模型强化学习的基石,虽然简单,但思想深刻。掌握了它,后面学习时序差分方法就会轻松很多。

可可精品资料库