想象你正在玩一局飞行棋。棋盘上排着几十个格子,你的棋子停在其中一个格子上——这就是你此刻的“位置”。轮到你行动了,你抓起骰子掷了出去。骰子停下的瞬间,你数着格子把棋子往前推,最终它停在一个新的格子上。“刚才它在那里,你做了掷骰子这件事,现在它到了这里”——这段“从这里出发、经过一个动作、到达新位置”的过程,就是本文的主角:状态转移。 在 AI 的训练世界里,智能体就像一个不停下棋的玩家:它先看看自己站在哪个格子(这被称为“状态”),然后做出自己的选择(比如掷骰子,这被称为“动作”),环境随即给出回应,把它送到新的格子(这就是“下一状态”)。整局游戏就是无数个这样的转移首尾相连。为什么“状态转移”值得单独拎出来讲?因为 AI 的一切聪明决策,都要先回答一个朴素的问题:如果我在这里做了这件事,接下来会发生什么?是确定地发生,还是随机地发生?这个答案决定了环境是死板的还是充满变数的,也决定了 AI 该如何规划未来。本文用一局飞行棋串起全程,带你一步步看懂状态转移的定义、确定性与随机性、概率怎么算,以及它如何成为整个强化学习的地基。

岗位关联

状态转移是强化学习的“环境说明书”,读懂它才能正确建模任务、判断环境性质、设计仿真器——这是从强化学习入门到工程落地的第一道核心门槛。

目录
  1. 可视化演示
  2. 状态转移定义
  3. 确定性转移
  4. 随机性转移
  5. 转移概率
  6. MDP四元组
  7. 转移矩阵
  8. 环境与仿真
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示搞懂强化学习里的状态转移的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

搞懂强化学习里的状态转移:状态转移 状态转移的基本概念 确定性状态转移模型 核心机制可视化 搞懂强化学习里的状态转移整体架构与关键组件

状态转移定义

飞行棋里,“你站在第 3 格”只是一个静止的画面。真正让游戏流动起来的,是接下来的动作和结果:你掷出骰子,数出点数,棋子向前推进,停在了新的格子上。这个“从原来的格子出发,经过一次选择,最终到达新格子”的完整过程,就是一次状态转移。状态转移把“现在”和“紧接着的下一步”连成一条线,是整局游戏最基本的组成单元。

在强化学习中,这条线被写成一种简洁的记号:当前状态、动作、下一状态,三者排成一行。智能体并不是凭空跳跃的,而是像棋子一样,沿着一条条转移链条,一步一步走过整个任务。你观察到的每一次“位置变化”,背后都是一次状态转移在起作用。

这里的“状态”可以有多种形态:棋盘上的格子、机器人的关节角度、游戏画面里的敌我位置。无论形态如何,状态转移回答的核心问题只有一个——在当前位置做了某个选择之后,环境会把智能体送到哪里。这个“由环境说了算”的响应机制,正是智能体与世界交互的全部依据。

把这一环一环的转移首尾相接,就构成了智能体完整的一生。理解了“从哪来、做了什么、到哪去”这个基本单元,后面所有关于确定性与随机性的剧情,都会围绕它展开。

st→atst+1s_t \xrightarrow{a_t} s_{t+1}
这个公式读作:当前状态 $s_t$ 在动作 $a_t$ 的推动下,转移到下一状态 $s_{t+1}$。箭头上的动作标明“是谁推动了这次移动”。
  1. 当前状态 $s_t$$s$ 是状态 state 的首字母,下标 $t$ 表示时间步,合起来是“时刻 $t$ 智能体所处的状态”,它是转移的起点。
    sts_t
  2. 动作 $a_t$$a$ 是动作 action 的首字母,表示智能体在时刻 $t$ 做出的选择,比如“掷出骰子”或“向左移动一格”。
    ata_t
  3. 转移箭头 $\xrightarrow{a_t}$箭头代表“在动作 $a_t$ 的推动下发生跳转”,箭头上的标签记录了这次跳转由哪个动作驱动。
    →at\xrightarrow{a_t}
  4. 下一状态 $s_{t+1}$下标 $t+1$ 表示紧接着的下一个时刻,$s_{t+1}$ 是转移结束后到达的新状态,它是转移的终点。
    st+1s_{t+1}

