🔍 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( \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) ) 组成的矩阵:
形状是 ( (N, d) ),其中 ( d ) 是特征维度。
- ( R ) 是奖励向量:
形状是 ( (N, 1) )。
- ( \Phi’ ) 是所有 ( \phi(s’, a’) ) 组成的矩阵:
形状也是 ( (N, d) )。
将 Q 值近似公式代入,我们得到线性方程:
$$ \Phi \theta = R + \gamma \Phi' \theta $$整理得到:
$$ (\Phi^T \Phi - \gamma \Phi^T \Phi') \theta = \Phi^T R $$3️⃣ 代码如何实现最小二乘法
在代码中,这个方程被表示为:
1 | self.A += np.outer(phi, (phi - self.gamma * next_phi)) # 更新 A |
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 是直接求解一个线性方程组,用最小二乘法一次性计算出最优
θ,收敛快,精度高,适用于高维状态空间。