ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

强化学习入门:从MDP到值函数,掌握智能体决策的核心原理

强化学习入门:从MDP到值函数,掌握智能体决策的核心原理 简介这是一份面向机器学习初学者的强化学习入门课件采用PPT形式系统讲解强化学习的基本概念与数学框架。内容从机器学习三大分类切入重点对比强化学习与监督学习、无监督学习的差异随后详细展开Agent、奖励信号、策略、回报函数、值函数、环境模型等核心要素并引入马尔科夫过程、马尔科夫奖励过程与马尔科夫决策过程MDP的递进关系帮助读者理解状态转移概率与马尔科夫性。课件还配有五子棋、机器人避障等直观例子便于将抽象理论联系实际场景。资源包共1个pptx文件大小1.6MB内容精炼适合高校学生、算法初学者及课程汇报者快速建立知识框架。目前已有420人学习下载。学完这份课件读者能够清晰梳理强化学习的整体脉络掌握MDP建模的基本思路为后续深入学习Q-learning、深度强化学习等方向打下扎实基础。1. 强化学习不是在学“答案”而是在学“策略”强化学习可能是机器学习里最容易被名字误导的方向。它并不是让模型像人一样“学习知识”而是让智能体在一个动态环境里不断试错以最大化累积奖励为唯一目标。这带来的直接后果是你几乎没有标准答案可用只有稀疏、延迟的奖励信号。举个例子会更直观。一个五子棋棋手通过数学公式算出位置1比位置2价值大这不叫强化学习而叫规划如果他在多次对弈中试出来位置1更容易赢这才是强化学习。前者依赖已知模型和计算后者依赖交互和评价性反馈。这个区别贯穿了整个强化学习体系的构建。如果你正准备入门强化学习或者要给团队讲清楚强化学习和普通机器学习的区别再或者要做决策优化类项目这份教案的价值在于把Agent、奖励信号、策略、值函数、马尔可夫决策过程这几个概念串成一条线。它能帮你快速建立框架避免一上来就陷进DQN和PPO的细节里。2. 强化学习的五个核心要素从Agent到环境模型这一章把PPT里的定义展开成可以直接使用的概念。很多初学者容易卡在“要素太多、关系不清”上我先按Agent、奖励、策略、值函数、环境模型五个维度拆开讲最后用一个表格收口。2.1 自治智能体主动试探与评价性反馈Agent自治智能体是强化学习的学习主体可以是一个软件程序、一台机器人也可以是游戏里的角色。它的第一个特点是主动对环境做出试探第二个特点是环境对试探动作的反馈是评价性的不是指令性的第三个特点是在“行动-评价”的循环中获得知识并改进动作方案。这里的“评价性反馈”对应的是奖励信号而不是监督学习里的标签。监督学习告诉模型“这张图是猫”强化学习只告诉智能体“你这一步做得怎么样”。更关键的是Agent的动作会改变环境状态从而影响后续信息的接收。例如机器人往左走一步可能让它离目标更近也可能让它踩进陷阱这一步的状态变化会影响到下一步感知到的状态。所以在设计Agent时我们通常要显式区分它的感知、决策和动作三个模块。感知模块读取当前状态决策模块根据策略选择动作动作模块改变环境。这里的决策模块才是强化学习算法要优化的对象。很多工程上失败的强化学习项目问题都出在感知状态设计得不够好比如漏掉了关键信息导致环境不满足马尔可夫性Agent再怎么调算法也学不出来。2.2 奖励信号标量反馈如何驱动行为奖励信号R是一个标量表示Agent在步骤T执行动作的好坏程度。它不需要结构化不需要解释只需要是一个数值。Agent的任务是最大化累积奖励信号而不是单个时刻的奖励。这里有个很容易踩的坑如果把奖励设计成“每吃一个棋子1”智能体可能会学会为了多拿几个棋子而放弃整局胜利。这也是为什么强化学习需要值函数。因为延迟奖励意味着当前动作的影响要在未来多个步骤后才显现单看即时奖励完全不够。PPT里那个机器人走迷宫的例子里到达绿色方块给1000碰到红色陷阱给-1000撞墙给-10其他给0。这个奖励矩阵看起来简单但真正驱动学习的是“累积”值而不是单步的数值。奖励设计本身也是一门手艺。常见做法是把稀疏的大奖励和密集的小奖励组合起来比如“到达目标100每走一步-0.1”。如果只保留稀疏奖励Agent可能在前期完全学不到东西如果只保留密集小奖励Agent会倾向于做局部优化甚至绕路拿负分。你在调参时应该先观察单步奖励分布再决定要不要对每一段轨迹做归一化。2.3 策略、回报函数与值函数决策的两张面孔策略定义了Agent在给定时间内如何行为它把环境状态映射到动作。确定性策略表示为a π(s)随机策略表示为π(a|s) P[A_ta | S_ts]。随机策略在实际应用中非常重要因为很多环境的探索需要随机性比如ε-greedy策略它以概率ε随机选动作以概率1-ε选当前最优动作。回报函数在PPT里的定义是“把环境感知到的状态映射为单独的一个奖赏”它回答的是“这个状态到底值多少”。而值函数回答的是“从这个状态出发未来累计回报的总和是多少”。两者很容易混淆回报函数是即时的、单步的值函数是长期的、累计的。状态价值函数的作用就是评估一个状态在长期回报上的好坏用来做决策和评价决策。举个实际例子在倒立摆任务中单步的回报函数可以设为“摆杆没有倒下给0倒下给-1”但状态价值函数会告诉你在某一时刻摆杆的角度和角速度组合下预期还能坚持多少步。有了这个值你才能决定现在是该向左加力还是向右加力。所以值函数不是要替代回报函数而是给回报函数做“远期贴现”让决策看得更远。2.4 环境模型规划算出来的强化学习试出来的环境模型模拟环境的行为给定一个状态和动作模型可以预测下一个状态和下一个奖励。它通常用于规划。机器学习里有一句经典区分规划是算出来的强化学习是试出来的。这两者的边界在五子棋例子里很清楚。如果你有对手的完整模型可以用搜索树算状态价值但如果对手策略未知你只能通过自对弈去试。环境模型的有无直接决定了你走“基于模型的强化学习”路线还是“无模型强化学习”路线。前者的优势是样本效率高后者的优势是不需要对环境建模也是目前深度强化学习的主流。下面是一个简化的环境模型定义可以用于后续算法测试# 环境模型: 给定当前状态和动作返回 (下一状态, 即时奖励, 是否结束) # 0: 起点, 1: 陷阱, 2: 终点 transition { (0, right): (1, -1, False), (0, down): (2, 10, True), (1, right): (2, 10, True), } def step(s, a): if (s, a) not in transition: return s, -0.5, False # 非法动作 return transition[(s, a)]这段代码把环境压缩成了一个字典键是(状态,动作)值是(下一状态,奖励,是否结束)。在实际项目里环境模型可能是物理仿真器、游戏引擎或者真实机械臂的动力学方程但无论多复杂抽象出来就是这样一个带转移和奖励的函数。有了它值迭代、策略迭代这类规划算法才能工作。这里要注意非法动作在代码里返回了一个负奖励和原状态这是一种常见处理方式。如果你不设置负奖励Agent会发现乱试动作也不会被惩罚最终策略会变得非常不稳定。下面这个表格把这五个要素的边界再明确一下要素定义常见问题Agent主动试探并接收评价反馈的主体把Agent和“模型”混为一谈Agent包含感知、决策、动作奖励信号单步标量反馈奖励函数给得太密导致短视行为策略状态到动作的映射只用确定性策略忽略探索值函数状态的长期累计回报和即时回报混淆环境模型状态转移和奖励的预测器把模型预测当成真实环境五个要素里Agent和奖励信号是强化学习问题的输入策略和值函数是待学习的对象环境模型则决定了你是用规划还是用试错来解决这个问题。3. 马尔可夫决策过程强化学习的数学骨架很多学强化学习的人卡在MDP这一关其实是因为不知道它到底“给学习提供了什么”。这一章我们从马尔可夫性说起然后逐步扩展到MDP并且说明为什么它是强化学习算法的“坐标系”。3.1 马尔可夫性与状态转移概率马尔可夫性指的是系统的下一个状态S_{t1}只与当前状态S_t有关而与前序状态无关。用公式表示就是P[S_{t1} | S_t] P[S_{t1} | S_1, ..., S_t]这个性质看起来严格实际操作中却很有用。它意味着我们不需要维护一整条历史轨迹的联合概率只需要当前状态就能完成决策。很多实际问题并不严格满足马尔可夫性比如机械臂抓取时如果观察不到目标的完整形状只看当前帧就无法判断运动趋势这种情况下常见做法是堆叠多帧观测把历史信息塞进“状态”里人为构造成马尔可夫状态。对于一个马尔可夫状态S和后续状态S状态转移概率定义为P_{ss} P[S_{t1}s | S_ts]。有限状态集合下的所有转移概率构成一个矩阵。下面用Python表示一个3状态系统的转移矩阵import numpy as np # 3个状态的马尔可夫链转移概率矩阵 P np.array([ [0.8, 0.2, 0.0], [0.1, 0.6, 0.3], [0.0, 0.4, 0.6] ]) # 从状态0出发模拟10步 state 0 for _ in range(10): state np.random.choice(3, pP[state]) print(state, end )这里的矩阵元素P[i][j]表示从状态i转移到状态j的概率。注意每一行加起来必须等于1因为从任何状态出发下一步总会落到某个状态上。使用np.random.choice时p参数会依次读取当前状态对应的那行概率。这个矩阵就是马尔可夫过程的核心数据。在真实项目中状态转移概率通常不是手工指定的而是从交互数据中估计出来的。比如你让Agent在仿真环境里跑一万步统计“状态s执行动作a后转移到s”的次数再除以总次数就得到了P的估计值。这里要注意数据稀疏时估计会很不稳定所以很多基于模型的方法会加平滑项或者直接用神经网络拟合转移函数。3.2 从马尔可夫过程到马尔可夫奖励过程再到MDP马尔可夫过程是一个二元组(S, P)包含有限状态集合和状态转移概率矩阵。它只描述了状态怎么变但没有告诉我们变化带来什么收益、Agent能做什么。加入奖励之后就变成马尔可夫奖励过程(MRP)它用(S, P, R)描述状态转移过程中获得的期望奖励。再加一口动作状态转移就不再是环境独自决定而是由策略π(a|s)和环境转移概率共同决定这就成了马尔可夫决策过程(MDP)。一个标准的MDP通常写成五元组(S, A, P, R, γ)S有限状态集合A有限动作集合P状态转移概率矩阵P(s|s,a)表示在状态s执行动作a后转移到s的概率R奖励函数R(s,a,s)表示在s执行a并转移到s时得到的奖励γ折扣因子范围[0,1]用来权衡即时奖励和未来奖励PPT里只明确给出了(S, P)但强化学习的核心场景必然包含动作和奖励所以我们在搭建问题时一定要自己补全动作空间、奖励函数和折扣因子。下面这个表可以帮你快速判断自己手里的资源属于哪一层过程组成部分核心问题典型应用马尔可夫过程(MP)S, P状态如何演化排队系统状态预测马尔可夫奖励过程(MRP)S, P, R长期累积回报是多少金融资产状态估值马尔可夫决策过程(MDP)S, A, P, R, γ如何选择动作使回报最大机器人控制、游戏AI在做具体项目时我一般会先画一个状态-动作转移草图把每个状态能执行的动作写出来再给每个转移标上奖励。画完这张图五元组基本就出来了后续无论是写值迭代还是调Q-learning都是在这张图基础上做计算。3.3 为什么MDP是强化学习的“坐标系”有了MDP这个坐标系我们才能把“五子棋棋手通过计算发现位置1比位置2价值大”归类为规划把“通过几次尝试发现位置1更容易赢”归类为强化学习。前者的前提是已知完整的P和R用搜索或者动态规划就能解后者是在P和R未知或不完全时通过采样交互来估计值函数。这里就引出了强化学习算法的一大分支基于模型的强化学习。如果你能获得环境模型比如仿真器或解析动力学方程通常先用值迭代或策略迭代做规划如果环境是黑箱只能靠真实交互那就走无模型路线比如Q-learning、SARSA、PPO。理解MDP之后你再看这些算法就都能对上号它们无非是在求解同一个MDP的五元组只是对P和R的处理方式不同。所以说MDP不是抽象的理论包袱而是帮你把问题结构化的工作框架。遇到一个真实问题时你要做的第一件事不是选算法而是把状态、动作、奖励、转移、折扣因子这五个东西定义清楚。状态定义模糊再强的算法也学不出来奖励定义错误学到的最优策略会朝着错误目标优化。4. 动手复现用网格世界把MDP跑起来理论讲得再多不如把值迭代跑一遍。这里我们用一个4x4网格世界对应PPT里的机器人迷宫实现状态价值函数的计算和最优策略抽取。这个例子规模小几分钟能跑完但把MDP的每个概念都落到了代码里。4.1 网格世界场景建模网格有16个格子编号0到15。Agent从0出发目标是到达15号格子。15号格子给10奖励11号格子是陷阱给-10奖励5号和7号是墙壁不能进入。撞墙不改变状态但奖励-0.5普通移动每步奖励-0.1这样Agent不会绕远路。我们先用代码把环境转移逻辑写清楚GRID 4 GAMMA 0.9 THETA 1e-4 REWARD_GOAL 10.0 REWARD_TRAP -10.0 REWARD_WALL -0.5 REWARD_STEP -0.1 WALLS {5, 7} GOAL 15 TRAP 11 def next_state(s, a): r, c divmod(s, GRID) nr, nc r, c if a 0: nr - 1 elif a 1: nr 1 elif a 2: nc - 1 elif a 3: nc 1 if nr 0 or nr GRID or nc 0 or nc GRID: return None # 撞网格边界 ns nr * GRID nc if ns in WALLS: return None # 撞墙 return ns def reward_for(s, a, ns): if ns is None: return REWARD_WALL if ns GOAL: return REWARD_GOAL if ns TRAP: return REWARD_TRAP return REWARD_STEP动作编码这里定义为0上、1下、2左、3右。next_state返回的是状态编号None表示这次动作导致了撞墙状态保持不变。奖励函数单独放在reward_for里这样后续改动奖励只需要动常量不用改转移逻辑。这个分离在工程上很有用因为调试强化学习时奖励设计是改动最频繁的部分。需要注意这里把陷阱和终点都当作终止状态。在真实的MDP定义中陷阱不一定终结可以设定为“扣分后回到起点”这取决于你希望学到什么样的行为。如果你想模拟“受伤但不退出游戏”的场景可以把陷阱也设为普通状态只给负奖励让Agent学会避开但不终止。4.2 值迭代算出状态价值函数值迭代的核心更新公式是贝尔曼最优性方程V(s) max_a Σ_{s} P(s|s,a) [ R(s,a,s) γ V(s) ]在这个网格世界里转移是确定性的所以求和号只剩下当前动作对应的一个后继状态。我们迭代更新V直到变化量小于阈值。V [0.0] * 16 policy [0] * 16 while True: new_V V[:] delta 0.0 for s in range(16): if s in (GOAL, TRAP): continue # 终止状态不需要计算策略 best_q float(-inf) best_a 0 for a in range(4): ns next_state(s, a) r reward_for(s, a, ns) # 撞墙时状态不变 ns_ s if ns is None else ns q r GAMMA * V[ns_] if q best_q: best_q q best_a a new_V[s] best_q delta max(delta, abs(new_V[s] - V[s])) V new_V if delta THETA: break for s in range(16): best_q float(-inf) best_a 0 for a in range(4): ns next_state(s, a) ns_ s if ns is None else ns r reward_for(s, a, ns) q r GAMMA * V[ns_] if q best_q: best_q q best_a a policy[s] best_a这段代码先是初始化价值函数为全0然后反复迭代更新。两处for s循环分别完成价值更新和策略提取。第四行的V[:]是浅拷贝保证每次迭代用上一轮的V计算避免同轮内状态之间互相污染。delta记录所有状态中最大的价值变化当它小于THETA时认为已经收敛。参数说明GAMMA折扣因子取0.9表示未来一步的奖励打9折如果取0.99Agent会更有耐心绕开陷阱但收敛速度变慢。THETA是收敛阈值1e-4足够了如果要做高精度对比可以缩到1e-6。奖励权重REWARD_STEP-0.1是让Agent尽量缩短路径如果你设置为0Agent会倾向于在靠近终点的安全区域原地绕圈因为这一步也很难拿到负分。4.3 从值函数提取最优策略并分析奖励权重运行完成后状态价值函数会呈现出明显的高低分区。终点附近的状态价值最高陷阱和墙壁附近的价值低。代码跑完可以打印每个格子的价值墙壁显示#for i in range(GRID): row [] for j in range(GRID): s i * GRID j if s in WALLS: row.append(#) else: row.append(round(V[s], 2)) print(row)输出类似下面的形态具体数值取决于你的奖励设置[-1.62, -1.10, -0.49, 1.90] [-1.53, #, 0.00, #] [-1.44, -0.82, 0.00, 0.00] [-1.35, -0.73, 0.41, 10.00]我们可以看到终点右下角价值最高陷阱位置因为是终止状态所以价值为0。但注意墙壁旁边的状态价值并不会因为墙壁本身而自动变低只有通过撞墙的负奖励Agent才学会远离墙壁。这一点很重要如果你想改变避障行为不应该改状态定义而应该调REWARD_WALL。这里放一张参数调整速查表方便你在教学或者调试时快速改参数参数默认值调整建议GAMMA0.9越大越重视长期回报越小越短视THETA1e-4越小迭代次数越多结果更精确REWARD_STEP-0.1绝对值越大路径越短REWARD_WALL-0.5越大越避让墙壁REWARD_TRAP-10.0越大越远离陷阱区域如果你想把这段代码改成无模型强化学习一个直接的方向是把值迭代换成Q-learning。核心更新公式是Q(s,a) Q(s,a) α [ r γ max_a Q(s,a) - Q(s,a) ]把next_state和reward_for合成一个真实的step函数去掉对全局V的依赖就能在未知环境里逐步学习Q值表。这就是从“规划”走向“试错”的关键一步。5. 从入门到应用状态价值函数、基于模型与无模型这一章把前面落下的几个概念再收紧顺便给你几个可以直接用在实战里的判断依据。5.1 状态价值函数到底在算什么状态价值函数V(s)量化了一个状态在长期回报上的“含金量”。在网格世界的结果里你能直接看到终点附近的状态价值高、陷阱附近低。实际项目中它常被用来做策略评估如果你想知道当前策略在哪些状态下容易失败画出状态价值热力图是最快的诊断方式。比如在机械臂强化学习实战中观察各关节角度对应的价值分布可以找到“死区”。状态价值函数并不是直接用来选动作的它需要结合环境模型做一步回溯才能算出当前状态下的最佳动作。如果你没有环境模型那就要换成动作价值函数Q(s,a)直接用状态-动作对来选动作。很多入门者在这里会混淆看见V(s)就想当然认为是策略输出其实策略是从Q值里推出来的而不是从V值里推出来的。5.2 基于模型的强化学习与无模型路线怎么选基于模型的强化学习依赖环境模型预测转移和奖励样本效率高适合仿真器或物理模型可得的场景。无模型强化学习直接通过交互学习Q值或策略适合环境复杂无法建模的场景也是深度强化学习如DQN、PPO的基础。如果你的奖励变化频繁无模型可能需要重新训练而基于模型的规划可以更快适应新奖励因为模型没有变。选择时可以问自己三个问题环境能不能被封装成一个step函数真实世界交互成本高不高奖励函数会不会经常改如果三个答案都是“是”优先考虑基于模型的路线如果环境本身是个黑箱且交互便宜无模型是稳妥的选择。5.3 把这份PPT变成可复用的学习教案这份PPT本身是很好的概念骨架但缺少动手环节。我一般会建议把第4章的网格世界作为课后练习第一步让学生在PPT里画状态转移图第二步用代码实现值迭代第三步改奖励观察策略变化。还可以把五子棋的规划vs强化学习作为思考题让学生判断哪些场景属于规划、哪些属于试错学习。这样一套流程下来入门者能把MDP、值函数、策略几个概念真正内化成自己的知识。最后说一个实操建议把奖励权重单独做成一个参数文件比如reward_config.json每节课让学员修改这个文件再跑值迭代你会看到同一个环境在奖励变化后的策略完全不同。这样他们就能直观理解“奖励设计决定了学习方向”这句话的分量。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表