确定性转移

有的飞行棋地图上藏着传送门:你走进去,就一定会出现在地图另一角的那一格,没有任何例外,也不存在第二种可能。这种“进去了就必然到某处”的路径,就是确定性转移。在确定性转移面前,结果没有悬念——你只需要知道出发点和动作,就能提前写下结局。

数学上,确定性转移用一个函数就能刻画:下一状态等于某个关于当前状态和动作的函数。这里的函数就像传送规则表,给定输入,输出唯一。围棋是再典型不过的例子:你在某个空交叉点落下一颗黑子,棋盘上就必然多出这颗子,不会因为“运气”而落去别处。

确定性环境有很多好处:规则简单、结果可复现、调试方便。做算法实验时,如果同样的状态和动作永远产生同样的结果,那么“这一步为什么走错了”就很容易定位。程序化的网格迷宫、华容道、八皇后这类任务,都属于确定性环境,也是强化学习入门时最常用来练手的对象。

传送门给飞行棋带来了“确定”的路段,但整局游戏真正的悬念,藏在那些结果不唯一的路段里——把骰子抛向空中的那一刻,你无法预知它会停在哪个数字上。

st+1=f(st,at)s_{t+1} = f(s_t, a_t)
这个公式说明:下一状态是当前状态与动作的确定函数。只要 $s_t$ 和 $a_t$ 给定,$s_{t+1}$ 就只有一个值,不会凭概率变化。
  1. 函数 $f$$f$ 代表一套确定的映射规则,类似传送门的传送逻辑,它把“输入”加工成“输出”。
    ff
  2. 输入 $(s_t, a_t)$括号内是函数的两个输入——当前状态与当前动作,合起来表示“我现在在这里,我做了这个选择”。
    (st,at)(s_t, a_t)
  3. 等号 $=$在这里表示“结果被唯一锁定”,强调下一状态完全由左边的输入决定,没有随机余地。
    ==
  4. 输出 $s_{t+1}$函数的唯一输出,也就是转移的终点。因为 $f$ 是确定性的,相同的输入永远得到相同的输出。
    st+1s_{t+1}

随机性转移

大多数时候,你在飞行棋的普通路段上并不依靠传送门,而是掷骰子。骰子有可能停在 1,有可能停在 2,也有小概率停在 3——下一格并不唯一,但你提前知道每种结果大致有多大可能。这种“结果不唯一,但可能性已知”的转移,就是随机性转移。

随机性转移不再用“唯一输出”的函数描述,而是给出一个概率分布:下一状态是从这个分布中“抽取”出来的。抽取符号表示“按分布随机产生”,好比从骰子筒里摇出一个点数,每个点数的出现都服从预设的可能性。

扑克牌发牌、带随机风的网格世界、机器人轮子打滑,都是随机环境的例子。机器人收到“前进”指令,可能稳稳前进一格,也可能因打滑停在原地甚至偏向一侧。随机环境让学习难度上升,但也更贴近真实世界——同样的动作,不同时刻的结果不一样,智能体必须在不确定中做决策。反过来看,确定性其实只是随机性的一个极端特例:当某个结果的概率为 1 时,“随机”和“必然”就成了一回事。

飞行棋的刺激全在“随机”二字——骰子不停下,你永远不知道下一秒棋子在哪。但这份“不知道”并不是一团乱麻:它背后有一套可以算清楚、可以描述的概率。

