当前位置: 首页 > news >正文

强化学习入门-免模型预测

文章目录

  • 基本概念
  • 蒙特卡洛估计
  • 时序差分估计
    • 核心思路:结合两种“学习套路”
    • 单步时序差分:走一步看一步的更新
    • 时序差分误差:判断“预估”和“实际”的差距
    • 特殊情况:遇到“终点”怎么办?


基本概念

  • 有模型与免模型的区别:
    前者:状态转移概率是已知的(动态规划、世界模型)
    后者:环境未知 (基本的强化学习方法)
  • 预测与控制:
    预测:主要目的是估计或计算环境中的某种期望值
    控制:如何选择动作以达到最高得分

蒙特卡洛估计

个人认为,蒙特卡洛算法的核心思想就是利用抽样获得的大量数据来估计总体
蒙特卡洛算法主要分成两类:
蒙特卡洛方法主要分成两种算法,一种是首次访问蒙特卡洛方法,另外一种是每次访问蒙特卡洛方法。
区别:
前者:对于每个状态,只记录在回合中第一次出现时的回报,忽略后续再次访问同一状态的回报

伪代码

for each episode:generate trajectory S₀, A₀, R₁, S₁, A₁, R₂, ..., S_TG = 0for t from T-1 downto 0:G = γG + R_{t+1}  # 计算回报if S_t not in S₀, S₁, ..., S_{t-1}:  # 首次访问N(S_t) += 1V(S_t) += (G - V(S_t)) / N(S_t)  # 增量式更新

伪代码

for each episode:generate trajectory S₀, A₀, R₁, S₁, A₁, R₂, ..., S_TG = 0for t from T-1 downto 0:G = γG + R_{t+1}N(S_t) += 1  # 每次访问都计数V(S_t) += (G - V(S_t)) / N(S_t)

后者:记录每次访问状态时的回报,计算所有访问的回报平均值

时序差分估计

可以把时序差分估计方法理解成一种“边体验边学习”的智能算法。

核心思路:结合两种“学习套路”

  • 它学了蒙特卡洛方法的“从实际经历中学习”:就像你做完一件事,会根据当下得到的反馈(比如奖励)和接下来可能遇到的情况来调整对这件事的判断。
  • 又学了动态规划的“用已有经验推新经验”:比如你知道下一步怎么做更划算,就会用这个判断来优化当前的选择,不用等整件事完全结束再总结。

单步时序差分:走一步看一步的更新

最简单的单步时序差分,就像下棋时走一步后就立刻调整策略:

  • 你走了一步(当前状态),得到了一些奖励(比如吃了对方一个子),然后看对方可能怎么应对(下一状态)。

  • 不用等这盘棋下完,你马上根据“当前奖励(V(St)V(S_{t})V(St))+对下一步的判断(rt+1+γV(st+1)r_{t+1}+\gamma V(s_{t+1})rt+1+γV(st+1)),更新对“刚才那步棋”的评价。
    V(st)←V(st)+α[rt+1+γV(st+1)−V(st)]V(s_t) \leftarrow V(s_t) + \alpha [r_{t+1} + \gamma V(s_{t+1}) - V(s_t)]V(st)V(st)+α[rt+1+γV(st+1)V(st)]

  • 这里的“对下一步的判断”其实是还没完全验证的估计值,用这个估计值来更新当前的判断,就叫“自举”——相当于用自己现有的经验(哪怕不完美)来完善自己,不用等所有信息都齐了。

时序差分误差:判断“预估”和“实际”的差距

咱们做判断时,经常会发现“预想的”和“实际发生的”有差距。比如你以为走一步能得10分,结果只得了8分,还差2分,这个差距就是“时序差分误差”。算法会根据这个误差来调整后续的判断,让预估越来越准。公式如下:δ=rt+1+γV(st+1)−V(st)\delta = r_{t+1} + \gamma V(s_{t+1}) - V(s_t)δ=rt+1+γV(st+1)V(st)

特殊情况:遇到“终点”怎么办?

如果走到了游戏结束、任务完成的“终止状态”(比如棋下完了,或者到达目的地了),就没有“下一步”了。这时候算法会直接把“下一步的估计值”设为0,只根据当前的奖励来更新对最后一步的评价——就像考试结束了,不用想“接下来考什么”,直接根据这次的得分总结就好。

总的来说,时序差分的核心就是“不等结束,边做边改,用现有估计不断优化”,既比等全部结束再总结(蒙特卡洛)更灵活,又比完全依赖已有固定经验(动态规划)更贴近实际变化。

注:部分信息来自AI
原文:免模型预测

http://www.dtcms.com/a/288483.html

相关文章:

  • 动态规划——数位DP经典题目
  • 关于饥饿加载(Eager Loading)
  • 智能体上下文压缩-裁剪和摘要
  • Compose笔记(三十六)--SearchBar
  • 人脸识别独立部署解决方案:一劳永逸的本地化对接方案
  • python的多线程无法并行只能并发,why?
  • 80、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:栈空间对齐
  • kubeadm方式部署Kubernetes v1.22.2集群
  • 零基础学习性能测试第二章-linux服务器监控:磁盘监控
  • 如何设计一个高效的网页爬虫?
  • 7月19日 暴雨蓝色预警:全国多地迎强降雨,需防范次生灾害
  • Linux练习二
  • 信息系统风险的安全技术防范思路
  • 零基础学习性能测试第二章-linux服务器监控:CPU监控
  • [每日随题10] DP - 重链剖分 - 状压DP
  • stm32继电器使用方法
  • Java并发7--FutrureTask 及CompletetableFuture
  • 高速SAR架构ADC选型设计
  • 为什么选择PGCE中级认证?
  • startnet.cmd命令里面的factory -minint
  • 零基础学习性能测试第二章-监控体系
  • 多线程 示例
  • QML 动画效果详解
  • Public Key Retrieval is not allowed
  • CS231n-2017 Lecture3线性分类器、最优化笔记
  • 测试计划(抽奖系统)
  • DC-DC降压转换5.5V/3A高效率低静态同步降压转换具有自适应关断功能
  • CCF编程能力等级认证GESP—C++7级—20250628
  • Navicat 查看单张表建表ddl
  • Python观察者模式详解:从理论到实战