Contents

强化学习的数学原理(八):值函数近似

深度Q网络(DQN)的核心思想是通过学习价值来指导策略。它并不直接学习一个策略函数,而是训练一个深度神经网络(Q网络)来精确地近似动作价值函数(Q函数),即评估在任何状态下执行各个动作的长期回报。在训练过程中,智能体采用探索性的ϵ-贪心策略与环境交互并收集数据,其学习目标则始终是纯粹的贪心策略。完成训练后,采用纯粹的贪心策略 (Greedy Policy),将状态 s 输入已训练好的Q网络,网络输出所有动作的Q值向量,选择并执行Q值最高的那个动作。

在强化学习的基础理论中,我们常常假设状态空间和动作空间是离散且有限的,以便用表格来存储价值函数(如V表或Q表)。然而,在现实世界的许多问题中,状态空间可能非常巨大甚至是连续的,这使得表格方法变得不可行。此时,价值函数近似 (Value Function Approximation) 成为了解决问题的关键。

一、 价值函数近似 (Value Function Approximation)

当状态空间过大时,我们无法为每个状态存储一个精确的值。函数近似的核心思想是用一个带有参数的函数 $\hat{V}(s, w)$ 来估计真实的价值函数 $V_\pi(s)$。这样,我们就不再需要存储整个价值表,而只需学习并存储一组参数 $w$。

例如,我们可以使用一个简单的线性函数来拟合价值曲线:

$$\hat{V}(s, w) = as + b = [s, 1] \begin{bmatrix} a \ b \end{bmatrix} = \phi^T(s) w$$

其中:

  • w 是我们需要学习的参数 (parameters)
  • φ(s) 是从状态 s 提取的特征向量 (feature vector)
  • V̂(s, w) 在参数 w 上是线性的。

我们的目标就是找到一组最优的参数 w,使得近似函数 $\hat{V}(s, w)$ 能够尽可能地接近真实的价值函数 $V_\pi(s)$。

二、 定义与优化目标函数

为了找到最优参数 w,我们通常需要两个步骤:

  1. 定义一个目标函数 (Objective Function),用来衡量近似的好坏程度。
  2. 推导出优化算法,以最小化或最大化该目标函数。

2.1 目标函数

一个自然而然的目标函数是近似值与真实值之间的均方误差 (Mean Squared Error)

$$J(w) = E[(V_\pi(s) - \hat{V}(s, w))^2]$$

我们的目标是找到能够最小化 $J(w)$ 的最优 w。这里的期望是关于状态 $s \in S$ 的,那么状态 $S$ 的概率分布应该如何选择呢?

状态的概率分布

1. 均匀分布 (Uniform Distribution)

最简单的方式是假设每个状态同等重要,其被抽样的概率为 $1 / |S|$。

$$J(w) = \frac{1}{|S|} \sum_{s \in S} (V_\pi(s) - \hat{V}(s, w))^2$$

  • 缺点 (Drawback): 这种假设在很多场景下并不合理。智能体在与环境交互时,某些状态(如关键决策点或接近目标的区域)可能比其他状态更频繁地被访问,也更为重要。

2. 稳态分布 (Stationary Distribution)

一种更合理的方式是使用策略 $\pi$ 下的稳态分布 ${d_\pi(s)}_{s \in S}$ 作为状态的权重。

$$J(w) = E[(V_\pi(s) - \hat{V}(s, w))^2] = \sum_{s \in S} d_\pi(s) (V_\pi(s) - \hat{V}(s, w))^2$$

  • 什么是稳态分布?
    • 它描述了马尔可夫过程的长期行为 (long-run behavior)
    • $d_\pi(s)$ 表示当智能体遵循策略 $\pi$ 运行足够长的时间后,访问状态 s 的概率。
    • 从数学上讲,如果 $d_t$ 是在 $t$ 时刻的状态分布向量,$P_\pi$ 是状态转移矩阵,那么分布的演化过程为 $d_{t+1}^T = d_t^T P_\pi$。稳态分布 $d_\pi$ 满足 $d_\pi^T = d_\pi^T P_\pi$。

使用稳态分布作为权重,意味着我们更关心那些智能体经常访问的状态,这通常能带来更好的学习效果。

2.2 优化算法:梯度下降

为了最小化目标函数 $J(w)$,我们可以使用经典的梯度下降 (Gradient Descent) 算法:

