Zhicheng

Robotics, Learning, and Control

0%

强化学习算法LSTD-Q

🔍 LSTD-Q 中最小二乘法的体现

LSTD-Q(Least-Squares Temporal Difference Q-learning) 之所以叫 “Least-Squares”,就是因为它通过最小二乘法(Least Squares) 来求解最优参数 θ,从而逼近 Q 函数。

在代码中,最小二乘法体现在:

1
self.theta = np.linalg.solve(self.A, self.b)

这实际上是解最小二乘问题的核心步骤,类似于线性回归的求解方式。


📌 数学推导:最小二乘法在 LSTD-Q 中的应用

LSTD-Q 的目标是找到一个 近似 Q 值函数

$$ Q(s, a) = \phi(s, a)^T \theta $$

其中:

  • ( Q(s, a) ) 是 Q 值,我们用特征向量 ( \phi(s, a) ) 的线性组合来逼近它。
  • ( \theta ) 是待求解的参数。

1️⃣ 目标:找到最优 θ 使得 LSTD 误差最小

基于 贝尔曼方程

$$ Q(s, a) = r + \gamma Q(s', a') $$

我们用最小二乘法逼近 Q 值,最优 θ 需要满足:

$$ \min_{\theta} \sum \left( Q(s, a) - (r + \gamma Q(s', a')) \right)^2 $$

展开后可以写成:

$$ \min_{\theta} \sum \left( \phi(s, a)^T \theta - (r + \gamma \phi(s', a')^T \theta) \right)^2 $$

2️⃣ 线性方程组的构造

如果我们有 N 组数据 ( (s_i, a_i, r_i, s’_i, a’_i) ),记:

  • ( \Phi ) 是所有 ( \phi(s, a) ) 组成的矩阵:
$$ \Phi = \begin{bmatrix} \phi(s_1, a_1)^T \\ \phi(s_2, a_2)^T \\ \vdots \\ \phi(s_N, a_N)^T \end{bmatrix} $$

形状是 ( (N, d) ),其中 ( d ) 是特征维度。

  • ( R ) 是奖励向量:
$$ R = \begin{bmatrix} r_1 \\ r_2 \\ \vdots \\ r_N \end{bmatrix} $$

形状是 ( (N, 1) )。

  • ( \Phi’ ) 是所有 ( \phi(s’, a’) ) 组成的矩阵:
$$ \Phi' = \begin{bmatrix} \phi(s'_1, a'_1)^T \\ \phi(s'_2, a'_2)^T \\ \vdots \\ \phi(s'_N, a'_N)^T \end{bmatrix} $$

形状也是 ( (N, d) )。

将 Q 值近似公式代入,我们得到线性方程:

$$ \Phi \theta = R + \gamma \Phi' \theta $$

整理得到:

$$ (\Phi^T \Phi - \gamma \Phi^T \Phi') \theta = \Phi^T R $$

3️⃣ 代码如何实现最小二乘法

在代码中,这个方程被表示为:

1
2
3
self.A += np.outer(phi, (phi - self.gamma * next_phi))  # 更新 A
self.b += reward * phi # 更新 b
self.theta = np.linalg.solve(self.A, self.b) # 计算 theta
  • self.A 对应 ( (\Phi^T \Phi - \gamma \Phi^T \Phi’) )
  • self.b 对应 ( \Phi^T R )
  • np.linalg.solve(self.A, self.b) 解线性方程组,求解最优 θ

这就是 LSTD-Q 里最小二乘法的核心! 🎯


🚀 直观理解

  • 普通 Q-learning 是直接用 TD 误差来逐步更新 Q 值,但它可能收敛慢,而且受学习率影响大。
  • LSTD-Q直接求解一个线性方程组,用最小二乘法一次性计算出最优 θ,收敛快,精度高,适用于高维状态空间。