假设我们要构建一个 Agent,在谈 Policy 或 Action 之前,先要回答一个问题:目标怎么量化,又怎么让机器使用这个量化结果?

在强化学习里,这个介质就是 Reward。

奖励与轨迹

在这个框架下,我更愿意把 Reward 看成我们和 Agent 沟通的语言。我们通过设计 Reward 函数来引导 Agent 的行为。这里有一个容易忽略的点:在强化学习语境下,“没有奖励”本身也可能是一种惩罚,比如时间流逝带来的代价;反过来也一样。这些情况在数学上可以统一处理。

为了描述 Agent 的一连串行为,我们引入了 Trajectory 的概念。它是一条由状态和动作交织而成的链条:

τ=s0,a0,s1,a1,s2,a2,\tau = s_0, a_0, s_1, a_1, s_2, a_2, \dots

面对这样一个序列,接下来的问题是:怎么评价这条轨迹好不好?这就引出了 Return。最直观的想法是把轨迹上的 Reward 全部加起来。但如果任务是无限进行的 Continuing Task,无穷多个正数相加可能导致级数发散,后续分析会变得很麻烦。

为了解决这个问题,同时表达“越近越重要”的时间偏好,需要引入折扣因子 γ\gamma,定义折扣回报:

Gt=Rt+1+γRt+2+γ2Rt+3+=k=0γkRt+k+1G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}

这里的 γ\gamma 处于 0011 之间。它控制了 Agent 的“视野”:

  • γ0\gamma \to 0 时,Agent 变得很短视,只在乎当前的 Rt+1R_{t+1}

  • γ1\gamma \to 1 时,Agent 更重视长期回报,愿意为了未来收益牺牲当下收益。

为了统一处理有限的 Episode 和无限的 Continuing Task,可以使用一个小技巧:对 Episode 任务,假设终止状态之后 Agent 进入一个特殊的 Absorbing State,它只会不断回到自身,并且 Reward 永远为 0。这样所有任务都可以视为无限长序列,公式推导会统一很多。

必要的假设:马尔可夫性质

构建数学模型时,需要一个容器来承载这些元素,这就是 MDP。它包含 (S,A,P,R,γ)(S, A, P, R, \gamma)

其中关键是 Markov 性质,也就是“历史无关性”:

P(St+1St)=P(St+1St,St1,,S0)P(S_{t+1} | S_t) = P(S_{t+1} | S_t, S_{t-1}, \dots, S_0)

未来状态只取决于当前状态和动作,而与更早的历史无关。

第一次接触这个概念时,我其实很排斥。直觉上,“历史”当然重要。但在建模里,如果必须考虑所有历史信息,状态空间会指数级膨胀,计算上基本不可行。

因此,接受马尔可夫性质更像是为了计算可行性做出的建模选择。幸运的是,在很多物理问题里,如果状态定义足够完整,比如包含位置、速度、加速度,当前状态确实已经包含了预测未来所需的大部分信息。

贝尔曼方程:递归的本质

有了 MDP 和回报定义,就可以写出 Bellman 方程

状态价值函数 v(s)v(s) 表示从状态 ss 出发能获得的期望回报。直接展开求和会很繁琐,但用递归写法会简单很多:

v(s)=E[Rt+1+γv(St+1)St=s]v(s) = \mathbb{E} [R_{t+1} + \gamma v(S_{t+1}) | S_t = s]

这个方程说的是:当前状态的价值,等于即时奖励加上未来状态价值的折扣期望。

[!note] 在推导贝尔曼方程的过程中,必须要理解概率论中的 全期望公式

求解:从方程到矩阵

基于上述理解,我们可以把贝尔曼方程写成更具体的形式:

v(s)=Rs+γsPssv(s)v(s) = \mathcal{R}_s + \gamma \sum_{s'} P_{ss'} v(s')

仔细看,这就是一个线性方程组。如果把所有状态价值排成列向量 vv,对整个状态空间可以写成矩阵形式:

v=R+γPvv = \mathcal{R} + \gamma P v

其中 PP 是状态转移矩阵。这个形式和线性代数里的 Ax=bAx=b 很像,可以直接通过矩阵运算求解:

(IγP)v=R    v=(IγP)1R(I - \gamma P) v = \mathcal{R} \implies v = (I - \gamma P)^{-1} \mathcal{R}

结果与权衡

虽然数学上给出了闭式解,但实际工程里,直接求逆矩阵的代价通常不可接受。

矩阵求逆的时间复杂度通常是 O(n3)O(n^3)

  • 如果状态空间 nn 是 1000,计算尚可接受。

  • 但对于围棋(1017010^{170})或复杂机器人控制任务,这种方法很快失效。

这也是后续算法需要引入动态规划、蒙特卡洛、时序差分等迭代方法的原因:它们都在避开昂贵的矩阵求逆,用更低的计算成本逼近 vv

写在最后

计算 v(s)v(s) 最后还是为了决策。如果知道所有状态的价值,就可以在每个状态选择通向高价值状态的动作。但这建立在已知环境模型(PPRR)的假设上。如果环境模型未知,就需要进入无模型强化学习的问题。