$$w_{k+1} = w_k - \alpha_k \nabla_w J(w_k)$$

目标函数的梯度计算如下:

$$ \begin{aligned} \nabla_w J(w) &= \nabla_w E[(V_\pi(s) - \hat{V}(s, w))^2] \\ &= E[\nabla_w (V_\pi(s) - \hat{V}(s, w))^2] \\ &= E[2(V_\pi(s) - \hat{V}(s, w))(-\nabla_w \hat{V}(s, w))] \\ &= -2 E[(V_\pi(s) - \hat{V}(s, w)) \nabla_w \hat{V}(s, w)] \end{aligned} $$

期望的近似计算: 将梯度代入更新规则,我们得到,

$$w_{k+1} = w_k + 2 \alpha_k E[(V_\pi(s_k) - \hat{V}(s_k, w_k)) \nabla_w \hat{V}(s_k, w_k)]$$

(常数 2 通常被吸收到学习率 $\alpha$ 中)

这里的核心问题是,我们并不知道真实的价值函数 $V_\pi(s)$。因此,我们需要用一个目标值 $v_{target}$ 来近似它。

2.3 $V_\pi$ 的近似方法

根据我们用来近似 $V_\pi(s)$ 的目标不同,可以衍生出不同的算法。

  • 蒙特卡洛学习 (Monte Carlo Learning): 使用从状态 $s_t$ 开始的完整回合的折扣回报 $g_t$ 作为 $V_\pi(s_t)$ 的无偏估计。 $$w_{t+1} = w_t + \alpha_t (g_t - \hat{V}(s_t, w_t)) \nabla_w \hat{V}(s_t, w_t)$$

  • 时序差分学习 (TD Learning, k=1): 使用单步的 TD 目标 $r_{t+1} + \gamma \hat{V}(s_{t+1}, w_t)$ 作为 $V_\pi(s_t)$ 的有偏估计。 $$w_{t+1} = w_t + \alpha_t [r_{t+1} + \gamma \hat{V}(s_{t+1}, w_t) - \hat{V}(s_t, w_t)] \nabla_w \hat{V}(s_t, w_t)$$

三、 常见的函数近似器

  1. 线性函数 (Linear Function): 将状态映射为特征向量,然后进行线性组合。这种方法简单、稳定,在神经网络流行之前被广泛使用。 $$\hat{V}(s, w) = \phi^T(s) w$$

  2. 神经网络 (Neural Network): 作为一种强大的非线性函数近似器,神经网络可以直接将原始状态(如图像像素)作为输入,输出其价值。 $$s \rightarrow \text{Neural Network}(w) \rightarrow \hat{V}(s, w)$$

四、 结合函数近似的经典算法

当我们将函数近似的思想应用到 Sarsa 和 Q-learning 等经典算法时,只需将表格更新替换为参数更新即可。此时,我们近似的是动作价值函数 $q(s, a)$。

Sarsa 算法结合函数近似

$$w_{t+1} = w_t + \alpha_t [r_{t+1} + \gamma \hat{q}(s_{t+1}, a_{t+1}, w_t) - \hat{q}(s_t, a_t, w_t)] \nabla_w \hat{q}(s_t, a_t, w_t)$$

Q-learning 算法结合函数近似

$$w_{t+1} = w_t + \alpha_t [r_{t+1} + \gamma \max_{a \in A(s_{t+1})} \hat{q}(s_{t+1}, a, w_t) - \hat{q}(s_t, a_t, w_t)] \nabla_w \hat{q}(s_t, a_t, w_t)$$

五、 深度Q网络 (Deep Q-Network, DQN)

DQN 是将 Q-learning 与深度神经网络相结合的里程碑式算法。它旨在最小化以下目标函数(或损失函数):

$$J(w) = E[(R + \gamma \max_{a’ \in A(s’)} \hat{q}(S’, a’, w) - \hat{q}(S, A, w))^2]$$

