- 参考链接:
CQL 在解决什么问题?
- 分布偏移(distribution shift) :分布偏移主要是模型训练和预测时的分布存在差异,即训练数据集中的数据分布(训练)与实际决策策略下环境反馈的数据分布(预测)之间的差异。
- 这种差异可能导致学习到的策略在实际应用中表现不佳,因为该策略是在一个与实际环境不完全相同的数据分布上学习得到的
- 离线强化学习中这种问题会放大,特别地,会导致OOD问题
- OOD(Out-of-distribution) :OOD通常指在训练集中没有被观察到过的样本(状态或状态-动作对),实际上,出现频率极低的样本也可以算作一定程度上的OOD样本
- OOD问题是由于分布偏移导致的,理论上,没有分布偏移问题就不存在OOD问题 ,因为模型不会遇到这些未观察过的样本
- OOD 问题容易导致值高估(Overestimation of values)问题 :强化学习的迭代公式一般都是找时的动作最大的动作,这本身导致的容易值高估的现象
CQL 相关推导
一些定义
- 数据集 \(\mathcal{D} \sim d^{\pi_{\beta}}(\mathbf{s})\pi_{\beta}(\mathbf{a} \mid \mathbf{s})\),即数据是行为策略 \(\pi_\beta\) 与环境交互来得到的
- 对于任意 \((s_0, a_0) \in \mathcal{D}\),有经验行为策略(empirical behavior policy)为:
$$ \hat{\pi}_\beta(a_0\vert s_0) = \frac{\sum_{(s,a) \in \mathcal{D}}\mathbf{1}(s=s_0,a=a_0)}{\sum_{s\in \mathcal{D}}\mathbf{1}(s=s_0)} $$
回顾贝尔曼算子
- 一般的贝尔曼算子(Bellman Operator),写作 \(\mathcal{B}^\pi\),重复对 \(Q(s,a)\) 使用 \(\mathcal{B}^\pi\),持续迭代可收敛到策略 \(\pi\) 对应的Q值 \(Q^{\pi}(s,a)\) 值:
$$
\mathcal{B}^\pi Q = r(s, a) + \gamma \mathbb{E}_{s^\prime \sim p(s^\prime \vert s, a), a^\prime \sim \pi(a^\prime\vert s^\prime)}[Q (s^\prime, a^\prime)]
$$ - Q-Learning的迭代公式,相当于策略是找Q值最优的那个动作,通过对Q重复使用如下贝尔曼最优算子(Bellman Optimality Operator),写作 \(\mathcal{B}^{\pi^*}\) 或者 \(\mathcal{B}^*\):
$$ \mathcal{B}^{*} Q(\mathbf{s}, \mathbf{a})=r(\mathbf{s}, \mathbf{a})+\gamma \mathbb{E}_{\mathbf{s}^{\prime} \sim P\left(\mathbf{s}^{\prime} \mid \mathbf{s}, \mathbf{a}\right)}\left[\max _{\mathbf{a}^{\prime}} Q\left(\mathbf{s}^{\prime}, \mathbf{a}^{\prime}\right)\right] $$
Offline RL 中的贝尔曼算子
- 在 Offline RL 中,我们定义新的贝尔曼算子 \(\hat{\mathcal{B}}^\pi\),即更新只在固定数据集上进行,即对于给定的数据集 \(\mathcal{D} = { (s,a,r,s’)} \sim \pi_\beta\), \(\hat{\mathcal{B}}^\pi\) 的更新都发生在数据集上
- 对于给定数据集 \(\mathcal{D} \sim \pi_\beta\) 上的贝尔曼算子 \(\hat{\mathcal{B}}^\pi\),我们定义 \(\hat{\mathcal{B}}^\pi\) 如下:
$$
\hat{\mathcal{B}}^\pi \hat{Q} = r(s, a) + \gamma \mathbb{E}_{s^\prime \sim \mathcal{D}, a^\prime \sim \pi(a^\prime\vert s^\prime)}[\hat{Q} (s^\prime, a^\prime)]
$$
如果在 Offline RL 中使用常规AC方法会发生什么?
- Actor-Critic的策略迭代定义为(这种限定数据集的做法是被迫的,因为没法与环境交互):
$$
\begin{align}
\hat{Q}^{k+1} &\leftarrow \mathop{\arg\min}_{Q} \mathbb{E}_{s,a,s^\prime \sim \mathcal{D}}\left[ \left( r(s,a) + \gamma\mathbb{E}_{a^\prime \sim \hat{\pi}^{k}(a^\prime| s^\prime)}[\hat{Q}^k(s^\prime, a^\prime)] - Q(s, a) \right)^2 \right] \ &\text{(policy evaluation)}\\
\hat{\pi}^{k+1} &\leftarrow \mathop{\arg\max}_{\pi} \mathbb{E}_{s\sim \mathcal{D}, a\sim \pi(a\vert s)}\left[ \hat{Q}^{k+1} (s,a) \right] \ &\text{(policy improvement)}
\end{align}
$$- 以上公式来自论文,原始论文中使用的是 \(a \sim \pi^k(a|s)\),这里应该改成 \(a \sim \pi(a|s)\) 更合适,因为argmax的目标参数是 \(\pi\),所以我改成了 \(a \sim \pi(a|s)\) 表示找到最优的策略 \(\pi\),使得按照这个策略决策(采样或者选择动作)得到的期望收益Q值是最大的
- 其实AC方法中,包含了DQN的迭代思路,策略迭代部分, \(a’\) 始终取上一轮Q值最大的动作即可
- policy evaluation实际上就是在重复对Q使用贝尔曼算子,只是使用最小化均方误差的形式去实现了
- 问题:Offline RL场景中直接使用上面的策略迭代会面临分布偏移问题 ,从而导致高估:
- 理解:1) 目标Q值的计算应该使用当前策略 \(\pi^k\),但是数据集中只有从数据集 \(\mathcal{D}\) 中采样到的样本,对应策略 \(\pi_\beta\),极端情况下,策略 \(\pi^k\) 采样到的动作 \(a’ \sim \pi^k\) 可能从未在数据集中出现过,此时模型是无法准确评估 \(Q(s’,a’)\) 的;2)常规的迭代方法中,一般都包含着 \(a’ = \mathop{\arg\max}_a Q(s,a)\) 或者隐式的包含了 \(Q(s, a) = r + \max_{a} Q(s^\prime, a)\) 这样的思想,此时预估值 \(Q(s’,a’)\) 低估不会出现问题,但是 \(Q(s’,a’)\) 一旦高估,该动作就会被选中作为目标值;3)Offline RL场景中没有机会引入新样本来重新修正 \(Q(s’,a’)\) 的高估
- 在Online RL的场景中,一般不存在该问题,因为一个动作被错误的高估以后,往往会在策略跟环境的交互中选中该动作,从而使得该动作被修正
- 总结一下:对于策略 \(\pi\),我们的真实Q值是 \(Q^\pi\),在固定的数据集下学到的是 \(\hat{Q}^\pi\),但该值一般往往会高估,我们的目标是让 \(\hat{Q}^\pi\) 尽量接近真实值 \(Q^\pi\),那么面临的往往是高估这个问题,CQL算法的核心思想就是解决这个问题
改进一:打压未知动作的Q值
对于任意的未知策略 \(\mu\),在行为策略 \(\pi_\beta\) 交互收集到的数据集 \(\mathcal{D}\) 中进行训练,其状态动作对访问分布为 \(\mu(s, a)=d^{\pi_\beta}(s) \mu(a \mid s)\),我们的目标通过最小化未知策略采样到的动作对应的Q值,来实现Q值的保守学习:
$$\hat{Q}^{k+1} \leftarrow \arg \min_{Q} \color{red}{\alpha} \mathbb{E}_{\mathbf{s} \sim \mathcal{D}, \mathbf{a} \sim \mu(\mathbf{a} \mid \mathbf{s})}[Q(\mathbf{s}, \mathbf{a})]+\frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]$$使用 \(\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}\) 的原因是因为想强调 \(\hat{\mathcal{B}}^{\pi}\) 使用的 \(s’\) 不是按照环境的状态转移概率算的,而是直接使用的数据集中的内容
上面的迭代公式学到的是 \(\hat{Q}^\pi\) (其中 \(\hat{Q}^\pi := \lim_{k\rightarrow \infty}\hat{Q}^k\))
为了方便表达,一些论文或博客会使用 \(\mathcal{L}_{Bellman}(Q) = \frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]\) 来替换等号后面的式子
这里论文中给出了证明(Theorem 3.1):
- 上式说明:
- 当 \(supp\ \mu \subset supp\ \pi\) ( \(supp\ \mu\) 表示支持集),且 \(\alpha\) 足够大时, \(\forall \ s\in\mathcal{D},a\in \mathcal{A}\),均有 \(\hat{Q}^\pi(s,a) \le Q^\pi(s,a)\) 成立。即对于任意的分布 \(\mu\),只要我们这里 \(\alpha\) 取得足够大,总能学到一个比真实值 \(Q^\pi(s,a)\) 小的Q值
- 当 \(supp\ \mu \subset supp\ \pi\),且 \(\hat{B^\pi} = \mathcal{B}^\pi, \ \alpha > 0\) 时,对 \(\forall \ s\in\mathcal{D},a\in \mathcal{A}\),均有 \(\hat{Q}^\pi(s,a) \le Q^\pi(s,a)\) 成立。即如果我们的数据集可以反映真实的数据分布,那么数据偏移就不存在了,我们直接令 \(\alpha=0\),退化到常规的贝尔曼算子对应的损失函数即可(注:此时的数据集 \(\mathcal{D}\) 是从当前策略采样的,故 \(\alpha=0\) 后的式子就是常规贝尔曼算子对应的损失函数)
- 在概率论和机器学习中,当我们说两个离散概率分布 \(\mu(a|s)\) 和 \(\pi(a|s)\) 满足 \(supp\ \mu \subset supp\ \pi\),这意味着 \(\mu(a|s)\) 的支持集(即 \(\mu(a|s)\) 分配了正概率的所有动作 \(a\) 的集合)是 \(\pi(a|s)\) 支持集的子集。换句话说,对于所有 \(\mu(a|s)\) 给予正概率的动作 \(a\), \(\pi(a|s)\) 也必须给予正概率。简而言之,如果某个动作在 \(\mu(a|s)\) 下是可能发生的(即它有非零的概率),那么在 \(\pi(a|s)\) 下这个动作也是可能发生的。但是, \(\pi(a|s)\) 可能包括一些 \(\mu(a|s)\) 不考虑的动作,这些动作在 \(\pi(a|s)\) 中有正概率但在 \(\mu(a|s)\) 中没有或者为零概率
- 上式说明:
改进二:打压补偿
改进一学到了 \(Q^\pi(s,a)\) 的逐点下界 \(\forall \ s\in\mathcal{D},a\in \mathcal{A}\),均有 \(\hat{Q}^\pi(s,a) \le Q^\pi(s,a)\),但直观上看,打压过于严格了,甚至行为策略采样到的状态动作对都会打压(其实这些地方我们能估准的),为了缓解这个问题,我们对改进一的打压做一些补偿:
$$\hat{Q}^{k+1} = \mathop{\arg\min}_Q \color{red}{\alpha} \left(\mathbb{E}_{s\sim \mathcal{D}, a\sim \mu(a\vert s)}[Q(s, a)] - \color{red} { \mathbb{E}_{s\sim \mathcal{D}, a\sim\hat{\pi}_\beta(a\vert s)}[Q(s, a)] } \right) + \frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]$$这里论文中给出了证明(Theorem 3.2):
- 上式说明:
- 当 \(\mu=\pi\) (注意,改进一种不需要这个约束),且 \(\alpha\) 较大时,有 \(\forall \ s\in\mathcal{D}\),均有 \(\hat{V}^\pi(s) \le V^\pi(s)\)
- 当 \(\mu=\pi\),且 \(\hat{B^\pi} = \mathcal{B}^\pi, \ \alpha > 0\) 时,有 \(\forall \ s\in\mathcal{D}\),均有 \(\hat{V}^\pi(s) \le V^\pi(s)\)
- 此时虽然不能再保证学到了 \(Q^\pi(s,a)\) 的逐点下界: \(\forall \ s\in\mathcal{D},a\in \mathcal{A}\),均有 \(\hat{Q}^\pi(s,a) \le Q^\pi(s,a)\)
- 但可以保证学到了 \(Q^\pi(s,a)\) 的期望下界: \(\mathbb{E}_{\pi(a|s)}[\hat{Q}^\pi(s,a)] \le V^\pi(s) = \mathbb{E}_{\pi(a|s)}[Q^\pi(s,a)]\)
- 上式说明:
改进三:CQL(\(\mathcal{R}\))
- 一个遗留问题:论文中提到改进二需要进一步改进,但为什么不能直接用策略二,令 \(\mu=\pi\),然后直接使用改进二的公式更新?原始论文关于改进二的缺点描述(原始论文中对这里的描述不够具体,缺乏说服力)
- 改进二已经说明了在 \(\mu=\pi\) 时,可以学到一个合适的下界,但是由于改进二中需要对策略 \(\mu\) ( \(\mu=\pi\) )进行采样,即每次迭代Q值时都需要上一轮的策略 \(\pi\) 来采样,这样的话,智能交替进行策略评估和策略提升,且策略评估需要迭代足够长的步骤才能收敛,所以非常耗时(问题,常规的AC不都是这么实现的吗?其实也没有问题吧)
- 补充:CQL原始论文的描述截图
- 接下来,我们先假定论文中提到的改进二中的公式确实存在缺点,需要改进,那么可以做如下改进
- 我们可以进一步地优化,考虑到 \(\pi\) 是使得Q值最大的策略,所以我们使用使得Q值最大的 \(\mu\) 去拟合,改进二的公式可以优化为下面这样:
$$\hat{Q}^{k+1} = \min_Q \max_\mu \color{red}{\alpha} (\mathbb{E}_{s\sim \mathcal{D}, a\sim \color{red}{\mu(a\vert s)} }[Q(s, a)] - \mathbb{E}_{s\sim \mathcal{D}, a\sim\hat{\pi}_\beta(a\vert s)}[Q(s, a)]) + \frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right] + \color{red}{\mathcal{R}(\mu)} $$- 为了防止寻找Q值最大化的 \(\mu\) 时出现过拟合,我们增加正则项 \(\mathcal{R}(\mu)\),一般取 \(\mathcal{R}(\mu) = - D_{KL} (\mu| \rho)\),其中 \(\rho\) 是一个已知分布
改进四:CQL(\(\mathcal{\rho}\))
- 在CQL(\(\mathcal{R}\))中,求解 \(\mu\) 相当于要求解下面的优化问题
$$
\begin{align}
\max_{\mu} \mathbb{E}_{a \sim \mu(a|s)}[Q(s,a)]&\color{red}{-}D_{\mathrm{KL}}(\mu | \rho) \\
\text { s.t. } \quad \sum_{a} \mu(a|s)&=1 \\
\mu(a|s) &\geq 0, \ \forall \mathbf{a} .
\end{align}
$$- 注意:论文附录中错误地将 \(-D_{\mathrm{KL}}(\mu | \rho)\) 写成了 \(+D_{\mathrm{KL}}(\mu | \rho)\) (因为上述公式的本意是最小化KL散度),需要修正过来
- 上述优化问题的最优解是:
$$
\mu^{*}(a|s)=\frac{1}{Z} \rho(a|s) \exp (Q(s,a))
$$- 其中 \(Z=\sum_a \rho(a\vert s)\cdot \exp(Q(s, a))\), \(Z\) 也被称为归一化因子(normalizing factor)
- 以上优化问题求解的详细证明与AWR论文相似。更一般地,将以上变量 \(a\) 替换成 \(x\),即 \(Q(s,a)\) 替换成 \(f(x)\) 均可成立
- 最终我们有CQL(\(\mathcal{\rho}\))的表达形式:
$$
\hat{Q}^{k+1} = \min_Q \color{red}{\alpha} \mathbb{E}_{s\sim d^{\pi_\beta}(s)} \left[ \mathbb{E}_{a\sim \rho(a\vert s)} \left[ Q(s, a) \cfrac{\exp(Q(s, a))}{Z} \right ] - \mathbb{E}_{a \sim \hat{\pi}_\beta(a\vert s)}[Q(s, a)] \right] + \frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]
$$- 原始论文中使用 \(s\sim d^{\pi_\beta}(s)\),实际上与 \(s \sim \mathcal{D}\) 等价,其他形式都是使用 \(s \sim \mathcal{D}\)
- 论文中,实验时取 \(\rho(a \vert s) = \hat{\pi}^{k-1}(a \vert s)\),实验表格中的CQL(\(\mathcal{\rho}\))就是这个含义
改进五:CQL(\(\mathcal{H}\))
- 当CQL(\(\mathcal{\rho}\))中的 \(\rho\) 是均匀分布时,有最优解:
$$
\begin{align}
\mu^*(a\vert s) &= \cfrac{\rho(a\vert s)\cdot \exp(Q(s, a))}{\sum_a \rho(a\vert s)\cdot \exp(Q(s, a))} \\
&= \cfrac{\rho(a\vert s)\cdot \exp(Q(s, a))}{\rho(a\vert s) \sum_a \exp(Q(s, a))} \\
&= \cfrac{\exp(Q(s, a))}{\sum_a \exp(Q(s, a))}
\end{align}
$$ - 将 \(\mu^*(a\vert s) = \cfrac{\exp(Q(s, a))}{\sum_a \exp(Q(s, a))} \) 带入CQL(\(\mathcal{R}\)),可得CQL(\(\mathcal{H}\)):
$$
\hat{Q}^{k+1} = \min_Q \color{red}{\alpha} \mathbb{E}_{s\sim\mathcal{D}} \left[ \log \sum_a \exp(Q(s, a)) - \mathbb{E}_{a \sim \hat{\pi}_\beta(a\vert s)}[Q(s, a)] \right] + \frac{1}{2} \mathbb{E}_{\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]
$$- 论文中,取 \(\rho(a \vert s)\) 是均匀分布(即 \(\rho(a|s)=\text{Unif}(a)\))时,相当于最大化策略熵,故称此时的更新方式为CQL(\(\mathcal{H}\))
CQL 伪代码
伪代码流程如下,其中CQL(\(\mathcal{R}\))可以是CQL(\(\mathcal{H}\)),也可以是CQL(\(\mathcal{\rho}\)):
如果是Q-learning模式:仅更新Q值即可,最后定义 \(\mu(s) = \mathop{\arg\max}_a Q(s,a)\) 作为最终的策略
如果是Actor-Critic模式:需要使用SAC的训练方式额外训练actor
实践说明
- \(\alpha\) 的选择:
- \(\alpha\) 可以变成可学习的值?
- \(\log\sum_a \exp(Q(s,a))\) 的计算:
- CQL(\(\mathcal{H}\))和CQL(\(\mathcal{\rho}\))谁更好?
- 一般来说 CQL(\(\mathcal{H}\))优于CQL(\(\mathcal{\rho}\)),当动作空间特别大时logsumexp预测方差变得很大,此时使用CQL(\(\mathcal{\rho}\))效果更好
- 一些超参数的设置:
一些说明和思考
CQL原始论文中符号使用有点混乱比如CQL(\(\mathcal{R}\)),CQL(\(\mathcal{H}\))和CQL(\(\mathcal{\rho}\))三者的定义不清晰,特别是CQL(\(\mathcal{\rho}\))在正文中没有得到明确的定义,附录里面才有定义,而伪代码中强调的公式4:CQL(\(\mathcal{R}\)),实际上公式4是CQL(\(\mathcal{H}\)),这里我们特别对三个方法的定义进行辨析:
- CQL(\(\mathcal{R}\)):CQL原始形式
- CQL(\(\mathcal{\rho}\)):CQL变体,对任意 \(\rho\) 均可使用这个表述,包含了后面的CQL(\(\mathcal{H}\)),论文中实验时使用的是 \(\rho(a \vert s) = \hat{\pi}^{k-1}(a \vert s)\)
- CQL(\(\mathcal{H}\)):CQL变体,当CQL(\(\mathcal{\rho}\))中 \(\rho\) 取均匀分布时的更新形式
原始论文中 \(s\sim d^{\pi_\beta}(s)\) 和 \(s \sim \mathcal{D}\) 混用,比较公式时容易对不齐,实际上两者是等价的
从推导可以看出,数据越充足,需要的 \(\alpha\) 就越小
问题:为什么直接更新改进二中的更新公式不可以?为什么训练耗时长?普通的AC不都是这么实现的吗?
- 普通AC确实是这样实现的,但是在Offline RL场景,不希望迭代效率过慢?
问题:为什么使用均匀分布以后,可以推导出CQL(\(\mathcal{H}\))的形式?
- 详请见附录推导
CQL算法得到的策略一定很优秀吗?答案是不会比行为策略差太多
- 具体来说(Theorem 3.6):CQL算法得到的策略 \(\pi^*(a|s)\) 是一个策略 \(\hat{\pi}_\beta\) 的 \(\zeta\) -safe policy improvement,即有 \(1-\zeta\) 的概率可以保证 \(J(\pi^*, M) \ge J(\hat{\pi}_\beta, M) - \zeta\)
附录:证明约束优化问题
- 目标是求解下面的约束问题
$$
\begin{align}
\max {\mu} \mathbb{E}_{\mathbf{x} \sim \mu(\mathbf{x})}[f(\mathbf{x})]&-D_{\mathrm{KL}}(\mu | \rho) \\
\text { s.t. } \quad \sum_{\mathbf{x}} \mu(\mathbf{x})&=1\\
\mu(\mathbf{x}) &\geq 0, \ \forall \mathbf{x}.
\end{align}
$$ - 需要证明上述式子的最优解为:
$$\mu^{*}(\mathbf{x})=\frac{1}{Z} \rho(\mathbf{x}) \exp (f(\mathbf{x}))$$- 其中 \(Z = \sum_{\mathbf{x}} \rho(\mathbf{x}) \exp (f(\mathbf{x}))\)
- 证明前,我们先将上述问题修改成更一般的形式(更一般的形式更常用一些),在更一般的形式下, \(D_{\mathrm{KL}}(\mu | \rho)\) 经常会加上温度系数 \(\alpha\) 或出现在约束中:
$$
\begin{align}
\max_{\mu} \mathbb{E}_{\mathbf{x} \sim \mu(\mathbf{x})}[&f(\mathbf{x})] \\
\text { s.t. } \quad D_{\mathrm{KL}}(\mu | \rho) &\le \epsilon \\
\quad \sum_{\mathbf{x}} \mu(\mathbf{x})&=1\\
\mu(\mathbf{x}) &\geq 0, \ \forall \mathbf{x}.
\end{align}
$$ - 求解上面的问题可以先转换成构造拉格朗日函数
- 原始问题变形
$$
\begin{align}
\min_{\mu} - \mathbb{E}_{\mathbf{x} \sim \mu(\mathbf{x})}[&f(\mathbf{x})] \\
\text { s.t. } \quad D_{\mathrm{KL}}(\mu | \rho) - \epsilon &\le 0 \\
\quad \sum_{\mathbf{x}} \mu(\mathbf{x}) - 1 &= 0 \\
\mu(\mathbf{x}) &\geq 0, \ \forall \mathbf{x}.
\end{align}
$$ - 拉格朗日函数如下
$$
\begin{align}
L(\mu,\alpha,\beta) &= -\mathbb{E}_{\mathbf{x} \sim \mu(\mathbf{x})}[f(\mathbf{x})] + \alpha(D_{\mathrm{KL}}(\mu | \rho)-\epsilon) + \beta(\sum_{\mathbf{x}} \mu(\mathbf{x})-1) \\
L(\mu,\alpha,\beta) &= -\sum_x \mu(\mathbf{x})f(\mathbf{x}) + \alpha( \sum_x \mu(\mathbf{x}) \log\frac{\mu(\mathbf{x})}{\rho(\mathbf{x})} -\epsilon) + \beta(\sum_{\mathbf{x}} \mu(\mathbf{x})-1) \\
L(\mu,\alpha,\beta) &= -\sum_x \mu(\mathbf{x})f(\mathbf{x}) + \alpha( \sum_x \mu(\mathbf{x}) \log \mu(\mathbf{x}) - \sum_x \mu(\mathbf{x}) \log \rho(\mathbf{x}) -\epsilon) + \beta(\sum_{\mathbf{x}} \mu(\mathbf{x})-1) \\
\end{align}
$$
- 原始问题变形
- 对上式微分并令微分结果等于0有:
$$
\begin{align}
\frac{\partial L(\mu,\alpha,\beta)}{\partial \mu(x)} &= -\sum_x f(\mathbf{x}) + \alpha \sum_x ( \log \mu(\mathbf{x}) + 1) - \alpha \sum_x \log \rho(\mathbf{x}) + \sum_x \beta \\
&= \sum_x (- f(\mathbf{x}) + \alpha \log \mu(\mathbf{x}) + 1 - \alpha \log \rho(\mathbf{x}) + \beta) \\
&= 0
\end{align}
$$- 上式中求导使用到了 \(\frac{\partial \log \mu(x)}{\partial \mu(x)} = \frac{1}{\mu(x)}\)
- 进一步可以得到
$$
- f(\mathbf{x}) + \alpha \log \mu(\mathbf{x}) + 1 - \alpha \log \rho(\mathbf{x}) + \beta = 0
$$ - 即
$$
\begin{align}
\alpha \log \mu(\mathbf{x}) &= f(\mathbf{x}) + \alpha \log \rho(\mathbf{x}) - (\beta + 1) \\
\log \mu(\mathbf{x}) &= \frac{1}{\alpha}f(\mathbf{x}) + \log \rho(\mathbf{x}) + \frac{- (\beta + 1)}{\alpha} \\
\mu(\mathbf{x}) &= exp(\frac{1}{\alpha}f(\mathbf{x}) + \log \rho(\mathbf{x}) + \frac{- (\beta + 1)}{\alpha}) \\
\mu(\mathbf{x}) &= exp(\frac{1}{\alpha}f(\mathbf{x})) \cdot exp(\log \rho(\mathbf{x})) \cdot exp(\frac{- (\beta + 1)}{\alpha}) \\
\mu(\mathbf{x}) &= \rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x})) \cdot exp(\frac{- (\beta + 1)}{\alpha}) \\
\end{align}
$$ - 由于 \(exp(\frac{- (\beta + 1)}{\alpha})\) 包含拉格朗日乘子,是未知的,所以我们进一步化简,尝试将这部分替换为已知式子,对上述结果最后一步两边同时积分有
$$
\begin{align}
\sum_x \mu(\mathbf{x}) &= \sum_x (\rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x})) \cdot exp(\frac{- (\beta + 1)}{\alpha})) \\
1 &= exp(\frac{- (\beta + 1)}{\alpha}) \sum_x (\rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x}))) \\
exp(\frac{- (\beta + 1)}{\alpha}) &= \frac{1}{\sum_x (\rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x})))} \\
\end{align}
$$ - 将 \(exp(\frac{- (\beta + 1)}{\alpha}) = \frac{1}{\sum_x (\rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x})))}\) 的结果带入 \(\mu(\mathbf{x}) = \rho(\mathbf{x})exp(\frac{1}{\alpha}f(\mathbf{x})) \cdot exp(\frac{- (\beta + 1)}{\alpha})\) 可以解的最终解:
$$\mu^{*}(\mathbf{x})=\frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x}))$$- 其中 \(Z = \sum_{\mathbf{x}} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x}))\)
- 回到最初的问题:我们令 \(\alpha=1\) 即可退回到原始问题
附录:最优策略形式的使用方式
- 从上面的证明,我们已经得到了最优策略的一般形式 \(\mu^{*}(\mathbf{x})=\frac{\rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x}))}{\sum_{\mathbf{x}} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x}))} \),但这个形式难以直接使用
- 难以直接使用的原因(个人理解):
- 离线强化场景中 \(\rho\) 未知,无法直接使用;
- 在线强化学习场景中,难以用于状态维度高或动作空间大(包括连续状态或动作)的场景。状态和动作空间有限时, \(\rho\) 是上一布步的策略或者历史混合策略 \(f(\mathbf{x})\) 一般是 \(A^\rho(s,a)\),理论上如果按照on-policy更新或者记录policy和样本以后按照off-policy更新均可,但是实际更新时,这种非参数化的策略,不同状态的策略是隔离的(没有状态泛化能力),针对每个状态都要更行才能做到该状态上的策略迭代 \(\mu^{*}(\mathbf{a|s})=\frac{\rho(\mathbf{a|s}) \exp (\frac{1}{\alpha}f(\mathbf{a|s}))}{\sum_{\mathbf{a}} \rho(\mathbf{a|s}) \exp (\frac{1}{\alpha}f(\mathbf{a|s}))} \),相当于每次迭代需要收集大量的样本才能足够更新各个状态上的效果,否则在下一轮中遇到其他状态时,这里相当于没有被更新
- 难以直接使用的原因(个人理解):
- 一般来说,可以用神经网络去表示策略,实际上还可以进一步推导,不同的算法,目标函数不同,推导得到的结果也不同
- 对于CQL来说,由于目标是两步min max,需要进一步将最优解带入原始目标得到最终的目标
- 对于AWR,AWAC和IQL(复用了AWR方法)等论文,这里会直接使用一个神经网络去拟合策略,并尝试求这个策略的参数更新公式
$$
\begin{align}
\theta^* &= \mathop{\arg\min}_{\theta} D_{\mathrm{KL}}(\mu^*(\mathbf{x}) | \pi_\theta(\mathbf{x})) \\
&= \mathop{\arg\min}_{\theta} D_{\mathrm{KL}}\Big( \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) | \pi_\theta(\mathbf{x})\Big) \\
&= \mathop{\arg\min}_{\theta} \sum_{\mathbf{x}} \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \frac{ \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x}))} {\pi_\theta(\mathbf{x})} \\
&= \mathop{\arg\min}_{\theta} \sum_{\mathbf{x}} \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) - \sum_{\mathbf{x}} \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x}) \\
&= \mathop{\arg\min}_{\theta} - \sum_{\mathbf{x}} \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x}) \\
&= \mathop{\arg\max}_{\theta} \sum_{\mathbf{x}} \frac{1}{Z} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x}) \\
&= \mathop{\arg\max}_{\theta} \sum_{\mathbf{x}} \rho(\mathbf{x}) \exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x}) \quad \quad \text{Z与策略参数\theta无关,可以消掉} \\
&= \mathop{\arg\max}_{\theta} \mathbb{E}_{\mathbf{x} \sim \rho(\mathbf{x})} \Big[\exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x}) \Big] \\
\end{align}
$$ - 此时,最优解求解目标变成了从已知策略 \(\rho(\mathbf{x} )\) 中采样,并最大化 \(\exp (\frac{1}{\alpha}f(\mathbf{x})) \log \pi_\theta(\mathbf{x})\) 即可,此时的目标是可以直接对策略求梯度的,非常容易迭代
附录:证明 logsumexp 公式
- 参考:CQL算法logsumexp公式推导
- 当CQL(\(\mathcal{\rho}\))中的 \(\rho\) 是均匀分布时,有最优解:
$$
\begin{align}
\mu^*(a\vert s) &= \cfrac{\rho(a\vert s)\cdot \exp(Q(s, a))}{\sum_a \rho(a\vert s)\cdot \exp(Q(s, a))} \\
&= \cfrac{\rho(a\vert s)\cdot \exp(Q(s, a))}{\rho(a\vert s) \sum_a \exp(Q(s, a))} \\
&= \cfrac{\exp(Q(s, a))}{\sum_a \exp(Q(s, a))}
\end{align}
$$ - 带入CQL(\(\mathcal{R}\))形式有
$$
\begin{align}
\mathbb{E}_{a \sim \mu^*} [Q(s, a)] - D_{\mathrm{KL}}(\mu^* | \rho) &= \mathbb{E}_{a \sim \mu^*} \left[ \exp(Q(s, a)) - \log(\mu^*) + \log(\rho)\right]\\
&= \mathbb{E}_{a \sim \mu^*} \left[Q(s, a) - \log(\cfrac{\exp(Q(s, a))}{\sum_a \exp(Q(s, a))} ) +\log(\rho)\right]\\
&= \mathbb{E}_{a \sim \mu^*} \left[Q(s, a) - \log(\exp(Q(s, a))) + \log(\sum_a \exp(Q(s, a))) +\log(\rho)\right]\\
&= \mathbb{E}_{a \sim \mu^*} \left[\log(\sum_a \exp(Q(s, a))) + \log(\rho)\right]\\
\end{align}
$$ - 显然 \(\log(\sum_a \exp(Q(s, a))) + \log(\rho)\) 此时与策略 \(\mu^*\) 无关,期望可以消掉,同时 \(\rho\) 是均匀分布时,有 \(\rho(a|s) = \frac{1}{|A|}\), \(\log(\rho) = -\log(|A|)\),于是有:
$$
\begin{align}
\mathbb{E}_{a \sim \mu^*} [Q(s, a)] - D_{\mathrm{KL}}(\mu^* | \rho) &= \log \sum_a \exp(Q(s, a)) -\log(|A|)
\end{align}
$$- 注意,这里需要的是一个 \(\max_Q f(Q)\) 的形式,而 \(-\log(|A|)\) 这个值是个常数,与优化目标Q无关,可以消去
- 补充问题:为什么 CQL(\(\mathcal{\rho}\)) 中可以直接消掉 \(\mathcal{R}(\mu)\),但是 CQL(\(\mathcal{H}\)) 中不行?
- 理论上,CQL(\(\mathcal{\rho}\))中不能直接消掉 \(\mathcal{R}(\mu)\),CQL(\(\mathcal{H}\))中推导才是对的,论文中没有提这一点,实际上,把 \(\mathcal{R}(\mu)\) 从目标挪到约束上 \(\mathcal{R}(\mu) \le \epsilon\),最终推导的结果可以没有 \(\mathcal{R}(\mu)\),指数权重上会有个温度系数(因为新增约束引入的拉格朗日乘子)