假设我们要构建一个 Agent,在谈 Policy 或 Action 之前,先要回答一个问题:目标怎么量化,又怎么让机器使用这个量化结果?
在强化学习里,这个介质就是 Reward。
奖励与轨迹
在这个框架下,我更愿意把 Reward 看成我们和 Agent 沟通的语言。我们通过设计 Reward 函数来引导 Agent 的行为。这里有一个容易忽略的点:在强化学习语境下,“没有奖励”本身也可能是一种惩罚,比如时间流逝带来的代价;反过来也一样。这些情况在数学上可以统一处理。
为了描述 Agent 的一连串行为,我们引入了 Trajectory 的概念。它是一条由状态和动作交织而成的链条:
面对这样一个序列,接下来的问题是:怎么评价这条轨迹好不好?这就引出了 Return。最直观的想法是把轨迹上的 Reward 全部加起来。但如果任务是无限进行的 Continuing Task,无穷多个正数相加可能导致级数发散,后续分析会变得很麻烦。
为了解决这个问题,同时表达“越近越重要”的时间偏好,需要引入折扣因子 ,定义折扣回报:
这里的 处于 到 之间。它控制了 Agent 的“视野”:
当 时,Agent 变得很短视,只在乎当前的 ;
当 时,Agent 更重视长期回报,愿意为了未来收益牺牲当下收益。
为了统一处理有限的 Episode 和无限的 Continuing Task,可以使用一个小技巧:对 Episode 任务,假设终止状态之后 Agent 进入一个特殊的 Absorbing State,它只会不断回到自身,并且 Reward 永远为 0。这样所有任务都可以视为无限长序列,公式推导会统一很多。
必要的假设:马尔可夫性质
构建数学模型时,需要一个容器来承载这些元素,这就是 MDP。它包含 。
其中关键是 Markov 性质,也就是“历史无关性”:
未来状态只取决于当前状态和动作,而与更早的历史无关。
第一次接触这个概念时,我其实很排斥。直觉上,“历史”当然重要。但在建模里,如果必须考虑所有历史信息,状态空间会指数级膨胀,计算上基本不可行。
因此,接受马尔可夫性质更像是为了计算可行性做出的建模选择。幸运的是,在很多物理问题里,如果状态定义足够完整,比如包含位置、速度、加速度,当前状态确实已经包含了预测未来所需的大部分信息。
贝尔曼方程:递归的本质
有了 MDP 和回报定义,就可以写出 Bellman 方程。
状态价值函数 表示从状态 出发能获得的期望回报。直接展开求和会很繁琐,但用递归写法会简单很多:
这个方程说的是:当前状态的价值,等于即时奖励加上未来状态价值的折扣期望。
[!note] 在推导贝尔曼方程的过程中,必须要理解概率论中的 全期望公式。
求解:从方程到矩阵
基于上述理解,我们可以把贝尔曼方程写成更具体的形式:
仔细看,这就是一个线性方程组。如果把所有状态价值排成列向量 ,对整个状态空间可以写成矩阵形式:
其中 是状态转移矩阵。这个形式和线性代数里的 很像,可以直接通过矩阵运算求解:
结果与权衡
虽然数学上给出了闭式解,但实际工程里,直接求逆矩阵的代价通常不可接受。
矩阵求逆的时间复杂度通常是 。
如果状态空间 是 1000,计算尚可接受。
但对于围棋()或复杂机器人控制任务,这种方法很快失效。
这也是后续算法需要引入动态规划、蒙特卡洛、时序差分等迭代方法的原因:它们都在避开昂贵的矩阵求逆,用更低的计算成本逼近 。
写在最后
计算 最后还是为了决策。如果知道所有状态的价值,就可以在每个状态选择通向高价值状态的动作。但这建立在已知环境模型( 和 )的假设上。如果环境模型未知,就需要进入无模型强化学习的问题。