尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

强化学习入门:从MDP到Q-Learning与深度强化学习

发布时间:2026/9/18 17:17:16

资讯中心
01
ARTICLE

强化学习入门:从MDP到Q-Learning与深度强化学习

强化学习入门:从MDP到Q-Learning与深度强化学习
简介这是一份面向机器学习初学者及高校相关课程教学用的强化学习入门PPT课件。该课件系统介绍了强化学习在机器学习三大分类中的地位重点对比了监督学习、无监督学习与强化学习的区别并围绕智能体、奖励信号、策略、值函数、环境模型等核心概念展开讲解。同时课件还配有五子棋思考题和机器人走迷宫示例直观展示了强化学习与规划的区别帮助理解强化学习的试错机制与马尔科夫决策过程。资源压缩包共1个pptx文件容量1.6MB总共48页内容丰富结构清晰适合课堂演示或自学入门目前已有420人浏览学习。通过学习该课件读者可快速建立强化学习的整体认知为后续深入研究Q-learning、深度强化学习等内容打下扎实基础。1. 强化学习简介为什么最基础的框架反而最难讲很多人第一次接触强化学习是被 AlphaGo 或者机器狗翻跟头吸引过来的觉得这是一个“再给点数据就能跑”的机器学习分支。真正开始啃教材才发现监督学习里那套“特征 标签”的解法完全不奏效——强化学习把标签换成了稀疏的奖励信号把单次预测换成了跨越多步的序列决策。这份简介要做的不是堆公式而是把状态、动作、奖励、策略、价值函数这五样东西放在一条逻辑线上讲清楚。读完之后你至少能回答两个问题为什么几乎所有的强化学习算法都绕不开马尔可夫决策过程以及状态价值函数的作用是什么为什么它在那么多算法里反复出现。2. 从MDP到价值函数状态价值函数的作用是什么2.1 强化学习算法都建立在MDP五元组上马尔可夫决策过程MDP是强化学习的第一套语法。它用五个要素描述智能体与环境交互的全过程状态集合 S、动作集合 A、状态转移概率 P、奖励函数 R、折扣因子 γ。理解这五个要素比提前背任何一个策略梯度公式都重要因为几乎所有后续算法都是在这五元组上做不同的假设和逼近。要素数学符号含义业务举例状态s ∈ S智能体当前可观测到的全部信息机械臂关节角度、末端坐标、夹爪开合度动作a ∈ A智能体可执行的操作集合关节角增量、是否抓取转移概率P(s|s,a)状态 s 执行 a 后变成 s 的概率摩擦力、负载变化带来的不确定性奖励r R(s,a,s)对本次决策好坏的即时反馈到达目标 1碰撞 -1折扣因子γ ∈ [0,1)未来奖励折算到当下的比例权衡近期目标与远期收益这个表格里有两点容易被新手忽略。第一转移概率既可以来自环境模型也可以来自采样统计两者对应了基于模型强化学习Model-Based RL与无模型方法的根本分界。基于模型的流派假设 P 和 R 已知或可学用规划器直接求最优策略无模型流派则放弃对转移概率的显式建模只用与环境交互的样本来更新策略。第二折扣因子 γ 不是单纯的“超参数”它决定了强化学习算法在多长的时间视野上做优化。γ 取 0.9 时第 10 步之后的奖励折算到当下只剩 0.35算法基本只看近 10 步的后果γ 取 0.99 时同样的奖励还有 0.9算法会照顾到更远的未来。这个性质直接决定了你调参时会看到什么样的策略行为。2.2 状态价值函数的作用是什么从贝尔曼方程看吴恩达的机器学习课程里有过一个很直白的说法价值函数是给策略打分的表。状态价值函数 V_π(s) 的定义是“在状态 s 下遵循策略 π 所能获得的期望折扣回报”写成公式就是V_π(s) E_π[ Σ_{k0}^∞ γ^k r_{tk} | s_t s ]把期望展开会得到贝尔曼方程V_π(s) Σ_a π(a|s) Σ_{s,r} P(s,r|s,a) [ r γ V_π(s) ]这个方程要说清楚两件事。第一状态价值函数的作用是把“从当前开始到很久以后的累计回报”压缩成一个单一数值让智能体对每个位置或每个状态有一个“好坏排序”。第二它把无穷时间序列的求和变成了一个可递归计算的固定点方程这才是后续所有迭代算法的数学基础。与状态价值函数并列的还有动作价值函数 Q_π(s,a)。两者的差别一句话就能讲明白V 问“我现在站在这个状态好不好”Q 问“我在这个状态执行这个动作好不好”。Q 比 V 多拆了一个维度所以我们在 Q-Learning 和 DQN 里直接学 Q 表或 Q 网络而在 Actor-Critic 结构里演员网络负责更新策略 π评论家网络负责估计 V 或 Q 来降低策略梯度的方差。这也是很多人在看深度强化学习代码时容易混淆的点看到的 loss 到底在优化什么关键看它是在回归 V、Q还是在最大化 log π。2.3 价值迭代与策略迭代基于模型强化学习的起点如果转移概率和奖励函数已知最直接的解法是动态规划。以一个 4×4 网格为例实现一个价值迭代可以看到 V 值是如何一步步“长”出来的import numpy as np n 4 V np.zeros((n, n)) gamma 0.9 theta 1e-6 actions [(-1, 0), (1, 0), (0, -1), (0, 1)] def is_valid(r, c): return 0 r n and 0 c n while True: V_new V.copy() delta 0.0 for r in range(n): for c in range(n): if (r, c) (n - 1, n - 1): continue # 终点价值固定为0 v V[r, c] total 0.0 for a in actions: nr, nc r a[0], c a[1] if not is_valid(nr, nc): nr, nc r, c # 边界保持原地 reward 1.0 if (nr, nc) (n - 1, n - 1) else 0.0 total (1.0 / len(actions)) * (reward gamma * V[nr, nc]) V_new[r, c] total delta max(delta, abs(v - total)) V V_new if delta theta: break np.set_printoptions(precision2) print(V)逻辑说明每一步更新都把 V_π(s) 写成“即时奖励 折扣后的后继状态价值”的平均值这里的平均权重来自均匀随机策略——假设智能体在每个方向上的选择概率相同。同步更新版本的 V_new 先暂存新值等全部状态计算完再统一替换保证每一轮迭代使用的是上一轮的旧值避免异步更新带来的振荡。运行结果里靠近终点的格子 V 值更高远离终点的格子 V 值较低。这正体现了状态价值函数的作用数值本身就是策略的“可视化”策略只需要朝着 V 增大的方向选择动作。价值迭代成立的前提是已知 P 和 R因此这段代码属于基于模型强化学习的范围。实际工程里环境模型经常拿不到MILP 与强化学习的组合思路也可以用在这个问题上当任务的约束可以写成线性形式MILP 做离线规划强化学习在线补偿模型偏差这类混合架构在调度和路径规划中比单用任一方法都更稳。3. 用Python强化学习最小代码跑通Q-Learning3.1 环境选型为什么用Gymnasium的FrozenLakePython 强化学习入门绕不开 Gymnasium它是 OpenAI Gym 的社区维护版本。FrozenLake 是一个 4×4 的冰面网格智能体从左上角出发走到右下角中途有几个洞掉进去立刻结束。这个环境的好处是状态离散16 个、动作离散4 个方向、奖励稀疏只有到达终点才给 1三个特性恰好能暴露 Q-Learning 收敛过程里的典型特征。安装只需要一条命令pip install gymnasium numpy这里先演示is_slipperyFalse的确定性版本也就是冰面不打滑每次走一步都精确落在预期格子里。确定环境方便验证 Q 表更新逻辑是否正确看完之后可以把参数改成True再跑一遍你会发现同样的超参数收敛明显变慢这个对比能直观说明环境不确定性对强化学习算法的影响。3.2 Q-Learning表格型强化学习算法的最短实现import numpy as np import gymnasium as gym env gym.make(FrozenLake-v1, is_slipperyFalse) Q np.zeros((env.observation_space.n, env.action_space.n)) alpha 0.1 # 学习率新信息覆盖旧信息的速度 gamma 0.99 # 折扣因子未来奖励的权重 epsilon 1.0 # 探索率随机动作的比例 eps_min 0.01 # 探索率下限 eps_decay 0.999 # 探索率衰减系数 for episode in range(10000): state, _ env.reset() done False while not done: if np.random.random() epsilon: action env.action_space.sample() else: action int(np.argmax(Q[state])) next_state, reward, terminated, truncated, _ env.step(action) done terminated or truncated # 核心更新TD目标 即时奖励 折扣后的最大未来价值 td_target reward gamma * np.max(Q[next_state]) Q[state, action] alpha * (td_target - Q[state, action]) state next_state epsilon max(eps_min, epsilon * eps_decay) print(训练完成Q表尺寸:, Q.shape)逻辑说明td_target是本次动作产生的“参考答案”由本步奖励加下一步最优 Q 值构成Q[state, action] alpha * (td_target - Q[state, action])让旧估计只向参考答案移动alpha比例不一步到位避免噪声造成的剧烈震荡。np.max(Q[next_state])取的是下一个状态所有动作里的最大价值注意它并不关心实际执行哪个动作——这个“贪心假设”正是 Q-Learning 属于异策略算法的原因。epsilon从 1.0 衰减到 0.01前几百回合几乎完全随机探索最后几乎完全依赖 Q 表决策这是探索与利用权衡在工程上最常用的实现方式。训练完成后可以在终端打印 Q 表检查比较最终状态附近的值是否明显更高。如果 Q 表看起来全是 0大概率是 epsilon 衰减太快或者训练回合数不够。3.3 超参数表与常见的调参错误参数取值范围说明alpha0.010.5学习率过大导致震荡过小收敛缓慢gamma0.90.99高 gamma 偏向远期收益低 gamma 偏向即时反馈epsilon 初值0.51.0奖励稀疏的环境需要更多初始探索eps_decay0.9950.999衰减过快会过早进入利用阶段错过最优路径训练回合数视环境复杂度而定不要固定死看奖励曲线是否进入平台期常见的误用是把 epsilon 衰减设到 0.99 以内100 回合后探索率就掉到 0.36在奖励稀疏的任务里基本等于主动放弃探索。判断代码写的对不对不要盯着单回合奖励看应该打印最近 100 回合的滑动平均奖励曲线抬头就说明 Q 表在起作用。在机械臂强化学习实战和 AUV水下航行器这类控制任务里表格 Q-Learning 通常要配合动作离散化使用比如“基于 Qlearning 自适应强化学习 PID 控制器在 AUV 中的应用研究”这类方案就是把 PID 控制器的三个系数预先量化成若干档位再用 Q-Learning 选择档位组合。这种思路在动作空间较小时可行但档位一多就容易退化成穷举连续控制场景下还是直接上 PPO 或 DDPG 更实际。4. 从表格到深度深度强化学习的改进与离线强化学习4.1 状态空间爆炸时为什么表格Q-Learning失效FrozenLake 只有 16 个状态Q 表规模是 16×4小到可以直接可视化。换成机械臂视觉抓取输入是 640×480 的 RGB 图像每一帧都是一种“状态”不可能为每个状态建一行记录。深度强化学习的基本思路是用神经网络替代表格网络接收状态输入输出每个动作的 Q 值估计依靠参数共享和特征抽象对没见过的新状态也能给出合理的预测。这就是从“查表”到“拟合”的转变。DQN 的损失函数看起来和回归问题很像L E[ ( r γ max_{a} Q_target(s, a; θ^-) − Q(s, a; θ) )² ]但这里有两个机制保证训练稳定。第一经验回放将 (s, a, r, s) 存入缓冲区训练时随机采样小批量打破相邻样本的强时间相关性避免策略被局部轨迹带偏。第二目标网络 θ^- 不参与梯度更新定期从当前网络复制参数让目标是“缓慢变化的靶子”。如果没有这两个机制Q 网络几乎必然发散这也是很多人在 DQN 上遇到训练震荡的最常见原因。当状态本身是图结构时比如分子构型、通信网络拓扑直接用全连接网络会丢失相邻节点关系这时“图强化学习与深度强化学习”的结合就有了意义GNN 作为 Q 网络的编码器在保留节点邻域信息的同时做决策。4.2 Double DQN和Dueling DQN改了什么DQN 天然会高估 Q 值因为 max 运算符在噪声下总是挑出偏大的估计值。Double DQN 的做法是把“选动作”和“评估动作”拆开用当前网络选动作用目标网络给这个动作打分写成公式就是 r γ Q_target(s, argmax_a Q(s, a; θ); θ^-)。因为选动作和打分用的是两套参数高估幅度明显降低。Dueling DQN 走的是另一条路它把 Q 值拆成状态价值 V(s) 和优势函数 A(s,a)Q(s,a) V(s) A(s,a)。经验上有些任务中状态的好坏信息比动作差异更重要这时候单独建模 V(s) 会让学习更快。这也直接呼应了第二章里状态价值函数的作用——在深度网络结构里V 和 A 的拆分本质上是把“这个状态本身好不好”和“这个动作相对好多少”两个问题分开优化。4.3 离线强化学习与IQL的出场时机在线试错成本太高时前面讲的所有算法都依赖“随时和环境交互拿新数据”这在模拟器里没问题但很多生产环境不允许反复试错医疗决策、工厂配方、交易系统一次坏动作可能造成不可逆损失。离线强化学习Offline RL的目标是从固定数据集学习策略不再做任何在线探索。IQLImplicit Q-Learning是离线强化学习里比较稳的一个做法也是近年被频繁当作 baseline 的算法。它的核心思路是用分位数回归来模拟期望最大化操作而不是直接对没见过的大量动作做 Q 值更新。为什么需要这样因为固定数据集里根本没有覆盖所有可能的动作普通 Q-Learning 会对这些分布外动作OOD action给出虚高的估计策略拿到错误的“高分”动作反而变差。IQL 不直接问“这个动作有多好”而是问“以一定置信水平这个动作能好到多少”从而避开分布外动作的 Q 值膨胀。工程上 IQL 的代码实现并不复杂真正的难点在于评估数据集的覆盖度和质量而不是调网络结构。4.4 与MILP和传统控制结合时强化学习定位别放太高从“强化学习简介”刚入门的人容易产生一个冲动想用强化学习替换掉现有的 PID 控制器或规划器。实际落地更常用的做法是混合架构。MILP 与强化学习的组合里MILP 负责任务分配强化学习负责局部姿态修正机械臂强化学习实战的典型架构是“PD 控制 RL 补偿”先用传统控制器保证系统稳定再用强化学习修正模型误差和扰动。AUV 的偏航控制场景里基于 Qlearning 的自适应强化学习 PID 控制器本质上是把 Q 值用于在线调整 PID 参数而不是替代 PID 本身。这个定位问题想清楚能避免很多落地项目在最初几个月走弯路。5. 评估与验证用确定性环境检查你的强化学习实现5.1 用确定性环境先行验证收敛判断强化学习代码有没有写对最直接的方法是先在一个确定性环境里验证收敛。对 FrozenLake先把is_slipperyFalse跑一遍再用同一张 Q 表在两个环境上分别评估def evaluate(Q, env, episodes100): rewards [] for _ in range(episodes): state, _ env.reset() total 0.0 done False while not done: action int(np.argmax(Q[state])) # 必须转成int否则gymnasium会报错 state, reward, terminated, truncated, _ env.step(action) total reward done terminated or truncated rewards.append(total) return np.mean(rewards) print(确定性环境平均奖励:, evaluate(Q, gym.make(FrozenLake-v1, is_slipperyFalse))) print(滑动环境平均奖励:, evaluate(Q, gym.make(FrozenLake-v1, is_slipperyTrue)))这里有个常见的坑np.argmax返回的是np.int64直接传给env.step在某些版本里会触发类型错误用int()包一层就可以避免。注意第一行代码运行速度会明显快于第二行因为确定性环境下策略几乎每次都能走到终点而滑动环境里摩擦力可能让智能体偏离航向。这个对比能同时验证两件事你的 Q-Learning 实现是否正确以及策略在环境变化后是否依然稳健。5.2 教案扩展案例怎么选给别人讲强化学习简介时验证方法本身也是最好的教学素材。我一般建议按“一个定义、两个方程、三个数据结构”来组织讲解一个定义是 MDP 五元组两个方程是贝尔曼期望方程和贝尔曼最优方程三个数据结构是 Q 表、经验回放缓冲区和策略网络参数。每讲一个算法先问它基于 MDP 的哪个部分做假设再问它用什么结构存学到的知识。扩展案例的选择上机械臂强化学习实战可以讲连续控制与 PPO联邦深度强化学习可以讲多设备轨迹聚合与隐私保护IQL 离线强化学习则适合数据充足但无法在线试错的场景。最后把确定性环境和滑动环境的奖励曲线放在同一张图里用两行代码对比让听众直观理解“环境随机性如何影响强化学习的收敛速度和最终性能”。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。