st+1∼P(⋅∣st,at)s_{t+1} \sim P(\cdot \mid s_t, a_t)
这个公式读作:下一状态 $s_{t+1}$ 按分布 $P(\cdot \mid s_t, a_t)$ 采样得到。意思是“从所有可能的下一个状态中,按各自的概率随机抽一个”。
  1. 采样符号 $\sim$读作“按……分布抽取”,表示下一状态不是写死的,而是像摇骰子一样从分布里随机产生。
    ∼\sim
  2. 分布 $P(\cdot \mid s_t, a_t)$竖线左侧的 $\cdot$ 指“某个候选的下一状态”,右侧是已知条件,整个记号给出每个候选结果对应的概率。
    P(⋅∣st,at)P(\cdot \mid s_t, a_t)
  3. 整体含义 $s_{t+1} \sim$把两边合起来读,“下一状态按给定条件分布随机采样”,这就是随机状态转移的完整表达。
    st+1∼P(⋅∣st,at)s_{t+1} \sim P(\cdot \mid s_t, a_t)

转移概率

想知道手中的骰子是否偏心,你会反复掷它几百次,数一数每个面朝上的次数,再除以总次数。掷得越多,这个比值就越接近真实的概率。转移概率也是这么“数”出来的——它是随机状态转移的定量表达。

转移概率的记号在上一节已经出现:在状态 $s$ 执行动作 $a$ 后,到达状态 $s'$ 的可能性。它的取值永远在 0 到 1 之间;0 表示绝不会到,1 表示必定到。如果把所有候选下一状态的概率加起来,恰好等于 1,因为“无论结果如何,总得去某个地方”。

