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) = (s, a)^T ] 其中: - ( Q(s, a) ) 是 Q 值,我们用特征向量 ( (s, a) ) 的线性组合来逼近它。 - ( ) 是待求解的参数。


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

基于 贝尔曼方程: [ Q(s, a) = r + Q(s', a') ] 我们用最小二乘法逼近 Q 值,最优 θ 需要满足: [ {} ( Q(s, a) - (r + Q(s', a')) )^2 ] 展开后可以写成: [ {} ( (s, a)^T - (r + (s', a')^T ) )^2 ]


2️⃣ 线性方程组的构造

如果我们有 N 组数据 ( (s_i, a_i, r_i, s'_i, a'_i) ),记: - ( ) 是所有 ( (s, a) ) 组成的矩阵: [ = \[\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) )。

  • ( ' ) 是所有 ( (s', a') ) 组成的矩阵: [ ' =

    \[\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 值近似公式代入,我们得到线性方程: [ = R + ' ] 整理得到: [ (^T - ^T ') = ^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 对应 ( (^T - ^T ') ) - self.b 对应 ( ^T R ) - np.linalg.solve(self.A, self.b) 解线性方程组,求解最优 θ

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


🚀 直观理解

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