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

#Datawhale组队学习#7月-强化学习Task1

这里是Datawhale组织的组队学习《强化学习入门202507》,Datawhale是一个开源的社区。

第一章 绪论

1.1 为什么要学习强化学习?

强化学习(Reinforcement Learning, RL)是机器学习中专注于智能体(Agent)如何通过与环境交互学习最优决策策略的分支。与监督学习依赖静态数据集、无监督学习聚焦数据内在结构不同,强化学习的核心在于序贯决策:智能体通过试错探索环境,根据行动结果(奖励或惩罚)动态调整策略,最终实现长期累积奖励最大化。这种特性使其成为解决机器人控制、游戏AI、资源调度等动态决策问题的关键技术。学习强化学习不仅能深入理解智能决策的本质,还为构建自适应系统提供方法论基础。

1.2 强化学习的应用

强化学习的应用已渗透至多领域:

  • 游戏领域:AlphaGo、OpenAI Five等通过RL击败人类顶尖选手,展现了复杂策略的学习能力;

  • 机器人控制:让机器人自主学习行走、抓取等动作,适应真实物理环境的不确定性;

  • 自动驾驶:车辆通过RL优化路径规划与实时决策,提升安全性与效率;

  • 推荐系统:动态调整内容推送策略以最大化用户长期参与度;

  • 工业优化:如能源管理、供应链调度,通过RL实现资源动态分配。
    这些应用验证了RL在处理不确定性、长周期规划及实时交互问题上的独特优势。

1.3 强化学习方向概述

强化学习的研究方向可归纳为三类:

  • 基于值的方法(如Q-Learning、DQN):学习状态或状态-动作对的长期价值函数,通过选择价值最高的动作决策;

  • 基于策略的方法(如Policy Gradient、PPO):直接优化策略函数,输出动作概率分布;

  • 模型驱动方法:学习环境动态模型,基于预测规划行动(如Dyna架构)。
    近年深度强化学习(DRL)将神经网络与RL结合,显著提升了高维状态下的学习能力(如Atari游戏、机器人视觉控制),但样本效率低、训练不稳定仍是挑战。

1.4 学习前的准备

入门强化学习需具备以下基础:

  1. 数学知识:概率论(贝叶斯定理、期望)、线性代数、微积分;

  2. 编程能力:Python为常用语言,需熟悉NumPy、PyTorch/TensorFlow框架;

  3. 机器学习基础:理解监督学习、梯度下降等概念;

  4. 关键概念预知:需提前了解马尔可夫决策过程(MDP)、贝尔曼方程等核心模型。
    建议从经典算法(如Q-Learning、Policy Gradient)入手,结合OpenAI Gym等仿真环境实践,逐步深入理论推导与前沿研究。


总结:强化学习以交互式学习为核心,通过“状态感知-行动选择-奖励反馈”的循环框架,解决传统方法难以处理的动态优化问题,其应用扩展依赖于算法鲁棒性与计算效率的持续突破。

第二章 马尔可夫决策过程

2.1 马尔可夫决策过程(MDP)

马尔可夫决策过程作为强化学习的核心数学模型,完整刻画了智能体与环境的交互框架。一个标准MDP由以下五要素构成:

状态空间(S):环境中所有可能状态的集合;

动作空间(A):智能体可执行的动作集合;

