先前的研究工作表明,Transformer可以对处于高维分布的语义概念进行大规模建模抽象,比较典型地体现如:
鉴于此类模型在多个领域的成功应用,我们希望研究Transformer是否可以作为强化学习,被应用在序列决策问题上.
与之前将Transformer作为强化学习的一个架构组件的传统RL算法不同,我们希望研究一种新的生成轨迹模型(generative trajectory modeling),即对状态(states)、动作(actions)和奖励(rewards)序列的联合分布进行建模。
我们考虑以下范式转变:
不再通过传统的RL算法(时间差分 (TD) 学习)来训练一个策略函数(policy),取而代之的是,我们将直接基于历史经验训练一个Transformer模型。这将使我们能够绕开影响 RL 收敛稳定性的奖励随距离衰减问题。同时它还避免了对奖励按照时间远近进行衰减的必要(这可能会导致不良的短视行为)。
除了所展示的长序列建模能力之外,Transformer 还具有其他优点,
我们基于 offline RL 算法来展开我们的研究,其中我们将给智能体agents分配来自次优数据的学习策略,通过训练,从固定的、有限的经验中产生最有效的行为。由于错误传播和价值价值高估等问题,这类任务传统上十分具有挑战性。
通过在状态(states)、动作(actions)和奖励(returns)的序列上,训练一个自回归模型( autoregressive model),我们避免了策略采样的问题。
Decision Transformer architecture. States, actions, and returns are fed into modalityspecific linear embeddings and a positional episodic timestep encoding is added. Tokens are fed into a GPT architecture which predicts actions autoregressively using a causal self-attention mask
为了直观地理解我们的论文思路,考虑如下在一个有向图上寻找最短路径的任务,
Illustrative example of finding shortest path for a fixed graph (left) posed as reinforcement learning. Training dataset consists of random walk trajectories and their per-node returns-to-go (middle). Conditioned on a starting state and generating largest possible return at each node, Decision Transformer sequences optimal paths
我们可以将这个任务视为 RL 问题。
我们训练 GPT 模型来预测“returns-to-go(未来奖励的总和)”序列的下一个token(下一跳节点)、状态(states)和行动(actions)。
值得注意的是,
因此,通过结合序列建模工具和后验奖励信息,我们实现了在无需动态规划的前提下,实现强化学习的策略优化训练。
参考链接:
https://github.com/kzl/decision-transformer https://arxiv.org/pdf/2106.01345.pdf
考虑一个由元组(S、A、P、R)描述的马尔可夫决策过程(MDP),
我们使用 st、at 和 rt = R(st, at) 来表示在时间步 t 处,状态、动作和奖励。
轨迹由一系列状态、动作和奖励组成:τ = (s0,a0,r0,s1,a1,r1,...,sT,aT,rT)。
时间步 t 处轨迹的返回(从该时间步开始的未来奖励总和):
强化学习的目标是通过训练,最大化预期回报:
在本文的离线强化学习中,我们只能访问一些固定的有限数据(由任意策略的轨迹组成的数据集),而不是通过环境交互来获取数据。这给强化学习训练带来了一些困难,因为它去除了代理探索环境并收集额外反馈的能力。
Transformers 可以对序列数据进行有效建模,这些模型由具有残差连接的堆叠自注意力层组成。 每个自注意力层接收 n 个embedding向量,每个向量对应于唯一的输入token,并输出 n 个embedding向量,并保持输入维度不变。
Transformers 的这种网络架构,允许通过注意力权重层v中query和key向量的相似度,来隐式地表达状态返回( state-return)的“置信度”。
在文本中,我们在 GPT 架构上进行了一些修改,它使用因果自注意力掩码修改 Transformer 架构以实现自回归生成,并将 n 序列上的全序列softmax求和,修改为仅包含序列中前一个tokne的标记softmax求和。
在本节中,我们介绍 Decision Transformer,该算法最大化复用了 Transformer 的网络架构,并对历史轨迹进行自回归训练。
Decision Transformer architecture. States, actions, and returns are fed into modalityspecific linear embeddings and a positional episodic timestep encoding is added. Tokens are fed into a GPT architecture which predicts actions autoregressively using a causal self-attention mask
我们选择轨迹表示的关键考量点是,它应该使 Transformers 能够学习有意义的模式,并且我们应该能够有条件地在测试时生成对应的动作(actions)。
对奖励进行建模并不简单,因为我们希望模型能够根据未来期望的回报而不是过去的奖励来制定行动。为了达成这个目标,我们不是直接提供奖励,而是向模型提供“ returns-to-go”。
以下是我们对轨迹的抽象表达方式:
在测试时,我们可以指定所需的表现(例如,1 表示成功,0 表示失败),以及环境起始状态,作为启动生成的条件信息。
当执行当前状态生成的动作后,我们将目标回报减去所实现的奖励,重复直到训练结束。
我们将最后的K个时间步骤输入到Decision Transformer中,总共有3K个标记(每种模态一个)
为了获得token embeddings,,我们为上述每个模态学习一个线性层,将原始输入投影到embedding空间,然后进行层归一化。
注意,每个时间步都对应于一个embedding,并被添加到每个token中,注意这与transformer使用的标准位置嵌入不同,因为一个时间步对应三个token。
然后,标记通过GPT模型进行处理,该模型通过自回归建模预测未来的动作标记(action tokens)。
对于训练过程,我们需要准备一个离线轨迹数据集。
我们从数据集中抽样序列长度为K的minibatches数据集。与输入标记st相对应的预测头(prediction head)被训练以在每个时间步骤下一个token动作 at。对于离散动作采用交叉熵损失,对于连续动作采用均方误差损失,每个时间步骤的损失都取平均值。
我们发现预测状态(state)或距离目标剩余动作( returns-to-go)并没有提高性能,而只有预测动作(action)(也即下一个token)对提高性能有帮助,这个问题还有待研究。
Results comparing Decision Transformer (ours) to TD learning (CQL) and behavior cloning across Atari, OpenAI Gym, and Minigrid. On a diverse set of tasks, Decision Transformer performs comparably or better than traditional approaches. Performance is measured by normalized episode return (see text for details).
在本部分中,我们试图研究一个问题,即Decision Transformer是否可以被认为是在一个具有一定奖励回报的数据子集上执行单纯模仿学习的过程。
为了调查这个问题,我们提出了一种新的方法,称为”百分位行为克隆(%BC)“,即我们仅在数据集中按照回报排序的前X%时间步上,进行行为克隆(强化学习训练)。百分位X%介于标准BC(X = 100%)以及仅克隆最佳观察轨迹(X→0%)之间。
本质上”%BC“是在更多数据的训练带来的更好的泛化效果,以及专注于一种理想数据子集的专业化模型的训练之间进行权衡。
我们在下表中展示了将%BC与Decision Transformer和CQL进行比较的完整结果,涵盖X∈[10%,25%,40%,100%]。请注意,选择最佳克隆子集的唯一方法是使用环境回合进行评估,因此%BC不是一种现实可行的方法,而是帮助我们了解Decision Transformer的行为。
我们的研究表明,Decision Transformer可以比仅对数据集的子集执行模仿学习更有效。在我们评测的任务中,Decision Transformer要么表现更好,要么与%BC表现相当,同时Decision Transformer省去了选择最佳子集的过程。
我们通过测试广泛地目标收益(target return)来评估Decision Transformer拟合训练数据序列token的能力。
为了评估访问先前状态(state)、行动(actions)和回报(returns)的重要性,我们对上下文长度K进行了消融实验。这很有趣,因为通常认为先前的状态(即K = 1)就足够用于强化学习算法。
下表显示,当K = 1时,Decision Transformer的性能显着较差,这表明过去的信息对Atari游戏很有用。
一种可能的假设是,在我们对策略分布进行建模(例如序列建模)时,上下文允许Decision Transformer识别生成行动的策略,从而实现更好的学习和/或改善训练动态。
Ablation on context length. Decision Transformer (DT) performs better when using a longer context length (K = 50 for Pong, K = 30 for others).
为了评估我们的模型的长期信用分配能力,我们考虑了Mesnard等人提出的Key-to-Door环境的一个变种。这是一个基于网格的环境,有三个阶段的序列:
这个问题对信用分配来说很困难,因为信用必须从开头传递到结尾,跳过中间采取的行动。我们使用应用随机动作生成的轨迹数据集进行训练,并在下表中报告成功率。
此外,对于Key-to-Door环境,我们使用整个事件长度作为上下文,而不是像其他环境那样有一个固定的内容窗口。
实验表明:
Decision Transformer 与以往离线强化学习算法的一个主要区别在于,我们不需要额外的策略规范化或保守约束来实现良好的性能。
我们的猜想是,基于 TD-learning 的算法通过学习近似值函数来改进策略函数,但是,不断优化已学习函数的行为可能会导致值函数优化过程中的抖动和不确定性,进而导致策略改进失败。
由于Decision Transformer不需要使用已学习函数作为目标进行显式优化,因此避免了需要规范话或保守约束的必要性。
离线强化学习和行为建模能力,具备很大的潜力实现下游任务的高效在线强化学习。
虽然我们在这项工作中仅仅研究了离线强化学习,但我们相信Decision Transformer可以通过作为生成行为的强模型来显著改进在线强化学习方法。例如,Decision Transformer可以作为一个强大的“记忆引擎”,并与Go-Explore等强大的探索算法结合使用,同时进行建模和生成多样化的行为。
我们提出了Decision Transformer,旨在统一语言/序列建模和强化学习的思想。
在标准的离线强化学习基准测试中,我们展示了Decision Transformer可以通过最小化修改标准语言模型结构来匹配或超越专门为离线强化学习设计的强大算法。我们希望这项工作能够激发更多关于使用大型Transformer模型进行强化学习的研究。
我们在实验中使用了简单而有效的监督损失,但是在大规模数据集中,自我监督预训练任务可能会带来更多收益。此外,我们可以考虑更复杂的回报、状态和动作嵌入方法,例如,根据回报分布进行条件化建模,以模拟随机环境而非确定性回报。
Transformer模型还可以用于轨迹的状态演化建模,这可能成为基于模型的强化学习的替代方法,并且我们希望在未来的工作中探索这方面。对于真实世界的应用,了解Transformer在MDP设置中出现的错误类型和可能的负面影响非常重要,但目前这方面的研究还不够充分。
此外,我们还需要考虑训练模型的数据集,因为这些数据可能会引入破坏性的偏见,特别是当我们考虑使用来自不可信来源的更多数据来增强强化学习智能体时。
Experiments require MuJoCo. Follow the instructions in the mujoco-py repo to install. Then, dependencies can be installed with the following command:
conda env create -f conda_env.yml
Datasets are stored in the data
directory. Install the D4RL repo, following the instructions there. Then, run the following script in order to download the datasets and save them in our format:
python download_d4rl_datasets.py
Experiments can be reproduced with the following:
python experiment.py --env hopper --dataset medium --model_type dt
Adding -w True
will log results to Weights and Biases.