我自己的原文哦~ https://blog.51cto.com/whaosoft/12406495
#transformer~x1
太可怕了都到6了 太强~~
DeepMind 表示,他们提出的算法蒸馏(AD)是首个通过对具有模仿损失的离线数据进行顺序建模以展示上下文强化学习的方法。同时基于观察结果开启了一种可能,即任何 RL 算法都可以通过模仿学习蒸馏成足够强大的序列模型如 transformer,并将这些模型转换为上下文 RL 算法。
无需权重更新、提示和微调,在试错中自主改进
论文地址:https://arxiv.org/pdf/2210.14215.pdf
Transformers 已经成为序列建模的强大神经网络架构。预训练 transformer 的一个显著特性是它们有能力通过提示 conditioning 或上下文学习来适应下游任务。经过大型离线数据集上的预训练之后,大规模 transformers 已被证明可以高效地泛化到文本补全、语言理解和图像生成方面的下游任务。
最近的工作表明,transformers 还可以通过将离线强化学习(RL)视作顺序预测问题,进而从离线数据中学习策略。Chen et al. (2021)的工作表明,transformers 可以通过模仿学习从离线 RL 数据中学习单任务策略,随后的工作表明 transformers 可以在同领域和跨领域设置中提取多任务策略。这些工作都展示了提取通用多任务策略的范式,即首先收集大规模和多样化的环境交互数据集,然后通过顺序建模从数据中提取策略。这类通过模仿学习从离线 RL 数据中学习策略的方法被称为离线策略蒸馏(Offline Policy Distillation)或策略蒸馏(Policy Distillation, PD)。
PD 具有简单性和可扩展性,但它的一大缺点是生成的策略不会在与环境的额外交互中逐步改进。举例而言,谷歌的通才智能体 Multi-Game Decision Transformers 学习了一个可以玩很多 Atari 游戏的返回条件式(return-conditioned)策略,而 DeepMind 的通才智能体 Gato 通过上下文任务推理来学习一个解决多样化环境中任务的策略。遗憾的是,这两个智能体都不能通过试错来提升上下文中的策略。因此 PD 方法学习的是策略而不是强化学习算法。
在近日 DeepMind 的一篇论文中,研究者假设 PD 没能通过试错得到改进的原因是它训练用的数据无法显示学习进度。当前方法要么从不含学习的数据中学习策略(例如通过蒸馏固定专家策略),要么从包含学习的数据中学习策略(例如 RL 智能体的重放缓冲区),但后者的上下文大小(太小)无法捕获策略改进。
研究者的主要观察结果是,RL 算法训练中学习的顺序性在原则上可以将强化学习本身建模为一个因果序列预测问题。具体地,如果一个 transformer 的上下文足够长,包含了由学习更新带来的策略改进,那么它不仅应该可以表示一个固定策略,而且能够通过关注之前 episodes 的状态、动作和奖励来表示一个策略改进算子。这样开启了一种可能性,即任何 RL 算法都可以通过模仿学习蒸馏成足够强大的序列模型如 transformer,并将这些模型转换为上下文 RL 算法。
研究者提出了算法蒸馏(Algorithm Distillation, AD),这是一种通过优化 RL 算法学习历史中因果序列预测损失来学习上下文策略改进算子的方法。如下图 1 所示,AD 由两部分组成。首先通过保存 RL 算法在大量单独任务上的训练历史来生成大型多任务数据集,然后 transformer 模型通过将前面的学习历史用作其上下文来对动作进行因果建模。由于策略在源 RL 算法的训练过程中持续改进,因此 AD 不得不学习改进算子以便准确地建模训练历史中任何给定点的动作。至关重要的一点是,transformer 上下文必须足够大(即 across-episodic)才能捕获训练数据的改进。
研究者表示,通过使用足够大上下文的因果 transformer 来模仿基于梯度的 RL 算法,AD 完全可以在上下文中强化新任务学习。研究者在很多需要探索的部分可观察环境中评估了 AD,包括来自 DMLab 的基于像素的 Watermaze,结果表明 AD 能够进行上下文探索、时序信度分配和泛化。此外,AD 学习到的算法比生成 transformer 训练源数据的算法更加高效。
最后值得关注的是,AD 是首个通过对具有模仿损失的离线数据进行顺序建模以展示上下文强化学习的方法。
方法
在生命周期内,强化学习智能体需要在执行复杂的动作方面表现良好。对智能体而言,不管它所处的环境、内部结构和执行情况如何,都可以被视为是在过去经验的基础上完成的。可用如下形式表示:
研究者同时将「长期历史条件, long history-conditioned」策略看作一种算法,得出:
研究者用大写拉丁字母表示随机变量,例如 O、A、R 及其对应的小写形式 o,α,r。通过将算法视为长期历史条件策略,他们假设任何生成学习历史的算法都可以通过对动作执行行为克隆来转换成神经网络。接下来,该研究提出了一种方法,该方法提供了智能体在生命周期内学习具有行为克隆的序列模型,以将长期历史映射到动作分布。
实际执行
在实践中,该研究将算法蒸馏过程 ( algorithm distillation ,AD)实现为一个两步过程。首先,通过在许多不同的任务上运行单独的基于梯度的 RL 算法来收集学习历史数据集。接下来,训练具有多情节上下文的序列模型来预测历史中的动作。具体算法如下所示:
实验
实验要求所使用的环境都支持许多任务,而这些任务不能从观察中轻易的进行推断,并且情节(episodes)足够短,可以有效地训练跨情节因果 transformers。这项工作的主要目的是调查相对于先前工作,AD 强化在多大程度上是在上下文中学习的。实验将 AD、 ED( Expert Distillation) 、RL^2 等进行了比较。
评估 AD、ED、 RL^2 结果如图 3 所示。该研究发现 AD 和 RL^2 都可以在上下文中学习从训练分布中采样的任务,而 ED 则不能,尽管 ED 在分布内评估时确实比随机猜测做得更好。
围绕下图 4,研究者回答了一系列问题。AD 是否表现出上下文强化学习?结果表明 AD 上下文强化学习在所有环境中都能学习,相比之下,ED 在大多数情况下都无法在上下文中探索和学习。
AD 能从基于像素的观察中学习吗?结果表明 AD 通过上下文 RL 最大化了情景回归,而 ED 则不能学习。
AD 是否可以学习一种比生成源数据的算法更有效的 RL 算法?结果表明 AD 的数据效率明显高于源算法(A3C 和 DQN)。
是否可以通过演示来加速 AD?为了回答这个问题,该研究保留测试集数据中沿源算法历史的不同点采样策略,然后,使用此策略数据预先填充 AD 和 ED 的上下文,并在 Dark Room 的环境中运行这两种方法,将结果绘制在图 5 中。虽然 ED 保持了输入策略的性能,AD 在上下文中改进每个策略,直到它接近最优。重要的是,输入策略越优化,AD 改进它的速度就越快,直到达到最优。
完事~~
#LightSeq
太快了 又挖了一个来哦 字节出的~LightSeq ~~ Transformer只是看并没用过 ....
近年来,Transformer 已经成为了 NLP 和 CV 等领域的主流模型,但庞大的模型参数限制了它的高效训练和推理。于是字节跳动在 2019 年 12 月和 2021 年 6 月分别推出了高效推理和训练引擎 LightSeq,大大加速了 Transformer 系列模型的训练和推理,也打通了 Transformer 从训练到推理的整个流程,极大优化了用户使用体验。最近,LightSeq 训练引擎相关论文[1],被录用难度极高的超算领域国际顶会 SC22 接收,得到了学术界的广泛认可!
- SC22 接收论文:https://sc22.supercomputing.org/presentation/?id=pap211&sess=sess154
- 代码地址:https://github.com/bytedance/lightseq
如何继续提升速度?降低计算精度是比较直接的方法。2017 年以来,fp16 混合精度技术 [2] 获得了广泛应用。在对模型效果无损的前提下,将模型训练和推理的速度提升了 50% 以上。而为了维持模型效果,更低精度的方法(例如 int8)通常需要使用如下传统方案:
- 首先使用 fp16 混合精度将模型训练至收敛;
- 然后在模型计算密集型算子的权重、输入和输出位置处,插入伪量化结点,进行量化感知训练;
- 最后将带有伪量化结点的模型计算图转换到专用的 int8 推理引擎中,进行服务部署和模型推理。
虽然在多数任务上,上述方案可以实现模型效果无损,但还是存在以下问题:
- 使用方法复杂。例如要多一次量化感知训练 [4] 的过程,并且带有伪量化节点的计算图转换复杂。
- 训练速度慢。由于目前流行的深度学习框架不支持 int8 精度,所以量化感知训练需要插入 fp16 的伪量化结点来模拟 int8 量化,导致量化感知训练反而比 fp16 混合精度训练慢 2-3 倍。
- 推理部署难且加速比低。对比 fp32、fp16 等类型,int8 硬件和底层软件库优化相对滞后。例如在 NVIDIA GPU 上,int8 矩阵乘法加速受限于硬件架构和特定 shape,实际加速比远远低于理论值。
在下文中,如无特殊说明,量化都是指的 int8 精度的量化。
针对这些问题,字节跳动推出了全新版本的 LightSeq GPU 量化训练与推理引擎。支持 Transformer 系列模型的量化训练与推理,并做到了开箱即用,用户友好。LightSeq 快准狠地实现了 int8 精度的量化训练和推理:
- 快:A100 多卡训练最高加速 5.2 倍,T4 单卡推理最高加速 8.9 倍。
- 准:训练和推理效果基本无损。
- 狠:相同数据量下,显存占用最高减少 68%,模型存储空间减少 75%。
总体来说,LightSeq 新版量化训练与推理引擎具有如下几个优点:
1. 丰富的支持
支持完整的 Transformer 模块和多种解码算法,支持 Transformer、BERT、GPT、BART、ViT 等多种模型结构,支持 Fairseq、Hugging Face、NeurST 等多种训练框架接入量化训练、导出模型以及量化推理,提供了丰富的样例供用户参考。
2. 卓越的性能
相比于 fp16 精度的 LightSeq 推理引擎,int8 量化还可以进一步加速最高 70%,相比于 PyTorch 推理更是达到了最高 8.9 倍的加速比。同时显存占用相比 fp16 推理引擎降低了 30% 左右,模型存储空间只需要原来的四分之一。最后经过多个任务的验证,推理效果几乎无损。
3. 便捷的使用
LightSeq 已经针对多个训练库进行了量化支持,可以一键开启量化训练,然后轻松导出为 LightSeq 支持的模型格式,最后实现量化推理。除此之外,LightSeq 还支持训练后量化,无需额外训练即可体验量化推理。
使用方法
如上图所示,为了最大程度减小量化带来的损失,首先需要用 fp16 精度训练一个浮点数模型,将模型效果训到最好。然后开启量化进行 finetune,得到微调过的量化模型,此时模型效果已经基本恢复到浮点数模型的水平。接着将量化模型转换为 LightSeq 支持的 PB 或者 HDF5 模型格式,最后用 LightSeq 进行量化推理。
安装方法
LightSeq 安装非常简单,只需要一行命令即可:
pip install lightseq
量化训练
LightSeq 支持 Fairseq、Hugging Face、NeurST 等训练框架的量化接入,同时也可以自定义模型并开启量化训练。以 encoder 层为例,只需要先定义浮点数模型,然后开启量化即可:
from lightseq.training import LSTransformerEncoderLayer
from lightseq.training.ops.pytorch.quantization import enable_quant
config = LSTransformerEncoderLayer.get_config(model="bert-base",max_batch_tokens=4096,max_seq_len=512,fp16=True,local_rank=0,
)
layer = LSTransformerEncoderLayer(config)
# 开启量化
layer.apply(enable_quant)
量化推理
LightSeq 提供了便捷的 python 推理接口,只需要三行代码即可实现快速的量化推理:
import lightseq.inference as lsi
model = lsi.QuantTransformer(pb_path, batch_size)
result = model.infer(input)
此外 LightSeq 还提供了 BERT、GPT、ViT 等模型的 python 接口,分别调用 QuantBert、QuantGpt 和 QuanVit 即可体验。
梯度通信量化
LightSeq 支持 Transformer 模型的梯度通信量化[5],使用 Fairseq 或者 Hugging Face 即可轻松开启分布式量化训练,并同时支持浮点数模型和量化模型。在构建模型后,只需要为模型注册一个 communication hook 即可开启梯度通信量化,再开始训练过程。
from lightseq.training.gradient_comm_quantization import encode_and_decode, GCQState
from torch.nn.parallel import DistributedDataParallel
# model could be from Fairseq or Hugging Face, wrapped by DDP
model = DistributedDataParallel(model)
state = GCQState(process_group)
# register hook
model.register_comm_hook(state=state, hook=encode_and_decode)
性能测试
LightSeq 在多个任务上测试了量化训练、量化推理和梯度通信量化的速度,并且分析了显存占用情况和量化模型的效果。
量化训练速度
LightSeq 在 8 张 A100 显卡上进行了训练实验,主要对比对象是 Fairseq 的 Transformer、Hugging Face 的 BERT、GPT2 和 ViT。
可以看出,四种模型结构加速趋势都是类似的,加速比都会随着数据量的增大而减小,原因有三点:
- 随着数据量的增大,矩阵乘法 GEMM 的占比会明显增加,因此 PyTorch QAT 增加的额外的伪量化结点时间占比会逐渐减小,最后速度会和 PyTorch fp16 无限接近。
- 与此同时,随着 GEMM 占比升高,LightSeq fp16 自定义算子的提速效果也逐渐减小,因此时间上也会和 PyTorch fp16 无限接近。
- 由于 Ampere 架构显卡上 int8 GEMM 在 shape 较小时甚至不如 fp16 GEMM 快,在大 shape 下才能稍快一点,因此随着数据量增大,LightSeq int8 也会无限接近 LightSeq fp16 的速度。
量化推理速度
LightSeq 在单张 T4 显卡上进行了推理实验,主要对比对象是 Hugging Face 的 Transformer、BERT、GPT2 和 ViT。
可以看出,随着输入数据量的增大,LightSeq 与 PyTorch 的差距会逐渐减小,这也是 GEMM 占比升高造成的。比较 LightSeq fp16 和 LightSeq int8,可以看出随着数据量的增大,LightSeq int8 越来越快。这是因为在 T4 显卡上,int8 GEMM 的加速会随着 shape 的增大而有明显增加。因此在 T4 显卡上进行量化推理时,输入数据量越大,加速效果越好。
LightSeq 还针对机器翻译多个语向和多个测试集,测试了不同 batch size 下,LightSeq int8 推理相对于 LightSeq fp16 推理的加速比,实验同样是在单张 T4 显卡上进行的,采用的模型都是标准的 Transformer-Big。
可以得到和上文中相同的结论,随着 batch size 的增大,量化推理的加速比会逐渐升高。相比于 LightSeq fp16,最高还可以再加速近 70%,这极大地缩短了线上翻译模型的推理延时。
最后如上图所示,为了展示自动 GEMM 调优技术的效果,LightSeq 测试对比了 A100 显卡上 Transformer 和 BERT 模型 fp16、int8 调优前和 int8 调优后的延时。可以看出调优前某些 shape 的 int8 GEMM 速度甚至比 fp16 还要慢,而调优后全面超越了 fp16。
显存占用
LightSeq 分析了不同 batch size 下,量化模型相对于浮点数模型显存占用的加速比。可以看出随着 batch size 的增大,量化模型的显存占用优势更明显,最高可以减少 30% 左右。而 LightSeq fp16 引擎相对于 PyTorch 模型也极大程度减少了显存占用,因此 LightSeq int8 引擎最终能够减少最多 68% 左右的显存。
量化模型效果
针对机器翻译多个语向和多个测试集,LightSeq 测试了量化模型推理相对于浮点数模型 BLEU 的损失,采用的模型都是标准的 Transformer-Big。
在数据量较大的语向 en2zh 上,LightSeq int8 相对 BLEU 损失较大些,最大达到了 - 0.4。而在数据量较小的语向 en2es 上,LightSeq int8 不仅没有任何效果损失,反而比浮点数模型更好。总体而言,int8 量化模型的平均 BLEU 相比浮点数模型基本无损。在 GLUE 和 SQuAD 等多个任务上,LightSeq 也验证了量化模型的效果。
梯度通信量化
由于在多机多卡场景下通信瓶颈更加明显,所以梯度通信量化主要应用在分布式训练场景。因此 LightSeq 在 2 机 8 卡的 A100 上进行了分布式训练的速度测试。
可以看出,梯度通信量化的训练加速效果整体上随着输入数据的增大而减弱。这主要是因为随着输入数据的增大,计算时间占比升高,梯度通信时间占比减少,梯度量化的收益也随之减小。
LightSeq 还额外增加了不同数量网卡(NIC)下的训练速度测试。可以看到使用梯度通信量化的分布式训练速度相比原始的 LightSeq fp16 有大幅度提升。
量化技术
int8 量化的加速收益主要来自如下几个方面:
- GEMM 精度从 fp16 降低到 int8 后,计算时间缩短;
- 自定义算子采用 int8 输入输出后,数据读写时间缩短;
- 梯度采用 int8 存储后,多机之间通信时间缩短。
以 Transformer 模型为例,经过 LightSeq fp16 引擎加速后,自定义算子时间大大缩短,而 GEMM 时间占比提升到了 90% 左右,因此优化的重点转移到了 GEMM 提速。将 fp16 GEMM 替换为 int8 GEMM 不仅可以缩短 GEMM 时间,还可以减小前后算子的输入输出位宽,从而减小读写数据的时间。最后多机训练的瓶颈主要在梯度的通信,将梯度量化为 int8 精度可以大大加快分布式训练的速度。
量化原理
为了弥补量化带来的精度损失,通常需要用量化感知训练来模拟量化过程。如上图所示,量化感知训练就是将 float GEMM 的两个 float 输入分别做一遍量化和反量化(称之为伪量化结点),离散化成分段的浮点数输入,然后进行 float GEMM 运算。得到结果后再次进行量化与反量化,得到最终的浮点数结果。而量化的过程是不可导的,因此需要用 STE 方法来估计量化参数的梯度。之所以量化感知训练中需要插入伪量化结点,然后用 float GEMM 去模拟量化过程,是因为 TensorFlow 和 PyTorch 等训练框架不支持 int8 GEMM。
而 LightSeq 量化训练直接采用 int8 GEMM 来真实还原量化过程,因此相比传统的实现要更快,且更加节省显存。在推理的时候,同样采用离散化后的整数进行 int8 GEMM 运算,最后再反量化回浮点数结果。量化推理过程和量化训练完全一致,并且和传统的量化感知训练是完全等价的。
量化位置
整个量化 Transformer 的网络结构如上图所示,红色箭头表示需要加上量化和反量化结点的位置。
首先所有 int8 GEMM 的输入和输出都需要进行量化。由于 int8 GEMM 的 shape 限制,部分 GEMM(例如注意力分数的计算)仍然采用 float GEMM。此外第二层 FFN 的 GEMM 采用的是 int32 的输出,因为它的 GEMM 输入是 ReLU 激活函数的输出结果,只包含正数,非对称,因此如果采用 int8 输出的 GEMM,将无法反量化为正确的浮点数结果。
然后所有的模型权重 weight 都需要存储为 int8 类型,因此需要对 weight 做量化。而权重 bias 参数量较小,无需量化,保留 float 精度反而可以提升模型效果。
最后需要对 decoder 端的 cache 进行量化。因为在推理时,decoder 端的 cache 需要频繁进行读写,因此将 cache 量化为 int8 可以大大加快解码的速度。
量化策略
将一个浮点数矩阵量化为 int8 整数矩阵有很多方法,LightSeq 采用的是对称量化,即将正负数范围对称的浮点数区间等比例地映射到整数区间 [-127, 127] 上。
而实际上浮点数矩阵的数值范围通常并不对称,存在极少的离群值。如果直接按照离群值的范围来量化矩阵,会影响到量化后的精度,所以需要先对矩阵进行数值截断。
LightSeq 采用 PACT 方法进行截断[6],将截断的范围当作模型可学习的参数,然后利用 STE 算法去估计参数的梯度,并进行反向传播优化。根据实践经验,权重 weight 的初始截断范围设为[-1, 1],中间结果的初始截断范围设为[-16, 16],可以在大部分任务上达到最好的效果。最后经过截断范围和其他模型参数的联合优化,量化模型的效果可以达到基本无损。
梯度通信量化
针对分布式训练场景,LightSeq 推出了梯度量化压缩技术。即对浮点精度的梯度进行 int8 量化,以减少梯度通信的时间消耗,从而加速训练,这就是梯度通信量化(GCQ)。
如上图所示,梯度通信量化的主要流程如下:
- 计算每张卡上各自梯度的截断范围;
- 对截断范围执行 all-reduce max 操作;
- 每张卡使用统一的截断范围对各自梯度进行 int8 量化;
- 对 int8 梯度执行 all-reduce sum 操作;
- 每张卡对 all-reduce 后的梯度进行反量化,还原为浮点数梯度,并进行参数更新。
为了解决 int8 梯度在 all-reduce 过程中溢出的问题,LightSeq 首先将每张卡上的浮点数梯度除以卡数,再使用除之前的截断范围进行量化,最后进行 all-reduce 操作。这样每张卡上量化后的 int8 整数 all-reduce 完就不会溢出,但是单卡实际用于量化的比特数也因此而减少,所以目前方案在 2 机 8 卡效果几乎无损,但随着卡数的上涨,训练效果会有所下降。以 en2de 和 en2fr 翻译任务为例,在 4 机 8 卡上进行分布式量化训练,BLEU 值分别会下降 0.4 和 1.5 左右。未来 LightSeq 将会持续探索更好的方法来解决这一问题。
通用技术
除了上一章节中提到的量化技术以外,此次更新 LightSeq 还提出了几种通用的优化技术,不仅可以应用在量化模型中,也适用于其它所有精度模型的训练与推理。
算子融合
上图是 encoder 模块量化训练的计算图,LightSeq 将两次 GEMM 运算之间的所有操作融合成一个算子[7],减少了 kernel 调用的次数,因此减少了总的计算时间。
图中黄色矩形表示 int8 GEMM,绿色矩形表示 float GEMM。这里采用 float GEMM 是由于 shape 的限制,不适合使用 int8 GEMM 加速。红色箭头表示流动数据的类型是 int8,绿色箭头表示第二层 FFN 的 GEMM 输出是 int32 数据类型。int8 GEMM 输入输出的量化与反量化操作都被融合到了前后 kernel 里,这不仅可以减少数据搬运,还可以减小显存占用。
在推理时,LightSeq 还针对 decoder 做了优化。如上图所示,在计算 self-attention 时,注意力得分的维度是(batch size, 1, sequence length)。因此在计算 value 乘积时,可以不采用 GEMM 运算,而直接手写加权求和的算子,从而将图中虚线框中的计算融合成一个 kernel。
自动显存管理
模型量化引入了更复杂的张量类型和张量依赖关系,这给显存管理带来新的挑战。为此,LightSeq 设计了新的显存管理机制。如上图所示,主要包括以下过程:
- 训练启动前,根据每个算子的拓扑依赖关系,自动计算每个张量的生命周期及显存空间大小。其中,包含动态维度的张量按照此维度的最大量进行计算,例如机器翻译任务中的最大句长和最大 batch 句子数量。这些最大量在训练前已被指定;
- 张量确定生命周期和大小后,分析显存复用关系。其中,无生命周期重合的张量可以共用一片显存空间,所有显存空间都是无数据类型的,可以被分配到任意数据类型的张量上;
- 根据张量显存复用关系,申请多段显存空间,为每个张量分配实际的显存起止地址。
张量显存复用的分析,LightSeq 借鉴了论文 [3] 中提出的 Greedy by Size for Offset Calculation 方法,做了三个改进:
- 支持了整个训练过程的显存复用(forward/backward);
- 不同数据类型能做到显存复用(int8/fp16/fp32);
- 在多段显存空间上容纳所有张量,而非一段非常大的显存空间,这样能有效提升显存利用率。
自动 GEMM 调优
LightSeq 的 int8 GEMM 采用了 NVIDIA 的 cuBLASLt 库,这也是目前 NVIDIA 显卡上最为高效的矩阵运算库。但是输入数据的 shape 或者显卡不同的话,GEMM 所采用的最优配置(例如数据排布、GEMM 算法等等)也可能不同,因此需要进行自动选取。LightSeq 采取的自动调优方案如下:
- 在多种型号显卡上(例如 T4 和 A100)进行不同 shape 的 GEMM 最优配置搜索,并将结果保存到配置文件中,用户只需要下载即可;
- 模型初始化时,加载对应型号显卡的配置文件,解析并保存到键值对为 (shape, 最优配置) 的字典中。如果没有对应型号显卡的配置文件,或者没有需要的 GEMM shape,那么用户可以选择自己搜索并保存,或者直接使用默认配置;
- 模型前向或后向计算时,根据输入的 shape 在字典中寻找最优配置,然后进行 GEMM 计算。如果没有找到对应的 shape,那么直接采用默认的配置。
未来工作
未来 LightSeq 还将继续探索移动端的低精度量化、反向传播中梯度的量化、大模型量化等方向。
哈哈 是不是看着说的好厉害啊
#awesome-visual-transformers
多厉害啊 都说到9了 好火感觉比yolo还厉害
Transformer,一种基于注意力的编码器-解码器模型,已经彻底改变了自然语言处理(NLP)领域。受这些重大成就的启发,最近在计算机视觉(CV)领域采用类似Transformer的架构进行了一些开创性的工作,这些工作证明了它们在三个基本CV任务(分类、检测和分割)以及多传感器数据(图像、点云和视觉-语言数据)上的有效性。由于其具有竞争力的建模能力,与现代卷积神经网络(CNN)相比,视觉Transformer在多个基准测试中取得了令人印象深刻的性能改进。
本综述根据三个基本的CV任务和不同的数据流类型,全面调查了100多种不同的视觉Transformer,并提出了一种分类法,根据其动机、结构和应用场景来组织代表性方法。由于它们在训练设置和专用视觉任务上的差异,论文还评估并比较了不同配置下的所有现有视觉Transformer。
此外,论文还揭示了一系列重要但尚未开发的方面,这些方面可能使此类视觉Transformer能够从众多架构中脱颖而出,例如,松散的高级语义嵌入,以弥合视觉Transformer与序列式之间的差距。最后,提出了未来有前景的研究方向。仓库地址:https://github.com/liuyang-ict/awesome-visual-transformers
本文旨在对最新的视觉Transformer进行更全面的回顾,并对其进行系统分类:
全面性和可读性: 本文根据它们在三个基本CV任务(即分类、检测和分割)和数据流类型(即图像、点云、多流数据)上的应用,全面回顾了100多个视觉Transformer。论文选择了更具代表性的方法,并进行了详细的描述和分析,但简要介绍了其他相关工作。本文不仅从一个角度对每个模型进行了详尽的分析,而且还从某种意义上建立了它们的内部联系,如渐进、对比和多视角分析。
直观的比较: 由于现有的视觉Transformer针对各种视觉任务遵循不同的训练方案和超参数设置,本文对不同的数据集和限制进行了多次横向比较。更重要的是,总结了为每个任务设计的一系列有效组件,包括:(a)具有层次结构的浅局部卷积;(b) neck detector的稀疏注意力空间先验加速;(c)以及用于分割的通用掩模预测方案;
深入分析: 论文进一步深入分析了以下几个方面:(a)从传统序列任务到视觉任务的转换过程;(b) 视觉Transformer和其他神经网络之间的对应关系;(c)以及不同任务和数据流类型中使用的可学习嵌入(即class token、object query、mask embedding)的相关性。最后,论文概述了一些未来的研究方向。例如,编码器-解码器Transformer主干可以通过query embedding来统一多个视觉任务和数据流类型。
原始Transformer
最初的Transformer[1]首先应用于序列到序列自动回归的任务。与先前的序列转导模型[49]、[50]相比,这种原始的Transformer继承了编码器-解码器结构,但通过使用multi-head attention机制和point-wise feed-forward网络,完全放弃了递归和卷积。图4展示了带有编码器-解码器架构的整体Transformer模型。具体而言,它由N个连续的编码器模块组成,每个编码器由两个子层组成。1) MHSA层聚合编码器嵌入内的关系;2) 逐位置FFN层提取特征表示。
在自然语言回归模型中,Transformer源于机器翻译任务。给定一个单词序列,Transformer将输入序列矢量化为单词嵌入,添加位置编码,并将生成的向量序列输入编码器。在训练期间,如图4所示,Vaswani等人根据自回归任务的规则设计了masking操作,其中当前位置仅取决于先前位置的输出。基于这种masking,Transformer解码器能够并行处理输入标签的序列。在推理期间,通过相同的操作处理先前预测的单词序列以预测下一个单词。
分类Transformer
随着NLP中Transformer的显著发展[2]–[5],最近的工作试图引入视觉Transformer来进行图像分类。本节全面回顾了40多个视觉Transformer,并将其分为六类,如图5所示。
首先介绍了Fully-Attentional网络[24]、[28]和Vision Transformer(ViT)[29],这种原始ViT首先证明了其在多个分类基准上的功效。然后讨论了Transformer增强的CNN方法,该方法利用Transformer来增强CNN的表示学习。由于忽略了原始ViT中的局部信息,CNN增强型Transformer采用了适当的卷积inductive bias来增强ViT,而局部注意力增强型Transformer重新设计了patch分区和注意力块,以提高其局部性。
继CNN[162]中的分层和深层结构之后,分层Transformer用金字塔代替了固定分辨率的柱状结构,而Deep Transformer防止了注意力图过于平滑,并增加了其在深层中的多样性。此外,论文还回顾了现有的基于自监督学习的ViT。
最后,本文根据直观的比较进行了简短的讨论,组织了一个ViT的里程碑,并讨论了一个共同的问题以供进一步研究。
Original Visual Transformer
受Transformer在NLP领域取得的巨大成就的启发[2]-[5],先前视觉任务的技术趋势[14]-[17],[163]将注意力机制与卷积模型相结合,以增强模型的感受野和全局依赖性。除了这种混合模型,Ramachandran等人考虑了注意力是否可以完全取代卷积,然后提出了一个Stand-Alone自注意力网络(SANet)[24],与原始基线相比,该网络在视觉任务上取得了优异的性能。给定ResNet[11]架构,作者直接将每个bottleneck中的空间卷积层(3*3)替换为局部空间自注意力层,并保持其他结构与ResNet中的原始设置相同。此外,大量消融已经表明,位置编码和卷积可以进一步提高网络效率。
继[24]之后,Cordonnier等人设计了一个原型(称为“Fully-Attentional Network”)[28],包括一个fully vanilla Transformer和一个二次位置编码。作者还从理论上证明了卷积层可以用具有相对位置编码和足够head的单个MHSA层来近似。通过在CIFAR-10上的消融实验[164],他们进一步验证了这样的原型设计确实能够学习到每个query像素周围的网格状图案,这是他们的理论结论。与[28]只关注小尺度模型不同,ViT[29]通过大规模预训练学习进一步探索了vanilla Transformer的有效性,这样的先锋工作对社区产生了重大影响。因为vanilla Transformer只接受序列输入,ViT中的输入图像首先被拆分成一系列不重叠的patch,然后被投影到patch嵌入中。将一维可学习位置编码添加到patch embeddings上以保留空间信息,然后将joint embeddings馈送到编码器中,如图6所示。
与BERT[5]类似,将学习的 [class] token与patch embeddings附加在一起,以聚合全局表示,并将其用作分类的输入。此外,2D插值补充了预训练的位置编码,以在馈送图像是任意分辨率时保持patche的一致顺序。通过使用大规模私有数据集(JFT-300M[165])进行预训练,与最流行的CNN方法相比,ViT在多个图像识别基准(ImageNet[166]和CIFAR-100[164])上取得了相似甚至更好的结果。然而,它的泛化能力往往会受到有限训练数据的侵蚀。
Transformer Enhanced CNNs
如上所述Transformer有两个关键:MHSA和FFN。卷积层和MHSA之间存在近似值[28],Dong等人认为,Transformer可以借助跳跃连接和FFN[167]进一步减轻MHSA的强偏置。最近,一些方法试图将Transformer集成到CNN中以增强表示学习。VTs[51]将输入图像的语义概念解耦到不同的通道中,并通过编码器块(即VT块)将它们紧密关联。这种VT块替代了最后的卷积阶段,以增强CNN模型的语义建模能力。与先前直接用注意力结构代替卷积的方法不同,Vaswani等人提出了一种概念上的重新定义,即具有MHSA的连续bottleneck block可以被表述为Bottleneck Transformer(BoTNet)[52]块。采用相对位置编码[168]进一步模拟原始Transformer.。基于ResNet[11],BoTNet在ImageNet基准上的参数设置类似,优于大多数CNN模型,并进一步证明了混合模型的有效性。
CNN Enhanced Transformer
Inductive bias被定义为关于数据分布和解空间的一组假设,其在卷积中的表现为局部性和平移不变性[169]。由于局部邻域内的协方差很大,并且在图像中逐渐趋于平稳,CNN可以在偏差的帮助下有效地处理图像。然而,当有足够的数据可用时,强偏差也限制了CNN的上限。最近的努力试图利用适当的CNN bias来增强Transformer。相关算法有DeiT[40]、ConViT[53]、CeiT[54]、LocalViT[55]、ResT[57]、CPVT[56]、CvT[36]、CoAtNet)[39]等。
Local Attention Enhanced Transformer
ViT[29]中的coarse patchify过程忽略了局部图像信息。除了卷积,研究人员提出了一种局部注意力机制,以动态关注相邻元素并增强局部提取能力。代表性方法之一是Swin Transformer[35]。类似于TSM[173](图7(a)),Swin利用沿空间维度的移位窗口来建模全局和边界特征。具体而言,两个连续的window-wise attention可以促进cross-window相互作用(图7(b)-(c)),类似于CNN中的感受野扩展。这种操作将计算量由降低至。其他相关算法TNT[59]、Twins[60]、ViL[61]、VOLO[44]可以参考具体论文。
Hierarchical Transformer
由于ViT[29]在整个Transformer层中采用具有固定分辨率的柱状结构,忽略了细粒度特征,并带来了沉重的计算成本。继分层模型之后,Tokens to Token ViT(T2T-ViT)首先引入了分层Transformer的范例,并采用overlapping unfold操作进行下采样。然而,这种操作带来了沉重的内存和计算成本。因此,Pyramid Vision Transformer(PVT)[41]利用非重叠的patch分区来减少特征大小。此外,PVT中的spatial-reduction attention(SRA)层被应用于通过学习低分辨率key-value pairs来进一步降低计算成本。在经验上,PVT使Transformer适应许多基准上的密集预测任务,这些基准需要大量输入和细粒度特征,并且具有计算效率。此外,PiT[64]和CvT[36]都分别利用池化和卷积来进行token下采样。具体而言,CvT[36]通过用卷积投影替换线性层来改进PVT[41]的SRA。基于convolutional bias,CvT[36]可以适应任意大小的输入,而无需位置编码。
Deep Transformer
经验上,增加模型的深度是可以增强其学习能力[11]的。最近的工作将深度结构应用于Transformer,并进行了大量实验,通过分析cross-patch[67]和cross-layer[37]、[66]的相似性以及残差的贡献[42]来研究其可扩展性。在Deep Transformer中,来自较深层的特征往往不太具有代表性(attention collapse[66]),并且patch被映射到不可区分的潜在表示中(patch over-smoothing[67])。为了解决上述限制,这些方法从两个方面提出了相应的解决方案。从模型结构的角度来看,Touvron等人在图像Transformers中提出了有效的Class-attention(CaiT[42]),包括两个阶段:1)没有class token的多个self-attention阶段。在每一层中,利用由small values初始化的可学习对角矩阵来动态更新channel权重,从而为channel调整提供一定的自由度;2) 最后class-attention阶段是冻结patch embeddings。之后的class token被插入到模型全局表示中,类似于具有编码器-解码器结构的DETR。这种显式分离基于这样一个假设,即class token对于前向传递中的patch embeddings梯度无效。通过蒸馏训练策略[40],CaiT在没有外部数据的情况下在imagenet-1k上实现了新的SOTA(86.5%的TOP1精度)。Deep Transformer遭受attention collapse和过度平滑问题的困扰,但仍在很大程度上保留了不同head之间注意力图的多样性。基于这一观察,Zhou等人提出了Deep Vision Transformer(DeepViT)[66],该Transformer聚合cross-head attention maps,并通过使用线性层重新生成新的注意力图,以增加跨层特征多样性。此外,Refiner[37]应用线性层来扩展注意力图的维度(间接增加head数量),以促进多样性。然后,采用分布式局部注意力(DLA)来实现对局部特征和全局特征的更好建模,这是通过影响注意力图的head-wise卷积来实现的。从训练策略的角度来看,Gong等人提出了deep Transformer的三个Patch Diversity损失,这可以显著鼓励patch的多样性并抵消过度平滑问题[67]。类似于[175],patch-wise余弦损失最小化了patch之间的成对余弦相似性。patch-wise对比度损失通过其在早期层中的对应patch使较深的patch正则化。受Cutmix[176]的启发,patch-wise混合损失混合了两个不同的图像,并迫使每个patch只关注来自同一图像的patch,而忽略不相关的patch。与LV-ViT[43]相比,它们具有相似的损失功能,但动机不同。前者侧重于patch多样性,而后者侧重于关于token标记的数据增强。
Transformers with Self-Supervised Learning
自监督Transformer在NLP领域取得了巨大的成功[5],但视觉Transformer仍停留在监督的预训练阶段[35],[40]。最近的工作还试图以生成和判别的方式为ViT设计各种自监督学习方案。生成式的相关工作有iGPT[68]、BEiT[70]、dVAE[147]。判别式的相关工作有[72]、DINO[73]。
讨论
算法评估和比较分析:在论文的分类法中,所有现有的监督模型被分为六类。表一总结了这些现有ViT在ImageNet-1k基准上的性能。为了客观直观地评估它们,论文使用以下三张图来说明它们在不同配置下在ImageNet-1k上的性能。图8(a)总结了2242个输入大小下每个模型的精度。图8(b)以FLOP为水平轴,重点关注其在更高分辨率下的性能。图8(c)侧重于具有外部数据集的预训练模型。根据这些比较结果,论文简要总结了在效率和可伸缩性方面的几项性能改进,如下所示:
与大多数结构改进方法相比,DeiT[40]和LV-ViT[43]等基本训练策略更适用于各种模型、任务和输入;
局部性对于Transformer是必不可少的,这反映在VOLO[44]和Swin[35]分别在分类和密集预测任务上的优势;
卷积patchify stem(ViTc[58])和早期卷积阶段(CoAtNet[39])可以显著提高Transformer器的精度,尤其是对于大模型。论文推测原因是因为这些设计引入了比ViT中的non-overlapping patch projection更严格的高级特征[29];
deep Transformer,如Refined-ViT[37]和CaiT[42],具有巨大的潜力。随着模型尺寸与channel尺寸成二次增长,未来可以进一步研究deep Transformer中的相关权衡策略;
CeiT[54]和CvT[36]在训练中小型模型(0到40M)有显著优势,这表明轻量模型的这种混合注意力block值得进一步探索。
ViT发展趋势综述
当论文的系统学与这些模型的时间线匹配时,我们可以清楚地跟踪Transformer用于图像分类的发展趋势(图1)。作为一种自注意机制,视觉Transformer主要根据NLP中的朴素结构(ViT[29]和iGPT[68])或CV中基于注意力的模型(VTs[51]和BoTNet[52])进行重新设计。然后,许多方法开始将CNN的层次结构或深层结构扩展到ViT。T2T-ViT[63]、PVT[41]、CvT[36]和PiT[64]都有一个动机,即将分层结构迁移到Transformer中,但它们实现的下采样方式不同。CaiT[42]、Diverse Patch[67]、DeepViT[66]和Refiner[37]关注deep Transformer中的问题。此外,一些方法转向内部组件以进一步增强先前Transformer的图像处理能力,即位置编码[56]、[179]、[180]、MHSA[28]和MLP[167]。下一波Transformer是局部范式。其中大多数通过引入局部注意机制[35]、[44]、[59]、[60]或卷积[53]–[55]将局部性引入Transformer。如今,最新监督Transformer正在探索结构组合[39]、[58]和scaling laws[38]、[181]。除了有监督的Transformer,自监督学习在ViT[68]–[70]、[72]–[74]中占据了很大一部分。然而,目前尚不清楚哪些任务和结构对CV中的自监督Transformer更有利。关于备选方案的简要讨论:在ViT的开发过程中,最常见的问题是ViT能否完全取代传统的卷积。通过回顾过去一年的性能改进历史,这里没有任何相对劣势的迹象。ViT已经从一个纯粹的结构回归到一个混合的形式,而全局信息已经逐渐回归到带有局部bias的混合阶段。尽管ViT可以等同于CNN,甚至具有更好的建模能力,但这种简单有效的卷积运算足以处理浅层中的局部性和语义特征。未来,两者结合的精神将推动图像分类取得更多突破。
检测Transformer
在本节中,论文将回顾用于目标检测的ViT,它可以分为两个部分:Transformer Neck和Transformer Backbone。对于neck,论文主要关注为Transformer结构指定的一种新表示,称为object query,即一组可学习的参数等价地聚集了全局特征。最近的变体试图在收敛加速或性能改进方面解决最优融合范式。除了专门为检测任务设计的neck外,一部分主干检测器还考虑了特定的策略。最后,论文对它们进行了评估,并分析了这些检测器的一些潜在方法。
Transformer Neck
首先回顾DETR[30]和Pix2seq[75],它们是最初的Transformer检测器,重新定义了两种不同的目标检测范式。随后,论文主要关注基于DETR的变体,从五个方面改进了Transformer检测器的准确性和收敛性:稀疏注意力、空间先验、结构重新设计、分配优化和预训练模型。原始检测器:DETR[30]是第一个端到端Transformer检测器,它消除了手工设计的表示[182]-[185]和非最大抑制(NMS)后处理,这将目标检测重新定义为集合预测问题。详细地说,一小组可学习的位置编码,称为object query,被并行馈送到Transformer解码器中,以从图像特征中聚合实例信息。然后,预测头直接从解码器的输出query产生检测结果。在训练过程中,在预测目标和GT之间使用二分匹配策略,以识别一对一的标签分配,从而在没有NMS的情况下消除推理时的冗余预测。在反向传播中,匈牙利损失包括所有分类结果的对数似然损失和所有匹配对的box损失。总之,DETR为端到端目标检测提供了一种新的范例。object query在与图像特征交互期间逐渐学习实例表示。二分匹配允许直接的集合预测很容易适应一对一的标签分配,从而消除了传统的后处理。DETR在COCO基准上实现了具有竞争力的性能,但在小目标上存在收敛速度慢和性能差的问题。另一项开创性工作是Pix2seq[75],将通用目标检测视为一项语言建模任务。给定一个图像输入,执行一个vanilla sequential Transformer来提取特征并自动回归生成一系列目标描述(即类标签和边界框)。这种简化但更复杂的图像caption方法是在这样的假设下得出的,即如果模型同时了解目标的位置和标签,则可以教导其生成具有指定序列的描述[75]。与DETR相比,Pix2seq在小目标上获得了更好的结果。如何将这两种概念结合起来值得进一步考虑。稀疏注意力:在DETR中,query和特征图之间的密集交互耗费了难以承受的资源,并减缓了DETR的收敛速度。因此,最近的努力旨在设计依赖于数据的稀疏注意力来解决这些问题。继[186]之后,Zhu等人开发了Deformable DETR,以通过多尺度deformable attention显著改善训练收敛性和检测性能[76]。与原始DETR相比,deformable attention模块仅对一小部分关键点进行采样,以进行全特征聚合。这种稀疏注意力可以很容易地扩展到多尺度特征融合,而无需FPN[187]的帮助,因此称为多尺度可定义注意力(MSDA),如图10所示。其他相关算法ACT[77]、PnP[78]、Sparse DETR[79]可以参考具体论文。
空间先验:与由内容和几何特征[182]、[188]直接生成的anchor或其他表示不同,object query通过随机初始化隐式建模空间信息,这与边界框弱相关。空间先验应用的主流是具有经验空间信息的一阶段检测器和具有几何坐标初始化或感兴趣区域(RoI)特征的两阶段检测器。一阶段相关算法有SMCA[80]、Conditional DETR[81]、Anchor DETR[82]、DAB-DETR[83]。二阶段相关算法有Efficient DETR[84]、Dynamic DETR[85]。结构重新设计:除了关注交叉注意力的修改之外,一些工作重新设计了仅编码器的结构,以直接避免解码器的问题。TSP[86]继承了集合预测[30]的思想,并去除了解码器和object query以加速收敛。这种仅编码器的DETR重用先前的表示[182]、[188],并生成一组固定大小的感兴趣特征(FoI)[188]或proposal[182],这些proposal随后被馈送到Transformer编码器。此外,匹配蒸馏被应用于解决二分匹配的不稳定性,特别是在早期训练阶段。Fang等人[87]将DETR的编码器-解码器 neck和ViT的仅编码器主干合并为仅编码器检测器,并开发了YOLOS,一种纯序列到序列转换器,以统一分类和检测任务。它继承了ViT的结构,并用固定大小的可学习检测token替换了单个类token。这些目标token首先在分类任务上进行预训练,然后在检测基准上进行微调。二分匹配优化:在DETR[30]中,二分匹配策略迫使预测结果在训练期间完成一对一的标签分配。这样的训练策略简化了检测管道,并在无需NMS帮助的情况下直接构建端到端系统。为了深入了解端到端检测器的功效,Sun等人致力于探索一对一预测的理论观点[192]。基于多次消融和理论分析,他们得出结论,一对一匹配策略的分类成本是显著避免重复预测的关键因素。即便如此,DETR仍面临着由二分匹配引起的多重问题。Li等人[90]利用denoisingDETR(DN-DETR)来减轻二部分匹配的不稳定性。具体地说,一系列有轻微扰动的目标应该重建它们的真实坐标和类。去噪(或重建)部分的主要成分是防止匹配部分和噪声部分之间信息泄漏的注意力掩码,以及指示扰动的指定标签嵌入。其他工作还有DINO[91]。预训练:灵感来自预训练的语言Transformer[3],[5],相关工作有UP-DETR[88]、FP-DETR[89]。
Transformer Backbone
前文已经回顾了许多基于Transformer的图像分类主干[29]、[40]。这些主干可以很容易地并入各种框架(例如,Mask R-CNN[189]、RetinaNet[184]、DETR[30]等),以执行密集预测任务。例如,像PVT[41]、[65]这样的分层结构将ViT构造为一个高分辨率到低分辨率的过程,以学习多尺度特征。局部增强结构将主干构建为局部到全局的组合,可以有效地提取短距离和长距离视觉相关性,并避免二次计算开销,如Swin Transformer[35]、ViL[61]和Focal Transformer[62]。表III包括密集预测任务的这些模型的更详细比较。除了通用Transformer主干,特征金字塔Transformer(FPT)[92]通过使用self-attention、自上而下的cross-attention和自底向上的cross channel attention,结合了空间和尺度的特性。继[193]之后,HRFormer[93]向Transformer介绍了多分辨率的优点以及非重叠的局部self-attention。HRViT[94]重新设计了异质分支和十字形注意力模块。
讨论
论文在表II中总结了Transformer neck检测器的五个部分,密集预测任务的Transformer backbone的更多细节参见表III。大多数neck提升集中在以下五个方面:
1)提出了稀疏注意力模型和评分网络,以解决冗余特征交互问题。这些方法可以显著降低计算成本并加速模型收敛;
2)将显式空间先验分解为所选特征初始化和由可学习参数提取的位置信息,将使检测器能够精确预测结果;
3)在Transformer解码器中扩展了多尺度特征和逐层更新,用于小目标细化;
4)改进的二分匹配策略有利于避免冗余预测以及实现端到端目标检测;
5)仅编码器结构减少了整个Transformer堆栈层,但过度增加了FLOPs,而编码器-解码器结构是FLOPs和参数之间的良好权衡,但更深的解码器层可能会导致长时间训练过程和过度平滑的问题。
此外,有许多Transformer主干用于改进分类性能,但很少有针对密集预测任务的工作。未来,论文预计Transformer主干将与深度高分辨率网络合作,以解决密集预测任务。
分割Transformer
Patch-Based 和 Query-Based Transformer是分割的两种主要应用方式。后者可以进一步细分为Object Query 和 Mask Embedding两类。
Patch-Based Transformer
由于感受野扩展策略[194],CNN需要多个解码器堆栈来将高级特征映射到原始空间分辨率。相反,基于patch的Transformer由于其全局建模能力和分辨率不变性,可以很容易地与用于分割mask预测的简单解码器结合。Zheng等人扩展了用于语义分割任务的ViT[29],并通过使用解码器的三种方式来实现逐像素分类,提出了SEgmentation TRansformer(SETR)[95]:naive上采样(naive)、渐进上采样(PUP)和多级特征聚合(MLA)。SETR展示了ViT用于分割任务的可行性,但它也带来了不可接受的额外GPU开销。TransUNet[96]是第一个用于医学图像分割的方法。形式上,它可以被视为带有MLA解码器的SETR的变体[95],或者是U-Net[195]和Transformer的混合模型。由于Transformer编码器强大的全局建模能力,Segformer[97]设计了一个只有四个MLP层的轻量级解码器。当使用多种损坏类型的图像进行测试时,Segformer显示出比CNN更好的性能和更强的鲁棒性。
Query-Based Transformer
Query embedding是一组从图像输入中逐渐学习的临时语义/实例表示。与patch嵌入不同,query可以更“公平”地集成来自特征的信息,并自然地与集合预测损失结合[30],用于去除后处理。现有的基于query的模型可以分为两类。一种是由检测和分割任务同时驱动的(称为object queries)。另一个仅由分割任务(称为mask embeddings)监督。Object Queries:基于object queries的方法有三种训练方式(图11)。如图11(a)所示的Panoptic DETR[30]。图11(b)所示的Cell-DETR[98]和VisTR[99],以及如图11(c)所示的QueryInst[100]
Mask Embeddings:另一个框架使用query直接预测掩码,论文将这种基于掩码的学习查询称为mask embedding。与object queries不同,mask embedding仅由分割任务监督。如图11(d)所示,两个不相交的query集被并行用于不同的任务,box学习被视为进一步增强的辅助损失,相关算法有ISTR[101]、SOLQ[102]。对于语义和box-free实例分割,一系列基于query的Transformer直接预测掩码,而不需要框分支的帮助(图11(e)),相关算法如Max-DeepLab[31]、Segmenter[103]、Maskformer[104]等。
讨论
论文根据三个不同的任务总结了上述Transformer。表IV(a)侧重于ADE20K(170类)。可以表明,当在具有大量类的数据集上进行训练时,ViT的分割性能显著提高。表IV(b)侧重于实例分割的COCO测试数据集。显然,在分割和检测任务中,带有掩模嵌入的ViT超过了大多数主流模型。然而,APbox和APseg之间存在巨大的性能差距。通过级联框架,QueryInst[100]在各种Transformer模型中实现了SOTA。将ViT与混合任务级联结构相结合,值得进一步研究。表IV(c)侧重于全景分割。Max-DeepLab[31]通常通过掩码预测形式解决全景分割任务中的前景和背景问题,而Maskformer[104]成功地将这种格式用于语义分割,并将语义和实例分割任务统一为一个模型。基于它们在全景分割领域的表现,我们可以得出结论,ViT可以将多个分割任务统一到一个box-free框架中,并进行掩模预测。
3D视觉Transformer
随着3D采集技术的快速发展,双目/单目图像和LiDAR(Light Detection and Ranging)点云成为3D识别的流行传感数据。与RGB(D)数据不同,点云表示更关注距离、几何图形和形状信息。值得注意的是,由于其稀疏性、无序性和不规则性的特点,这种几何特征非常适合Transformer。随着2D ViT的成功,开发了大量的3D分析方法。本节展示了3D ViT在表示学习、认知映射和特定处理之后的简要回顾。
表示学习
与传统的手工设计的网络相比,ViT更适合于从点云学习语义表示,在点云中,这种不规则和排列不变的性质可以转化为一系列具有位置信息的并行嵌入。鉴于此,Point Transformer[105]和PCT[106]首先证明了ViT对3D表示学习的有效性。前者将hierarchical Transformer[105]与下采样策略[203]合并,并将其先前的vector attention block[25]扩展到3D点云。后者首先聚集相邻点云,然后在全局off-set Transformer上处理这些相邻嵌入,其中来自图卷积网络(GCN)的知识迁移被应用于噪声缓解。值得注意的是,由于点云的固有坐标信息,位置编码(ViT的重要操作)在两种方法中都有所减少。PCT直接处理坐标,无需位置编码,而Point Transformer添加了可学习的相对位置编码以进一步增强。继[105]、[106]之后,Lu等人利用local-global聚合模块3DCTN[107]来实现局部增强和成本效率。给定多步长下采样组,使用具有max-pooling操作的显式图卷积来聚合每个组内的局部信息。将得到的组嵌入级联并馈送到改进的Transformer[105]、[106]中,用于全局聚合。Park等人提出了Fast Point Transformer[108],通过使用voxel-hashing邻域搜索、体素桥接相对位置编码和基于余弦相似性的局部关注来优化模型效率。为了进行密集预测,Pan等人提出了一种定制的基于点云的Transformer主干(Pointformer)[109],用于在每个层中分别参与局部和全局交互。与以往的局部-全局形式不同,采用局部关注后的坐标细化操作来更新质心点而不是曲面点。局部-全局交叉注意力模型融合了高分辨率特征,然后是全局注意力。Fan等人返回到Single-stride Sparse Transformer(SST)[110],而不是下采样操作,以解决小目标检测的问题。与Swin[35]类似,连续Transformer块中的移位组被用于分别处理每组token,这进一步缓解了计算问题。在基于体素的方法中,Voxel Transformer(VoTr)[111]采用两步voxel Transformer来有效地操作空和非空体素位置,包括通过local attention和dilated attention。VoxSeT[112]进一步将self-attention分解为两个交叉关注层,一组潜在编码将它们链接起来,以在隐藏空间中保存全局特征。一系列自监督Transformer也被扩展到3D空间,例如Point BERT[113]、Point MAE[114]和MaskPoint[115]。具体而言,Point BERT[113]和Point MAE[114]直接将先前的工作[70]、[71]转移到点云,而MaskPoint[115]通过使用与DINO(2022)[91]类似的对比解码器来改变生成训练方案,以进行自训练。基于大量实验,论文得出结论,这种生成/对比自训练方法使ViT能够在图像或点云中有效。
Cognition Mapping
鉴于丰富的表示特征,如何将实例/语义认知直接映射到目标输出也引起了相当大的兴趣。与2D图像不同,3D场景中的目标是独立的,可以由一系列离散的表面点直观地表示。为了弥补这一差距,一些现有的方法将领域知识转移到2D主流模型中。继[30]之后,3DETR[116]通过最远点采样和傅里叶位置嵌入将端到端模块扩展到3D目标检测,以用于object queries初始化。Group Free 3D DETR[117]应用了比[116]更具体和更强的结构。详细地说,当object queries时,它直接从提取的点云中选择一组候选采样点,并在解码器中逐层迭代地更新它们。Sheng等人提出了一种典型的两阶段方法,该方法利用Channel-wise Transformer3D检测器(CT3D)[118]同时聚合每个提案中的点云特征的proposal-aware嵌入和channel-wise上下文信息。对于单目传感器,MonoDTR[119]和MonoDETR[120]在训练过程中使用辅助深度监督来估计伪深度位置编码(DPE)。DETR3D[121]引入了一种多目3D目标检测范式,其中2D图像和3D位置都通过摄像机变换矩阵和一组3D object queries相关联。TransFusion[122]通过连续通过两个Transformer解码器层与object queries交互,进一步利用了LiDAR点和RGB图像的优点。
Specific Processing
受传感器分辨率和视角的限制,点云在真实场景中存在不完整、噪声和稀疏性问题。为此,PoinTr[123]将原始点云表示为一组局部点云代理,并利用几何感知编码器-解码器Transformer将中心点云代理向不完整点云方向迁移。SnowflakeNet[124]将点云补全的过程公式化为类似雪花的生长,它通过point-wise splitting deconvolution策略从父点云逐步生成子点云。相邻层的skip-Transformer进一步细化父层和子层之间的空间上下文特征,以增强它们的连接区域。Choe等人将各种生成任务(例如降噪、补全和超分辨率)统一为点云重构问题,因此称为PointRecon[125]。基于体素散列,它覆盖了绝对尺度的局部几何结构,并利用PointTransformerlike[105]结构将每个体素(query)与其相邻体素(value-key)进行聚合,以便从离散体素到一组点云集进行细粒度转换。此外,增强的位置编码适用于体素局部attention方案,通过使用L1损失的负指数函数作为朴素位置编码的权重来实现。值得注意的是,与masked生成自训练相比,补全任务直接生成一组完整点云,而不需要不完整点云的显式空间先验。
多传感器数据流Transformer
在现实世界中,多个传感器总是互补使用,而不是单个传感器。为此,最近的工作开始探索不同的融合方法,以有效地协同多传感器数据流。与典型的CNN相比,Transformer自然适合于多流数据融合,因为它的非特定嵌入和动态交互注意机制。本节根据数据流源(同源流和异源流)详细介绍了这些方法。
Homologous Stream
同源流是一组具有相似内在特征的多传感器数据,如多视图、多维和多模态视觉流数据。根据融合机制,它们可以分为两类:交互融合和迁移融合。交互融合:CNN的经典融合模式采用channel级联操作。然而,来自不同模态的相同位置可能是各向异性的,这不适合CNN的平移不变偏差。相反,Transformer的空间级联操作使不同的模态能够超越局部限制进行交互。对于局部交互,MVT[126]在空间上连接来自不同视图的patch嵌入,并通过使用模式不可知的Transformer来加强它们的交互。为了减轻多模态特征的冗余信息,MVDeTr[127]将特征图的每个视图投影到地平面上,并将多尺度可变形注意力[76]扩展到多视图设计。其他相关算法TransFuser[128]、COTR[129]可参考论文。对于全局交互,Wang等人[130]利用共享主干提取不同视图的特征。代替COTR[129]中的逐像素/逐patch级联,提取的逐视图全局特征在空间上进行级联,以在Transformer中进行视图融合。考虑到不同相机视图之间的角度和位置差异,TransformerFusion[132]首先将每个视图特征转换为具有其相机视图的内部和外部的嵌入向量。这些嵌入然后被馈送到global Transformer中,该global Transformer的注意力权重用于帧选择,以便有效地计算。为了在3D检测中统一多传感器数据,FUTR3D[131]将类DETR解码器中的object queries投影到一组3D参考点中云。这些点云及其相关特征随后从不同的模态中采样并在空间上连接以更新object queries。迁移融合:与Transformer编码器通过self-attention实现的交互式融合不同,另一种融合形式更像是通过交叉关注机制从源数据到目标数据的迁移学习。例如,Tulder等人[133]在中间主干特征中插入了两个协作的交叉注意力Transformer,用于桥接未配准的多视图医学图像。代替pixel-wise 注意力形式,进一步开发了token-pixel交叉注意力,以减轻繁重的计算。Long等人[134]提出了一种用于多视图图像深度估计的对极时空Transformer。给定包含一系列静态多视点帧的单个视频,首先将相邻帧连接起来,然后将对极线扭曲到中心相机空间中。最终得到的帧volume作为源数据,通过交叉注意力与中心帧进行融合。对于空间对齐的数据流,DRT[135]首先通过使用卷积层显式地建模不同数据流之间的关系图。随后将生成的map输入到双路径交叉注意力中,以并行构建局部和全局关系,从而可以收集更多的区域信息用于青光眼诊断。
Heterologous Stream
ViT在异源数据融合方面也表现出色,尤其是在视觉语言表示学习方面。尽管不同的任务可能采用不同的训练方案,例如监督/自监督学习或紧凑/大规模数据集,但论文仅根据其认知形式将其分为两类:1)视觉语言-预训练,包括视觉-语言预训练(VLP)[204]和对比语言-图像预训练(CLIP)[146];2)Visual Grounding如Phrase Grounding(PG)、参考表达理解(REC)。更多比较见表五。视觉-语言预训练:由于有限的标注数据,早期的VLP方法通常依赖于现成的目标检测器[204]和文本编码器[5]来提取数据特定的特征以进行联合分布学习。给定图像-文本对,在视觉基因组(VG)上预先训练的目标检测器[205]首先从图像中提取一组以目标为中心的RoI特征。然后将用作视觉标记的RoI特征与用于预定义任务预训练的文本嵌入合并。基本上,这些方法分为双流和单流融合。双流方法包括ViLBERT[137]、LXMERT[138]。单流方法包括VideoBERT[136]、VisualBERT[139]、VL-BERT[140]、UNITER[141]、Oscar[142]、Unified VLP[143]。然而,这些方法严重依赖于视觉提取器或其预定义的视觉词汇表,导致了降低VLP表达能力上限的瓶颈。一些算法如VinVL[145]、ViLT[144]、UniT[149]、SimVLM[150]尝试解决这个问题。除了传统的带有多任务监督的预训练方案外,另一条最新的对比学习路线已经开发出来。相关算法有CLIP[146]、ALIGN[148]、Data2Vec[151]。Visual Grounding:与VLP相比,Visual Grounding具有更具体的目标信号监督,其目标是根据目标对象的相应描述来定位目标对象。在图像空间中,Modulated DETR(MDETR)[152]将其先前的工作[30]扩展到phrase grounding预训练,该训练在一个描述中定位并将边界框分配给每个instance phrase。其他相关算法Referring Transformer[155]、VGTR[154]、TransVG[153]、LanguageRefer[157]、TransRefer3D[158]、MVT 2022[159]、TubeDETR[160]可以参考具体论文。
讨论和结论近期改进总结
对于分类,深度分层Transformer主干对于降低计算复杂度[41]和避免深层中的过平滑特征[37]、[42]、[66]、[67]是有效的。同时,早期卷积[39]足以捕获低层特征,这可以显著增强鲁棒性并降低浅层的计算复杂性。此外,卷积投影[54]、[55]和局部注意力机制[35]、[44]都可以改善ViT的局部性。前者[56]、[57]也可能是替代位置编码的新方法;
对于检测,Transformer neck从编码器-解码器结构中受益,其计算量比仅编码器Transformer 检测器少[87]。因此,解码器是必要的,但由于其收敛较慢,因此需要更多的空间先验[76],[80]–[85]。此外,前景采样的稀疏注意力[76]和评分网络[78]、[79]有助于降低计算成本并加速ViT的收敛;
对于分割,编码器-解码器Transformer模型可以通过一组可学习的mask embedding[31]、[103]、[202]将三个分割子任务统一为mask预测问题。这种box-free方法在多个基准测试中实现了最新的SOTA性能[202]。此外,特定的混合任务与基于框的ViT[100]级联,该模型在实例分割方面表现出了更高的性能;
对于3D视觉,具有评分网络的局部分层Transformer可以有效地从点云数据中提取特征。全局建模能力使Transformer能够轻松聚合曲面点,而不是复杂的局部设计。此外,ViT可以处理3D视觉识别中的多传感器数据,如多视图和多维数据;
视觉-语言预训练的主流方法已经逐渐放弃了预训练的检测器[144],并专注于基于大规模噪声数据集[148]的潜在空间中不同数据流之间的对齐[146]或相似性[151]。另一个问题是使下游视觉任务适应预训练方案,以进行zero-shot迁移[146];
最近流行的多传感器数据融合架构是单流方法,它在空间上连接不同的数据流并同时执行交互。基于单流模型,最近的许多工作致力于寻找一个潜在空间,使不同的数据流语义一致。
ViT的讨论
尽管ViT模型有了很大的发展,但“基本”理解仍然不够。因此,论文将重点审查一些关键问题,以获得深入和全面的理解。
Transformer如何弥合语言和视觉之间的鸿沟
Transformer最初是为机器翻译任务设计的[1],其中句子的每个单词都被视为表示高级语义信息的基本单元。这些词可以嵌入到低维向量空间中的表示中。对于视觉任务,图像的每个像素都不能携带语义信息,这与传统NLP任务中的特征嵌入不匹配。因此,将这种特征嵌入(即单词嵌入)转移到CV任务中的关键是构建图像到向量的转换并有效地保持图像的特征。例如,ViT[29]在强松弛条件下将图像转换为具有多个低层信息的patch嵌入。
Transformer、Self-Attention与CNN的关系
从CNN的角度来看,其inductive bias主要表现为局部性、平移不变性、权重共享和稀疏连接。这种简单的卷积内核可以在低级语义处理中高效地进行模板匹配,但由于过度的偏差,其上限低于Transformers。从self-attention机制的角度来看,当采用足够数量的head时,它们理论上可以表示任何卷积层[28]。这种完全注意力操作可以结合局部和全局注意力,并根据特征关系动态生成注意力权重。尽管如此,它的实用性仍然不如SOTA CNN,因为精度更低,计算成本更高。从Transformer的角度来看,Dong等人证明,当在没有short connection或FFN的深层上训练self-attention层时,self-attention表现出对“token uniformity”的强烈感应偏差[167]。可以得出结论,Transformer由两个关键组件组成:self-attention聚合token的关系,以及按位置的FFN从输入中提取特征。尽管ViT具有强大的全局建模能力,CNN可以有效地处理低级特征[39]、[58],增强ViT的局部性[53]、[81],并通过填充[56]、[57]、[172]附加位置特征。
不同视觉任务的可学习嵌入
各种可学习的嵌入被设计用于进行不同的视觉任务。从目标任务的角度来看,这些嵌入可以分为class token、object query和mask embedding。从结构上看,这些ViT主要采用两种不同的模式,编码器和编码器-解码器。如图15所示,每个结构由三个嵌入级别组成。在位置级别上,编码器Transformer中可学习嵌入的应用被分解为initial token[29]、[87]和later token[42]、[103],而可学习位置编码[30]、[81]、,[202]和可学习的解码器输入嵌入[76]被应用于编码器-解码器结构。在数量层面上,编码器仅设计应用不同数量的token。例如,ViT[29]、[40]家族和YOLOS[87]将不同数量的token添加到初始层中,而CaiT[42]和Segmenter[103]利用这些token来表示不同任务中最后几层的特征。在编码器-解码器结构中,解码器的可学习位置编码(object query[30]、[81]或mask embedding[202])被显式地加入到解码器输入[30],[202]或隐式地加入到解码器输入[80],[81]。与恒定输入不同,Deformable DETR[76]采用可学习嵌入作为输入,并关注编码器输出。
在多头注意力机制的启发下,使用多个初始token的策略有望进一步提高分类性能。然而,DeiT[40]指出,这些额外的token将朝着相同的结果收敛,并且不会对ViT有利。从另一个角度来看,YOLOS[87]提供了一种范例,通过使用多个初始token来统一分类和检测任务,但这种编码器的设计只会导致更高的计算复杂度。根据CaiT[42]的观察,较后的class token可以略微降低Transformer的FLOPs并提高性能(从79.9%提高到80.5%)。Segmenter[103]也展示了分割任务的策略效率。与具有多个后期token的仅编码器Transformer不同,编码器-解码器结构减少了计算成本。它通过使用一小组object query(mask embedding)在检测[30]和分割[202]领域标准化了ViT。通过组合后期token和object query(mask embedding),像Deformable DETR[76]这样的结构,它将object query和可学习解码器嵌入(相当于后期token)作为输入,可以将不同任务的可学习嵌入统一到Transformer编码器解码器中。
未来研究方向
ViT已经取得了重大进展,并取得了令人鼓舞的结果,在多个基准上接近甚至超过了SOTA CNN方法。然而,ViT的一些关键技术仍然不足以应对CV领域的复杂挑战。基于上述分析,论文指出了未来研究的一些有前景的研究方向。集合预测:由于损失函数的相同梯度,多类token将一致收敛[40]。具有二分损失函数的集合预测策略已广泛应用于ViT,用于许多密集预测任务[30],[202]。因此,自然要考虑分类任务的集合预测设计,例如,多类token Transformer通过集合预测预测混合patch中的图像,这与LV-ViT中的数据增强策略类似[43]。此外,集合预测策略中的一对一标签分配导致早期过程中的训练不稳定,这可能会降低最终结果的准确性。使用其他标签分配和损失改进集合预测可能有助于新的检测框架。自监督学习:Transformer的自监督预训练使NLP领域标准化,并在各种应用中取得巨大成功[2],[5]。由于自监督范式在CV领域的流行,卷积孪生网络使用对比学习来实现自监督预训练,这与NLP领域中使用的masked自动编码器不同。最近,一些研究试图设计自监督的ViT,以弥合视觉和语言之间的预训练方法的差异。它们中的大多数继承了NLP领域中的masked自动编码器或CV领域中的对比学习方案。ViT没有特定的监督方法,但它彻底改变了GPT-3等NLP任务。如前文所述,编码器-解码器结构可以通过联合学习解码器嵌入和位置编码来统一视觉任务。因此,值得进一步研究用于自监督学习的编码器-编码器Transformer。
结论
自从ViT证明了其在CV任务中的有效性之后,ViT受到了相当大的关注,并削弱了CNN在CV领域的主导地位。本文全面回顾了100多个ViT模型,这些模型相继应用于各种视觉任务(即分类、检测和分割)和数据流(如图像、点云、图像文本对和其他多个数据流)。对于每个视觉任务和数据流,提出了一种特定的分类法来组织最近开发的ViT,并在各种主流基准上进一步评估其性能。通过对所有这些现有方法的综合分析和系统比较,本文总结了显著的性能改进,还讨论了ViT的三个基本问题,并进一步提出了未来投资的几个潜在研究方向。我们希望这篇综述文章能帮助读者在决定进行深入探索之前更好地理解各种视觉Transformer。
#transformer~x2
太火了都说到第8了~~ 其实有点重复了 作为之前补充把
该怎么把预训练Transformer范式用到强化学习里?DeepMind提出「算法蒸馏」:可探索的预训练强化学习Transformer
sformer模型可以将prompt作为条件或上下文学习(in-context learning)适应不同的下游任务。
大型预训练Transformer模型的泛化能力已经在多个领域得到验证,如文本补全、语言理解、图像生成等等。
从去年开始,已经有相关工作证明,通过将离线强化学习(offline RL)视为一个序列预测问题,那么模型就可以从离线数据中学习策略。
但目前的方法要么是从不包含学习的数据中学习策略(如通过蒸馏固定的专家策略),要么是从包含学习的数据(如智能体的重放缓冲区)中学习,但由于其context太小,以至于无法捕捉到策略提升。
DeepMind的研究人员通过观察发现,原则上强化学习算法训练中学习的顺序性(sequential nature)可以将强化学习过程本身建模为一个「因果序列预测问题」。
具体来说,如果一个Transformer的上下文足够长到可以包含由于学习更新而产生的策略改进,那它应该不仅能够表示一个固定的策略,而且能够通过关注之前episodes的状态、行动和奖励表示为一个策略提升算子(policy improvement operator)。
这也提供了一种技术上的可行性,即任何RL算法都可以通过模仿学习蒸馏成一个足够强大的序列模型,并将其转化为一个in-context RL算法。
基于此,DeepMind提出了算法蒸馏(Algorithm Distillation, AD) ,通过建立因果序列模型将强化学习算法提取到神经网络中。
论文链接:https://arxiv.org/pdf/2210.14215.pdf
算法蒸馏将学习强化学习视为一个跨episode的序列预测问题,通过源RL算法生成一个学习历史数据集,然后根据学习历史作为上下文,通过自回归预测行为来训练因果Transformer。
与蒸馏后学习(post-learning)或专家序列的序列策略预测结构不同,AD能够在不更新其网络参数的情况下完全在上下文中改进其策略。
- Transfomer收集自己的数据,并在新任务上最大化奖励;
- 无需prompting或微调;
- 在权重冻结的情况下,Transformer可探索、利用和最大化上下文的返回(return)!诸如Gato类的专家蒸馏(Expert Distillation)方法无法探索,也无法最大化返回。
实验结果证明了AD可以在稀疏奖励、组合任务结构和基于像素观察的各种环境中进行强化学习,并且AD学习的数据效率(data-efficient)比生成源数据的RL算法更高。
AD也是第一个通过对具有模仿损失(imitation loss)的离线数据进行序列建模来展示in-context强化学习的方法。
算法蒸馏
2021年,有研究人员首先发现Transformer可以通过模仿学习从离线RL数据中学习单任务策略,随后又被扩展为可以在同域和跨域设置中提取多任务策略。
这些工作为提取通用的多任务策略提出了一个很有前景的范式:首先收集大量不同的环境互动数据集,然后通过序列建模从数据中提取一个策略。
把通过模仿学习从离线RL数据中学习策略的方法也称之为离线策略蒸馏,或者简称为策略蒸馏(Policy Distillation, PD)。
尽管PD的思路非常简单,并且十分易于扩展,但PD有一个重大的缺陷:生成的策略并没有从与环境的额外互动中得到提升。
例如,MultiGame Decision Transformer(MGDT)学习了一个可以玩大量Atari游戏的返回条件策略,而Gato通过上下文推断任务,学习了一个在不同环境中解决任务的策略,但这两种方法都不能通过试错来改进其策略。
MGDT通过微调模型的权重使变压器适应新的任务,而Gato则需要专家的示范提示才能适应新的任务。
简而言之,Policy Distillation方法学习政策而非强化学习算法。
研究人员假设Policy Distillation不能通过试错来改进的原因是,它在没有显示学习进展的数据上进行训练。
算法蒸馏(AD)通过优化一个RL算法的学习历史上的因果序列预测损失来学习内涵式策略改进算子的方法。
AD包括两个组成部分:
1、通过保存一个RL算法在许多单独任务上的训练历史,生成一个大型的多任务数据集;
2、将Transformer使用前面的学习历史作为其背景对行动进行因果建模。
由于策略在源RL算法的整个训练过程中不断改进,AD必须得学习如何改进算子,才能准确模拟训练历史中任何给定点的行动。
最重要的是,Transformer的上下文大小必须足够大(即跨周期),以捕捉训练数据的改进。
在实验部分,为了探索AD在in-context RL能力上的优势,研究人员把重点放在预训练后不能通过zero-shot 泛化解决的环境上,即要求每个环境支持多种任务,且模型无法轻易地从观察中推断出任务的解决方案。同时episodes需要足够短以便可以训练跨episode的因果Transformer。
在四个环境Adversarial Bandit、Dark Room、Dark Key-to-Door、DMLab Watermaze的实验结果中可以看到,通过模仿基于梯度的RL算法,使用具有足够大上下文的因果Transformer,AD可以完全在上下文中强化学习新任务。
AD能够进行in-context中的探索、时间上的信用分配和泛化,AD学习的算法比产生Transformer训练的源数据的算法更有数据效率。
算法蒸馏的实验表明,Transformer可以通过试错自主改善模型,并且不用更新权重,无需提示、也无需微调。单个Transformer可以收集自己的数据,并在新任务上将奖励最大化。
尽管目前已经有很多成功的模型展示了Transformer如何在上下文中学习,但Transformer还没有被证明可以在上下文中强化学习。
为了适应新的任务,开发者要么需要手动指定一个提示,要么需要调整模型。
如果Transformer可以适应强化学习,做到开箱即用岂不美哉?
但Decision Transformers或者Gato只能从离线数据中学习策略,无法通过反复实验自动改进。
使用算法蒸馏(AD)的预训练方法生成的Transformer可以在上下文中强化学习。
首先训练一个强化学习算法的多个副本来解决不同的任务和保存学习历史。
一旦收集完学习历史的数据集,就可以训练一个Transformer来预测之前的学习历史的行动。
由于策略在历史上有所改进,因此准确地预测行动将会迫使Transformer对策略提升进行建模。
整个过程就是这么简单,Transformer只是通过模仿动作来训练,没有像常见的强化学习模型所用的Q值,没有长的操作-动作-奖励序列,也没有像 DTs 那样的返回条件。
在上下文中,强化学习没有额外开销,然后通过观察 AD 是否能最大化新任务的奖励来评估模型。
Transformer探索、利用、并最大化返回在上下文时,它的权重是冻结的!
另一方面,专家蒸馏(最类似于Gato)不能探索,也不能最大化回报。
AD 可以提取任何 RL 算法,研究人员尝试了 UCB、DQNA2C,一个有趣的发现是,在上下文 RL 算法学习中,AD更有数据效率。
用户还可以输入prompt和次优的demo,模型会自动进行策略提升,直到获得最优解!
而专家蒸馏ED只能维持次优的demo表现。
只有当Transformer的上下文足够长,跨越多个episode时,上下文RL才会出现。
AD需要一个足够长的历史,以进行有效的模型改进和identify任务。
通过实验,研究人员得出以下结论:
- Transformer可以在上下文中进行 RL
- 带 AD 的上下文 RL 算法比基于梯度的源 RL 算法更有效
- AD提升了次优策略
- in-context强化学习产生于长上下文的模仿学习
#transformer~x3
太强了都连载14了~~ 这次是无残差连接或归一化层,也能成功训练深度
尽管取得了很多显著的成就,但训练深度神经网络(DNN)的实践进展在很大程度上独立于理论依据。大多数成功的现代 DNN 依赖残差连接和归一化层的特定排列,但如何在新架构中使用这些组件的一般原则仍然未知,并且它们在现有架构中的作用也依然未能完全搞清楚。
残差架构是最流行和成功的,最初是在卷积神经网络(CNN)的背景下开发的,后来自注意力网络中产生了无处不在的 transformer 架构。残差架构之所以取得成功,一种原因是与普通 DNN 相比具有更好的信号传播能力,其中信号传播指的是几何信息通过 DNN 层的传输,并由内核函数表示。
最近,使用信号传播原则来训练更深度的 DNN 并且残差架构中没有残差连接和 / 或归一化层的参与,成为了社区感兴趣的领域。原因有两个:首先验证了残差架构有效性的信号传播假设,从而阐明对 DNN 可解释性的理解;其次这可能会实现超越残差范式的 DNN 可训练性的一般原则和方法。
对于 CNN,Xiao et al. (2018)的工作表明,通过更好初始化提升的信号传播能够高效地训练普通深度网络,尽管与残差网络比速度显著降低。Martens et al. (2021) 的工作提出了 Deep Kernel Shaping (DKS),使用激活函数转换来控制信号传播,使用 K-FAC 等强二阶优化器在 ImageNet 上实现了普通网络和残差网络的训练速度相等。Zhang et al. (2022) 的工作将 DKS 扩展到了更大类的激活函数,在泛化方面也实现了接近相等。
信号传播中需要分析的关键量是 DNN 的初始化时间内核,或者更准确地说,是无限宽度限制下的近似内核。对于多层感知机(MLP)以及使用 Delta 初始化的 CNN,该内核可以编写为仅包含 2D 函数的简单层递归,以便于进行直接分析。跨层 transformer 的内核演化更加复杂,因此 DKS 等现有方法不适用 transformer 或实际上任何包含自注意力层的架构。
在 MLP 中,信号传播是通过查看(一维)内核的行为来判断的,而 transformer 中的信号传播可以通过查看(高维)内核矩阵在网络层中的演化来判断。
该研究必须避免一种情况:对角线元素随深度增加快速增长或收缩,这与不受控制的激活范数有关,可能导致饱和损失或数值问题。避免秩崩溃(rank collapse)对于深度 transformer 的可训练性是必要的,而是否可以训练深度无残差 transformer 仍是一个悬而未决的问题。
ICLR 2023 盲审阶段的这篇论文解决了这个问题,首次证明了无需残差连接或归一化层时也可能成功训练深度 transformer。为此,他们研究了深度无残差 transformer 中的信号传播和秩崩溃问题,并推导出三种方法来阻止它们。具体而言,方法中使用了以下组合:参数初始化、偏置矩阵和位置相关的重缩放,并强调了 transformer 中信号传播特有的几种复杂性,包括与位置编码和因果掩蔽的交互。研究者实证证明了他们的方法可以生成可训练的深度无残差 transformer。
在实验部分,在 WikiText-103 和 C4 数据集上,研究者展示了使用他们主要的方法——指数信号保持注意力(Exponential Signal Preserving Attention, E-SPA),可以通过延长大约五倍的训练时间使得标准 transformer 与文中无残差 transformer 的训练损失相当。此外通过将这一方法与残差连接结合,研究者还表明无归一化层的 transformer 能够实现与标准 transformer 相当的训练速度。
论文地址:https://openreview.net/pdf?id=NPrsUQgMjKK
对于这篇论文,Google AI 首席工程师 Rohan Anil 认为是 Transformer 架构向前迈出的一大步,还是一个基础性的改进。
构造无捷径可训练的深层 Transformer
迄今为止,纠正 Transformer 秩崩溃(rank collapse)的唯一策略依赖于残差连接,该方式跳过了自注意力层固有的可训练性问题。与此相反,该研究直接解决这个问题。首先通过注意力层更好地理解信号传播,然后根据见解(insights)进行修改,以在深度 transformer 中实现对忠实信号的传输,无论是否使用残差连接,都可以对信号进行训练。
具体而言,首先,该研究对仅存在注意力的深度 vanilla transformer 进行了一下简单设置,之后他们假设该 transformer 具有单一头(h = 1)设置或具有多头设置,其中注意力矩阵 A 在不同头之间不会变化。如果块 l≤L 初始化时有注意力矩阵 A_l,则最终块的表示形式为 X_L:
在接下来的 3.1 和 3.2 节中,该研究专注于寻找满足上述需求的注意力矩阵,他们提出了 3 种方法 E-SPA、U-SPA 和 Value-Skipinit,每种方法都用来控制 transformer 的注意力矩阵,即使在很深的深度也能实现忠实的信号传播。此外,3.3 节演示了如何修改 softmax 注意力以实现这些注意力矩阵。
下图中,该研究对提出的两个 SPA 方案进行了验证,U-SPA 和 E-SPA,结果显示即使在网络较深时也能成功地避免仅注意力 vanilla transformers 中的秩崩溃现象。
实验
WikiText-103 基线:首先,该研究验证了没有残差连接的标准深度 transformer 是不可训练的,即使它们有归一化层 (LN) 和 transformed 激活,但本文的方法可以解决这个问题。如图 2 所示,可以清楚地看到,从标准 transformer 中移除残差连接使其不可训练,训练损失稳定在 7.5 左右。正如图 1 所示,标准 transformer 遭受了秩崩溃。
另一方面,该研究提出的 E-SPA 方法优于 U-SPA 和 Value-Skipinit。然而,与本文无残差方法相比,带有残差和 LN 的默认 transformer 仍然保持训练速度优势。在表 1 中,该研究使用提出的方法评估了 MLP 块中不同激活函数的影响,以及 LN 在无残差 transformer 的使用。可以看到在深度为 36 处,本文方法针对一系列激活实现了良好的训练性能:DKS-transformed GeLU、TAT-transformed Leaky ReLU 以及 untransformed GeLU ,但不是 untransformed Sigmoid。通过实验还看到,层归一化对于训练速度而言相对不重要,甚至在使用 SPA 时对 transformed activation 的激活有害,因为 SPA 已经具有控制激活规范的内置机制。
在图 3 中,我们看到一种不需要更多迭代就能匹配默认 transformer 训练损失的方法是使用归一化残差连接。
表 2 显示带有归一化残差和 LN 的 E-SPA 优于默认的 PreLN transformer。
下图 4(a)表明 E-SPA 再次优于其他方法;4(b)表明训练损失差距可以通过简单地增加训练时间来消除。
#transformer~x4
最近Transformer文章太多了 索性一起发了得~~ 以后关于这个的都不单发了
如何提高ViT的效率?可以是让模型更容易训练,减少训练时间,也可以减少模型部署在硬件上的功耗等等。本文主要讲inference time的效率问题,简单说就是如何让模型更快,同时性能不掉太多甚至反升。
如何提高ViT的效率?可以是让模型更容易训练,减少训练时间,也可以减少模型部署在硬件上的功耗等等。本文主要讲inference time的效率问题,简单说就是如何让模型更快,同时性能不掉太多甚至反升。
背景
2021开年后,Transformer在CV任务中大放光彩,Google的初版Vision Transformer(ViT)虽然方法简单,但通过大量的实验证明了Transformer在计算机视觉(CV)任务上,特别是image classification上的可能性。论文展示,ViT经过large-scale pretrain之后在ImageNet上可以达到和CNN媲美的性能。
然而,CV的任务可不止image classification,给一个图片预测一个label就结束了。对于大量dense prediction的任务而言, 比如object detection和segmentation,Transformer都有其局限性,而其中最关键的有两点,
缺少金字塔特征(Pyramid Feature Map)。 层级特征对物体的检测很重要,特别是小物体,因为feature map的scale如果比较小的话,小物体相当于直接被忽视了。常见的CNN,如ResNet将网络划分四个stage,每个stage处理一种scale的feature map, 如1/4,1/8, 1/16,1/32。这样出来的层级特征可以送入FPN进行处理,然后作为输入给detection或者segmentation的head。而ViT只处理1/16这个scale下的feature map,直观上来看是对dense prediction任务不利的。
Multi-head Self-attention(MSA)计算开销问题。 MSA是一个quadtic complexity的模块,小图还好,但是遇到分辨率大的时候,无论是显存占用还是计算速度都会大打折扣。然而像detection和segmentation这种任务,图片一般都比较大,如512x512。按照ViT的patch embedding划分,图片会分成 (512/16)x (512/16) = 1024。此时ViT-Base的单层MSA会消耗4G FLOPs。然而整个ResNet-50也才消耗4G FLOPs. 因此MSA的计算开销限制了ViT在高分辨率图像上的效率。
对于第一个问题,一个自然的想法就是给ViT引入pyramid feature map, 这也是ICCV 2021积极涌现的idea,如Swin, PVT。然而,引入结构上的hierarchy造成了前期feature map的scale比较大,此时MSA的计算开销上涨。这使得efficient attention在ViT上成为了必需品,正如Swin用到的local window attention和PVT的spatial reduction attention,当然后面有更多的architecture,更多的attention,在此就不一一举例了。
自此,ViT适配下游任务已经基本没有了大的障碍。大致结构上和CNN保持一致,如划分stage,逐渐对feature map做downsampling。得益于attention的结构, ViT在各个task上性能都保证的不错。那接下来的主要问题就是对ViT在CV任务中进行优化。
什么最影响ViT的速度?
影响一个模型速度的东西无非是两个大方面,一是结构,二是处理的数据规模,剩下基本是工程上的优化。从个人观点来看,对于ViT来说,影响结构效率的有两个,
Efficient General Architecture. 整体结构上的设计需要变得有效并且scalable
Efficient Multi-head Self-attention. 注意力机制必须足够efficient
对于处理的数据规模问题,这个CNN也有,但有一个明显区别于CNN的是,ViT对input是permutation-invariant的,只要加入了positional encoding就可以无视2D spatial order。所以针对ViT而言,减少input tokens是可以做推理加速的,如本人在ICCV 2021上的工作HVT: Scalable Vision Transformers with Hierarchical Pooling(https://arxiv.org/abs/2103.10619)。
结构上怎么设计最合理?- LITv1
HVT之后,我们曾经的一个想法是进一步对token做一个dynamic的选取,因为直觉上来讲dynamic要比unifrom的pooling要好,了解这一领域的同学可能有点耳熟,没错,这个思路就是DynamicViT(https://arxiv.org/abs/2106.02034)。
然而,实验过程中的一个发现,使得我们展现给大家的是LIT, Less is More: Pay Less Attention in Vision Transformers(https://arxiv.org/abs/2105.14217) (AAAI 2022)。
和DynamicViT利用pretrained weights和plain ViT不一样,我们直接从hierarchical Vision Transformer入手并且train from scratch,如PVT,用几层FC对前两个stage中每个block的input tokens做一个dynamic的选取,使得前期MSA只需要处理1/4, 1/8 scale下选取的部分token。这个思路听起来感觉没什么问题,可视化效果也确实不错,如下面是去年基于PVT-S做sparse选取token做的一个可视化:
虽然但是,当我们对比random sampling的baseline时,发现性能差距并不大,一番分析之后,我们直接训练了一个完整的基于原始MSA的PVT-Small,通过可视化attention head, 我们发现前期的head只能关注于很小的local区域,尤其是第一个stage的MSA,attention weight基本都在关注自己,我们进一步在论文给出了理论上的解释。
基于这个发现,我们做了一个在当时来看(2021.05)比较大胆的决定,直接拿掉前两个stage的所有MSA layer,这样前期的Transformer block中只剩下了FFN, 而后期的两个stage直接采用最原始的MSA。这使得我们模型的整体结构看起来非常简单,如下面所示。
我们把这种设计原则在Swin Transformer和PVT上做了验证,结果显示这种方案不仅不降性能,还因为避开了前期MSA的计算开销,减小了理论复杂度,大幅度加快了推理速度。
Model | Params (M) | FLOPs (G) | Throughputs (imgs/s) | ImageNet@Top-1 |
PVT-S | 25 | 3.8 | 1,058 | 79.8 |
PVT-S w/ remove early MSAs | 19 | 3.6 | 1,388 | 80.4 |
Swin-Ti | 28 | 4.5 | 960 | 81.3 |
Swin-Ti w/ remove early MSAs | 27 | 4.1 | 1,444 | 81.3 |
另外我们在LIT中提出了一个Deformable Token Merging module (DTM),使得feature map在下采样时可以动态的根据前景信息对token做选取。经过可视化发现学习到的offset十分精准地捕捉到了前景物体信息。相关可视化代码已公开在https://github.com/ziplab/LIT。
上面每张图片中,绿框代表最后一个scale下(1/32)的某个位置的token,红色点表示DTM在downsample时最终选取的1/4 scale的token
阶段总结: LIT在结构上主要陈述了一个事情,backbone前期采用MSA的效益并不高。即使是擅长global attention的MSA也依然重点关注local区域,何况前面的feature map比较大,MSA处理高分辨图像的开销很大,即使采用efficient attention也难以避开这部分计算。
所以我们看到后来的Uniformer, MobileViT,EfficientFormer都是这种前面local后面global的结构。想要快,前面还是得尽量避开MSA。
Architecture和Attention一起优化 - LITv2
在前期的工作中,我们定下了ViT的Architecture设计原则,但第一版LIT有两个问题影响实际推理速度,
RPE虽然能涨点,但对于LIT来说,由于后面需要动态根据input大小做插值,所以对速度影响很大。
后两个stage的原始MSA针对高分图像还是会有很大的计算开销。
基于此,我们提出了LITv2:Fast Vision Transformers with HiLo Attention(https://arxiv.org/abs/2205.13213) (NeurIPS 2022), 主要对LIT做了两点改进,
去掉了relative positional encoding (RPE), FFN中加入depthwise convolution来引入conditional positional embedding。通过引入depthwise conv不仅能引入positional encoding, 还能同时增大网络前期的receptive field。(因为LIT前面两个stage只有FFN)
换上了全新的attention方法,HiLo。
Attention还能更快
直接影响ViT在高分辨率图像上的效率的还是attention。从21年到现在,这一领域已经针对ViT提出了不少attention的变种,如SRA(https://arxiv.org/abs/2102.12122)(ICCV-21),local window(https://arxiv.org/abs/2103.14030)(ICCV-21), focal attention(https://arxiv.org/abs/2107.00641)(NeurIPS-21), QuadTree(https://arxiv.org/abs/2201.02767) (ICLR-22)。和MSA相比,这些方法都能保证更优的理论复杂度。但是我们注意到FLOPs只能反映理论复杂度,而真正想在CV任务中beat过纯CNN的话,除了性能,实测速度也十分关键,因为理论复杂度并不能反应GPU和CPU上的实际速度。影响实测throughput/latency的还有memory access cost和其他难以被统计进FLOPs的因素,如for-loop。
以实测速度为核心,我们在LITv2中提出了HiLo。HiLo的设计理念很简单: 在信号处理中,高频关注local detail, 因此就用部分head做local window attention去捕获,而低频关注global structure,对local detail并不太在乎,所以另一部分head只需处理average pool的低频信号,这样高低频同时捕捉,实现单层MSA同时抓取local和global信息。相对应的branch,我将它命名为Hi-Fi和Lo-Fi,如下图所示。
为了保证实际速度,HiLo避开了一些不能算到FLOPs但损害速度的运算,如overlapping window和interpolation。基于此,HiLo在实测速度,memory占用,以及性能上都超越了SOTA方法。
在CPU和GPU上,单层HiLo的推理速度非常快
上图的测试结果可以参考我的vit-attention-benchmark(https://github.com/HubHop/vit-attention-benchmark)仓库。
又快,又好,又容易训练的LITv2
LITv2共推出了三个变种,small, medium, base, 为了公平对比,三个模型的宽度和深度和Swin Transformer一样,超参seed一点没调。LITv2整体在ImageNet-1K上效果占优,同时降低了训练显存要求,推理速度更快。
由于资源实在有限,对比Swin-Large和ImageNet-22k上的setting确实没法跑。。。。
另外我们在多个GPU平台上测试了推理速度(来自reviewer的意见)。对比ResNet-50和其他11个最近的ViT模型,相似参数量下,LITv2-S在速度和理论复杂度上实现了全面超越,同时ImageNet的Top-1 accuracy在第一梯队。
上面关于LITv2的Speed测试和运行示例都已公开在:https://github.com/ziplab/LITv2,欢迎大家尝试。
未来还能做什么
Vision Transformer的故事还在继续,今年NeurIPS投稿也能看到大家陆续也在关注实测速度了,如TRT ViT,EfficientFormer, 但实际上ViT的工业落地相比CNN可能还是会有障碍。如量化上,ViT还是在低bit上还有很大提升空间。除此之外,我们组(https://ziplab.github.io/)也在探索Transformer的其他efficiency问题,比如
ViT的Training efficiency还有很大的空间。 ViT普遍难训练,需要的显存大,训练时间长。特别是backbone的公认setting是1024的batch size + 8 GPUs,使得很多小组连ViT跑都跑不起来(8卡 32GB V100不是所有人都有的),针对这一问题我们提出了一个针对Transformer的一个memory-efficient的训练框架: Mesa: A Memory-saving Training Framework for Transformers(https:arxiv.org/abs/2111.11124). 和普通训练相比,Mesa可以做到显存节省一半,同时与checkpointing和gradient accumulation等技术方案不冲突。
Transformer的能源消耗也是一个问题,特别是当下很多大组在跑以Transformer为backbone的大模型,训练时所造成的电力损耗,碳排放对Green AI这一长远目标不利。针对Energy efficiency,我们组在NeurIPS 2022最新的工作 EcoFormer: Energy-Saving Attention with Linear Complexity(https://arxiv.org/abs/2209.09004) 提出了一个Transformer二值化的全新方案,全新设计的EcoFormer是一个general的efficient attention, 性能和功耗上都优于一众线性复杂度的Linformer, Performer等,同时在45nm CMOS microcontroller上能耗更低,速度更快。
至于CNN和Transformer哪个好的问题,这个答案其实不必再过多讨论了,因为两者互补。通过合理地配置CNN和MSA在Backbone中的位置,可以让网络得到双倍的快乐。更不用说Convolution和MSA两者之间本身存在一种联系,比如我们组的另一篇工作:Pruning Self-attentions into Convolutional Layers in Single Path(https://arxiv.org/abs/2111.11802), 巧妙地通过参数共享将计算复杂度较高的attention layer剪成更为efficient的convolutional layer,工程细节可以参考:https://github.com/ziplab/SPViT。
个人主页:Zizheng Pan:https://link.zhihu.com/?target=https%3A//zizhengpan.github.io/
下面在说一下torch创始人的看法
2017 年 Transformer 首次亮相,便迅速在 AI 领域扩散开来,CV、NLP 等任务都有其身影,越来越多的研究人员投入其中。
要说 Transformer 有多厉害,比如 OpenAI 重磅推出的 GPT-3,就是基于 Transformer 实现的。至于传播速度方面,短短 5 年,Transformer 便在 TensorFlow 、PyTorch 等主流深度学习框架支持的 AI 程序中占据一席之地。
可别小看这 5 年,假如我们把机器学习比作一个世界,毫不夸张地说,它们的 5 年相当于我们的半个世纪。
不过与高调宣传 Transformer 的学者不同,这次 PyTorch 创始人、Meta 杰出工程师 Soumith Chintala 却唱起了反调,并警告说,Transformer 如此流行,可能是一把双刃剑,Transformer太火很不好,AI易撞墙。
他认为,到今天为止, Transformer 已经 5 年了,这期间还没有可替代的研究出现。他表示,对占主导地位的 AI 方法(此处指 Transformer)的强烈认可,可能会产生意想不到的后果,越来越多的 Transformer 专用硬件可能会使新策略更难以流行。
看吧一个阿三大哥... 他们还是挺厉害的 其实
至于 Soumith Chintala 为何会有上述结论,他首先从硬件进行举例。
专用 AI 硬件不断出现,其他技术将很难出头
Transformer 自从在论文《 Attention Is All You Need 》中被首次提出,之后便在很多地方都能看到它的身影。
相应地,为 AI 定制专门的硬件开始流行起来。在 GPU 方面,英伟达一直占据重要地位,他们还发布了一个名为 Hopper 的架构,其名称来自于计算机科学先驱 Grace Hopper,该架构专门用于 Transformer。
英伟达甚至还基于 Transformer,专门优化了 H100 加速卡的设计,提出了 Transformer Engine,它集合了新的 Tensor Core、FP8 和 FP16 精度计算,以及 Transformer 神经网络动态处理能力,可以将此类机器学习模型的训练时间从几周缩短到几天。
Transformer Engine 使用每层统计分析来确定模型每一层的最佳精度(FP16 或 FP8),在保持模型准确率的同时实现最佳性能。
英伟达首席执行官黄仁勋在最近的财报电话会议上表示,Hopper 将是其战略的重要组成部分(不过,可以肯定的是,英伟达是一家规模庞大的公司,其产品远不止 Hopper)。黄仁勋还表示:预计 Hopper 将成为未来增长的下一个跳板。他还表示 Transformer 这个新模型的重要性不能被低估,也不能被夸大。
不过,英伟达一方面推出了专为 Transformer 设计的产品,同时也提供了一系列适合多种不同型号的产品,而且可能已经为新技术的出现做好了准备。尽管如此,硬件专业化仍存在锁定现代用例的风险,而不是启用新兴用例。
Chintala 对此表示,如果像英伟达这样的供应商将硬件定制得更适用于当前范式,那么其他想法将更难出头。
不止硬件,更多定制和特定于领域的技术不断出现,如谷歌的张量处理单元、Cerebras Wafer Scale 引擎等都被提出来,这进一步限制了其他技术的发展。
Chintala 还提到,最近一段时间,AI 圈一直流行着这样一种说法「PyTorch 在受欢迎程度上超越谷歌的 TensorFlow 」,对于这一结论,Chintala 是拒绝的。
Chintala 表示,PyTorch 不是为了抢走 TensorFlow 的「午餐」而诞生的,它们有各自的优点,这两种框架各自擅长不同的任务。在研究界,PyTorch 有很好的市场份额,但在其他领域,就很难说了。
不过,谷歌也意识到了 PyTorch 的威胁,他们悄悄地开发一个机器学习框架,JAX(曾是「Just After eXecution」的首字母缩写,但官方说法中不再代表任何东西),许多人将其视为 TensorFlow 的继承者。
曾一度有传言说谷歌大脑和 DeepMind 在很大程度上放弃了 TensorFlow,转而使用 JAX。谷歌很快出来打假,表示「我们继续开发 TensorFlow ,并将其作为一流的应用 ML 平台,与 JAX 并肩推动 ML 研究发展。」
至于 JAX,其擅长将复杂的机器学习任务分散到多个硬件上,极大地简化了现有工具,使其更容易管理日益庞大的机器学习问题。
Chintala 表示:「我们正在向 JAX 学习,我们也在 PyTorch 中添加了这些内容。显然,JAX 在某些方面做得更好。Pytorch 确实擅长很多事情,这就是它成为主流的原因,人们用它可以做很多事情。但作为主流框架并不意味着它可以覆盖所有内容。」
-----
上面提到了.DeepMind 这里仔细说瞎
强化学习发现矩阵乘法算法,DeepMind再登Nature封面推出AlphaTensor
DeepMind 的 Alpha 系列 AI 智能体家族又多了一个成员——AlphaTensor,这次是用来发现算法。
数千年来,算法一直在帮助数学家们进行基本运算。早在很久之前,古埃及人就发明了一种不需要乘法表就能将两个数字相乘的算法。希腊数学家欧几里得描述了一种计算最大公约数的算法,这种算法至今仍在使用。在伊斯兰的黄金时代,波斯数学家 Muhammad ibn Musa al-Khwarizmi 设计了一种求解线性方程和二次方程的新算法,这些算法都对后来的研究产生了深远的影响。
事实上,算法一词的出现,有这样一种说法:波斯数学家 Muhammad ibn Musa al-Khwarizmi 名字中的 al-Khwarizmi 一词翻译为拉丁语为 Algoritmi 的意思,从而引出了算法一词。不过,虽然今天我们对算法很熟悉,可以从课堂中学习、在科研领域也经常遇到,似乎整个社会都在使用算法,然而发现新算法的过程是非常困难的。
现在,DeepMind 用 AI 来发现新算法。
在最新一期 Nature 封面论文《Discovering faster matrix multiplication algorithms with reinforcement learning》中,DeepMind 提出了 AlphaTensor,并表示它是第一个可用于为矩阵乘法等基本任务发现新颖、高效且可证明正确的算法的人工智能系统。简单来说,使用 AlphaTensor 能够发现新算法。这项研究揭示了 50 年来在数学领域一个悬而未决的问题,即找到两个矩阵相乘最快方法。
论文地址 :https://www.nature.com/articles/s41586-022-05172-4
GitHub 地址:https://github.com/deepmind/alphatensor
AlphaTensor 建立在 AlphaZero 的基础上,而 AlphaZero 是一种在国际象棋、围棋和将棋等棋盘游戏中可以打败人类的智能体。这项工作展示了 AlphaZero 从用于游戏到首次用于解决未解决的数学问题的一次转变。
矩阵乘法
矩阵乘法是代数中最简单的运算之一,通常在高中数学课上教授。但在课堂之外,这种不起眼的数学运算在当代数字世界中产生了巨大的影响,在现代计算中无处不在。
两个 3x3 矩阵相乘的例子。
你可能没注意到,我们生活中处处隐藏着矩阵相乘,如智能手机中的图像处理、识别语音命令、为电脑游戏生成图形等都有它在背后进行运算。遍布世界各地的公司都愿意花费大量的时间和金钱开发计算硬件以有效地解决矩阵相乘。因此,即使是对矩阵乘法效率的微小改进也会产生广泛的影响。
几个世纪以来,数学家认为标准矩阵乘法算法是效率最高的算法。但在 1969 年,德国数学家 Volken Strassen 通过证明确实存在更好的算法,这一研究震惊了整个数学界。
标准算法与 Strassen 算法对比,后者少进行了一次乘法运算,为 7 次,而前者需要 8 次,整体效率大幅提高。
通过研究非常小的矩阵(大小为 2x2),Strassen 发现了一种巧妙的方法来组合矩阵的项以产生更快的算法。之后数十年,研究者都在研究更大的矩阵,甚至找到 3x3 矩阵相乘的高效方法,都还没有解决。
DeepMind 的最新研究探讨了现代 AI 技术如何推动新矩阵乘法算法的自动发现。基于人类直觉(human intuition)的进步,对于更大的矩阵来说,AlphaTensor 发现的算法比许多 SOTA 方法更有效。该研究表明 AI 设计的算法优于人类设计的算法,这是算法发现领域向前迈出的重要一步。
算法发现自动化的过程和进展
首先将发现矩阵乘法高效算法的问题转换为单人游戏。其中,board 是一个三维度张量(数字数组),用于捕捉当前算法的正确程度。通过一组与算法指令相对应的所允许的移动,玩家尝试修改张量并将其条目归零。
当玩家设法这样做时,将为任何一对矩阵生成可证明是正确的矩阵乘法算法,并且其效率由将张量清零所采取的步骤数来衡量。
这个游戏非常具有挑战性,要考虑的可能算法的数量远远大于宇宙中原子的数量,即使对于矩阵乘法这样小的情况也是如此。与几十年来一直是人工智能挑战的围棋游戏相比,该游戏每一步可能的移动数量要多 30 个数量级(DeepMind 考虑的一种设置是 10^33 以上。)
为了解决这个与传统游戏明显不同的领域所面临的挑战,DeepMind 开发了多个关键组件,包括一个结合特定问题归纳偏置的全新神经网络架构、一个生成有用合成数据的程序以及一种利用问题对称性的方法。
接着,DeepMind 训练了一个利用强化学习的智能体 AlphaTensor 来玩这个游戏,该智能体在开始时没有任何现有矩阵乘法算法的知识。通过学习,AlphaTensor 随时间逐渐地改进,重新发现了历史上的快速矩阵算法(如 Strassen 算法),并且发现算法的速度比以往已知的要快。
AlphaTensor 玩的单人游戏,目标是找到正确的矩阵乘法算法。游戏状态是一个由数字组成的立方数组(灰色表示 0,蓝色表示 1,绿色表示 - 1),它代表了要完成的剩余工作。
举例而言,如果学校里教的传统算法可以使用 100 次乘法完成 4x5 与 5x5 矩阵相乘,通过人类的聪明才智可以将这一数字降至 80 次。与之相比,AlphaTensor 发现的算法只需使用 76 次乘法即可完成相同的运算,如下图所示。
除了上述例子之外,AlphaTensor 发现的算法还首次在一个有限域中改进了 Strassen 的二阶算法。这些用于小矩阵相乘的算法可以当做原语来乘以任意大小的更大矩阵。
AlphaTensor 还发现了具有 SOTA 复杂性的多样化算法集,其中每种大小的矩阵乘法算法多达数千,表明矩阵乘法算法的空间比以前想象的要丰富。
在这个丰富空间中的算法具有不同的数学和实用属性。利用这种多样性,DeepMind 对 AlphaTensor 进行了调整,以专门发现在给定硬件(如 Nvidia V100 GPU、Google TPU v2)上运行速度快的算法。这些算法在相同硬件上进行大矩阵相乘的速度比常用算法快了 10-20%,表明了 AlphaTensor 在优化任意目标方面具备了灵活性。
AlphaTensor 具有一个对应于算法运行时的目标。当发现正确的矩阵乘法算法时,它会在指定硬件上进行基准测试,然后反馈给 AlphaTensor,以便在指定硬件上学习更高效的算法。
对未来研究和应用的影响
从数学的角度来看,对于旨在确定解决计算问题的最快算法的复杂性理论而言,DeepMind 的结果可以指导它的进一步研究。通过较以往方法更高效地探索可能的算法空间,AlphaTensor 有助于加深我们对矩阵乘法算法丰富性的理解。
此外,由于矩阵乘法是计算机图形学、数字通信、神经网络训练和科学计算等很多计算任务的核心组成部分,AlphaTensor 发现的算法可以显著提升这些领域的计算效率。
虽然本文只专注于矩阵乘法这一特定问题,但 DeepMind 希望能够启发更多的人使用 AI 来指导其他基础计算任务的算法发现。并且,DeepMind 的研究还表明,AlphaZero 这种强大的算法远远超出了传统游戏的领域,可以帮助解决数学领域的开放问题。
未来,DeepMind 希望基于他们的研究,更多地将人工智能用来帮助社会解决数学和科学领域的一些最重要的挑战。
#IPMT
什么都不说了 都12级了~~ 通过设计的中间原型挖掘Transformer并采取迭代的方式使用中间原型来聚合来自于支持图像的确定性类型信息和查询图像的自适应的类别信息。方法简单但却高效,该方法在两个小样本语义分割基准数据集上大大优于以前的最新结果。
本文简要介绍关于小样本语义分割的论文《Intermediate Prototype Mining Transformer for Few-Shot Semantic Segmentation》。该论文针对现有研究中忽视查询和支持图像之间因类内多样性而带来的类别信息的差距,而强行将支持图片的类别信息迁移到查询图片中带来的分割效率低下的问题,引入了一个中间原型,用于从支持中挖掘确定性类别信息和从查询中挖掘自适应类别知识,并因此设计了一个中间原型挖掘Transformer。
文章在每一层中实现将支持和查询特征中的类型信息到中间原型的传播,然后利用该中间原型来激活查询特征图。借助Transformer迭代的特性,使得中间原型和查询特征都可以逐步改进。
论文链接:https://arxiv.org/abs/2210.06780
代码链接:https://github.com/LIUYUANWEI98/IPMT
目前在计算机视觉取得的巨大进展在很大程度上依赖于大量带标注的数据,然而收集这些数据是一项耗时耗力的工作。为了解决这个问题,通过小样本学习来学习一个模型,并将该模型可以推广到只有少数标注图像的新类别。这种设置也更接近人类的学习习惯,即可以从稀缺标注的示例中学习知识并快速识别新类别。
本文专注于小样本学习在语义分割上的应用,即小样本语义分割。该任务旨在用一些带标注的支持样本来分割查询图像中的目标物体。然而,目前的研究方法都严重依赖从支持集中提取的类别信息。尽管支持样本能提供确定性的类别信息指导,但大家都忽略了查询和支持样本之间可能存在固有的类内多样性。
在图1中,展示了一些支持样本原型和查询图像原型的分布。从图中可以观察到,对于与查询图像相似的支持图像(在右侧标记为“相似支持图像”),它们的原型在特征空间中与查询原型接近,在这种情况下匹配网络可以很好地工作。然而,对于与查询相比在姿势和外观上具有较大差异的支持图像(在左侧标记为“多样化支持图像”),支持和查询原型之间的距离会很远。在这种情况下,如果将支持原型中的类别信息强行迁移到查询中,则不可避免地会引入较大的类别信息偏差。
图1 支持样本原型与查询图像原型分布图
因此,本文在通过引入一个中间原型来缓解这个问题,该原型可以通过作者提出的中间原型挖掘Transformer弥补查询和支持图像之间的类别信息差距。每层Transformer由两个步骤组成,即中间原型挖掘和查询激活。在中间原型挖掘中,通过结合来自支持图像的确定性类别信息和来自查询图像的自适应类别知识来学习中间原型。然后,使用学习到的原型在查询特征激活模块中激活查询特征图。此外,中间原型挖掘Transformer以迭代方式使用,以逐步提高学习原型和激活查询功能的质量。
图2 方法总框图
支持图像和查询图像输入到主干网络分别提取除支持特征和查询特征。查询特征在原型激活(PA)模块中经过简单的利用支持图像原型进行激活后,分割成一个初始预测掩码,并将该掩码和激活后的查询特征作为中间原型挖掘Transformer层的一个输入。同时,将支持特征、支持图片掩码和随机初始化的一个中间原型也做为第一层中间原型挖掘Transformer的输入。在中间原型挖掘Transformer层中,首先进行掩码注意力操作。具体来说,计算中间原型与查询或支持特征之间的相似度矩阵,并利用下式仅保留前景区域的特征相似度矩阵:
处理后的相似度矩阵作为权重,分别捕获查询或支持特征中的类别信息并形成新的原型。
查询特征新原型、支持特征新原型和原中间原型结合在一起形成新的中间原型,完成对中间原型的挖掘。
而后,新的中间原型在查询特征激活模块中对查询特征中的类别目标予以激活。
为了便于学习中间原型中的自适应类别信息,作者使用它在支持和查询图像上生成两个分割掩码,并计算两个分割损失。
并设计双分工分割损失(DSL):
由于一个中间原型挖掘Transformer层可以更新中间原型、查询特征图和查询分割掩码,因此,作者通过迭代执行这个过程,得到越来越好的中间原型和查询特征,最终使分割结果得到有效提升。假设有L 层,那么对于每一层有:
上式中具体过程又可以分解为以下环节:
实验结果及可视化
图3 作者提出方法的结果的可视化与比较
在图3中,作者可视化了文章中方法和仅使用支持图像的小样本语义分割方法[1]的一些预测结果。可以看出,与第 2 行中仅使用支持信息的结果相比,第3行中的结果展现出作者的方法可以有效地缓解由固有的类内多样性引起的分割错误。
表4 与先前工作在PASCAL-5i[2]数据集上的效果比较
从表4中可以发现,作者的方法大大超过了所有其他方法,并取得了新的最先进的结果。在使用 ResNet-50 作为主干网络时, 在 1-shot 设置下与之前的最佳结果相比,作者将 mIoU 得分提高了 2.6。此外,在使用 ResNet-101作为主干网络时,作者方法实现了 1.8 mIoU(1-shot)和 2.2 mIoU(5-shot )的提升
表5 各模块消融实验
表5中指出,当仅使用 IPM 会导致 5.3 mIoU 的性能下降。然而,当添加 DSL 时,模型的性能在baseline上实现了 4.1 mIoU 的提升。作者认为这种现象是合理的,因为无法保证 IPM 中的可学习原型将在没有 DSL 的情况下学习中间类别知识。同时,使用 QA 激活查询特征图可以进一步将模型性能提高 2.5 mIoU。这些结果清楚地验证了作者提出的 QA 和 DSL 的有效性。
表6 中间原型Transformer有效性的消融研究
在表6中,作者对比了仅使用support或者query提供类别信息时,和是否使用迭代方式提取信息时的模型的性能情况。可以看出,借助中间原型以迭代的方式从support和query中都获取类型信息所取得的效果更为出色,也验证了作者提出方法的有效性。
图7 支持原型和中间原型分别的可视化比较
如图7所示,作者将原本的支持原型可视化为橘色,学习到的中间原型可视化为蓝色,查询图像原型可视化为粉色。可以看到,在特征空间中,中间原型比支持原型更接近查询原型,因此验证了作者的方法有效地缓解了类内多样性问题并弥补了查询和支持图像之间的类别信息差距。
在文章中,作者关注到查询和支持之间的类内多样性,并引入中间原型来弥补它们之间的类别信息差距。核心思想是通过设计的中间原型挖掘Transformer并采取迭代的方式使用中间原型来聚合来自于支持图像的确定性类型信息和查询图像的自适应的类别信息。令人惊讶的是,尽管它很简单,但作者的方法在两个小样本语义分割基准数据集上大大优于以前的最新结果。为此,作者希望这项工作能够激发未来的研究能够更多地关注小样本语义分割的类内多样性问题。
#transformer~x5
目前基于Transformer结构的算法模型已经在计算机视觉(CV)领域展现出了巨大的影响力。他们在很多基础的计算机视觉任务上都超过了之前的卷积神经网络(CNN)算法模型,下面是笔者找到的最新的在不同基础计算机视觉任务上的LeaderBoard榜单排名,通过LeaderBoard可以看到,基于Transformer算法模型在各类计算机视觉任务上的统治地位。
- 图像分类任务
首先是在ImageNet上的LeaderBoard,通过榜单可以看出,前五名当中,每个模型都使用了Transformer结构,而CNN结构只有部分使用,或者采用和Transformer相结合的方式。
图像分类任务的LeaderBoard
- 目标检测任务
接下来是在COCO test-dev上的LeaderBoard,通过榜单可以看出,前五名当中,一半以上都是基于DETR这类算法结构进行延伸的。
目标检测任务的LeaderBoard
- 语义分割任务
最后是在ADE20K val上的LeaderBoard,通过榜单也可以看出,在榜单的前几名中,Transformer结构依旧占据是当前的主力军。
语义分割任务的LeaderBoard
虽然目前Transformer展现出了巨大的发展前景,但是现在的计算机视觉社区还并没有完全掌握Vision Transformer的内部工作原理,也没有掌握其决策(输出的预测结果)的基础,那对其可解释性的需求就逐渐凸显了出来。因为只有了解了这类模型是如何做出决策的,才不仅可以提高它们的性能,还可以建立对人工智能系统的信任。
所以本文的主要动机就是探索Vision Transformer的不同可解释性方法,并根据不同算法的研究动机、结构类型以及应用场景进行分类,从而形成了一篇综述文章。
刨析Vision Transformer
因为刚才提到,Vision Transformer的结构在各类基础的计算机视觉任务中都取得了非常不错的成绩。所以之后计算机视觉社区涌现出了很多方法来增强它的可解释性。本文我们主要以分类任务为主线,从Common Attribution Methods、Attention-based Methods、Pruning-based Methods、Inherently Explainable Methods、Other Tasks这五个方面中,挑选出最新以及经典的工作进行介绍。这里放一下论文中出现的思维导图,大家可以根据自身感兴趣的内容,进行更加细致的阅读~
本文思维导图
Common Attribution Methods
基于属性方法的解释通常的出发点是对模型的输入特征如何一步一步得到最终输出结果过程的解释。这类方法主要用于衡量模型的预测结果和输入特征之间的相关性。
在这些方法中,例如Grad-CAM以及Integrated Gradients算法是直接应用于了基于视觉Transformer的算法上。一些其他的方法像SHAP和Layer-Wise Relevance Propagation(LRP)已经被用来探索基于ViT的架构上了。但是由于SHAP这类方法到的计算成本非常大,所以最近的ViT Shapely算法被设计出来用于适配ViT的相关应用研究。
Attention-based Methods
Vision Transformer正是得益于其注意力机制使其拥有了强大的特征提取能力。而在基于注意力的可解释性方法中,对注意力权重结果进行可视化则是一种非常有效的方法。本文对其中的几种可视化技术进行介绍
- Raw Attention:该方法顾名思义,就是对网络模型中间层得到的注意力权重图进行可视化,从而对模型的效果进行分析。
- Attention Rollout:该技术通过对网络的不同层中扩展注意力权重来跟踪从输入token到中间embedding之间的信息传输。
- Attention Flow:该方法将注意力图视为一个流量网络,并使用最大流量算法计算从中间embedding到输入token的最大流量值。
- partialLRP:该方法是用于可视化Vision Transformer中的多头注意力机制提出来的,同时还考虑了每个注意力头的重要性。
- Grad-SAM:该方法用于缓解仅依靠原始注意力矩阵来解释模型预测的局限性,促使研究人员将梯度以用于原始的注意力权重中。
- Beyond Intuition:该方法也是一种用于解释注意力的方法,包括注意力感知和推理反馈两个阶段。
最后放一张不同可解释性方法的注意力可视化图,大家可以自行感受一下不同可视化方法的区别。
不同可视化方法的注意力图对比
Pruning-based Methods
剪枝是一种非常有效的方法,被广泛应用于优化transformer结构的效率和复杂性。剪枝方法通过对冗余或者没用的信息进行删减,从而降低模型的参数量和计算复杂度。虽然剪枝算法侧重于提高模型的计算效率,但是该类算法依旧可以实现对模型的可解释性。
本文中针对基于Vision-Transformer的剪枝方法,大体可以分成三大类:explicitly explainable(显式可解释)、implicitly explainable(隐式可解释)、possibly explainable(可能可解释)。
- Explicitly Explainable
在基于剪枝的方法当中,有几类方法可以提供简单而且更可解释的模型。
- IA-RED^2:该方法的目标是在算法模型的计算效率以及可解释性之间实现一个最优的平衡。并且在这个过程当中,保持原有ViT算法模型的灵活性。
- X-Pruner:该方法是一种用于剪枝显著性单元的方法,通过创建一个可解释性的感知掩码来衡量每个可预测单元在预测特定类中的贡献。
- Vision DiffMask:该剪枝方法包括在每个ViT层上加入门控机制,通过门控机制,可以实现在屏蔽输入的同时保持模型的输出。除此之外,该算法模型可以清晰地触发剩余图像中的子集,从而实现更好地对模型预测的理解。
- Implicitly Explainable
基于剪枝的方法当中,也有一些经典的方法可以被划分为隐式的可解释性模型类别中。
- Dynamic ViT:该方法采用轻量级预测模块,根据当前的特征去估计每个token的重要性程度。然后将该轻量级的模块加入到ViT的不同层中,以分层的方式来修剪冗余的token。最重要的是,该方法通过逐步定位对分类贡献最大的关键图像部分来增强可解释性。
- Efficient Vision Transformer(EViT):该方法的核心思想是通过重组token的方式来加速EViT。通过计算注意力得分,EViT保留最相关的token,同时将不太相关的token融合到另外的token中。同时论文的作者为了评估EViT的可解释性,对多个输入图像可视化了token的识别过程。
- Possibly Explainable
虽然这类方法最初并不是为了提高ViT的可解释性,但是这类方法为进一步研究模型的可解释性提供了很大的潜力。
- Patch Slimming:通过自上而下的方法来专注图像中的冗余patch来加速ViT。该算法选择性的保留了关键补丁的能力来突出重要的视觉特征,从而增强可解释性。
- Hierarchical Visual Transformer(HVT):该方法的引入用于去增强ViT的可扩展性和性能。随着模型深度的增加,序列长度逐渐减小。此外,通过将ViT块划分为多个阶段,并在每个阶段应用池化操作,显著提高了计算效率。考虑到对模型最重要组成部分的逐渐集中,有机会探索其对增强可解释性和可解释性的潜在影响。
Inherently Explainable Methods
在不同的可解释方法中,有一类方法主要是开发能够内在地解释算法模型,然而,这些模型通常难以达到与更复杂的黑盒模型相同的精度水平。因此,必须在可解释性和性能之间考虑谨慎的平衡。接下来对一些经典的工作进行简要的介绍。
- ViT-CX:该方法针对ViT模型定制的基于掩码的解释方法。这种方法依赖patch embedding以及其对模型输出的影响,而不是聚焦对它们的关注。该方法包括掩码生成和掩码聚合两个阶段,从而提供更有意义的显著性图。
- ViT-NeT:该方法是一种新的神经树解码器,通过树形结构和原型来描述决策过程。同时,该算法还可以对结果进行可视化解释。
- R-Cut:该方法是通过Relationship Weighted Out and Cut来增强ViT的可解释性。该方法包括两个模块,分别是Relationship Weighted Out和Cut模块。前者侧重于从中间层提取特定类的信息,强调相关特征。后者执行细粒度的特征分解。通过对两个模块的集成,可以生成密集的特定于类的可解释性映射。
Other Tasks
就如同在文章开头提到的,除了分类之外,基于ViT的架构对其他CV任务的解释性仍在探索中。有几种专门针对其他任务提出的可解释性方法,接下来就对相关领域的最新工作进行介绍~
- eX-ViT:该算法是一种基于弱监督语义分割的新型可解释视觉转换器。此外,为了提高可解释性,引入了属性导向损失模块,该模块包含全局级属性导向损失、局部级属性可判别性损失和属性多样性损失三种损失。前者使用注意图来创建可解释的特征,后两者则增强属性学习。
- DINO:该方法是一种简单的自监督方法,并且是一种不带标签的自蒸馏方法。最终学习到的注意图能够有效地保留图像的语义区域,从而实现可以解释的目的。
- Generic Attention-model:该方法是一种基于Transformer架构做预测的算法模型。该方法应用于三种最常用的架构,即纯自注意、自注意与共同注意相结合和编码器-解码器注意。为了检验模型的解释性,作者使用了视觉问答任务,然而,它也适用于其他CV任务,如目标检测和图像分割。
- ATMAN:这是一种模态不可知的扰动方法,利用注意机制生成输入相对于输出预测的相关性图。该方法试图通过记忆效率注意操作来理解变形预测。
- Concept-Transformer:该算法通过突出显示用户定义的高级概念的注意分数来生成模型输出的解释,从而确保可信性和可靠性。
未来展望
虽然目前基于Transformer架构的算法模型已经在各类计算机视觉任务上取得了非常出色的成绩。但是目前来看,对于如何利用可解释性方法的好处来促进模型调试和改进,以及提高模型的公平性和可靠性,特别是在ViT应用中,一直缺乏明显的研究。
所以本文以图像分类任务出发,对现有的基于Vision Transformer的可解释性算法模型进行归类整理,从而帮助人们更好的理解此类模型架构,希望可以对大家有所帮助。
#Transformer上进行递归
搬运工快热死了 一早大厦没空调了~~ 还是别人的内容来学习 勿怪啊
论文地址:https://arxiv.org/pdf/2111.05297.pdf
代码和模型:https://github.com/szq0214/SReT
目前 vision transformer 在不同视觉任务上如分类、检测等都展示出了强大的性能,但是其巨大的参数量和计算量阻碍了该模型进一步在实际场景中的应用。基于这个考虑,本文重点研究了如何在不增加额外参数量的前提下把模型的表达能力挖掘到极致,同时还要保证模型计算量在合理范围内,从而可以在一些存储容量小,计算能力弱的嵌入式设备上部署。
基于这个动机,Zhiqiang Shen、邢波等研究者提出了一个 SReT 模型,通过循环递归结构来强化每个 block 的特征表达能力,同时又提出使用多个局部 group self-attention 来近似 vanilla global self-attention,在显著降低计算量 FLOPs 的同时,模型没有精度的损失。
总结而言,本文主要有以下两个创新点:
- 使用类似 RNN 里面的递归结构(recursive block)来构建 ViT 主体,参数量不涨的前提下提升模型表达能力;
- 使用 CNN 中 group-conv 类似的 group self-attention 来降低 FLOPs 的同时保持模型的高精度;
此外,本文还有其他一些小的改动:
- 网络最前面使用三层连续卷积,卷积核为 3x3,结构直接使用了研究者之前 DSOD 里面的 stem 结构;
- Knowledge distillation 只使用了单独的 soft label,而不是 DeiT 里面 hard 形式的 label 加 one-hot ground-truth,因为研究者认为 soft label 包含的信息更多,更有利于知识蒸馏;
- 使用可学习的 residual connection 来提升模型表达能力;
如下图所示,本文所提出的模型在参数量(Params)和计算量(FLOPs)方面相比其他模型都有明显的优势:
下面我们来解读这篇文章:
1.ViT 中的递归模块
递归操作的基本组成模块如下图:
该模块非常简单明了,类似于 RNN 结构,将模块当前 step 的输出作为下个 step 的输入重新输进该模块,从而增强模型特征表达能力。
研究者展示了将该设计直接应用在 DeiT 上的结果,如下所示:
可以看到在加入额外一次简单递归操作之后就可以得到将近 2% 的精度提升。
当然具体到全局网络结构层面还有不同的递归构建方法,如下图:
其中 NLL 层(Non-linear Projection Layer)是用来保证每个递归模块输入输出不完全一致。论文提出使用这个模块的主要原因是发现在上述 Table 1 里面更多次数的递归操作并没有进一步提升性能,说明网络可能学到了一个比较简单的状态,而 NLL 层可以强制模型输入输出不一致从而缓解这种情况。同时,研究者从实验结果发现上图 (1) internal loop 相比 external loop 设计拥有更好的 accuracy-FLOPs 结果。
2. 分组的 Group Self-attention 模块
如下图所示,研究者提出了一种分组的 group self-attention 策略来降低模型的 FLOPs,同时保证 self-attention 的全局注意力,从而使得模型没有明显精度损失:
Group Self-attention 模块具体形式如下:
Group self-attention 的缺点是只有局部区域会相互作用,研究者提出通过使用 Permutation 操作来近似全局 self-attention 的机制,同时通过 Inverse Permutation 来复原和保留 tokens 的次序信息,针对这个部分的消融实验如下所示:
其中 P 表示加入 Permutation,I 表示加入 Inverse Permutation,-L 表示如果 group 数为 1,就不使用 P 和 I(比如模型最后一个 stage)。根据上述表格的结果,研究者最后采用了 [8, 2][4,1][1,1] 这种分组设计。
3. 其他设计
可学习的残差结构 (LRC):
研究者尝试了上图三种结构,图(3)结果最佳。具体而言,研究者在每个模块里面添加了 6 个额外参数(4+2,2 个在 NLL 层),这些参数会跟模型其他参数一起学习,从而使网络拥有更强的表达能力,参数初始化都为 1,在训练过程 6 个参数的数值变化情况如下所示:
Stem 结构组成:
如上表所示,Stem 由三个 3x3 的连续卷积组成,每个卷积 stride 为 2。
整体网络结构:
研究者进一步去掉了 class token 和 distillation token,并且发现精度有少量提升。
消融实验:
模型混合深度训练:
研究者进一步发现分组递归设计还有一个好处就是:可以支持模型混合深度训练,这种训练方式可以大大降低深度网络结构优化复杂度,研究者展示了 108 层不同模型结构优化过程的 landscape 可视化,如下图所示,可以很明显的看到混合深度结构优化过程困难程度显著低于另外两种结构。
最后,分组 group self-attention 算法 PyTorch 伪代码如下:
#Searchformer
Transformer 强大的泛化能力再次得到证明!补齐Transformer规划短板,田渊栋团队的Searchformer火了
最近几年,基于 Transformer 的架构在多种任务上都表现卓越,吸引了世界的瞩目。使用这类架构搭配大量数据,得到的大型语言模型(LLM)等模型可以很好地泛化用于真实世界用例。
尽管有如此成功,但基于 Transformer 的架构和 LLM 依然难以处理规划和推理任务。之前已有研究证明 LLM 难以应对多步规划任务或高阶推理任务。
为了提升 Transformer 的推理和规划性能,近些年研究社区也提出了一些方法。一种最常见且有效的方法是模拟人类的思考过程:先生成中间「思维」,然后再输出响应。比如思维链(CoT)提示法就是鼓励模型预测中间步骤,进行按步骤的「思考」。思维树(ToT)则使用了分支策略和评判方法,让模型生成多个不同的思维路径,然后从中选出最佳路径。尽管这些技术通常是有效的,但也有研究表明,在很多案例中,这些方法会让模型的性能下降,原因包括自我强制(self-enforcing)。
另一方面,在一个数据集上有效的技术可能无法很好地处理其它数据集,原因可能包括所涉及的推理类型发生了变化,比如从空间推理变成了数学推理或常识推理。
相较之下,传统的符号式规划和搜索技术却能表现出很好的推理能力。此外,这些传统方法计算得到的解决方案通常有形式上的保证,因为符号规划算法通常遵循明确定义的基于规则的搜索过程。
为了让 Transformer 具备复杂推理能力,Meta FAIR 田渊栋团队近日提出了 Searchformer。
- 论文标题:Beyond A∗: Better Planning with Transformers via Search Dynamics Bootstrapping
- 论文地址:https://arxiv.org/pdf/2402.14083.pdf
Searchformer 是一种 Transformer 模型,但针对迷宫导航和推箱子等多步规划任务,它却能计算出最优规划并且所用搜索步骤数也能远少于 A∗ 搜索等符号规划算法。
为了做到这一点,该团队提出了一种新方法:搜索动态引导(search dynamics bootstrapping)。该方法首先是训练一个 Transformer 模型来模仿 A∗ 的搜索过程(如图 1 所示,然后对其进行微调,使其能用更少的搜索步数找到最优规划。
更详细地说,第一步,训练一个模仿 A∗ 搜索的 Transformer 模型。这里,该团队的做法是针对随机生成的规划任务实例运行 A* 搜索。在执行 A∗ 时,该团队会记录执行的计算和最优规划并将其整理成词序列,即 token。这样一来,所得到的训练数据集就包含了 A∗ 的执行轨迹并编码了有关 A∗ 本身的搜索动态的信息。然后,训练一个 Transformer 模型,让其能针对任意规划任务沿最优规划生成这些 token 序列。
第二步,使用专家迭代(expert iteration)方法进一步提升使用上述经过搜索增强的序列(包含 A∗ 的执行轨迹)训练的 Searchformer。专家迭代方法可让 Transformer 凭借更少的搜索步骤生成最优解。这个过程会得到一种神经规划算法,其隐式地编码在该 Transformer 的网络权重之中,并且它有很高的概率以少于 A∗ 搜索的搜索步数找到最优规划。比如说,在执行推箱子任务时,新模型能解答 93.7% 的测试任务,同时搜索步数比 A∗ 搜索平均少 26.8%。
该团队表示:这为 Transformer 超越传统符号规划算法铺平了道路。
实验
为了更好地理解训练数据和模型参数量对所得模型性能的影响,他们进行了一些消融研究。
他们使用了两类数据集训练模型:一种的 token 序列中只包含解(solution-only,其中只有任务描述和最终规划);另一种则是搜索增强型序列(search-augmented,其中包含任务描述、搜索树动态和最终规划)。
实验中,该团队使用了 A∗ 搜索的一种确定性和非确定性变体来生成每个序列数据集。
迷宫导航
在第一个实验中,该团队训练了一组编码器 - 解码器 Transformer 模型来预测 30×30 迷宫中的最优路径。
图 4 表明,通过预测中间计算步骤,可在数据量少时获得更稳健的性能表现。
图 5 给出了仅使用解训练的模型的性能。
图 6 展示了任务难度对每个模型的性能的影响。
整体而言,尽管当使用的训练数据集足够大和足够多样化时,仅使用解训练的模型也能预测得到最优规划,但当数据量少时,经过搜索增强的模型的表现明显好得多,并且也能更好地扩展用于更困难的任务。
推箱子
为了测试能否在不同且更复杂的任务(具有不同的 token 化模式)上得到类似的结果,该团队还生成了一个推箱子的规划数据集进行测试。
图 7 展示了每种模型针对每个测试任务生成正确规划的概率。
可以看到,和上一个实验一样,通过使用执行轨迹进行训练,搜索增强型模型的表现优于仅使用解训练的模型。
Searchformer:通过引导方法提升搜索动态
最后一个实验,该团队研究了搜索增强型模型可以如何迭代提升,从而凭借更少的搜索步数计算出最优规划。这里的目标是在缩短搜索轨迹长度的同时依然得到最优解。
图 8 表明,新提出的搜索动态引导方法能够迭代式地缩短 Searchformer 模型生成的序列的长度。