离线强化学习中的主要难题是分布偏移。标准离策略算法(如DQN或DDPG)在固定数据集上训练时可能会大幅失效,因为它们可能评估或选择在数据收集阶段从未见过(或很少见过)的动作。这会导致外推误差,即价值函数(例如Q函数)为这些超出分布的动作产生不可靠、通常过于乐观的估计。策略约束方法通过强制学习策略 $ \pi $ 选择与生成数据集 $ D $ 的行为策略 $ \pi_b $ 所选动作“接近”或“相似”的动作,直接处理了这个问题。思路很简单:如果我们只选择行为策略在给定状态下可能选择的动作,我们就能停留在状态-动作空间中数据提供可靠信息的区域,从而减轻分布偏移的风险。批处理约束深度Q学习 (BCQ) 是体现此策略约束理念的重要算法,专门针对连续动作空间设计(尽管也存在离散版本)。它修改了标准的深度Q学习方法,以确保学习策略仅选择位于离线数据分布支持范围内的动作。BCQ方法在计算目标值时,BCQ不再是简单地选择使学习Q函数($ \arg\max_{a'} Q(s', a') $)最大化的动作,而是约束 $ a' $ 的选择。它通过明确建模行为策略的动作分布 $ p_b(a|s) $,并且在最大化步骤中只考虑与此模型一致的动作来实现这一点。BCQ使用三个主要组成部分:Q网络 ($Q_\theta$):与DQN或DDPG类似,BCQ使用神经网络来近似动作-价值函数$Q(s, a)$。通常使用两个Q网络($Q_{\theta_1}, Q_{\theta_2}$)以及对应的目标网络($Q_{\theta'1}, Q{\theta'_2}$)(遵循双DQN原则),以减少过高估计偏差。目标值使用两个目标Q网络中的最小值。生成模型 ($G_\omega$):此组件学习模拟行为策略。给定状态 $s$,它生成在 $ \pi_b $ 下可能出现的动作 $a$。条件变分自编码器 (CVAE) 常用于此目的。CVAE使用离线数据集 $D$ 中的状态-动作对 $(s, a)$ 进行训练,以便在给定状态 $s$ 的情况下重构动作 $a$。其目标是获取分布 $p_b(a|s)$。扰动网络 ($\xi_\phi$):简单地从生成模型 $G_\omega$ 中采样动作可能限制性过强。为了在保持接近数据分布的同时允许对行为策略进行轻微改进,BCQ引入了一个小的扰动网络 $\xi_\phi(s, a, \Phi)$。该网络接收一个状态 $s$ 和一个生成的动作 $a$,并输出一个小的调整量 $ \Delta a $,通常被约束在一个小范围(例如 $[-\Phi, \Phi]$)内。最终考虑的动作是 $a + \Delta a$。此网络被训练以最大化扰动动作的Q值。目标计算中的动作选择BCQ的核心修改在于如何选择动作 $a'$ 以计算贝尔曼目标 $ y = r + \gamma (1-d) Q_{\text{target}}(s', a') $。BCQ不使用简单的 $ \arg\max $,而是执行以下步骤:采样动作:给定下一个状态 $s'$,从生成模型中采样 $N$ 个候选动作 ${a_i}{i=1}^N$:$a_i \sim G\omega(s')$。扰动动作:对于每个采样的动作 $a_i$,使用扰动网络计算扰动量:$\Delta a_i = \xi_\phi(s', a_i, \Phi)$。扰动后的动作是 $ a'_i = a_i + \Delta a_i $。这些动作被裁剪到有效动作范围内。评估动作:使用目标Q网络评估所有扰动的候选动作 $a'i$。为减轻过高估计,通常使用两个目标网络中的最小值:$Q{\text{target}}(s', a'i) = \min{j=1,2} Q_{\theta'_j}(s', a'_i)$。选择最佳动作:选择产生最高目标Q值的动作 $a'$: $$ a' = \arg\max_{a'i} \min{j=1,2} Q_{\theta'_j}(s', a'_i) $$计算目标:最终的目标值为: $$ y = r + \gamma (1-d) \min_{j=1,2} Q_{\theta'_j}(s', a') $$训练过程训练涉及使用从离线数据集 $D$ 中采样的批次来更新参数 $\theta$ (Q网络)、$\omega$ (生成器) 和 $\phi$ (扰动网络):采样批次:从 $D$ 中抽取一批次的转移 $(s, a, r, s', d)$。更新生成器 ($G_\omega$):使用批次中的 $(s, a)$ 对训练CVAE。这通常涉及最小化重构损失加上KL散度项,这是变分自编码器(VAE)的常见做法。更新Q网络 ($Q_\theta$):使用上述步骤(采样、扰动、评估、选择最大值)计算目标值 $y$。计算TD误差,并使用梯度下降法更新均方误差损失上的Q网络参数 $\theta_1, \theta_2$: $$ L_Q = \mathbb{E}{(s,a,r,s',d) \sim D} \left[ \sum{j=1,2} (Q_{\theta_j}(s,a) - y)^2 \right] $$更新扰动网络 ($\xi_\phi$):通过最大化扰动动作的Q值来更新扰动网络参数 $\phi$。这通常通过对批次中状态 $s$ 采样动作 $a_{\text{gen}} \sim G_\omega(s)$,并对以下项执行梯度上升来完成: $$ L_\xi = \mathbb{E}{s \sim D, a{\text{gen}} \sim G_\omega(s)} [ Q_{\theta_1}(s, a_{\text{gen}} + \xi_\phi(s, a_{\text{gen}}, \Phi)) ] $$ (通常只使用一个Q网络,$Q_{\theta_1}$,进行此更新)。更新目标网络:定期将目标网络参数 $\theta'_1, \theta'_2$ 向主网络参数靠拢(例如,使用Polyak平均)。优点与局限BCQ提供了一种实用的方法,通过明确约束策略搜索空间,在离线设置中应用Q学习。优点:直接处理分布偏移:从设计上,它避免选择远离数据支持的动作,从而减少外推误差。稳定性提升:通常比直接应用于离线数据的朴素离策略算法更稳定。思路清晰:基于学习到的行为模型来约束动作的思路直观易懂。局限:潜在的保守性:通过保持接近行为策略,如果最佳动作位于行为策略在数据集中支持的直接邻近范围之外,BCQ可能未能找到显著更好的策略。依赖数据质量:性能高度依赖于离线数据集的覆盖范围和质量。如果数据集未能充分覆盖状态-动作空间的相关部分,BCQ的性能将受到限制。算法复杂性:需要训练和管理三个独立的网络组件(Q网络、生成器、扰动网络),增加了实现复杂性和需要调整的超参数数量。超参数敏感性:性能可能对超参数敏感,例如采样的动作数量 ($N$) 和扰动尺度 ($\Phi$)。BCQ是使Q学习在离线场景中变得可行的一个重要步骤。它通过将智能体的选择限制在类似于批处理数据中找到的动作,直接处理了分布偏移问题,在无法与环境交互时提供了一个有价值的工具。它与保守Q学习(CQL)等方法形成对比,我们将在后面讨论这些方法使用价值正则化而非明确的动作约束。