状态转移函数(P):P(s'|s,a)表示在状态s执行动作a后转移到状态s'的概率;

奖励函数(R):R(s,a,s')表示状态转移后获得的即时奖励;

折扣因子(γ):γ∈[0,1],用于平衡即时奖励与未来奖励的权重关系。

MDP的核心目标是寻找最优策略π*,使智能体获得的长期累积奖励最大化。

2.2 马尔可夫性质

马尔可夫性质体现为"无记忆性"特征:下一状态s_{t+1}仅取决于当前状态s_t和执行动作a_t,与历史状态轨迹无关(即P(s_{t+1}|s_t,a_t,s_{t-1},...,s_0)=P(s_{t+1}|s_t,a_t))。这一特性极大简化了问题建模过程,构成MDP的理论基石。在实际应用中,若环境不完全满足马尔可夫性,可通过状态设计(如引入历史信息)来近似满足该性质。

2.3 回报(Return)

回报G_t定义为时间步t起的累积折扣奖励:

G_t = R_{t+1} + γR_{t+2} + γ²R_{t+3} + ⋯ = Σ_{k=0}^∞ γ^k R_{t+k+1}

其中折扣因子γ的作用表现为:

  • 当γ→0时,智能体更关注即时奖励;
  • 当γ→1时,智能体更重视长期收益(需保证无穷级数收敛)。 作为策略评估的核心指标,强化学习的终极目标就是最大化期望回报。

2.4 状态转移矩阵

状态转移函数可表示为三维概率矩阵:

  • 维度结构:|S|×|A|×|S|(状态数×动作数×状态数)
  • 元素定义:矩阵元素P(s'|s,a)表示在状态s执行动作a后转移到s'的概率
  • 概率约束:对任意(s,a)组合,需满足Σ_{s'∈S}P(s'|s,a)=1(概率归一性) 该矩阵是值迭代、策略迭代等动态规划算法的计算基础。

2.5 实战:搭建 Python 编程环境

为后续算法实现做准备,需配置以下环境:

  1. 安装Python(≥3.6版本),推荐使用Anaconda管理包;

  2. 关键库安装

pip install numpy gym matplotlib
  • numpy:数值计算基础库;

  • gym:OpenAI开发的强化学习标准环境(如经典控制任务);

  • matplotlib:结果可视化工具;

  1. 验证环境:运行以下代码测试gym是否可用:
import gym
env = gym.make('FrozenLake-v1')  # 创建"冰湖"环境
print("状态数:", env.observation_space.n)
print("动作数:", env.action_space.n)

总结:MDP通过形式化定义状态、动作、转移、奖励四要素,将强化学习问题转化为可计算的数学模型。其中马尔可夫性质与回报函数共同支撑了贝尔曼方程的推导(后续章节核心),而状态转移矩阵则是算法实现的底层数据结构。

习题

1.强化学习所解决的问题一定要严格满足马尔可夫性质吗?请举例说明。

参考解答:并非必须严格满足。马尔可夫性质是马尔可夫决策过程(MDP)的理论基础,但实际问题的状态往往存在部分可观测性历史依赖性。此时可通过以下两种方式处理:1. 显式改造状态以满足马尔可夫性;2. 直接使用非马尔可夫模型。

举例:自动驾驶中,单纯当前帧图像不满足马尔可夫性(无法判断车辆加速度)。解决方案是将连续4帧图像堆叠作为状态(逼近马尔可夫性),或使用LSTM网络隐式编码历史信息(突破马尔可夫限制)。

2.马尔可夫决策过程主要包含哪些要素?

马尔可夫决策过程(MDP)通过以下核心要素形式化描述强化学习问题:

  1. 状态集合(S)

    • 定义:包含所有可能环境状态的集合,记作s ∈ S
    • 特性:状态需完整描述环境且满足马尔可夫性(未来状态仅取决于当前状态和动作)
    • 实例:机器人坐标、棋盘布局等
  2. 动作集合(A)

    • 定义:智能体在给定状态下可执行的动作集合,记作a ∈ A
    • 分类:
      • 离散动作(如棋类走步、游戏控制指令)
      • 连续动作(如机械臂运动、车辆转向调节)
  3. 状态转移函数(P)

    • 定义:P(s'|s,a)表示执行动作a后从状态s转移到s'的概率
    • 特性:
      • 转移概率总和为1:∑P(s'|s,a) = 1
      • 反映环境动态特性(如机器人运动受地面摩擦影响)
  4. 奖励函数(R)

    • 定义:R(s,a,s')表示状态转移获得的即时奖励值
    • 功能:
      • 引导智能体决策(如成功奖励+10,失败惩罚-5)
      • 需处理稀疏奖励情况(仅关键节点给予反馈)
  5. 折扣因子(γ)

    • 定义:γ ∈ [0,1],用于平衡即时与未来奖励
    • 作用:
      • γ→0:侧重短期收益
      • γ→1:重视长期规划(适用于战略性任务)
    • 数学意义:保证无限时间步的累计奖励收敛性

3.马尔可夫决策过程与金融科学中的马尔可夫链有什么区别与联系?

核心差异体现在决策参与与优化目标的设定。马尔可夫链描述的是被动演化的状态序列(如股价波动仅与前一交易日价格相关,满足P(st+1|st)),本质上属于概率预测模型,不涉及决策主体或目标优化。相比之下,马尔可夫决策过程(MDP)在马尔可夫链框架中引入了智能体的主动干预:通过动作集合A提供选择权(如投资决策中的买卖操作),借助奖励函数R量化决策效果(如投资收益率),最终目标是学习最优策略π*以实现长期收益最大化。简而言之,马尔可夫链是环境动态的观察工具,而MDP则是包含决策机制的控制系统

两者的深层关联源于对马尔可夫性质的共同遵循。它们都满足"下一状态仅取决于当前状态"的无记忆特性。在金融应用场景中,马尔可夫链可以视为MDP的特例:当固定所有动作选择(如持续持有股票)时,MDP的状态转移函数P(s'|s,a)即退化为链式转移概率P(s'|s)。反之,在马尔可夫链中引入决策维度即可构建MDP框架——例如在股价模型中增加交易行为(多头/空头操作)和收益机制(资本利得),即可形成量化交易策略优化的MDP模型。

理论本质:马尔可夫链是MDP的静态骨架,而MDP通过动作与奖励为其赋予动态决策的生命力,二者在状态转移的数学本质上同源,却在智能体与环境的交互维度上分疆。

第三章.动态规划

3.1 动态规划的编程思想

动态规划(Dynamic Programming, DP)是求解马尔可夫决策过程的核心方法,其思想基于问题分解结果复用。通过将复杂问题拆解为相互重叠的子问题(如多步决策中的单步状态转移),并存储子问题解(值函数)避免重复计算,实现高效求解。DP需满足两大条件:一是最优子结构——全局最优解包含子问题最优解(如长期累积奖励最大化依赖单步最优决策);二是重叠子问题——不同决策路径可能重复访问相同状态(如网格世界中多次经过同一位置)。这一思想为后续策略迭代与价值迭代奠定基础。

3.2 状态价值函数和动作价值函数

状态价值函数 Vπ(s)表示从状态 s 出发,遵循策略 π 的期望累积回报

动作价值函数 Qπ(s,a)则扩展至状态-动作对,表示在状态 s执行动作 a后遵循策略 π 的期望累积回报

状态价值是动作价值的策略加权平均。

3.3 贝尔曼方程

贝尔曼方程(Bellman Equation)是动态规划的理论核心,以递归形式关联相邻状态的价值。

该方程揭示价值函数的自洽性:当前状态价值等于即时奖励加上后继状态的折扣价值,为迭代求解提供数学框架。

3.4 策略迭代

策略迭代通过交替执行策略评估策略改进求解最优策略:

  1. 策略评估:固定策略 π,迭代求解其状态价值函数 Vπ(通过反复应用贝尔曼方程直至收敛);

  2. 策略改进:基于当前 Vπ生成更优策略 π′

  3. 循环迭代:重复上述过程直至策略稳定。
    该方法保证策略单调提升且收敛至最优,但需完全遍历状态空间。

3.5 价值迭代

价值迭代将策略评估与改进合并为一步,直接优化价值函数:

  • 操作逻辑:从任意初始价值 V0​ 出发,反复应用上述公式更新所有状态价值,直至变化量小于阈值。最终策略通过贪婪选择导出。
    价值迭代本质是贝尔曼最优方程的迭代解法,计算效率通常高于策略迭代,但未显式维护中间策略。


核心逻辑链:动态规划通过贝尔曼方程将序贯决策问题转化为值函数迭代问题。策略迭代与价值迭代分别从策略优化价值收敛两条路径逼近最优解,二者在状态空间遍历中共享“广义策略迭代”思想——任何结合策略评估与改进的交互过程均能收敛至最优策略。

习题

1. 动态规划问题的主要性质

动态规划的核心性质体现为最优子结构重叠子问题。最优子结构指全局最优解必然包含子问题的最优解,在强化学习中表现为长期累积奖励最大化依赖于每个状态下的局部最优决策。重叠子问题则揭示不同决策路径会反复访问相同状态(如网格世界中多次途经同一位置),通过存储子问题解(值函数)避免重复计算,显著提升求解效率。这两大性质共同构成动态规划的理论基础,使复杂序贯决策问题可分解为递归求解过程。

2. 状态价值函数与动作价值函数的关系

状态价值函数 Vπ(s)与动作价值函数 Qπ(s,a)构成分层价值表达体系

  • 纵向关联:状态价值是动作价值的策略加权平均,表明状态整体价值由其可能动作的价值决定;

  • 横向扩展:动作价值可分解为即时奖励与后继状态价值的贴现组合

二者通过贝尔曼方程形成闭环,实现价值信息的双向传递:Vπ 提供状态全局评估,Qπ 细化动作局部贡献,共同支撑策略优化。

3. 策略迭代与价值迭代的速度对比

算法速度受问题结构与实现细节双重影响:

  • 策略迭代通过交替执行策略评估(完全收敛至 Vπ)与策略改进,策略更新幅度大但评估步骤耗时。当策略空间复杂时(如动作选择敏感),其可能更快接近最优解;

  • 价值迭代将策略隐式嵌入值函数更新,跳过显式策略评估,单步计算更高效。尤其在状态空间大、策略改进平滑的场景中,其收敛速度通常更快。

核心结论:价值迭代因避免策略评估的完全收敛过程,在多数实际任务中(如经典控制问题)计算效率更高;但策略迭代在策略更新剧烈的场景可能减少迭代轮次。实践中,可通过异步更新截断策略评估(如k次迭代后提前改进)平衡二者优势。

好了,Task1的学习就整理到这里,码字不易,点赞收藏关注吧。

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

相关文章:

  • Java大厂面试实录:从电商场景到AI应用的深度技术考察
  • 如何通过域名白名单​OVP防盗链加密视频?
  • 【游戏引擎之路】登神长阶(十八):3天制作Galgame引擎《Galplayer》——无敌之道心
  • AJ Security:实用的 Java Web 安全库
  • Qt获取hid设备信息
  • 抖音小程序开发如何避坑?如何接口调用与性能优化?
  • Nacos 开源 MCP Router,加速 MCP 私有化部署
  • 运维打铁: Ruby 脚本在运维自动化中的应用探索
  • leetcode 3201. 找出有效子序列的最大长度 I 中等
  • K8s 自定义调度器 Part1:通过 Scheduler Extender 实现自定义调度逻辑
  • AI Agent开发学习系列 - langchain之LCEL(1):LangChain LCEL链式编排与RAG增强实践
  • FunASR Paraformer-zh:高效中文端到端语音识别方案全解
  • Django ORM 查询工具对象详解
  • Linux 命令:uname
  • Scalefusion 与 EasyControl 对比:轻量级方案与全功能 IoT MDM 的深度碰撞
  • 前端面试题(HTML、CSS、JavaScript)
  • 在此处打开 powershell 窗口 shift + 右键 修改为 右键弹出
  • [硬件电路-28]:从简单到复杂:宇宙、芯片与虚拟世界的共通逻辑2
  • 1软件工程概念及其基本要素-思考题
  • Netty介绍和基本代码演示
  • 基于渐进式迁移学习网络(PTLN)​的小样本故障诊断模型
  • STM32CubeMX红外收发模块(串口)
  • H3CNE综合实验之五角星
  • 了解linux用户和权限
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(上)【包管理器/Vim】
  • springboot项目部署到K8S
  • Golang 并发快速上手
  • SingLoRA:单矩阵架构减半参数量,让大模型微调更稳定高效
  • ​HAProxy负载均衡集群概述
  • 逆向入门(39、40)程序逆向篇-DaNiEl-RJ.1、genocide1