想象你在一家陌生的城市开出租车。你手上有两种“知识”:一是地图和规则——到了某个路口,该左转还是直行,这决定了你接下来怎么开车;二是对路况的判断——走这条路大概要多久、那条路会不会堵,这告诉你每条路到底“值不值”。前者是策略,后者是值函数。在强化学习中,智能体(Agent)与环境的每一次交互,都像是在这个城市里反复试跑。搞清楚这两者的关系,你就掌握了强化学习的“方向盘”和“仪表盘”。
理解策略与值函数的关系,是看懂 Q 学习、策略迭代、Actor-Critic 等主流算法的第一步。掌握了它,你就拿到了通往强化学习核心机制的门票。
可视化演示
动态演示搞清策略与值函数的关系的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
搞清策略与值函数的关系:策略的定 策略的定义与分类 值函数作为策略评估工具 核心机制可视化 搞清策略与值函数的关系整体架构与关键组件
策略定义
回到开出租车的比喻。你的策略就是一套“开车规则”:看到红灯右转,看到绿灯直行,乘客赶时间就抄小路。在强化学习中,策略是智能体在每个状态下选择动作的规则,记作 π。它回答了最根本的问题:“我现在身处这个状态,下一步该做什么?”
策略分为两种。确定性策略像一本精确的菜谱:每种食材组合对应唯一的烹饪方式,给定状态 s,策略直接输出唯一的动作 a = π(s)。随机性策略像掷骰子的决定:给定状态 s,策略输出的是每个动作的概率分布 π(a|s),表示在这个状态下选择各个动作的可能性。随机性策略在探索环境时非常重要,因为它保证了智能体不会永远困在同一个选择里。
就像出租车的“行车规则”决定了司机看到每个路口时会怎么走,策略决定了智能体在每一个状态下会采取什么行动。策略是行为层面的“方向盘”。
- π(a|s)策略函数,输出的是概率值。竖线左侧是“要评估的动作”,右侧是“当前所在状态”,整个式子读作“在状态 s 下选动作 a 的概率”。
- 条件概率等式右侧的 \mathbb{P}[A_t = a \mid S_t = s] 表示随机变量“第 t 步的动作”在“第 t 步状态”已确定的条件下取值为 a 的概率。不确定性来自策略自身的随机性。
状态值函数
有了方向盘,你还需要一个仪表盘来判断每条路到底好不好走。状态值函数 V(s) 就是这样一个仪表盘:它告诉你“如果从状态 s 出发,按照当前策略 π 继续行动,未来能获得多少累计奖励”。请注意,状态值函数总是相对某个策略而言的,所以完整写法是 V_π(s)。
为什么需要值函数?因为我们的目标是长期回报,不是眼前的一步奖励。就像出租车司机选择路线时,要看的不只是下一段路的拥堵情况,而是整趟行程的预计时间。状态值函数把“从当前状态到终点的所有未来奖励”压缩成一个数字,让智能体能比较不同状态的优劣。
设折扣因子为 γ,从状态 s 出发的期望累计奖励为:
状态值函数像汽车的油量显示:表盘上的数字告诉你当前位置还有多少“价值油量”可跑,但它不直接告诉你该踩油门还是刹车——那是动作层面的事。这就要引出动作值函数了。
- 期望符号\mathbb{E}_{\pi} 表示“按策略 π 行动时多次试验的数学期望”。由于环境有随机性,每次跑出来的奖励序列都不一样,取平均才是稳定的估计。
- 累计求和\sum_{k=0}^{\infty} 把从第 t+1 步开始的所有奖励全部加起来,k=0 对应即时奖励,k=1 对应下一步奖励,以此类推,一直加到无穷远。
- 折扣因子\gamma^k 是对第 k 步之后奖励的折扣。γ 在 [0,1) 之间,越靠后的奖励被乘上越小的系数,表示“远处的奖励没眼前的值钱”。
- 条件状态S_t = s 表示这一期望值是在“当前时刻恰好处于状态 s”这个前提下计算的,所以 V 是状态 s 的函数。
动作值函数
仪表盘只告诉你“现在这条路整体值不值”,但没告诉你“具体往左拐还是往右拐更好”。动作值函数 Q(s, a) 补上了这一环:它评估“在状态 s 下采取动作 a,之后继续按策略 π 行动”能获得的期望累计奖励。
Q 和 V 的关系非常紧密。如果把“从状态 s 出发”拆成两步——先选动作 a,再按策略行动——那么状态值函数就等于“按策略选出的动作”对应的动作值函数的期望。用公式表示就是:状态值等于动作值按策略概率加权平均。
打比方说,V 是“整家餐厅的平均评分”,Q 是“某道招牌菜的评分”。如果策略是“每次都点招牌菜”,那平均评分就等于招牌菜的评分;如果策略是“随机点菜”,平均评分就是各道菜评分的加权平均。Q 函数比 V 函数更精细,因为它直接告诉智能体“哪个动作更好”,这正是改进策略所需的信号。
- 求和范围\sum_{a \in \mathcal{A}} 遍历所有可行动作。每个动作 a 都有一个对应的 Q 值。
- 策略加权\pi(a|s) 是策略给动作 a 的概率,概率大的动作在 V 值中占比更高。如果策略确定选 a,那 V(s) 就等于 Q(s,a)。
期望累计奖励
前面反复提到“期望累计奖励”,它是值函数的“原材料”。回报(Return)G_t 指的是从某时刻开始的累计折扣奖励。值函数本质上是“回报的期望值”。
为什么要用折扣因子 γ?因为现实世界没有无限预算。今天的 100 元和一年后的 100 元价值不同,强化学习里的 γ 正是用来表达“未来奖励的衰减”。γ 越接近 1,智能体越看重长远利益;γ 越接近 0,智能体越短视。
期望累计奖励就像出租车司机评估一条路线时,会把“接下来每个路口的等待时间”都折算成总耗时:优先照顾眼前,但也不完全忽略远期。值函数就是这“总耗时”在数学上的化身。
- 即时奖励R_{t+1} 是执行动作后立刻获得的奖励,这是回报的第一项,不被打折。
- 折扣奖励\gamma R_{t+2} 是下一步奖励打一次折扣,\gamma^2 R_{t+3} 是下下步奖励打两次折扣。折扣次数随步数增长而增加。
- 无穷级数求和一直延续到无穷远。在实际训练中,奖励序列是有限的或通过截断处理,但数学上写成无限级数便于推导。
贝尔曼方程
期望累计奖励的定义有个麻烦:它是无穷级数,没法直接算。但我们可以发现一个美妙的递归结构:当前的回报 = 即时奖励 + 折扣后的未来回报。这就像你评估一段路的总耗时,只需要知道“这一段路的耗时 + 剩余路程的评估耗时”。
状态值函数的贝尔曼方程把 V 分解成“即时奖励的期望”和“下一状态值的折扣期望”两部分:
贝尔曼方程是强化学习中最重要的方程,没有之一。它把“评估一条路有多好”的问题,转化成“评估下一个路口有多好”的子问题,层层递推。这为算法的实现提供了抓手:我们不再需要等待无穷多个奖励到账,只要不断迭代更新 V 值,就能逐步逼近真实值。
- 动作层求和\sum_{a} \pi(a|s) 是外层按策略概率对所有动作加权。
- 状态转移求和\sum_{s'} p(s'|s,a) 是内层按环境动力学对所有可能到达的下一状态求期望。环境可能随机地把智能体送到不同的 s'。
- 即时奖励r 是这一步转移获得的奖励。
- 递归价值\gamma V_{\pi}(s') 是下一状态价值的折扣形式——这就是“递归”的来源,把无穷级数压缩成了自指方程。
策略评估与改进
现在把方向盘和仪表盘拼在一起。强化学习的核心机制就是一个循环:评估 → 改进 → 再评估 → 再改进。
- 策略评估:给定当前策略 π,计算它的状态值函数 V_π。就像拿到一份新的行车规则,先跑几趟数据,算出每条路的评估耗时。
- 策略改进:根据值函数,更新策略。如果用 Q 值说话,那就是“在状态 s 下,把策略改成选择 Q 值最大的动作”。这一改动是否真的让策略变好?当满足单调改进条件时,新策略一定不差于旧策略——这是策略改进定理保证的。
这两个步骤交替进行,就构成了策略迭代。每一轮评估都更精确,每一轮改进都更强,策略和价值函数一路攀升,直到收敛到最优策略和最优值函数。这就像一位出租车司机:拿到新路线建议,跑几趟验证,发现有的路段更快,立刻把它纳入新路线,反复打磨,最终形成一套接近最优的开车方式。
有了这个循环,策略和值函数就像一对默契的舞伴:值函数为策略提供舞步建议,策略走出新舞步后又让值函数重新评估,两者螺旋上升,最终共舞出最优解。
- argmax\arg\max_a 表示“让后半部分取得最大值的那一个动作 a”。注意不是取最大值本身,而是取使 Q 最大的那个动作。
- 旧策略的 QQ_{\pi_k}(s,a) 是在旧策略 π_k 下计算的动作值。用旧值函数指导新策略的选择。
- 新策略\pi_{k+1}(s) 是改进后的策略在状态 s 的决定——它只输出一个动作,说明贪心改进得到的是确定性策略。
贪心策略
最后来聊“贪心”这个看似贬义的词,在强化学习里却是金光闪闪的改进利器。贪心策略就是在每个状态都选择 Q 值最大的动作,像一位只盯着最热门餐厅的食客——他不看其他选项,直接走向评分最高的那家。
贪心策略为什么能改进?因为策略改进定理告诉我们:如果一个状态 s 下存在某个动作 a 的 Q 值大于当前 V 值,那么把策略改成“在 s 下必选 a”,得到的新策略在 s 上的表现至少不比旧策略差。把这个逻辑推广到所有状态,就得到贪心改进定理:
在 Q 学习中,智能体正是依靠“贪心选最大 Q 值”来不断更新策略的——虽然训练时为了探索会偶尔偏离贪心(比如 epsilon-greedy),但最终决策时还是会回到贪心选择。所以理解“贪心策略能改进策略”这件事,是理解 Q 学习收敛性的根基。方向盘(策略)听从仪表盘(Q 值)的指引,这就是强化学习最优雅的自举之美。
- 前提条件Q_{\pi}(s, \pi'(s)) \geq V_{\pi}(s) 表示“按新策略选出的动作,其 Q 值 ≥ 按旧策略行动的平均价值”。这是改进的触发条件。
- 结论V_{\pi'}(s) \geq V_{\pi}(s) 表示改进后策略的状态值函数普遍提升。这保证了贪心改进不会“退步”。
AI 应用场景
Q学习算法
阶段:策略改进(决策部分)
解决的问题:传统方法需要完整的转移概率模型才能计算值函数,而现实中很多环境没有模型。Q 学习通过“贪心选最大 Q 值”直接更新动作值函数,无需模型也能找到最优策略。它用“试错 + 更新 Q 表”的方式替代繁琐的模型求解。
具体案例:一个让 AI 玩迷宫游戏的场景中,智能体初始 Q 表全为零。每次走到新格子,它以 epsilon 概率随机探索,否则贪心选择 Q 值最大的方向移动。到达终点获得奖励后,Q 值按“当前奖励 + 折扣后的下一状态最大 Q 值”反向传播。几千回合后,Q 表稳定,智能体学会了从任意起点走向终点的最短路径。
策略迭代在围棋AI中的应用
阶段:策略评估 + 策略改进
解决的问题:围棋的状态空间远超穷举能力,无法用蛮力求解。策略迭代的思路是“先按当前策略模拟对局评估局面,再根据胜率改进下法”,正是策略评估与改进循环的实战体现。
具体案例:AlphaGo 的早期版本先通过策略网络模仿人类棋手下棋(初始化策略),再用蒙特卡洛树搜索评估每个落子的胜率(评估值函数),最后根据胜率调整策略网络(改进策略)。这个过程反复迭代,策略网络越下越强,评估也越来越准。
推荐系统中的带宽分配
阶段:策略决策(线上服务)
解决的问题:推荐系统面对海量用户和物品,需要决定“给这个用户推荐哪个物品”——这就是策略问题。过去用固定规则,无法适配每个用户的实时反馈。动作值函数能把“用户点击、收藏、购买”等反馈信号压缩成每个物品的推荐价值,从而实时改进推荐策略。
具体案例:电商平台在给用户展示商品时,将“当前用户画像 + 当前页面上下文”看作状态,将“推荐某个商品”看作动作,用点击/购买数据训练 Q 函数。线上每次请求时,贪心选择 Q 值最高的商品优先展示,同时保留一定概率随机推荐以收集新数据。训练数周后,推荐转化率明显提升。
Python 演示
import numpy as np class MDP: def __init__(self, n_states, n_actions): self.n_states = n_states self.n_actions = n_actions self.rewards = np.zeros((n_states, n_actions)) self.transition = np.zeros((n_states, n_actions, n_states)) self.gamma = 0.9 def set_dynamics(self, state, action, next_state, reward): self.transition[state, action, next_state] += 1.0 self.rewards[state, action] = reward def normalize(self): for s in range(self.n_states): for a in range(self.n_actions): total = self.transition[s, a].sum() if total > 0: self.transition[s, a] /= total def policy_evaluation(self, policy, epochs=100): V = np.zeros(self.n_states) for _ in range(epochs): V_new = np.zeros(self.n_states) for s in range(self.n_states): for a in range(self.n_actions): p_next = self.transition[s, a] expected_future = p_next @ V V_new[s] += policy[s, a] * (self.rewards[s, a] + self.gamma * expected_future) V = V_new return V def greedy_improvement(self, V): policy = np.zeros((self.n_states, self.n_actions)) for s in range(self.n_states): Q_values = np.zeros(self.n_actions) for a in range(self.n_actions): p_next = self.transition[s, a] Q_values[a] = self.rewards[s, a] + self.gamma * (p_next @ V) best_a = np.argmax(Q_values) policy[s, best_a] = 1.0 return policy def policy_iteration(self, max_iters=50): policy = np.ones((self.n_states, self.n_actions)) / self.n_actions for _ in range(max_iters): V = self.policy_evaluation(policy) new_policy = self.greedy_improvement(V) if np.array_equal(new_policy, policy): break policy = new_policy return policy, self.policy_evaluation(policy) mdp = MDP(4, 2)mdp.set_dynamics(0, 0, 1, 5.0)mdp.set_dynamics(0, 1, 2, 8.0)mdp.set_dynamics(1, 0, 3, 1.0)mdp.set_dynamics(1, 1, 3, 2.0)mdp.set_dynamics(2, 0, 3, 0.0)mdp.set_dynamics(2, 1, 3, 4.0)mdp.set_dynamics(3, 0, 3, 10.0)mdp.set_dynamics(3, 1, 3, 10.0)mdp.normalize() policy, V = mdp.policy_iteration()print("最优策略:")for s in range(4): action = np.argmax(policy[s]) print(" 状态{} -> 动作{} (V={:.2f})".format(s, action, V[s]))
def policy_evaluation(self, policy, epochs=100)这一步是“先跑几趟算评估表”:反复按当前策略计算状态值 V,直到收敛。expected_future = p_next @ V环境会把智能体送到不同的下一状态,这里用矩阵乘法把“未来价值的期望”一次算清。policy[s, a] * (self.rewards[s, a] + self.gamma * expected_future)这正是贝尔曼方程的代码化:即时奖励加折扣未来价值,再用策略概率加权。Q_values[a] = self.rewards[s, a] + self.gamma * (p_next @ V)计算动作值 Q(s,a),它是贪心改进的依据。best_a = np.argmax(Q_values)贪心策略的核心:选中 Q 值最大的动作。if np.array_equal(new_policy, policy): break当评估与改进不再变化时收敛,退出循环。
常见误区
误区“值函数就是环境的打分,跟策略没关系,直接算出来就能用。”
正解值函数永远依赖某个策略。V_π(s) 的定义中明确写着“按照策略 π 行动”才能得到这个值。换一个策略,同一个状态的 V 值就会变。就像“套餐平均评分”依赖于“顾客怎么点菜”:如果顾客都点最贵的菜,平均分就高;如果都点最便宜的特价菜,平均分就低。脱离策略谈值函数,就像脱离行驶路线谈“这条路的平均速度”——毫无意义。
为何常见:初学者常把“值函数”和“奖励函数”混为一谈,以为它是环境的固有属性。实际上奖励是环境给的,值函数是智能体按当前策略评估出来的。
误区“V 值就是所有动作 Q 值的最大值,反正都是衡量好坏。”
正解V(s) 是按当前策略 π 对所有可能动作的 Q 值做加权平均,权重就是 π(a|s)。只有在贪心策略下(概率 1 选最好的动作),V 才等于最大的 Q。更关键的是,Q(s,a) 是“先指定动作再按策略走”,而 V(s) 是“完全按策略走”——它们描述的行为起点都不同。
为何常见:很多入门材料直接贴出“Q-learning 选最大 Q 值”而不解释 V 和 Q 的区别,导致读者误以为两者可互换。
误区“期望嘛,就是模拟很多次把奖励加起来除以次数。”
正解期望在数学上是概率加权平均,不是简单算术平均。不同状态转移路径出现概率不同,高概率路径对期望贡献更大。而且回报本身是折扣累计奖金不是单步奖励,不能只取平均而忽略 γ 对远期奖励的衰减。就像计算“打车平均费用”要考虑每种路线出现的概率,而不是把五条路线费用直接加起来除以五。
为何常见:中学统计的“平均数”概念先入为主,让人忽略了期望的“概率加权”本质。
误区“贪心选最大 Q 值的策略,肯定就是最优策略。”
正解贪心策略是在某个给定的 Q 函数上选出当前看起来最好的动作。如果这个 Q 函数本身不准(比如还没收敛),贪心策略就是“闭着眼从错误地图上选最快的路”,并不可靠。只有在 Q 函数已接近真实值时,贪心才能逼近最优。这正是为什么 Q 学习需要大量探索来保证 Q 值准确。
为何常见:结尾往往强调“贪心选最大 Q 改进策略”,弱化了前提。忽略了“Q 值需要先准确估计”这个关键环节。
误区“贝尔曼方程就是值函数的定义,背下来就完事了。”
正解值函数的定义是回报的期望 G_t,贝尔曼方程是从定义推导出的递归等式,它并不是定义本身。两者的区别就像“总路程 = 各段路程之和”(定义)与“走到第 n 个路口的剩余路程 = 本段路长 + 下一个路口的剩余路程”(递归关系)。正是因为有了这种递归形式,我们才能写出迭代更新的算法。
为何常见:教材大多以贝尔曼方程为核心展开,容易让初学者以为这就是值函数的全部,忽略了它背后的期望定义。
面试题
Q1. 策略在强化学习中的本质是什么?
- A.评估状态好坏的函数
- B.状态到动作的映射规则← 正确答案
- C.环境奖励的设计方案
- D.神经网络的结构参数
答案:B。策略定义了“在每个状态选什么动作”,是行为规则,如同司机的行车规则。A 是值函数的功能,C 是奖励函数,D 是实现策略的一种参数化方式,而非策略本身。
Q2. 关于状态值函数和动作值函数,哪些说法正确?
- A.V 是 Q 按策略概率的加权平均← 正确答案
- B.Q 是 V 对动作取最大值的结果
- C.Q(s,a) 评估“状态+动作”的价值← 正确答案
- D.V 和 Q 都不依赖具体策略
答案:AC。V_π(s) = Σ π(a|s)Q_π(s,a),A 正确。Q 是在指定动作后按策略走下去的期望回报,C 正确。B 说反了——Q 不是由 V 推出的,V 由 Q 加权而来;D 错误,两者都依赖策略。
Q3. 折扣因子 γ 的作用是什么?
- A.控制智能体的移动速度
- B.平衡即时奖励与未来奖励← 正确答案
- C.决定策略是确定还是随机
- D.消除环境中的随机扰动
答案:B。γ 对远期奖励打折扣,体现“眼下奖励比未来奖励更珍贵”,类似银行利息的倒数。它不影响动作速度、策略类型或随机性,只影响回报计算中的时间偏好。
Q4. 回报 G_t 与状态值函数 V_π(s) 的关系是?
- A.V 等于 G_t 的最大值
- B.V 是 G_t 按策略的概率期望← 正确答案
- C.V 是单次 G_t 的观测值
- D.V 直接等于即时奖励 r
答案:B。V(s) = E_π[G_t | S_t = s],即回报的期望值。单次 G_t 受随机性影响会有波动,V 是多次回报的平均水平——就像“这条路的平均耗时”而非某一次遇堵车的耗时。
Q5. 策略评估的核心输出是什么?
- A.一组新的动作序列
- B.当前策略的状态值函数← 正确答案
- C.环境的转移概率矩阵
- D.最优动作的枚举集合
答案:B。策略评估的任务是计算 V_π(s),即给定策略的值函数,等价于“试跑若干趟算平均耗时”。A 是策略改进的输出,C 是环境模型的输入,D 是决策结果,均不是评估阶段的产物。
Q6. 关于贝尔曼方程,哪些理解正确?
- A.它把无穷级数变成递归方程← 正确答案
- B.当前值等于即时奖励加折扣未来值← 正确答案
- C.贝尔曼方程只适用于确定性环境
- D.它是策略迭代算法的理论基础← 正确答案
答案:ABD。贝尔曼方程通过“即时奖励 + γ × 下一状态值”递归表达价值,A、B 正确。它同样适用于随机环境(内层有转移概率 p(s'|s,a)),C 错误。策略评估正是靠贝尔曼迭代完成的,D 正确。
Q7. 贪心策略改进的数学依据是什么?
- A.大数定律保证 V 收敛到预期值
- B.策略改进定理保证新策略不劣于旧策略← 正确答案
- C.贝叶斯公式更新后验概率
- D.梯度下降找到局部最优
答案:B。当新策略在每个状态的 Q 值不低于旧策略的 V 值时,策略改进定理保证 V_π' ≥ V_π。这就像换了更快的开法后总用时只降不升。A 是统计估计的保障,C 是概率推理,D 是神经网络优化,均与策略改进定理无关。
Q8. 在 Q 学习中,为什么需要“随机探索”(偶尔不选最大 Q 值)?
- A.因为贪心策略不一定全局最优← 正确答案
- B.因为初始 Q 值估计可能不准确← 正确答案
- C.因为随机性可以降低计算复杂度
- D.为了收集数据修正 Q 值估计← 正确答案
答案:ABD。Q 表初始不可靠,贪心会锁定次优动作;探索帮助发现更高奖励的路径,修正 Q 估计,B、D 正确。既然贪心可能陷入次优,探索也间接避免了这个问题,A 正确。随机探索并不降低复杂度,反而需要更多样本,C 错误。
Q9. 强化学习的“评估-改进”循环中,评估阶段做什么?
- A.按当前策略计算状态值函数← 正确答案
- B.随机更换所有动作选择
- C.直接学习环境的转移矩阵
- D.用监督数据训练神经网络
答案:A。评估是“给定策略算值函数”,即检验当前策略到底有多好。B 是纯探索,C 是模型学习,D 是监督学习,都不属于策略评估的范畴。
Q10. 若一个确定性策略 π 使 V_π(s) = max_a Q_π(s,a) 对所有状态成立,则说明什么?
- A.环境已经没有随机性了
- B.π 已经是该 MDP 的一个最优策略← 正确答案
- C.Q 值已经全部相等
- D.折扣因子 γ 必然等于 1
答案:B。对每个状态,V 等于按策略选出的那一个动作的 Q 值,且它等于所有动作的最大 Q 值——说明策略 π 在每个状态都选择了 Q 值最大的动作,满足策略改进定理的收敛条件,达到最优不动点。这与环境随机性(A)无关;Q 值只需最大动作被选中,无需全部相等(C);γ 可以为任意折扣值(D)。