其中 (S, A, R, S') 是从环境中采样得到的转换元组。

这个目标函数实际上是在最小化贝尔曼最优性误差 (Bellman optimality error)。根据贝尔曼最优方程,最优动作价值函数 $q_*(s, a)$ 满足:

$$q(s, a) = E[R_{t+1} + \gamma \max_{a \in A(S_{t+1})} q(S_{t+1}, a) | S_t = s, A_t = a], $$

因此,在期望意义上,$R + \gamma \max_{a \in A(S’)} \hat{q}(S’, a, w) - \hat{q}(S, A, w)$ 的值应该趋近于零。

如何最小化DQN的目标函数?

直接对上述目标函数进行梯度下降会遇到一个问题:参数 w 不仅出现在当前Q值预测 $\hat{q}(S, A, w)$ 中,还出现在TD目标 $y = R + \gamma \max_{a’} \hat{q}(S’, a’, w)$ 中。这使得训练过程非常不稳定。

DQN 的解决方法是固定 y 中的 w,来更新 $\hat{q}(S, A, w)$ 的 w

  • 为此,我们需要两个网络。一个是表示 $\hat{q}(S, A, w)$ 的主网络 (main network),另一个是表示 $\hat{q}(S, A, w_T)$ 的目标网络 (target network)。
  • 在这种情况下,目标函数退化为: $$J = E[(R + \gamma \max_{a’} \hat{q}(S’, a’, w_T) - \hat{q}(S, A, w))^2]$$ 其中 $w^T$ 是目标网络的参数。
  • 其梯度为: $$\nabla_w J = E[(R + \gamma \max_{a’} \hat{q}(S’, a’, w_T) - \hat{q}(S, A, w)) \nabla_w \hat{q}(S, A, w)]$$

DQN 引入了两个关键技巧来解决这个问题。

技巧一:固定Q目标 (Fixed Q-Targets) / 目标网络

DQN 的解决方法是在计算TD目标时,使用一个独立的、参数固定的目标网络 (target network),而在计算当前Q值时,使用一个不断更新的主网络 (main network)

  • w 为主网络的参数,$w^-$ 为目标网络的参数。
  • 目标函数变为: $$J(w) = E[(R + \gamma \max_{a’} \hat{q}(S’, a’, w_T) - \hat{q}(S, A, w))^2]$$
  • 此时,TD目标 $y = R + \gamma \max_{a’} \hat{q}(S’, a’, w_T)$ 相对于 w 是一个常数,梯度计算变得稳定: $$\nabla_w J(w) = -2 E[(y - \hat{q}(S, A, w)) \nabla_w \hat{q}(S, A, w)]$$

实现细节:

  • 在训练过程中,我们只更新主网络参数 w
  • 每隔一定的步数,再将主网络的参数 w 复制到目标网络,即 $w_T \leftarrow w$。这使得目标值在一段时间内保持稳定。

技巧二:经验回放 (Experience Replay)

什么是经验回放?

  • 在我们收集了一些经验样本后,我们不会按照收集的顺序使用这些样本。
  • 相反,我们将它们存储在一个集合中,称为回放缓冲区 (replay buffer) $B = {(s, a, r, s’)}$。

训练过程如何进行?

  • 从回放缓冲区中随机采样 mini-batch 进行训练。
  • 样本的抽取,或称经验回放,应遵循均匀分布。 $$J = E[(R + \gamma \max_{a’} \hat{q}(S’, a’, w) - \hat{q}(S, A, w))^2]$$
    • (S, A) ~ d(S, A) 是一个索引,被视为单个随机变量。
    • R ~ P(R | S, A)S' ~ P(S' | S, A)
    • 状态-动作对 (S, A) 的分布由系统模型决定。这里假设为均匀分布。

伪代码:深度Q学习 (离线策略版本)

目标 (Aim): 从行为策略 $\pi_b$ 生成的经验样本中,学习一个最优的目标网络来近似最优动作价值。

  1. 将由 $\pi_b$ 生成的经验样本存储在回放缓冲区 $B = {(s, a, r, s’)}$ 中。
  2. 对于每一次迭代,执行:
    • 从缓冲区 $B$ 中均匀随机抽取一小批 (mini-batch) 样本。
    • 对于每一个样本 $(s, a, r, s’)$,计算目标值: $$y_T = r + \gamma \max_{a \in A(s’)} \hat{q}(s’, a, w_T)$$ 其中 $w_T$ 是目标网络 (target network) 的参数。
    • 使用这批小样本 ${(s, a, y_T)}$,通过最小化损失 $(y_T - \hat{q}(s, a, w))^2$ 来更新主网络 (main network)。
  3. 每隔 $C$ 次迭代,将主网络的参数同步到目标网络:设置 $w_T = w$。