在已知规则的环境里,转移概率可以直接由规则算出;在未知环境里,则可以靠统计数据去估计:从状态 $s$ 出发执行动作 $a$ 共尝试了 $N(s,a)$ 次,其中 $N(s,a,s')$ 次到达了 $s'$,那么转移概率就用这个比值来近似。这正是强化学习中“环境模型学习”的基本思想:智能体通过与环境的反复互动收集样本,逐步把环境的行为规律“摸清”。

飞行棋高手往往凭经验估计“掷出 6 的概率”,那份经验正是 $N(s,a,s')/N(s,a)$ 在心里的估算。把这种估算能力教给 AI,它就能在没有规则手册的现实环境里自己摸清路数。

P(s′∣s,a)=N(s,a,s′)N(s,a)P(s' \mid s, a) = \frac{N(s, a, s')}{N(s, a)}
这个公式说明:转移概率可用频率估计,用“从 $s$ 执行 $a$ 到达 $s'$ 的次数”除以“从 $s$ 执行 $a$ 的总次数”。样本越多,估计越接近真实值。
  1. 分子 $N(s, a, s')$$N$ 表示计数,整个记号是“从 $s$ 出发、执行动作 $a$、并且到达了 $s'$”的样本个数,也就是命中次数。
    N(s,a,s′)N(s, a, s')
  2. 分母 $N(s, a)$表示“从 $s$ 出发、执行动作 $a$”的所有尝试次数,无论最终到哪都算在内。
    N(s,a)N(s, a)
  3. 分数线 $\frac{\cdot}{\cdot}$用命中次数除以总次数得到频率。当总次数足够大时,频率会收敛到真实概率,这就是大数定律的直观体现。
    N(s,a,s′)N(s,a)\frac{N(s, a, s')}{N(s, a)}

MDP四元组

一盒完整的飞行棋说明书会写清四样东西:棋盘上有哪些格子,你能执行哪些行动,每个格子上掷骰后可能到哪些格子且各有多大可能,以及停在特定格子能获得什么奖励。状态转移放进这四件套里,就组成了强化学习的标准框架——马尔可夫决策过程,简称 MDP。

MDP 用四元组把“一个决策问题”完整封装起来。状态集合是所有可能位置的清单;动作集合是智能体所有可选行动的清单;转移函数记录环境如何响应——从每个状态执行每个动作会到哪儿、概率多大;奖励函数则给出这次转移带来的即时回报。四者合在一起,才构成一个可供算法求解的完整环境。

在这四件套里,转移函数 $\mathcal{P}$ 尤其关键:它是环境的“动力系统”,没有它,智能体就不知道未来可能通向何方,也就谈不上规划长期收益。判断一个实际问题能否用强化学习解决,第一步往往就是尝试把它改写成这四元组——能写出来,就等于拿到了进入强化学习世界的入场券。

有了这本完整的说明书,飞行棋的每一局都可以被当作决策问题求解;同样地,工程师把现实任务写进四元组,就等于把真实世界的复杂性,转化成了强化学习算法能够下嘴的食粮。

M=⟨S,A,P,R⟩\mathcal{M} = \langle \mathcal{S}, \mathcal{A}, \mathcal{P}, \mathcal{R} \rangle
这个公式说明:一个马尔可夫决策过程 $\mathcal{M}$ 由状态集合、动作集合、转移函数、奖励函数四个部分共同定义,四者缺一不可。
  1. 状态集合 $\mathcal{S}$花体字母表示集合,即所有可能状态的完整清单,对应说明书里的“棋盘格子全集”。
    S\mathcal{S}
  2. 动作集合 $\mathcal{A}$所有可选动作的完整清单,对应“你能做的行动”列表。
    A\mathcal{A}
  3. 转移函数 $\mathcal{P}$一般写作 $P(s' \mid s, a)$,它把“状态-动作”对映射到各候选下一状态的概率,是环境的动力学核心。
    P\mathcal{P}
  4. 奖励函数 $\mathcal{R}$常写作 $r(s, a, s')$,表示这次转移结束后环境给出的即时回报数值。
    R\mathcal{R}
  5. 尖括号 $\langle \cdot \rangle$把四个部分打包成一个整体的记号,强调“四件套齐备才构成完整环境”。
    ⟨S,A,P,R⟩\langle \mathcal{S}, \mathcal{A}, \mathcal{P}, \mathcal{R} \rangle

转移矩阵

把飞行棋地图上所有格子之间的路径整理成一张大表:每一行代表你现在所在的格子,每一列代表你可能到达的格子,行列交叉处填上对应的概率。这张“路网表”就是转移矩阵,它让整张地图的结构一目了然。

对某个固定的动作而言,所有状态之间的转移概率确实可以排成一个矩阵。矩阵的第 $i$ 行表示“从状态 $s_i$ 出发”,第 $j$ 列表示“到达状态 $s_j$”,元素的值就是对应的转移概率。状态多时矩阵可能巨大到写不下,但在小规模问题里,它是最直观的环境清单。

转移矩阵最著名的性质是:每一行的概率之和等于 1。原因非常朴素——从任意状态出发执行动作后,下一状态必然是全部候选中的某一个,哪怕这个状态就是它自己,总概率也必须全部用完。这个“行和为 1”的性质常被用作建模正确性的检查:若某一行加起来不是 1,说明要么漏记了某个转移,要么某个概率写重了。

路网表能让你一眼看清飞行棋的全局结构;当真实任务的状态空间大到矩阵写不下时,“每一行概率都凑满 1”这份直觉,依然能帮你及早发现环境模型里藏着的 bug,避免带着错误的“地图”上路。

∑s′P(s′∣s,a)=1,∀s∈S,a∈A\sum_{s'} P(s' \mid s, a) = 1, \quad \forall s \in \mathcal{S}, a \in \mathcal{A}
这个公式说明:对任意状态 $s$ 和任意动作 $a$,把所有可能的下一状态 $s'$ 的概率相加,结果恒为 1。这是概率归一化在转移矩阵上的体现。
  1. 求和 $\sum_{s'}$大写希腊字母 $\sum$ 表示求和,下标 $s'$ 指出把所有候选的下一状态逐一相加。
    ∑s′\sum_{s'}
  2. 单个转移概率 $P(s' \mid s, a)$矩阵中的每个元素,代表从 $s$ 出发执行 $a$ 到达 $s'$ 的概率,取值在 0 到 1 之间。
    P(s′∣s,a)P(s' \mid s, a)
  3. 全称量词 $\forall$读作“对于任意的”,强调这条性质对所有的状态和动作都成立,一个都不能漏。
    ∀s∈S,a∈A\forall s \in \mathcal{S}, a \in \mathcal{A}
  4. 等于 1总概率必须用完,既保证了概率的归一化,也给出了检查环境建模是否有误的硬标准。
    =1= 1

环境与仿真

专业的飞行棋爱好者并不会头铁地直接跟朋友开局,而是先在家里搭一块同款棋盘的模型,反复演练各种掷骰结果,把每条路线的后果摸透,再去实战。强化学习的仿真环境,就是这块安全的“练手棋盘”——而状态转移,正是搭建它的支柱。

仿真器必须忠实回答一个问题:如果智能体在状态 $s$ 执行动作 $a$,下一步会到哪里、概率多大。这个回答就来自状态转移建模。而这一切之所以可行,依赖一个至关重要的假设——马尔可夫性质。

马尔可夫性质说:下一状态的分布,只与当前状态和当前动作有关,与更早的历史无关。就像飞行棋:这次掷骰子的结果,只取决于你当前所在的格子和本回合的骰子,跟你之前绕了多少圈、踩过哪些陷阱毫无关系。正是这个性质,让环境模型只需要维护“一格一本账”的转移表,而不必记录整个故事。自动驾驶仿真、游戏 AI、机器人训练,都建立在这样的仿真环境之上,让智能体在虚拟世界里安全地试错千万次,再把成熟的策略搬到现实。

飞行棋的下一步只由“现在在哪”决定,所以你不必向对手背诵走到第 3 格之前的全部棋史。状态转移让世界变得简洁,而这份简洁,正是它得以成为整个强化学习地基的根本原因。

P(st+1∣st,at,st−1,at−1,…)=P(st+1∣st,at)P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \ldots) = P(s_{t+1} \mid s_t, a_t)
这个公式说明:把全部历史都作为条件,和只看当前状态与动作,得到的下一状态概率完全相同——历史信息是多余的,未来只由当下决定。
  1. 历史条件 $s_{t-1}, a_{t-1}, \ldots$等号左边除了当前的状态与动作,还列出了更早时刻的状态与动作,表示“把过去从头到尾都纳入条件”。
    st−1,at−1,…s_{t-1}, a_{t-1}, \ldots
  2. 省略号 $\ldots$表示历史可以一路追溯到最开始的第一步,时间跨度无限长。
    …\ldots
  3. 条件概率 $P(s_{t+1} \mid \cdot)$两边都是条件概率,等号说明“加不加历史”得出的分布完全一样,这就是记忆被压缩的地方。
    P(st+1∣st,at)P(s_{t+1} \mid s_t, a_t)

AI 应用场景

游戏 AI 的仿真对局

阶段:环境模型构建与仿真训练

解决的问题:训练游戏 NPC 或棋类 AI 时,需要让智能体在可控的模拟环境中试错。传统方式靠人工编写固定规则,NPC 的响应僵硬,无法应对玩家的多样玩法;AI 方式用状态转移建模每步操作的后果,像飞行棋说明书写清“每个格子通向哪里”一样,在仿真中反复预演策略。

具体案例:开发一个棋盘游戏 AI 时,工程师把棋盘局面定义为状态,把落子位置定义为动作。由于每一步落子后棋盘局面唯一确定,这是一个确定性状态转移:局面 S 落子到 (i, j) 后必然变成新局面 S'。AI 在仿真对局里演练数百万盘,学会选择胜率最高的落子点。

机器人移动仿真

阶段:仿真环境设计与策略预训练

解决的问题:让机器人在真实世界里试错,既昂贵又危险,还可能损坏设备。传统做法是直接在实体上调参,效率低且不可重复;AI 方式用转移概率描述动作结果的随机性,在仿真器中先训练再迁移到实体。

具体案例:移动机器人在粗糙地面执行“前进”指令,可能以 80% 概率前进一格,15% 概率原地打滑,5% 概率偏向侧方——就像飞行棋里掷骰子可能落在不同格子上。工程师把这组状态转移概率写进仿真器,强化学习智能体通过在虚拟环境中反复经历打滑,提前学会更稳健的控制策略。

自动驾驶场景建模

阶段:交通场景仿真

解决的问题:自动驾驶路测成本极高,危险场景难以安全复现。传统方式依赖大量实车路测积累里程;AI 方式把交通参与者的行为建模为随机状态转移,在仿真器中生成覆盖各种突发情况的场景库。

具体案例:仿真器模拟“前车急刹车”:在前车处于状态 S 时,前车执行“急刹”动作后,以 90% 概率减速停车,10% 概率失控偏移车道。自动驾驶策略在这样的随机转移环境中反复训练,学会与前车保持安全距离,再进入真实道路验证。

Python 演示

python64 行
import random  class DiceWalkEnv:    """飞行棋环境: 状态 0 到 n_states-1, 动作固定为掷骰子."""    def __init__(self, n_states=6):        self.n_states = n_states        self.state = 0        # P[s][a][s'] = 转移概率, 动作空间只有 1 种, 用 0 表示        self.P = self._build_transition()     def _build_transition(self):        P = {}        for s in range(self.n_states):            P[s] = {0: {}}            for step, prob in ((1, 0.4), (2, 0.4), (3, 0.2)):                dest = min(s + step, self.n_states - 1)                P[s][0][dest] = P[s][0].get(dest, 0.0) + prob        return P     def reset(self):        self.state = 0        return self.state     def step(self, action=0):        dist = self.P[self.state][action]        r = random.random()        total = 0.0        next_state = self.state        for s2, prob in dist.items():            total += prob            if r < total:                next_state = s2                break        self.state = next_state        done = (self.state == self.n_states - 1)        reward = 1.0 if done else 0.0        return next_state, reward, done  def estimate_transition(env, s, action, n_trials=20000):    """用频率估计从 s 执行 action 到达各状态的转移概率."""    counts = {}    for _ in range(n_trials):        env.state = s        s2, _, _ = env.step(action)        counts[s2] = counts.get(s2, 0) + 1    return {s2: c / float(n_trials) for s2, c in counts.items()}  if __name__ == "__main__":    env = DiceWalkEnv(n_states=6)    s = env.reset()    for t in range(8):        s2, reward, done = env.step(0)        print("s=%d --a0--> s'=%d  reward=%.0f" % (s, s2, reward))        s = s2        if done:            print("到达终点状态 S%d." % s)            break     print("真实转移概率 P(s'|s=1,a=0):", env.P[1][0])    est = estimate_transition(env, 1, 0)    print("采样估计的转移概率:        ", est)
目的:用 Python 实现一个“飞行棋”环境,完整刻画从当前状态掷骰子到达下一状态的概率分布,再用采样频率反过来估计转移概率,验证估计结果与真实规则一致。
  1. for step, prob in ((1, 0.4), (2, 0.4), (3, 0.2)):枚举骰子的三种可能结果与对应概率,这是环境规则的心脏。
  2. P[s][0][dest] = P[s][0].get(dest, 0.0) + prob不同骰子点数可能落到同一个目标格,概率必须累加,这是构建转移表的关键。
  3. r = random.random()生成一个 [0,1) 均匀随机数,用于按概率分布采样下一状态。
  4. for s2, prob in dist.items(): total += prob; if r < total:把概率切成依次排列的区间段,随机数落在哪段,就采到哪个状态。
  5. env.state = s每次都把环境复位到指定起点,再执行一次动作,以收集同条件下的样本。
  6. counts[s2] / float(n_trials)命中次数除以总次数,用频率估计转移概率。

常见误区

误区“我以为状态转移就是智能体执行的动作,比如机器人往前走一步,这一步就叫状态转移。”

正解动作是智能体的“选择”,状态转移是环境对选择的“回应”。在飞行棋里,掷骰子是动作,而棋子从第 3 格走到第 5 格才是状态转移。同一个动作“掷出 2 点”,在普通格子上前进两格,在传送门格子上却被送到地图另一端——动作相同,转移结果却天差地别。在强化学习中,动作和转移分别由智能体和环境负责,属于两个不同的主体。

为何常见:动作发生后状态几乎总是跟着变化,两者在时间上紧挨着,初学者容易把“做了什么”和“变成了什么”合并成一个概念。

误区“我以为强化学习的环境都像程序规则那样确定,毕竟同一个操作的结果总是一样的。”

正解大量真实环境带随机性:抽牌、掷骰、有噪声的传感器、会打滑的机器人轮子,都让同一个动作产生多种可能结果。程序里可以用随机数来模拟这种不确定性。更准确地说,确定性只是随机性的一个特例——当某个分支概率为 1 时,“随机”自然退化为“必然”。

为何常见:入门阶段的例子多是确定性的规则任务,如网格迷宫和吃豆人,容易形成“环境必然确定”的刻板印象,直到遇见扑克牌或带风世界才被打破。

误区“我以为转移概率高的路径奖励一定高,所以强化学习只需要盯着概率最大的转移走。”

正解转移概率只回答“会到哪”,奖励回答“到了之后得到什么”,两者在 MDP 四元组中是独立的两个部分。飞行棋里,你可能以 100% 的概率进入一间需要交钱的格子——高概率、负奖励;也可能以 1% 概率抽到终极大奖——低概率、高奖励。强化学习真正优化的目标是长期回报,而非某个转移概率本身。

为何常见:初看公式时概率和奖励都是数值,且目标都指向“更好的结果”,两个信号容易被混为一谈。

误区“我以为 P(s'|s,a) 里的竖线表示因果,意思是'因为执行了动作 a,所以 s' 必然发生'。”

正解竖线是条件概率记号,读作“在给定的条件下”,只是标明概率的统计前提,并不保证结果必然发生。就像 P(骰子为 6 | 已掷出)=1/6,意思是“在掷骰子这个前提下,得到 6 点的概率是六分之一”,而骰子完全可能落在别的点数上。条件概率描述的是“可能性”,不是“因果必然性”。

为何常见:竖线在视觉上很像箭头,而动作与结果确实存在因果联系,符号直觉被双重误导,导致初学者把“给定条件下”误读成“因为所以”。

面试题

Q1. 状态转移描述的是哪两个状态之间的关系?

单选题 · easy

  • A.初始状态与终止状态
  • B.当前状态与下一状态← 正确答案
  • C.最优状态与最差状态
  • D.观测状态与隐藏状态

答案:B。状态转移刻画的是“从当前所处状态出发,经过一次动作后到达的新状态”这一跳转关系,B 正确。初始/终止状态只是旅程的首尾两个特例,最优/最差是价值层面的比较,观测/隐藏则是部分可观测问题的分类——它们都不是转移的直接对象。

Q2. 确定性状态转移的核心特点是什么?

单选题 · easy

  • A.结果由概率分布决定
  • B.结果唯一且可以预知← 正确答案
  • C.结果完全随机不可控
  • D.结果依赖全部历史

答案:B。确定性转移就像飞行棋的传送门:给定状态和动作,下一状态只有唯一一个,B 正确。A 和 C 描述的是随机转移;D 则违反了马尔可夫性质,即使在确定性环境中下一状态也只由当前状态和动作决定。

Q3. P(s'|s,a) 表示什么含义?

单选题 · mid

  • A.状态 s 出现的概率大小
  • B.动作 a 出现的概率大小
  • C.从 s 执行 a 到达 s' 的概率← 正确答案
  • D.状态 s 与动作 a 的概率

答案:C。该记号读作“在状态 s 下执行动作 a 到达状态 s' 的概率”,是环境模型的转移核,C 正确。A、B 只取了符号的一部分;D 把它误读成联合概率,忽略了“给定条件”的语义。就像问“掷骰子掷出 6 的概率”,答案指向“特定条件下某结果发生”的可能性。

Q4. 以下哪一项属于 MDP 四元组的组成?

单选题 · mid

  • A.策略、折扣因子、状态与动作
  • B.状态集合、动作集合、转移与奖励← 正确答案
  • C.环境、智能体、奖励与惩罚
  • D.模型、算法、数据与算力

答案:B。MDP 四元组是 (S, A, P, R):状态集合、动作集合、转移函数、奖励函数,B 正确。策略和折扣因子是求解 MDP 时的算法构件而非环境定义;环境/智能体是系统角色;模型/算法/数据是机器学习通用概念,都不属于 MDP 的形式化定义。

Q5. 转移矩阵中任意一行的概率之和等于?

单选题 · mid

  • A.等于零
  • B.等于零点五
  • C.等于一← 正确答案
  • D.等于状态数

答案:C。从任意状态出发执行动作后,下一状态必然是所有候选之一,总概率必须用完,所以每行之和等于 1,C 正确。A、B 明显违背“总得去某个地方”的事实;D 把概率与状态数量混为一谈,与概率归一化是两回事。

Q6. 用频率估计转移概率 P(s'|s,a) 的正确算式是?

单选题 · hard

  • A.N(s,a,s') 除以 N(s,a)← 正确答案
  • B.N(s,a) 除以 N(s,a,s')
  • C.N(s,a,s') 除以 N(s')
  • D.N(s') 除以 N(s,a,s')

答案:A。转移概率等于命中次数除以总尝试次数。命中指“从 s 执行 a 到达 s'”(分子 N(s,a,s')),总尝试指“从 s 执行 a”的所有次数(分母 N(s,a)),A 正确。B 是倒数;C、D 的分母用错了统计口径——N(s') 是“到达 s'”的总次数,与动作 a 无关,不能用来衡量该动作下的转移概率。

Q7. 马尔可夫性质指的是什么?

单选题 · hard

  • A.下一状态只依赖当前状态和动作← 正确答案
  • B.下一状态依赖全部历史信息
  • C.当前状态依赖下一状态的走向
  • D.转移概率在训练中永不改变

答案:A。马尔可夫性质的核心是“未来只与现在有关,与过去无关”:P(s_{t+1}|s_t,a_t) 和加长历史的条件概率相等,A 正确。B 恰恰相反;C 颠倒了因果方向;D 描述的是平稳性,与马尔可夫性质是不同概念。就像飞行棋下一步只取决于当前格子和本回合骰子,与上一步怎么走来的无关。

Q8. 以下哪些属于随机状态转移的例子?

多选题 · mid

  • A.掷骰子决定前进格数← 正确答案
  • B.抽扑克牌得到手牌← 正确答案
  • C.围棋中落子到指定交叉点
  • D.彩票开奖决定结果← 正确答案

答案:ABD。掷骰子、抽牌、彩票开奖的结果都服从某种概率分布且无法预先确定,属于随机转移,选 A、B、D。围棋落子后棋盘局面唯一确定,是典型的确定性转移,C 不选。

Q9. 关于状态转移,以下说法正确的有?

多选题 · hard

  • A.转移函数是环境模型的核心← 正确答案
  • B.确定性转移是随机转移的特例← 正确答案
  • C.转移矩阵行和必须为 1← 正确答案
  • D.随机转移无法用概率描述

答案:ABC。环境模型的核心就是描述“会到哪”,即转移函数,A 正确。当某个结果概率为 1 时随机退化为确定,B 正确。任何一行的概率和必须为 1,C 正确。随机转移恰恰用概率分布来描述,D 错误。

Q10. 强化学习中环境对智能体动作的响应包含哪些?

多选题 · easy

  • A.返回新的状态给智能体← 正确答案
  • B.返回即时奖励给智能体← 正确答案
  • C.直接修改智能体的策略
  • D.判断当前回合是否结束← 正确答案

答案:ABD。环境的职责是提供下一状态、即时奖励以及回合是否结束的信号,选 A、B、D。修改策略是学习算法的职责,属于智能体内部逻辑,环境不参与,C 不选。