Zhangzhe's Blog

The projection of my life.

0%

A Generalist Agent

URL

TL;DR

  • 这篇论文构建了一个单一的通用智能体 Gato,它具有多模态、多任务、多实施方式能力,是一个纯端到端的智能体,甚至可以直接给出机械臂动作控制指令。
  • 模型就是 1.2B 参数的 decoder only Transformer 架构,只用一份权重可以玩 Atari 游戏、给图片加字幕、控制机械手臂堆叠积木等 604 个任务。

Algorithm

Gato.png

编码方案

Gato 将所有模态的输入和输出都编码为整数序列,输出除了不能输出图像之外,其他模态都可以输出。

  • 文本:通过 SentencePiece 方式编码,共 32000 个子单词编码为整数范围 [0, 32000)
  • 图像:按照 ViT 的编码方式,切成不重叠的 16x16patches
  • 离散值:存储为 [0, 1024) 的整数序列
  • 连续值: 离散化为 1024 个箱子,并移到 [32000, 33024) 的范围

训练和部署方案

  1. 使用 decoder only Transformer 架构,做自回归训练,图像切成 16x16patches 后,归一化到 [-1, 1] 之间,再用 Resnet 将图像编码成多个特征向量和其他模态的特征向量拼接起来,作为输入。
  2. 什么参与自回归训练?什么不参与?
    • 参与自回归训练的:文本符元、离散和连续值以及动作
    • 不参与自回归训练的:图像、智能体观测到的非文本信息(比如机械臂的关节参数等)
  3. 训练结束后,模型能做什么?
    • 训练时候没有屏蔽什么,训练收敛的模型就能做什么。
  4. 训练时固定上下文长度为 1024,超过 1024 的数据会被随机截取 1024
  5. 推理时不限制上下文长度
    gato2.png

实验结果

  • 604 项任务中,有 450 项任务能够达到专家分数的 50%
  • 论文中有每个任务类型的详细结果,可以参考论文

Thought

  • 把这么多种任务抽象成一种编码,然后用一个 1.2B 参数的模型来处理,这个想法很厉害
  • 编码方式有点复杂,可以对比下将图片之外的模态转成文本,然后用 tokenizer 编码的最终效果