#Transformer~x1
难道 Transformer 注定无法解决「训练数据」之外的新问题?DeepMind指出,但有人投来质疑
说起大语言模型所展示的令人印象深刻的能力,其中之一就是通过提供上下文中的样本,要求模型根据最终提供的输入生成一个响应,从而实现少样本学习的能力。这一点依靠的是底层机器学习技术「Transformer 模型」,并且它们也能在语言以外的领域执行上下文学习任务。
以往的经验表明,对于在预训练混合体中得到充分体现的任务族或函数类,选择适当函数类进行上下文学习的成本几乎为零。因此有研究者认为,Transformer 能很好地泛化与训练数据相同分布的任务 / 函数。然而,一个普遍的悬而未决的问题是:在与训练数据分布不一致的样本上,这些模型表现如何?
在最近的一项研究中,来自 DeepMind 的研究者借助实证研究,对这个问题进行了探讨。他们将泛化问题解释为以下内容:「一个模型能否利用不属于预训练数据混合体中任何基本函数类的函数的上下文样本生成良好的预测?(Can a model generate good predictions with in-context examples from a function not in any of the base function classes seen in the pretraining data mixture? )」
这篇论文重点放在了预训练过程的一个特定方面:「预训练中使用的数据」,并研究它如何影响由此产生的 Transformer 模型的少样本学习能力。为了解决上述问题,研究者首先探讨了 Transformer 在预训练中看到的不同函数类族之间进行模型选择的能力(第 3 节),然后回答了几个重点案例的 OOD 泛化问题(第 4 节)。
论文地址:https://arxiv.org/pdf/2311.00871.pdf
他们发现:首先,预训练 Transformer 在预测从预训练函数类中提取的函数的凸组合时非常吃力;其次,Transformer 虽然可以有效泛化函数类空间中较罕见的部分,但当任务变得不在分布范围内时,Transformer 仍然会崩溃。
归纳为一句话就是,Transformer 无法泛化出预训练数据之外的认知 —— 因此也解决不了认知之外的问题。
总体来说,本文的贡献如下:
- 使用多种不同函数类的混合体对 Transformer 模型进行预训练,以便进行上下文学习,并描述了模型选择行为的特征;
- 研究了预训练 Transformer 模型在与预训练数据中函数类「不一致」的函数上的上下文学习行为;
- 强有力的证据已经表明,模型在上下文学习过程中可以在预训练的函数类中进行模型选择,而几乎不需要额外的统计成本,但也存在有限证据,表明模型的上下文学习行为能够超出其预训练数据的范围。
这位研究者认为,这对于安全方面来说也许是个好消息,至少模型不会「为所欲为」。
但也有人指出,这篇论文所使用的模型不太合适 ——「GPT-2 规模」意味着本文模型大概是 15 亿参数作用,这确实很难泛化。
接下来,我们先来看看论文细节。
模型选择现象
在对不同函数类的数据混合体进行预训练时,会遇到一个问题:当模型看到预训练混合体支持的上下文样本时,如何在不同函数类之间进行选择?
研究者发现,模型在看到属于预训练数据混合体的函数类的上下文样本后,会做出最佳(或接近最佳)预测。他们还观察了模型在不属于任何单一成分函数类的函数上的表现,然后在第 4 节中探讨了一些与所有预训练数据完全不相关的函数。
首先从线性函数的研究开始,线性函数在上下文学习领域受到了广泛关注。去年,斯坦福大学 Percy Liang 等人的论文《What Can Transformers Learn In-Context? A Case Study of Simple Function Classes》表明,对线性函数进行预训练的 Transformer 在对新的线性函数进行上下文学习时表现近乎最佳。
他们特别考虑了两个模型:一个是在密集线性函数(线性模型的所有系数都非零)上训练的模型,另一个是在稀疏线性函数(20 个系数中只有 2 个系数非零)上训练的模型。在新的密集线性函数和稀疏线性函数上,每个模型的表现分别与线性回归和 Lasso 回归相当。此外,研究者还将这两个模型与在稀疏线性函数和密集线性函数的混合体上预训练的模型进行了比较。
预训练数据混合体的 ICL 学习曲线几乎与最优基线样本复杂度相匹配。所能观察到的偏差很小,而且随着 ICL 样本数量的增加,偏差迅速减小,这与图 1 中对应 ICL 学习曲线上一个点的行为相吻合。
图 2 还表明,Transformer 模型的 ICL 泛化会受到分布外的影响。尽管密集线性类和稀疏线性类都是线性函数,但可以看到图 2a 中红色曲线(对应于只在稀疏线性函数上进行预训练并在密集线性数据上进行评估的 Transformer)的性能很差,反之亦然,图 2b 中茶色曲线的性能也很差。研究者在其他非线性函数类中也观察到了类似的表现。
事实上,图 3b 显示,当上下文中提供的样本来自非常稀疏或非常密集的函数时,预测结果几乎与只使用稀疏数据或只使用密集数据预训练的模型预测结果完全相同。然而,在两者之间,当非零系数的数量≈4 时,混合预测结果偏离了纯密集或纯稀疏预训练 Transformer 的预测结果。
这表明对混合体进行预训练的模型并不是简单地选择单一函数类进行预测,而是预测介于两者之间的结果。
模型选择能力的限制
然后,研究者从两个方向检查了模型的 ICL 泛化能力。首先,测试了模型在训练中从未见过的函数上的 ICL 性能;其次,评估了模型在预训练中见过的函数的极端版本上的 ICL 性能。
在这两种情况下,该研究几乎没有发现分布外泛化的证据。当函数与预训练期间看到的函数相差很大时,预测就会不稳定;当函数足够接近预训练数据时,模型可以很好地近似。
图 3a 展示了 Transformer 在中等稀疏级别(nnz = 3 to 7)下的预测与预训练时提供的任一函数类的任何预测都不相似,而是介于两者之间。因此,人们可能会假设该模型具有某种归纳偏差,使其能够以非平凡的方式组合预训练的函数类。例如,人们可能怀疑该模型可以根据预训练期间看到的函数组合来生成预测。为了在具有明显不相交函数类的背景下检验这一假设,研究者探讨了对线性函数、正弦曲线和两者的凸组合执行 ICL 的能力。他们将重点放在一维情况上,使非线性函数类的评估和可视化变得简单。
#vision transformer~x1
很多时候,内存限制会阻碍 ViT 以及 LLM 的训练,这篇文章介绍了 9 种减少内存消耗峰值的方法。难能可贵的是,这几种方法可以同时使用,就好像降龙十八掌中最后一掌,正是将前几张组合起来就能打出最强大的效果。这套优化transformer内存占用的组合技值得收藏
峰值内存消耗是训练深度学习模型(如视觉 Transformer 和 LLM)时的常见瓶颈。本文提供了一系列可以在不牺牲建模性能和预测精度的情况下,将 PyTorch 中的内存消耗降低到约 1/20 的技术。
以 PyTorch 的 Torchvision 库中的视觉 transformer 为基础,本文作者编写了大约 100 行代码的训练脚本,并且所有代码示例都可以在 GitHub 上找到。
以下是本文将要介绍的技术名称:
- 微调 vision transformer
- 自动混合精度训练
- 低精度训练
- Reduced Batch Size 训练
- 梯度积累与 Microbatches
- 选择更精简的优化器
- 在目标设备上实例化模型
- 分布式训练与张量共享
- 参数卸载
- 以上九种方法结合起来,就形成了一种可以用于 llm 的综合方法,也可以称之为第十种方法。
这些方法是互相解耦的,可以将它们叠加在一起使用。
本文在实验中使用的 ViT 为 ViT-L-16 模型。在依次将上述方法添加后,研究者将训练 BigBird-Roberta LLM 来执行文本分类任务。这些技术使得在消费类硬件上训练这样的模型成为可能。
微调 vision transformer
为了简化实验中的 PyTorch 代码,本文使用了开源库 ——Fabric,十几行代码就能应用各种先进的 PyTorc 技术(自动混合精度训练、多 GPU 训练、张量分片等)。
原生 PyTorch 代码和修改后的使用 Fabric 的代码之间的区别很微妙,只有较小的修改,如下面的代码所示:
如上所述,改动虽然不大,但是可以方便的使用 PyTorch 中的高级功能,而无需重新构造任何现有代码。总结上图,将普通 PyTorch 代码转换为 PyTorch+Fabric 的主要 3 个步骤可以归纳如下:
- 导入 Fabric 并实例化 Fabric 对象。
- 使用 Fabric 设置模型、优化器和数据加载程序。
- 调用 fabric.backward () 构造损失函数,而不是通常使用的 loss.backward ()
使用普通 PyTorch 和 PyTorch with Fabric 的性能和内存消耗几乎完全相同:
Plain PyTorch (01_pytorch-vit.py):
Time elapsed 17.94 min
Memory used: 26.79 GB
Test accuracy 95.85%
PyTorch with Fabric (01-2_pytorch-fabric.py)
Time elapsed 17.88 min
Memory used: 26.84 GB
Test accuracy 96.06%
也可以将下面的代码
model = vit_l_16(weights=ViT_L_16_Weights.IMAGENET1K_V1)
替换为
model = vit_l_16(weights=None)
替换后,将不再是微调,而是从头开始训练相同的 ViT 架构,预测准确率会从 96% 以上下降到约 60%:
自动混合精度
上一节使用 Fabric 修改了 PyTorch 代码,在此基础上,使用混合精度和分布式训练,也只需更改一行代码。
应用混合精度训练
应用混合精度训练,只需一个小的修改,将下面这行代码
fabric = Fabric(accelerator="cuda", devices=1)
替换为
fabric = Fabric(accelerator="cuda", devices=1, precisinotallow="16-mixed")
之后,在不牺牲预测精度的情况下,内存消耗从 26.84GB 减少到 18.21GB,如下所示:
01-2_pytoch-fabric.py 和 02_mixed-precision.py 的结果对比
此外,混合精确训练不仅减少了内存使用,还将运行时间减少了 6 倍(从 17.88 分钟减少到 3.45 分钟),这可以说是意外收获。
什么是混合精度训练?
混合精度训练同时使用 16 位和 32 位精度,以确保不损失精度。16 位表示的梯度计算比 32 位格式快得多,并且节省了大量的内存。这种策略是有益的,尤其是当受到内存或计算限制时。
之所以被称为「混合」而不是「低」精度训练的原因是,并不会将所有参数和操作都转移成 16 位浮点数。实际上,在训练期间会在 32 位和 16 位运算之间切换。
如下图所示,混合精度训练可以分解为:将权重转换为较低精度(如 FP16)以实现更快的计算、计算梯度、将梯度转换回较高精度(FP32)以实现数值稳定性,以及用缩放的梯度更新原始权重等几个步骤。
这种方法在保证训练有效的前提下,还能保持神经网络的准确性和稳定性。
感兴趣的读者还可以在本文作者的另一篇文章:《使用混合精度技术加速大型语言模型》中获得更多底层概念。
文章地址:https://lightning.ai/pages/community/tutorial/accelerating-large-language-models-with-mixed-precision-techniques/
低精度训练
还可以更进一步,尝试以「完全」较低的 16 位精度运行,而不是混合精度。
将下面这行代码
fabric = Fabric(accelerator="cuda", precisinotallow="16-mixed")
替换为
fabric = Fabric(accelerator="cuda", precisinotallow="16-true")
但需要注意的是,这样会在训练中产生 NaN 值:
Epoch: 0001/0001 | Batch 0000/0703 | Loss: 2.4105
Epoch: 0001/0001 | Batch 0300/0703 | Loss: nan
Epoch: 0001/0001 | Batch 0600/0703 | Loss: nan
...
这是因为常规的 16 位浮点只能表示 - 65504 和 65504 之间的数字:
In [1]: import torch
In [2]: torch.finfo(torch.float16)
Out[2]: finfo(resolution=0.001, min=-65504, max=65504, eps=0.000976562, smallest_normal=6.10352e-05, tiny=6.10352e-05, dtype=float16)
因此,为了避免 NaN 问题,可以将参数修改为「bf16 true」:
fabric = Fabric(accelerator="cuda", precision="bf16-true")
可以将内存消耗进一步降低到 13.82 GB(同样,在不牺牲准确性的情况下):
将 03_bfloat16.py 与之前的代码的结果进行比较
什么是 Bfloat16?
「bf16 mixed」中的「bf16」代表 Brain Floating Point(bfloat16)。谷歌为机器学习和深度学习应用程序开发了这种格式,特别是在其张量处理单元(TPU)中。与传统 float16 格式相比,Bfloat16 以降低精度为代价扩展了动态范围。
扩展的动态范围有助于 bfloat16 表示非常大和非常小的数字,使其更适合可能遇到广泛值的深度学习应用。然而,较低的精度可能会影响某些计算的准确性,或在某些情况下导致舍入误差。但在大多数深度学习应用中,这种精度的降低对建模性能的影响微乎其微。
虽然 bfloat16 最初是为 TPU 开发的,但这种格式从 A100 Tensor Core GPU 开始,也得到了其之后的 NVIDIA GPU 的支持。
以下代码可以检查 GPU 是否支持 bfloat16:
>>> import torch
>>> torch.cuda.is_bf16_supported()
True
减少批大小
减少批大小通常是减少内存消耗的一个有效方法。然而,它有时会导致较差的预测性能,因为这样要改变训练动态。
无论哪种方式,需要探讨减少批量大小对结果有何影响。事实证明,可以在不牺牲性能的情况下将批大小降低到 16,从而将内存消耗降至 5.69 GB:
将 04_lower-batchsize.py 与以前的代码进行比较。
梯度积累与微批
梯度累积是一种在训练过程中虚拟增加批大小的方法,当可用的 GPU 内存不足以容纳所需的批量大小时,这是非常有用的。并且这种方法只会在运行时产生影响,建模性能并不会受到影响。
梯度累积中,每批计算的量较小,并在多次迭代中累积梯度(通常求和或求平均),而不是在每个批次之后立刻更新模型权重。一旦累积的梯度达到目标「虚拟」批大小,模型权重就会用累积的梯度更新。
为了实现梯度积累,只需要对向前和向后传球进行两次小的修改:
05_gradient-acum.py 中的代码修改
本文作者的另一篇文章《使用梯度累积在单个 GPU 上微调 LLM》,更详细地介绍了梯度累积的细节。
文章地址:https://lightning.ai/blog/gradient-accumulation/
有效批大小为 16,并且累积步数为 4,意味着实际批大小为 4(因为 16/4=4)。
05_gradient-acum.py 的结果
这种技术的缺点是运行时间从 3.96 分钟增加到 12.91 分钟。
值得注意的是,批大小最小可以减少到 1,进一步减少 75% 的内存消耗。
使用更精简的优化器
时下流行的 Adam 优化器其实附带了额外的参数,例如,Adam 为每个模型参数提供了 2 个额外的优化器参数(平均值和方差)。
因此,通过将 Adam 与 SGD 等无状态优化器进行交换,可以将参数数量减少 2/3,这在使用 ViT 和 LLM 时非常重要。
普通 SGD 的缺点是收敛性较差。因此,Adam 与 SGD 交换后,需要引入余弦衰减学习速率调度器来进行补偿。
简而言之,通过将以下代码
optimizer = torch.optim.Adam(model.parameters(), lr=5e-5)
替换为
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
num_steps = NUM_EPOCHS * len(train_loader)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
optimizer, T_max=num_steps)
通过这种变化,模型能够在保持大约 97% 分类准确率的同时减少峰值内存消耗:
06_sgd-with-scheduler.py 的结果
在目标设备上创建模型
在 PyTorch 中实例化模型时,通常是首先在 CPU 设备上创建它,然后将它转移到目标设备上,并将其转换为所需的精度:
model = vit_l_16(weights=ViT_L_16_Weights.IMAGENET1K_V1)
model.cuda().float16()
但是 CPU 上生成完整精度的中间模型,是一种低效的方法。所以,可以使用 Fabric 中的 init_module 上下文在目标设备(例如 GPU)上直接创建所需精度的模型:
import lightning as L
fabric = Fabric(accelerator="cuda", devices=1, precision="16-true")
with fabric.init_module():
model = vit_l_16(weights=ViT_L_16_Weights.IMAGENET1K_V1)
在这种特定情况下(模型),前向通过期间的峰值内存大于其全精度表示中的大小。对模型加载本身对 fabric.init_module 方法进行基准测试,结果如下:
- 没有 init_module 的 GPU 峰值内存:1.24 GB(07_01_init-module.py)
- GPU 带 init_module 的峰值内存:0.65 GB(07_03_init-module.py)
可以看到,在这种情况下,init_module 将模型加载的峰值内存需求减少了 50%。
有关 init_module 的更多详细信息,可以参阅这篇关于大型模型的高效初始化的的文章。
文章地址:https://lightning.ai/pages/community/efficient-initialization-of-large-models/
分布式训练与张量共享
下一个修改是多 GPU 训练。多个 GPU 可供使用是有效的,因为这样做可以更快地训练模型。
然而,本文探讨的是内存节省。因此,需要一种更先进的分布式多 GPU 策略,称为完全共享数据并行(FSDP),该策略利用数据并行性和张量并行性在多个设备上共享大权重矩阵。
但是如果模型已经很小了,例如将此技术添加到上面第 7 节的代码中时,是几乎看不到任何效果的。因此,为了纯粹地关注分片的效果,可以与第 1 节中的全精度基线进行比较。
将以下代码
fabric = Fabric(accelerator="cuda", devices=1)
替换为
auto_wrap_policy = partial(
transformer_auto_wrap_policy,
transformer_layer_cls={EncoderBlock})
strategy = FSDPStrategy(
auto_wrap_policy=auto_wrap_policy,
activation_checkpointing=EncoderBlock)
fabric = Fabric(accelerator="cuda", devices=4, strategy=strategy)
08_fsdp 与 - 01-2.py 的结果
除了手动定义,请也可以使用以下方法,自动确定要分割哪些层:
fabric = Fabric(accelerator="cuda", devices=4, strategy="fsdp")
理解数据并行性和张量并行性
在数据并行中,mini-batch 需要继续被划分,并且每个 GPU 上都有一份模型副本。由于多个 GPU 并行工作,能够加快模型训练。
以下是工作原理:
- 在所有 GPU 中复制相同的模型。
- 然后,每个 GPU 被馈送输入数据的不同子集(不同的小批量)。
- 所有 GPU 独立地执行模型的前向和后向传递,计算各自的局部梯度。
- 然后,收集梯度并对所有 GPU 进行平均。
- 然后使用平均梯度来更新模型的参数。
这种方法的主要优点是速度块。由于每个 GPU 都在与其他 GPU 同时处理一个独特的小批量数据,因此可以在更短的时间内在更多数据上训练模型。这可以显著减少训练模型所需的时间,尤其是在使用大型数据集时。
然而,数据并行性有一些局限性。每个 GPU 必须具有模型及其参数的完整副本。这限制了可训练模型的大小,因为模型必须适合单个 GPU 的内存 —— 这对于现代 ViT 或 LLM 来说是不可行的。
与数据并行不同,张量并行将模型本身划分为 GPU。在数据并行中,每个 GPU 都需要适应整个模型,这在训练更大的模型时可能会成为一个限制。然而,张量并行性允许通过分解模型并将其分布在多个设备上来训练对于单个 GPU 来说可能太大的模型。
具体来说,其原理和矩阵乘法相似。按行或按列都可以对模型进行拆解。简单起见,以按列拆解为例,可以将一个大型矩阵乘法运算分解为单独的计算,每个计算都可以在不同的 GPU 上执行,如下图所示。然后将结果连接起来以获得原始结果,从而有效地分配了计算负载。
参数卸载
除了上一节中解释的 FSDP 策略之外,还可以将优化器参数卸载到 CPU,可以通过将以下代码
strategy = FSDPStrategy(
auto_wrap_policy=auto_wrap_policy,
activation_checkpointing=EncoderBlock,
)
替换为
strategy = FSDPStrategy(
auto_wrap_policy=auto_wrap_policy,
activation_checkpointing=EncoderBlock,
cpu_offload=True
)
内存消耗从 6.59 GB 减少到 6.03 GB:
09_fsdp-cpu-offload-with-01-2.py 的结果。
美中不足的小缺点是运行时间从 5.5 分钟增加到了 8.3 分钟。
将前面几招连着打出,就成为了最强的降龙十八掌最后一掌!
前几节对优化 ViT 进行了大量介绍,其实这些技术也同样适用于 LLM。
作者在 Lit LLaMA 和 Lit GPT 存储库中使用了许多这些技巧,这些存储库支持 LLaMA、Falcon、Pythia 和其他流行的模型。尽管如此,为了创建一个更通用的例子,作者从流行的 HF transformers 库中微调 LLM,用于对 IMDb 电影评论的情绪进行分类。
使用上述技术,仅使用 1.15 Gb 内存(bonus_DistilBERT-after.py)而不是 3.99 Gb(bonus_bigbird-before.py)就可以训练 DistilBERT 分类器。更令人印象深刻的是,通过将这些技术应用于 transformers 库中的 BigBird 模型,BigBird 仅消耗 4.03 GB(bonus_BigBird-after.py)。
strategy = FSDPStrategy(
cpu_offload=True
)
fabric = Fabric(
accelerator="cuda",
devices=4,
strategy=strategy,
precision="bf16-true"
)
with fabric.init_module():
model = AutoModelForSequenceClassification.from_pretrained(
"google/bigbird-roberta-base", num_labels=2)
结论
本文展示了 9 种减少 PyTorch 模型内存消耗的技术。当将这些技术应用于 ViT 时,单个 GPU 上减少了 20 倍的内存消耗。可以看到,跨 GPU 的张量分片甚至可以降低内存消耗。同样的优化还使 BigBird LLM 能够仅使用 4GB 峰值 GPU RAM 进行训练。
这些技术都不是特定于模型的,可以与任何 PyTorch 训练脚本一起使用。使用开源 Fabric 库,大多数优化都可以通过一行代码实现。
参考链接:https://lightning.ai/pages/community/tutorial/pytorch-memory-vit-llm/
#Transformer~x2
本文由加州大学伯克利分校统计系和谷歌 DeepMind 的团队联合发表,研究了预训练后的 Transformer 的基于上下文学习 (In-Context Learning) 的能力。他们用简洁的数学理论证明了:Transformer 可以基于上下文学习到一种类似最小二乘的算法,这种学到的算法在新的数据集上能学到正确的线性模型。
论文地址:https://arxiv.org/pdf/2306.09927.pdf
Transformer 基于上下文学习的能力
基于上下文学习 (ICL,In-Context Learning) 是大语言模型的特殊能力。它通常指的是:一个经过预训练的语言模型,当你输入一些具体的任务指示和少数几个范例 (demonstration) 之后,再输入一个新问题 (query input),该模型可以依据提供的范例给出正确的解答或者标注 (label)。
注意,在进行基于上下文的学习的时候,原先经过预训练的模型是不需要经过任何微调 (fine-tuning) 的。也就是说,原模型的参数完全不会变化。这大大节省了微调所需要的数据。
举个例子,假设你需要 GPT 做翻译任务,你提供了一些范例:狗 ——dog;猫 ——cat。然后你想知道「人」怎么翻译。这个时候你不需要对模型进行任何微调(尽管训练的时候并没有使用翻译的数据集),你只需要输入:
请将中文翻译成英文。例如:狗 ——dog;猫 ——cat;人 ——?
GPT 可以给出你正确的回答(不信你可以自己试试)。
在 GPT3 及此后的许多大模型中,人们都观察到了 ICL 的现象 [1]。如何理解这种现象,目前学术界并没有给出统一的答案。一种观点认为,GPT 可以从提供的范例中学到某些算法,然后再将这些算法用到新的问题中。例如,从「狗 ——dog;猫 ——cat」中,GPT 也许学到了一种「可以用于文本翻译」的算法,然后在将这种算法用在新的问题「人 ——?」中。
至于学到了什么算法,不同机构通过实验得出了一些结论 [2,3,4]。下表中,我们使用约等号,表示并没有严格的理论说明 GPT(或者类似结构)严格学到了这个算法,但是它和该算法在任务上的表现几乎一致。
本文首次从理论上证明,经过预训练的 Transformer 在线性回归模型上学到了与最小二乘十分类似的算法,它们都能基于上下文学到正确的线性模型。
一个简单的线性 Transformer 模型
本文考虑的是一个简化的线性 Transformer 模型,所有的数据来源于无噪音的线性模型。我们考虑这样一个序列到序列 (sequence-to-sequence) 的函数:我们用一系列的数据和标签 (x_i,y_i), i=1,2,...,N, 来模拟一个任务中的范例。想象所有的 x_i 就是中文词语,对应的 y_i 是对应的英文翻译。我们还有一个需要给出预测的输入 x_query(想象我们有一个中文单词需要翻译),对这个输入,它对应的输出是 y_query,我们希望模型准确的预测它。
我们把这些范例和问题堆起来变成一个矩阵:
这里我们没有将 y_query 放进去,是因为这个矩阵会被输入给 Transformer,而我们希望得到的预测是 y_query。我们将这个数据编码矩阵 (embedding matrix) 输入到如下的单层线性 Transformer 中:
是的你没有看错,这就是一个(一层的、线性的)Transformer。这里的输入和输出是同样大小的矩阵,第一个加数 E 表示经典的残差连接,后面的 W_1 表示 value 矩阵,而 W_2 则是把 key 和 query 矩阵的乘积直接当成了一个矩阵。
之所以称其为「线性的」Transformer,是因为我们去掉了经典 Transformer 中的归一化(除以某个系数后加上 softmax)和非线性激活函数,将其替代为直接除以 token 矩阵 E 的大小(乘以 1/N)。我们将输出矩阵的右下角元素记为ŷ_query,它是模型对 y_query 的预测。
我们假设所有的数据来自于一个随机的线性模型,即对于 i=1,2,...,N,有 y_i = w・x_i 以及 y_query = w・x_query。我们假设 w 服从标准高斯分布,而 x_i 独立同分布地服从一个均值为 0,方差为 𝝠 的高斯分布。在训练的过程中,我们最小化如下的目标函数:
Transformer 如何学到正确的线性模型?
本文从理论上证明了,当我们用 gradient flow(也就是 gradient descent 加上无限小的步长)对上述的目标函数进行优化的时候,参数矩阵 $W_1$ 和 $W_2$ 都能收敛到某个特殊的全局最优解。
更重要的是,这个全局最优解是可以显式写出的:
这里,$d$ 是左上角的分块矩阵的维数。
更重要的是,假设我们模型中的参数已经收敛到这个全局最优解,而此时我们有一个新的任务(新的 weight 向量 w)和一系列针对这个任务的范例(新的 x_i , y_i 和 x_query),当我们把这些数据堆成一个同样格式的 embedding 矩阵 E 然后输入给训练好的模型时,这个模型会给出什么样的预测呢?通过简单的计算(真的很简单)可以得到,模型的预测是
为什么会有这个约等号呢?是因为假设我们的范例足够多(N 足够大),大数定律告诉我们中间括号里的 empirical covariance matrix 会几乎处处收敛到真正的 population covariance matrix,而我们如果进一步忽略前一个括号中的 o (1) 小量,就可以将 𝝠 和它的逆抵消。从而,模型的预测近似地等于 w・x_query 也就是真实的,我们所希望预测到的数据标签 y_query。
也就是说,当提供的范例足够多的时候,经过预训练的一层 Transformer 可以从范例中学到正确的线性模型对应的参数,并将这个参数应用到新的输入中,得到正确的标签预测。
更多有趣的现象?
本文还研究了更多关于 Transformer 的 ICL 能力的有趣现象。点击「阅读全文」获取原文信息。
- 非线性任务?—— 当我们提供的范例来自一个非线性任务时,经过预训练的 Transformer 学到了对应的最佳线性预测。这个结论可以被泛化到更一般的联合分布的情况。
- 分布转移 (distribution shift)?—— 前人的实验中观察到,当测试时的任务分布或者数据分布不同于训练时的分布时,Transformer 能够承受一些种类的分布转移,但在另一些分布转移中会表现的很差。本文从理论上研究了 Transformer 面对分布转移时的行为,并成功解释了来自斯坦福的论文 [2] 中关于分布转移的大部分实验现象。
- 收敛速率?—— 本文将基于上下文学习的能力解释为一种学习新算法(新函数)的能力,并给出了对于训练范例的数量和测试范例的数量二者的收敛速率。值得注意的是,线性 Transformer 对于二者的收敛速率是不同的。
- 随机协方差矩阵?—— 本文还证明,如果数据来源的协方差矩阵是随机的,一层的线性 Transformer 无法从上下文中学到正确的线性模型。我们的实验结果表明,更复杂的模型(诸如 GPT2)依然不能完全解决随机协方差矩阵的问题。
- 基于上下文学习的理论框架?—— 本文建立了严格的基于上下文学习的理论框架,区分了基于上下文的训练 (In-Context Training) 和基于上下文的学习能力 (In-Context Learnability) 这两个概念。
#vision transformer~x2
Transformer 的配置是否与其训练目标之间存在着密切关系?
论文链接:
https://arxiv.org/abs/2205.10505
本文研究了 Transformer 类模型结构(configration)设计(即模型深度和宽度)与训练目标之间的关系。结论是:token 级的训练目标(如 masked token prediction)相对更适合扩展更深层的模型,而 sequence 级的训练目标(如语句分类)则相对不适合训练深层神经网络,在训练时会遇到 over-smoothing problem。在配置模型的结构时,我们应该注意模型的训练目标。
一般而言,在我们讨论不同的模型时,为了比较的公平,我们会采用相同的配置。然而,如果某个模型只是因为在结构上更适应训练目标,它可能会在比较中胜出。对于不同的训练任务,如果没有进行相应的模型配置搜索,它的潜力可能会被低估。因此,为了充分理解每个新颖训练目标的应用潜力,我们建议研究者进行合理的研究并自定义结构配置。
下面将集中解释一些概念,以便于快速理解:
Training Objective(训练目标)
Vanilla Classification
Mask Autoencoder
Next Token Prediction
训练目标是模型在训练过程中完成的任务,也可以理解为其需要优化的损失函数。在模型训练的过程中,有多种不同的训练目标可以使用,在此我们列出了 3 种不同的训练目标并将其归类为 token level 和 sequence level:
- sequence level:
- classification 分类任务,作为监督训练任务。简单分类(Vanilla Classification)要求模型对输入直接进行分类,如对句子进行情感分类,对图片进行分类;而 CLIP 的分类任务要求模型将图片与句子进行匹配。
- token level:(无监督)
- masked autoencoder:masked token 预测任务,模型对部分遮盖的输入进行重建
- next token prediction:对序列的下一个 token 进行预测
Transformer Configration(模型结构:配置)
Configration for Transformers
Transoformer 的配置指的是定义 Transformer 模型结构和大小的超参数,包括层数(深度),隐藏层大小(宽度),注意力头的个数等。
Over-smoothing (过度平滑)
Over-Smoothing
过度平滑是一个在图神经网络中的概念,具体表示模型输出趋向平滑一致,各个点的输出缺少细节和变化的现象。这一现象在图神经网络中被广泛研究,但它也在 Transformer 模型中存在。(已有研究)发现 Transoformer 模型遇到的 over-smoothing 问题阻碍模型加深。具体而言,当堆叠多层的 Transformer layers 时,transformer layer 输出的 token 表征(向量)会趋于一致,丢失独特性。这阻碍了 Transformer 模型的扩展性,特别是在深度这一维度上。增加 Transformer 模型的深度只带来微小的性能提升,有时甚至会损害原有模型的性能。
1. ViT 和 MAE 中的 over-smoothing
直观上,掩码自编码器框架(例如 BERT、BEiT、MAE)的训练目标是基于未掩码的 unmasked token 恢复被掩码的 masked token。与使用简单分类目标训练 Transformer 相比,掩码自编码器框架采用了序列标注目标。我们先假设掩码自编码器训练能缓解 over-smoothing,这可能是掩码自编码器 MAE 有助于提升 Transformer 性能的原因之一。
由于不同的 masked token 相邻的 unmaksed token 也不同,unmasked token 必须具有充分的语义信息,以准确预测其临近的 masked token。也即,unmasked token 的表征的语义信息是重要的,这抑制了它们趋向一致。总之,我们可以推断掩码自编码器的训练目标通过对 token 间的差异进行正则化,有助于缓解过度平滑问题。
我们通过可视化的实验来验证了这一观点。我们发现 ViT 的 token 表征在更深的层中更加接近,而 MAE 模型则避免了这个问题,这说明在掩码自编码器中,over-smoothing 问题得到了缓解。通过简单的分类任务训练 Transformer 模型则不具备这一特点。
ViT vs MAE
进一步的,我们还通过傅里叶方法对这一问题进行了研究,具体可以参考我们的论文。
2. CLIP 和 LLM 中的 over-smoothing
根据上述分析,我们可以得出结论:token 级的训练目标(例如语言建模中的:next token prediction)表现出较轻的 over-smoothing。另一方面,基于 sequence 级别的目标(如对比图像预训练)更容易出现 over-smoothing。为了验证这个结论,我们使用 CLIP 和 OPT 进行了类似的 cosine 相似度实验。我们可以看到 CLIP 模型展现了与 Vanilla ViT 类似的 over-smoothing 现象。这一观察结果符合我们的预期。
此外,为了探究 next-token prediction 这一广泛采用的语言建模预训练目标是否可以缓解 over-smoothing,我们对 OPT 进行了评估,并发现它能够有效应对 over-smoothing。这一发现具有重要意义,因为它有助于解释为什么语言建模模型在可扩展性方面(如超大规模预训练语言模型)优于许多视觉模型。
ViT vs CLIP
Different OPTs
溯源:现有的Transformer架构是怎么来的
History for Transformer Configration
为了在研究时保证公平的比较,现有的 Transformer 类模型通常会遵循固定的结构(small, base, large…),即相同的宽度和深度。比如前面提到的 transformer-base 就是宽度为 768(隐藏层),深度为 12(层数)。然而,对于不同的研究领域,不同的模型功能,为什么仍要采用相同的超参数?
为此,我们首先对 Transformer 架构进行了溯源,回顾了代表性的工作中 Transformer 结构的来源:Vision Transformer 的作者根据 BERT 中 Transformer-base 的结构作为其 ViT 模型配置;而 BERT 在选择配置时遵循了 OpenAI GPT 的方法;OpenAI 则参考了最初的 Transformer 论文。
在最初的 Transformer 论文中,最佳配置来源于机器翻译任务的笑容实验。也就是说,对于不同任务,我们均采用了基于对机器翻译任务的 Transformer 配置。(参考上文,这是一种序列级别的任务)
现状:不同的模型采用不同的训练目标
Different Tasks for Different Models
现在,Transformer 模型通过各种训练目标进行训练。以 ViT 为例,我们可以在图像分类的监督学习环境下从头开始训练 Transformer 模型。在这种直接的图像分类任务中,每个图像被建模为一个 token 序列,其中每个 token 对应图像中的一个图块。我们使用来自图像的所有 token(即图块)的全局信息来预测单个标签,即图像类别。
在这里,由于训练目标是捕捉图像的全局信息,token 表示之间的差异不会直接被考虑。这一训练目标与机器翻译任务完全不同,机器翻译要求模型理解 token 序列,并以此生成另一个序列。
据此,我们可以合理假设对于这两个不同任务,应该存在不同的最佳 Transformer 配置。
对于MAE训练目标调整模型结构
基于上述的讨论,我们得到了如下认识:
- 现有的 Transformer 模型在加深模型深度时会发生 over-smoothing 问题,这阻碍了模型在深度上的拓展。
- 相较于简单分类训练目标,MAE 的掩码预测任务能够缓解 over-smoothing。(进一步地,token 级别的训练目标都能够一定程度地缓解 over-smoothing)
- MAE 的现有模型结构继承于机器翻译任务上的最佳结构设置,不一定合理。
Bamboo Configration综合以上三点,可以推知 MAE 应该能够在深度上更好的拓展,也即使用更深的模型架构。本文探索了 MAE 在更深,更窄的模型设置下的表现:采用本文提出的 Bamboo(更深,更窄)模型配置,我们可以在视觉和语言任务上得到明显的性能提升。
Vision Experiments
Language Experiments另外,我们在深度拓展性上也做了实验,可以看到,当采用 Bamboo 的配置时,MAE 能够获得明显的性能提升,而对于 ViT 而言,更深的模型则是有害的。MAE 在深度增加到 48 层时仍能获得性能提升,而 ViT 则总是处于性能下降的趋势。
Scaling of Depth for ViT
Scaling of Depth for MAE
以上的结果佐证了本文提出的观点:训练目标能够影响模型拓展的行为。Training objectives can greatly change the scaling behavior.
结论
本文发现,Transformer 的配置与其训练目标之间存在着密切关系。sequence 级别的训练目标,如直接分类和 CLIP,通常遇到 over-smoothing。而 token 级的训练目标,如 MAE 和 LLMs 的 next token prediction,可以较好地缓解 over-smoothing。这一结论解释了许多模型扩展性研究结果,例如 GPT-based LLMs 的可扩展性以及 MAE 比 ViT 更具扩展性的现象。我们认为这一观点对我们的学术界有助于理解许多 Transformer 模型的扩展行为。
#Transformer~x3
这是Transformer时代端侧AI芯片的机遇与挑战 , 还是先感谢大佬啊 搬来给自己学习 勿怪啊
Transformer似乎已经将CNN的地位逐步吞噬,而Transformer需要更大的计算量,更容易被带宽和缓存掣肘,那么短策AI芯片公司该如何应对这一机遇和挑战?本文分析总结了各个模态典型transformer模型及其在端侧视角下的优劣。
似乎就在这两年,transformer在语音、视觉、雷达这些模态对CNN悄无声息就形成了碾压之势。考虑到这些领域的模型几乎承包了端侧的workload,那么,广大端侧AI芯片公司接下来该如何应对?下一代芯片设计选型该如何考量?我想业界的朋友们肯定没少调研:Transformer万般好,但在端侧这个算力规模下,相比CNN,Transformer往往需要更大的计算量才能博得实质性的优势,同时Transformer的计算强度更低,更易被带宽和缓存掣肘。。。所以需要采用和面向LLM的大算力AI芯片类似的策略:加缓存,加带宽。
额,这样真的就够了?两个月前的我还真是这么觉得的,感叹transformer大一统的时代已来,堆料就好,甚至我在下面这个回答中还输出了些许对AiSys这个领域接下来发展的悲观态度。但最近,在研究了这些领域大大小小热门transformer结构,以及和一些算法的朋友交流后,我发现transformer在其他模态上的应用范式和NLP存在不小的差别,妄图将面向LLM的芯片设计决策直接套用到端侧并不合适。
接下来我将罗列各个模态典型transformer模型及其在端侧视角下的优劣,思考与总结将在最后给出。对模型不感兴趣的朋友可以跳过铺垫,直接看总结。
此外,为了更好的交流(和谐),一如既往先对讨论对象下定义,本文所指的端侧AI芯片代表下图这个圈。Mobile、Edge、Autonomous。这个区间的AI芯片,一方面对成本更加敏感,在缓存和带宽上的堆料相对保守,另一方面能效更有优势的DSA占比更高,导致相对编程灵活性偏弱。
端侧典型transformer模型盘点
视觉主干篇
Vit: AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE, 2020
简介
整体流程上:通过patch embedding将图像直接打包编码,转换成transformer类型的序列特征,接上patch position encoding后,后续由经典的transformer block全权接管。
算法角度上:Vit结构只通过少量特征前处理就把视觉信息转换为了序列特征,还是挺优雅简洁的。但由于尺度信息在patch embedding阶段就被patch_size唯一确定,致使对视觉任务至关重要的多尺度信息缺位。因此,在除分类之外的其他视觉任务中,Vit的表现并不理想。
端侧视角下的优劣
优势:
Vit结构除了patch embedding与输出形式之外,与经典transformer结构并无二致,所以可直接享用抛开kv-cache的绝大多数transformer推理优化策略。
劣势:
计算量随分辨率二次增长(seqlen=(H/patch_size)x(W/patch_size))。当应用到大分辨率场景时(比如检测分割),无论是FFN还是MHA中的矩阵乘都无法直接载入资源受限的端侧近核缓存。虽然有各类并行切分策略支撑,但缓存与主存间的超额换入换出产生的带宽开销还是严重制约了它的计算效率。
patch_size级别(16/32)的特殊conv2d,也并不一并有很好的利用效率。当然重点还是1),2)的问题和CNN第一个inchannel=3的卷积很像,不是瓶颈,而且2)也可以转换为permute+gemm的形式规避。
swintransformer:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows, ICCV, 2021
简介
整体流程上:参考上图,PatchMerging逐Stage降尺度(第一个PatchPartition+LinearEmbedding可以看做特化的PatchMerging);单个SwinTransformer先通过WindowPartition将视觉特征转换为以局部窗口为粒度的序列特征,送入经典Transformer结构处理完毕后,再通过WindowUnpartition转回视觉特征;每俩SwinTransformer做一次窗口滑动,以实现全局的信息流通。
算法角度上:SwinTransformer这套魔改的WindowAttention还是肯定了视觉任务中的局部性特点。另外,在整个pipeline中视觉特征与序列特征的来回切换,使得基于注意力的多尺度信息提取成为可能。这对Transformer在检测、分割等视觉任务上的落地有重要意义。
端侧视角下的优劣
- 优势
- WindowAttention机制使得计算量随分辨率线性增长,解决了ViT的主要问题。此外,序列规模seqlen仅与窗口尺寸ws相关(seqlen=ws x ws),只要embed_dim设计的当,无论何种分辨率,都能将矩阵运算常驻于AI芯片的近核缓存。
- 该机制还变相地提升了Batch的大小(Batch=batch_origin x (H/ws) x (W/ws), ws指窗口大小)。并行无需同步,完全免费!!这对有多核的架构设计来说,绝对是意外之喜。
- 劣势
- 除了继承了ViT的PatchEmbedding的特殊卷积之外,WindowPartition/Unpartition和窗口滑动引入了permute/torch.roll,和windowsize与分辨率未匹配引入了Pad,这些高频的数据重排无疑对性能有较大的影响。
后续的演进
- 注意力机制上:窗口注意力(SwinTransformer)与全局注意力(ViT)的结合。比如ViTDet:Exploring Plain Vision Transformer Backbones for Object Detection, ECCV, 2022。就是部分Transformer使用WindowAttention,部分使用Attention。
- 位置编码上:将NLP领域的位置编码创新往视觉任务上套,比如RoPE: ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING, 2021。如下所示,核心计算上就是奇偶旋转偶去反,(x, y) --> (-y, x)。在onnx层级会被拆分为:低维split+neg+低维concat的子图。将一个明显的1pass转换为了multipass,对性能还是略有影响的。
def rotate_half(x):
x = rearrange(x, '... (d r) -> ... d r', r = 2)
x1, x2 = x.unbind(dim = -1)
x = torch.stack((-x2, x1), dim = -1)
return rearrange(x, '... d r -> ... (d r)')
视觉检测篇
DETR: End-to-End Object Detection with Transformers, ECCV, 2020
简介
- 整体流程上:如上图。主干提特征,做一道ChannelMapping和位置编码后,送入经典的Transformer编解码模块,并最终交由FFN出框。值得说明的是,解码部分的query embedding是一个预设的固定值(学习参数)。
- 算法角度上:基于transformer的端到端框架,无NMS,无任何人工特征与先验知识,但训练困难。部署视角下,简直是惊为天人的设计。
端侧视角下的优劣
- 优势
- 端到端没有nms,后处理无需offload到cpu。
- 和ViT一样,基本上能无缝使用绝大多数transformer推理优化策略。
- 劣势
- 从检测的典型负载而言,这个计算量还是偏大。达到同样的算法效果,相比CNN时代检测头组合,开销太大,还是有点得不偿失。
Deformable DETR: DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION, 2020
简介
- 整体流程上:Deformable DETR的流程有点复杂,我是扫了代码转了模型,才品出门道。感觉单凭上面两张结构图,似乎不容易搞懂。我尝试以模型结构的视角简练地解读一把:Deformable DETR接收主干提取的多尺度视觉特征,送入其定制的DeformableTransformer结构中。在该结构内,query特征存在视觉多尺度和序列两种表示形式。基于序列特征预测感兴趣特征点的坐标(Fig2中的referencepoints)与偏移(Fig2中的offset),再按该坐标分别从多尺度视觉特征中抽取特征点并结合序列特征计算得到的权重,得到下一轮DeformableTransformer的query输入。
- 算法角度上:降低了训练的难度。
端侧视角下的优劣
- 优势
- 好像很难给Deformable DETR找一个部署层面的优点,硬要说的话,其魔改的DeformableAttention矩阵计算确实要少一点。
- 劣势
- 如果WindowPartition和WindowUnpartition在模型中不断插入的数据reorder(permute)对端侧性能有冲击的话,我想DeformableAttention的高频grid_sample抽取特征点的操作,对不灵活低带宽的端侧只能用灾难来形容。
- 更不要说多尺度视觉特征与序列特征切换时引入的特化split(非等分切分)和高维permute了。
后续的演进
- DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection, 2022,在DeformableDETR基础上进一步引入了query selection,在解码阶段增加了目标优选(topk+gather)。
点云篇
DSVT: DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets CVPR 2023
简介
- 整体流程上:整个DSVT的pipeline(上图中的DSVT部分)可以理解为点云版本的swintransformer。1). 可并行的局部自注意力:DSVT将稀疏voxel分为多窗口并最终分为等数量的set,针对每个set做attention。2). 全局信息流通(shift窗口滑动):DSVT分别对x/y做partition。
- 数据的切换方式:预先记录在x/y方向排序对应至voxel特征上的索引,并通过gather/scatter实现数据在voxel点云特征空间和transformer序列特征空间之间的切换。
- 流程中的Voxelization和BEV都是领域专业术语,本文不做讨论,voxel部分可参考VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection CVPR 2018。
- DSVT和SwinTransformer除了流程之外,典型负载也比较相似(DSVT中set)
端侧视角下的优劣
- 优势
- 继承了WindowAttention的所有收益。降低了计算量、单一矩阵的计算规模,提升了计算的并行度。
- 劣势
- 数据在transformer序列特征空间和voxel点云特征空间下的切换成本远高于其与视觉特征的。一是scatter/gather这类数据随机访问(shuffle)远比数据重排操作(reorder)耗时,二是这些操作操作在端侧的支持性是个问号。全部offload给cpu吗,这不是开玩笑。
- 一句话,端侧不友好跟DSVT本身没关系,是基因不好吃了点云数据结构的亏。
3D检测头的演进
3D检测头的算法演进路线比较复杂,要做的铺垫很多,比如CNN时代的CenterNet、CenterPoint,但结局却与2D检测殊途同归,就是DETR化。所以反而不用着墨太多。
多模态篇
CLIP: Learning Transferable Visual Models From Natural Language Supervision ICML 2021
简介
- 整体流程上:图片编码和文本编码部分各经过transformer encoder(也可以是其他编码结构),再对各自的编码特征做多模态融合(norm),再计算彼此的余弦相似度(matmul, cos)。
端侧视角下的优劣
- 优点
- 和ViT一样,简单质朴的结构,大道至简的践行者,这对端侧落地是一个利好。
- 缺点
- 包含prompt engineering的text encoder,其输入文本序列会随应用上下文实时改变,对端侧软件栈的动态shape支持性提出了更高的要求。
轻量级Transformer
从模型结构角度来说,我把轻量级Transformer分为两个派系:有机结合派与深入改革派。
有机结合派
该派别的代表的有:
- EfficientFormer: Vision Transformers at MobileNet Speed NIPS 2022
- MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformerarxiv 2021
只需从Architecture Overview中我们就能发现他们的端倪:熟悉的conv+relu+bn,逐级降采样。这类模型还是保留了CNN架构的典型特点,只有头部和躯干部分植入了Transformer单元。
这类算法虽然可以灵活地切换血统(调整其Transformer单元的占比),来达到在算法效果和推理性能上的平衡。但是从系统的角度出发,我感觉这类算法在定位上比较模糊:究竟是面向CNN算力区间,Transformer算力区间,还是两者的中间地带?至少到目前为止,从我了解的信息来看,中间地带是这个派系的主要舞台。
深入改革派
该派别的代表的有:
- Next-ViT: Next Generation Vision Transformer for Efficient Deployment in Realistic Industrial Scenarios, 2022
- EfficientViT: Lightweight Multi-Scale Attention for On-Device Semantic Segmentation, ECCV, 2022
这个派系已经不满足于Transformer粗浅地植入,他们更深层次地改造Transformer结构,用pooling裁剪注意力数量以缩减注意力矩阵规模,用relu/pooling实现近似softmax的全局注意力机制。
相比于有机结合派,这个派系迁就现有AI芯片特性的算法改造,反而目标清晰,就是要在CNN的算力区间里一决雌雄。设计“Domain Specific Algorithm”,对于部署和优化来说,自然是再好不过了。但是这种算法向平台的反向适配,带着旧时代AI芯片枷锁负重前行的想法,我总感觉与主流的创新思路有点背道而驰。
总结
更好的编程性
归纳偏执的差异深刻的影响了CNN和Transformer的演进模式,CNN的局部性特点无疑更多地引导了网络全局结构层面的创新,比如ResNet、FPN等等,而Transformer的全局性则反过来使改进优化更多体现在了针对Attention和FFN细节上的修修补补,也就是算子层面。再叠加上Transformer在模型中往往以Block/Layer形式堆叠,那么围绕Transformer所引入的算子创新将复制到所有Transformer单元。因此,Transformer时代,这些模态模型特化算子的占比将会远高于过去。上述盘点的DeformableDETR/DSVT的grid_sample/gather/scatter与高维张量,SwinT和VitDet引入的WindowPartition与Unpartition操作(额外的Pad与高维Permute),以及RoPE等特殊的位置编码运算,就是最好的例证。
这个时候,倘若仍按照CNN时代的思路,将grid_sample/gather/scatter等编译软件栈无法处理的计算负载offload到cpu,将高频地打断pipeline并额外挤占带宽,必然大错特错。相反,配置与TensorCore共享高速缓存的可编程加速单元,或者在DSP中嵌入TensorCore都会是一个更好的设计方向。
考虑到应用FlashAttention这种对计算灵活性要求极高(我这里说的是量化版FA)的优化策略,上述决策只会被进一步强化。那么,进一步联想,在这个趋势下,走端侧路线的存算AI芯片是否会面临更大的挑战(毕竟不是所有运算和优化都适合量化)?
更合理的资源配置
更贴合的缓存尺寸。无论是受限于WindowAttention的视觉主干和点云DSVT,还是受限于Detection Objects的检测任务QueryEmbedding,亦或是多模态精简的prompt,这些算法在设计上都暗示了序列长度并不会随模型计算量增大而无限膨胀。简单算一下各模态transformer较大的参数配置场景(mlp_ratio=4, queryobj=seqlen=1024, embed_dim=1024),8M高速缓存就能把完全兜住单batch8bit推理时任何单一计算的权重数据。所以没必要无限堆料,尺寸到位就行。
有潜在优势的多核设计。从SwinTransformer/ViTDet等workload来看,在强调局部性的任务中算法建模有更高的意愿将Transformer的注意力输入改造代表局部特征的相互独立的子序列。在这种情况下,多核设计的收益将更加的明显。
更精准的算力定位。 目前来看,transformer时代算法存在两种创新模式,一种是轻量化Transformer,与CNN深度结合,在原有结构不变的前提下,引入少量Transformer模块,走底层路线;另一种是基于模态特点,引入新算子适配特征数据,做Transformer定制化,走的是上层路线。路线之争我不敢妄议,但有一点可以肯定,这两者的算力区间是截然不同的。一款AI芯片的设计定位,不能摇摆模糊,只能二选一。两头都要,底层路线没有价格优势,上层路线算力资源又跟不上,结果可能会比较难看。因此,需要团队里的软硬件协同研究员们在设计阶段的更多投入,把握好transformer效果优势的边界点。
更精细的Buffer建模
这些workload充分体现了:
- 非语言模型跨特征空间的求解述求。数据会在序列特征和其他模态特征上来回切换,以寻求更好的特征抽取。比如SwinT中图像特征下的shift与降采样,以及序列特征下的Attention与FFN,再比如DSVT在点云特征下的特征分组,和同样序列特征下的Attention/FFN。
- 位置信息的花式编码述求。比如RoPE,以及DINO中的这个解码端position操作。
若IR层级的Buffer建模能从tensor颗粒度直线跨越到item颗粒度,那么一方面,跨特征空间切换所引入的reorder(permute)和shuffle(grid_sample/gather)操作将能被更好的刻画,从而拥有了进一步挖掘其与前继与后继的eltwise/gemm节点融合的空间,另一方面,花式位置编码(RoPE等)计算子图中各Buffer间的集合和依赖关系也将被更好的建模,从而使整个子图从multipass转换为1pass成为可能。这些性能收益的叠加很可能成为最终性能对标时的胜负手。
更高扩展性的软件栈
Transformer算法的这些特性对软件栈的支持性上也有一定的影响:
- 各模态Transformer引入的特殊算子中,除了shuffle类操作,绝大多数workload(高维张量运算,高维Permute,非等分Split等)都是编译软件栈的权责范畴,由它将这些负载平凡化并完成硬件适配。
- 虽然除了多模态之外的workload并没有对动态Shape存在强烈诉求,但鉴于多模态模型所展示的巨大潜力,编译软件栈还是有必要提前布局动态Shape,并做好合理的版本规划。
而这些在CNN时代可能压根没被纳入测试用例,甚至是功能清单。显然,这是AI芯片编译软件栈的可扩展性提出了更高的要求。设计上的考量维度太多,但测试这个方面,我倒是觉得到了上马Fuzz的阶段了。
也许能从后续的SDK版本更迭和release note中窥探一下各家的应对情况
#Transformer~x4
这里介绍自2020年至2023年开展的超过60项关于Transformer模型在SOD任务中的研究,这些研究涵盖了各种检测应用,包括通用图像、航拍图像、医学图像、主动毫米波图像、水下图像和视频中的小目标检测。 在小目标检测领域应用综述
Transformer模型已经在计算机视觉领域迅速赢得了广泛关注,尤其是在目标识别和检测领域。在调研了最先进的目标检测方法的结果后,作者注意到,在几乎每个视频或图像数据集中,Transformer模型几乎都优于成熟的基于CNN的检测器。
虽然Transformer模型在小目标检测(SOD)技术方面仍然处于领先地位,但本文旨在探讨如此强大的网络所提供的性能优势,并确定其在SOD方面卓越的潜在原因。小目标已被确定为检测框架中最具挑战性的目标之一,因为它们的可见性较低。作者旨在研究可能增强Transformer模型在SOD中性能的潜在策略。
本综述介绍了自2020年至2023年开展的超过60项关于Transformer模型在SOD任务中的研究,这些研究涵盖了各种检测应用,包括通用图像、航拍图像、医学图像、主动毫米波图像、水下图像和视频中的小目标检测。作者还编制并呈现了一份适用于SOD的12个大规模数据集的列表,这些数据集在先前的研究中被忽视了,并使用流行的指标如均值平均精度(mAP)、每秒帧数(FPS)、参数数量等来比较已调研的研究的性能。
综述地址:https://github.com/arekavandi/Transformer-SOD
小目标检测(SOD)已被认为是最先进的目标检测方法面临的重要挑战之一。术语“小目标”指的是在输入图像中占据较小比例的目标。例如,在广泛使用的MS COCO数据集中,它定义了边界框尺寸为32×32像素或更小的目标,在典型的480×640图像中(图1)。
其他数据集也有它们自己的定义,例如占据图像10%的目标。小目标通常会被错过或检测到的边界框定位不正确,有时还会出现错误的标签。在SOD中定位不准确的主要原因是输入图像或视频帧中提供的信息有限,叠加在深度网络的多层中经历的后续空间退化。由于小目标经常出现在各种应用领域,如行人检测、医学图像分析、人脸识别、交通标志检测、交通信号灯检测、船只检测、合成孔径雷达(SAR)目标检测等领域,因此值得研究现代深度学习SOD技术的性能。
在本文中,作者比较了基于Transformer的检测器与基于卷积神经网络(CNN)的检测器在小目标检测性能方面的差异。如果Transformer明显优于CNN,作者将尝试揭示Transformer性能强劲背后的原因。一个即时的解释可能是,Transformer模型对输入图像中的成对位置之间的交互进行建模。这实际上是一种编码上下文的方式。而且,已经确立了上下文是检测和识别小目标的主要信息来源,无论是对人类还是对计算模型。然而,这可能不是解释Transformer成功的唯一因素。
具体而言,作者旨在从多个维度分析这一成功,包括目标表示、高分辨率或多尺度特征图的快速注意、完全基于Transformer的检测、架构和块修改、辅助技术、改进的特征表示和时空信息。此外,作者指出了一些可能增强Transformer在SOD中性能的方法。
在作者之前的工作中,作者综述了深度学习中采用的众多策略,以增强光学图像和视频中小目标检测的性能,截至2022年。作者展示了除了采用新的深度学习结构如Transformer之外,流行的方法还包括数据增强、超分辨率、多尺度特征学习、上下文学习、基于注意力的学习、区域提议、损失函数正则化、利用辅助任务以及时空特征聚合。
此外,作者观察到在大多数数据集上,Transformer是定位小目标的领先方法之一。然而,鉴于之前有综述主要评估了160多篇关于基于CNN网络的论文,没有进行深入的Transformer为中心的方法探讨。鉴于该领域的增长和探索速度,现在是时候深入研究针对小目标检测的当前Transformer模型了。
在本文中,作者的目标是全面了解Transformer应用于小目标检测时所取得的令人印象深刻的性能背后的因素,以及它们与用于通用目标检测的策略的区别。为了奠定基础,作者首先强调了用于小目标检测的著名的基于Transformer的目标检测器,将它们的进展与已建立的基于CNN的方法进行了对比。
自2017年以来,该领域已发表了许多综述文章。作者在作者之前的综述中对这些综述文章进行了广泛的讨论和列举。另一篇最近的综述文章主要关注基于CNN的技术。这份当前综述的叙述与以往的综述有所不同。作者在本文中的重点明确集中在Transformer上,这是以前未曾探讨的一个方面,将它们定位为图像和视频小目标检测的主导网络架构。这需要一个适合这种创新架构的独特分类法,有意地将基于CNN的方法放在一边。鉴于这个主题的新颖性和复杂性,作者的综述主要关注主要是2022年后首次提出的工作。此外,作者还介绍了用于定位和检测小目标的新数据集,这些数据集涵盖了更广泛的应用领域。
本综述主要研究了专为小目标定位和分类定制的方法,或者间接解决了SOD挑战的方法。作者分析的重点是这些论文中针对小目标的检测结果。然而,早期的研究虽然注意到了SOD的结果,但在性能上表现不佳或在开发方法中忽视了SOD特定的参数,这些研究未被纳入本综述。
目标检测,尤其是小目标检测(SOD),长期以来一直依赖于基于CNN的深度学习模型。随着时间的推移,出现了一系列单阶段和双阶段的检测器,例如You Only Look Once (YOLO) 变种,Single Shot multi-box Detector (SSD),RetinaNet,Spatial Pyramid Pooling Network (SPP-Net) ,Fast R-CNN,Faster RCNN,Region-Based Fully Convolutional Networks (R-FCN),Mask R-CNN,Feature Pyramid Networks (FPN),cascade R-CNN 和 Libra R-CNN。这些技术通常与各种策略结合使用,以改进它们在小目标检测中的检测性能,其中多尺度特征学习是最常用的方法。
、Transformer模型首次作为一种新颖的机器翻译技术被引入。该模型旨在超越传统的循环网络和CNN,通过引入一种完全基于注意力机制的新网络架构,从而消除了对循环和卷积的需求。
Transformer模型由两个主要模块组成:编码器和解码器。
图2提供了每个模块内部处理块的可视表示。
对于不熟悉这个主题的读者,表1提供了计算机视觉中Transformer常用术语的描述。在SOD的背景下,编码器模块接受输入Token,可以是图像块或视频片段,并采用各种特征嵌入方法,如利用预训练的CNN来提取适当的表示。位置编码块将位置信息嵌入到每个Token的特征表示中。
最终,从前面步骤获得的结果与跳跃连接和标准化块组合在一起。然后,这些向量分别通过全连接层传递,应用激活函数引入网络的非线性。这个块的参数在所有向量之间共享。这个过程重复了总共N次,对应于深度网络中的层数。
在解码器模块中,使用了与编码器中生成的向量类似的过程,同时还消耗了先前生成的预测/输出作为额外的输入。最终,计算可能输出类别的输出概率。注意通过Key和Query矩阵之间的点积操作来实现,如公式(3)所示,该操作计算了用于矩阵V的线性组合的权重。
还提供了一种替代的Transformer表示,如下所示:
Dosovitskiy等人是首批在计算机视觉任务中利用Transformer架构的研究者,包括图像识别。Transformer在各种视觉任务中表现出的出色性能为它们在目标检测研究领域的应用铺平了道路。这个领域的两个开创性工作是DEtection Transformer (DETR) (图3,顶部)和ViT-FRCNN [32](图3,底部)。DETR旨在通过采用一种基于集合的全局损失减少对CNN-based技术在后处理中的依赖。这种特定的损失函数通过二分匹配有助于通过二分匹配折叠近似重复的预测,确保每个预测都与其匹配的GT边界框唯一配对。作为端到端模型,DETR受益于全局计算和完美记忆,适用于处理从视频/图像生成的长序列。在DETR中使用的二分匹配损失定义如下:
相比之下,ViT-FRCNN使用Vision Transformer (ViT)进行目标检测,并通过快速微调表明,对大规模数据集进行预训练的ViT增强了检测性能。虽然ViT-FRCNN与DETR一样,在其管道中使用CNN-based网络,特别是在检测头中使用,但它与DETR不同,它使用Transformer(仅编码器)来编码视觉属性。
此外,ViT-FRCNN使用传统的Region Proposal Network (RPN)生成检测(如图3,底部所示)。DETR和ViT-FRCNN在小目标的检测和分类方面表现出了次优的结果。当增加输入图像的Token大小时,ViT-FRCNN甚至表现出更差的结果。
最佳结果是在Token大小设置为16×16时实现的,并且所有中间Transformer状态都与最终Transformer层连接在一起。此外,这两个检测器在不同阶段都依赖于CNN,在DETR中用作特征提取的Backbone,在ViT-FRCNN中用于检测头。为了提高小目标检测的结果,关键是尽量保持图像块的大小尽可能小,以保留空间分辨率,从而增加计算成本。
用于小目标检测的Transformer
在本节中,作者将讨论基于Transformer的SOD网络。小目标检测器的分类法如图4所示。作者表明,现有的基于新型Transformer的检测器可以通过以下一个或几个角度进行分析:目标表示、对高分辨率或多尺度特征图的快速关注、完全基于Transformer的检测、架构和块修改、辅助技术、改进的特征表示和时空信息。
目标表示
在目标检测技术中采用了各种目标表示技术。感兴趣的目标可以用矩形框、点(如中心点和点集)、概率目标和关键点来表示。每种目标表示技术都有其自己的优点和缺点,涉及到注释格式和小目标表示的需求。寻找最佳表示技术的追求,同时保留现有表示的所有优点,始于 RelationNet++。这种方法通过一个称为 Bridging Visual Representations (BVR) 的模块,将各种异构的视觉表示连接起来,并通过关键采样和共享位置嵌入等新技术结合它们的优势。
更重要的是,BVR 依赖于一个注意力模块,将一种表示形式指定为“主表示”(或Query),而将其他表示形式指定为“辅助表示”(或键)。
BVR 块如图 5 所示,在图像Anchor框的目标检测方法中通过无缝集成中心和角点来增强Anchor框的特征表示。不同的目标表示也显示在图 5 中。CenterNet++ 被提出作为一种新颖的自底向上方法。与一次性估计所有目标参数不同,CenterNet++ 战略性地单独识别目标的各个组成部分,即左上角、左下角和中心关键点。然后,采用后处理方法来聚类与同一目标相关联的点。
与估计整个目标的自上而下方法相比,这种技术在小目标检测中展现出更高的召回率。
高分辨率或多尺度特征图的快速注意力
先前的研究表明,保持高分辨率的特征图对于保持SOD的高性能是必要的。与CNN相比,Transformer本质上具有更高的复杂性,因为它们与Token数量(例如像素数)的数量呈二次增长的复杂性。这种复杂性来自于需要在所有Token之间进行成对相关性计算的要求。
因此,训练和推理时间都超出了预期,使得检测器无法应用于高分辨率图像和视频中的小目标检测。在他们关于Deformable DETR的工作中首次解决了这个在DETR中观察到的问题。他们提出只关注围绕参考点的一小组关键采样点,显著降低了复杂性。
通过采用这种策略,有效地通过使用多尺度Deformable形注意力模块来保留了空间分辨率。值得注意的是,这种方法消除了特征金字塔网络的必要性,从而极大地增强了小目标的检测和识别。在Deformable注意力中,多头注意力模块的第个输出如下所示:
在Anchor DETR中,作者提出了行列分离注意力(RCDA)的概念,将Key特征的2D注意力分解为两种较简单的形式:1D行向和列向注意力。在CF-DETR的情况下,提出了一种替代FPN的方法,其中C5特征被替换为第5级(E5)的编码器特征,从而改善了目标的呈现。这一创新被命名为Transformer增强FPN(TEF)模块。
在另一项研究中,Fea-swin通过将跳过连接操作与Swin Transformer集成,开发了一种加权双向特征金字塔网络(BiFPN),有效地保留了与小目标相关的信息。
完全基于Transformer的检测器
鉴于解码器模块是基于Transformer的目标检测中效率低下的主要原因,Decoder-Free Fully Transformer(DFFT)采用了两个编码器:ScaleAggregated Encoder(SAE)和Task-Aligned Encoder(TAE),以保持高准确性。SAE将多尺度特征(4个尺度)汇聚成一个单一的特征图,而TAE对齐了单一特征图以进行目标类型和位置的分类和回归。使用以检测为导向的Transformer(DOT)Backbone进行具有强语义的多尺度特征提取。在基于稀疏RoI的Deformable形DETR(SRDD)中,作者提出了一种轻量级的Transformer,具有一个评分系统,最终在编码器中去除了冗余的Token。这是通过在端到端学习方案中使用RoI(感兴趣区域)进行检测来实现的。
架构和块修改
DETR,作为第一个端到端目标检测方法,在训练过程中遇到了较长的收敛时间,并且在小目标上表现不佳。一些研究工作致力于解决这些问题以提高SOD性能。其中一个显著的贡献来自TSP,他们受到了FCOS和Faster RCNN的启发,提出了两种仅包含编码器的DETR变体,称为TSP-FCOS和TSP-RCNN,并引入了特征金字塔。他们通过从解码器中删除交叉注意力模块来实现这一点。他们的研究结果表明,解码器中的交叉注意力和匈牙利损失的不稳定性是DETR收敛较慢的主要原因。这一发现促使他们抛弃解码器,并在这些新的变体中引入了一种新的二分匹配技术,即TSP-FCOS和TSP-RCNN。
在一个结合了CNN和Transformer的混合方法中,Peng等人提出了一个名为“Conformer”的混合网络结构。这个结构将CNN提供的局部特征表示与Transformer提供的不同分辨率的全局特征表示融合在一起(见图8)。这是通过特征耦合单元(FCUs)实现的,实验结果表明,与ResNet50、ResNet101、DeiT和其他模型相比,它的效果更好。在[ A cnnTransformer hybrid model based on cswin Transformer for uav image object detection]中提出了一种类似的混合技术,将CNN和Transformer结合起来。Xu等人[ An improved swin Transformer-based model for remote sensing object detection and instance segmentation]认识到了局部感知和长距离相关性的重要性,他们在Swin Transformer块中添加了局部感知块(LPB)。这个新的Backbone网络被称为局部感知Swin Transformer(LPSW),显著提高了航空图像中小型目标的检测能力。
DIAG-TR在编码器中引入了全局-局部特征交织(GLFI)模块,以自适应和分层方式将局部特征嵌入到全局表示中。这种技术可以弥补小目标的尺度差异。此外,可学习的Anchor框坐标被添加到Transformer解码器中的内容Query中,提供了一种归纳偏差。
在最近的研究中,Chen等人提出了Hybrid网络Transformer(Hyneter),它通过将卷积嵌入到Transformer块中来扩展局部信息的范围。这一改进提高了在MS COCO数据集上的检测结果。类似的混合方法已经在Sw-YOLOX中采用。在另一项研究中[ Unifying convolution and Transformer for efficient concealed object detection in passive millimeter-wave images],作者提出了一种名为NeXtFormer的新Backbone网络,它结合了CNN和Transformer,以增强小目标的局部细节和特征,并提供了全局感受野。
随后的版本,Conditional DETR v2通过重新构建目标Query为Box Query的形式,增强了体系结构,这涉及嵌入参考点并相对于参考点变换Box。在随后的工作中,DAB-DETR通过使用动态可调整的Anchor box进一步改进了Query设计。这些Anchor box既用作参考Query点又用作Anchor维度(见图9)。
在另一项工作中[47],作者观察到DETR中小目标的平均精度(mAP)虽然不竞争状态下(SOTA)技术,但其在小交并比(IoU)阈值下的性能竟然比竞争对手好。这表明,虽然DETR提供了强大的感知能力,但需要微调才能获得更好的定位精度。作为解决方案,提出了通过解码器层中的自适应尺度融合(ASF)和局部交叉注意力(LCA)模块来执行这种细化的粗到细检测Transformer(CF-DETR)。
在Destr中,作者认为Transformer-based检测器的次优性能可以归因于一些因素,例如在分类和回归中使用单一的交叉注意力模块,内容Query的初始化不足,以及在自注意力模块中没有利用先验知识。为了解决这些问题,他们提出了Detection Split Transformer(DESTR)。这个模型将交叉注意力分为两个分支,一个用于分类,一个用于回归。此外,DESTR使用一个小型检测器来确保在解码器中进行适当的内容Query初始化,并增强自注意力模块。
另一项研究引入了FEA-Swin,它利用Swin Transformer框架中的高级前景增强注意力将上下文信息整合到原始Backbone网络中。这是因为Swin Transformer由于相邻目标之间的缺失连接而不能充分处理密集目标检测。因此,前景增强突出显示目标以进行进一步的相关性分析。
TOLO是旨在通过简单的Neck模块将归纳偏差(使用CNN)引入Transformer架构的最新工作之一。此模块将来自不同层的特征组合在一起,以整合高分辨率和高语义属性。设计了多个轻型Transformer Head,以检测不同尺度的目标。在不修改每个架构中的模块的情况下,CBNet将多个相同的Backbone网络分组,并通过复合连接连接它们。
在Multi-Source Aggregation Transformer(MATR)中,Transformer的交叉注意力模块用于利用来自不同视图的同一目标的其他支持图像。在[Multi-view vision transformers for object detection]中采用了类似的方法,Multi-View Vision Transformer(MV-ViT)框架将来自多个视图(包括目标视图)的信息组合在一起,以提高当目标在单个视图中不可见时的检测性能。
其他工作更倾向于采用YOLO系列架构。例如,SPH-Yolov5在Yolov5网络的较浅层添加了一个新分支,以融合特征以改善小目标的定位。它还首次在Yolov5管道中引入了Swin Transformer预测头。
在[Nms strikes back]中,作者认为匈牙利损失的直接一对一边界框匹配方法可能并不总是有利。他们证明采用一对多分配策略并利用NMS(非极大值抑制)模块可以获得更好的检测结果。与此观点相呼应,Group DETR 实现了K组目标Query,采用一对一标签分配,为每个GT目标提供K个正目标Query,以增强性能。
在Dual-Key Transformer Network(DKTNet)中,使用两个Key,一个Key与Q流一起使用,另一个Key与V流一起使用。这增强了Q和V之间的一致性,从而实现了更好的学习。此外,计算通道注意力而不是空间注意力,并使用1D卷积来加速过程。
辅助技术
实验证明,辅助技术或任务与主要任务结合使用时,可以增强性能。在Transformer的背景下,采用了几种技术,包括:
- 辅助解码/编码损失:这是指专为边界框回归和目标分类设计的前馈网络连接到单独的解码层的方法。因此,不同尺度上的单独损失被组合以训练模型,从而导致更好的检测结果。这种技术或其变种已在ViDT、MDef-DETR、CBNet、SRDD中使用。
- 迭代框细化:在这种方法中,每个解码层内的边界框基于前一层的预测进行细化。这种反馈机制逐渐提高了检测精度。这种技术已在ViDT中使用。
- 自上而下的监督:这种方法利用人类可理解的语义来帮助复杂的检测小目标或类别不可知的目标的任务,例如MDef-DETR中的对齐的图像文本对,或者TGOD中的文本引导目标检测器。
- 预训练:这涉及在大规模数据集上进行训练,然后针对检测任务进行特定的微调。这种技术已在CBNet V2-TTA、FPDETR、T-TRD、SPH-Yolov5、MATR以及Group DETR v2中被广泛使用。
- 数据增强:这种技术通过应用各种增强技术来丰富检测数据集,例如旋转、翻转、放大缩小、裁剪、平移、添加噪音等。数据增强是解决各种不平衡问题的常用方法,例如在深度学习数据集中的目标大小不平衡。数据增强可以看作是减小训练集和测试集之间差距的一种间接方法。多种方法在其检测任务中使用了数据增强,包括TTRD、SPH-Yolov5、MATR、NLFFTNet、DeoT、HTDet和Sw-YoloX。
- 一对多标签分配:DETR中的一对一匹配可能导致编码器内部的特征不够具有区分性。因此,其他方法中的一对多分配,例如Faster-RCNN、RetinaNet和FCOS,在一些研究中被用作辅助Head,例如CO-DETR。
- 降噪训练:这种技术旨在提高DETR中解码器的收敛速度,因为由于二分匹配而经常面临不稳定的收敛。在降噪训练中,解码器被馈送带有噪声的真实标签和框,然后通过辅助损失来训练模型以重构原始的真实标签。像DINO和DN-DETR这样的实现已经证明了这种技术在增强解码器的稳定性方面的有效性。
改进的特征表示
尽管当前的目标检测器在常规大小或大型目标的各种应用中表现出色,但某些用例需要专门的特征表示来改进小目标检测。例如,在检测航拍图像中的有向目标时,任何目标的旋转都可能由于场景(区域提案)中的增加背景噪音或杂乱而显著改变特征表示。为了解决这个问题,Dai等人提出了AO2-DETR,这是一种旨在对任意目标旋转具有鲁棒性的方法。这通过3个Key组件实现:
- 生成有向提议
- 有向提议的细化模块,提取旋转不变特征
- 考虑旋转的集合匹配损失
这些模块有助于抵消目标的任何旋转效应。在相关方法中,DETR++ 使用多个双向特征金字塔层(BiFPN),以自下而上的方式应用于C3、C4和C5的特征图。然后,选择一个代表所有尺度特征的尺度,输入DETR框架进行检测。对于某些特定的应用,例如植物安全监测,感兴趣的目标通常与人类工作者相关,利用这些上下文信息可以极大地改善特征表示。PointDet++通过结合人体姿势估计技术,整合本地和全局特征以增强小目标检测性能。影响特征质量的另一个Key因素是Backbone网络及其提取语义和高分辨率特征的能力。
Ghostformer中引入的GhostNet提供了一种简化和更高效的网络,可以向Transformer提供高质量的多尺度特征。他们在这个网络中的Ghost模块部分生成输出特征图,其余部分则通过简单的线性操作恢复。这是减轻Backbone网络复杂性的Key步骤。
在医学图像分析的背景下,MS Transformer 使用了一种自监督学习方法,在输入图像上执行随机Mask,有助于重建更丰富的特征,对噪音不敏感。结合分层Transformer,这种方法胜过了具有各种Backbone的DETR框架。Small Object Favoring DETR (SOFDETR) 专门支持小目标的检测,通过在输入到DETR-Transformer之前,在3和4层之间合并卷积特征,并采用规范化的归纳偏差模块。
NLFFTNet 通过引入非局部特征融合Transformer卷积网络,解决了当前融合技术仅考虑局部交互的局限性,捕捉不同特征层之间的远程语义关系。DeoT 将一个仅编码器的Transformer与新颖的特征金字塔融合模块合并。在通道细化模块(CRM)和空间细化模块(SRM)中使用通道和空间注意力来增强融合,从而实现了更丰富的特征提取。HTDet 中的作者提出了一种用于更好地检测目标的低级和高级特征的渐进融合FPN。与此同时,在MDCT 中,作者提出了一个多核扩张卷积(MDC)模块,用于利用小目标的本体和相邻空间特征来改善与小目标相关的特征提取的性能。所提出的模块利用深度可分离卷积来降低计算成本。
最后,在RTD-Net中,设计了一个特征融合模块,与轻量级Backbone相结合,通过扩大感受野来增强小目标的视觉特征。RTD-Net中的混合注意力模块通过整合围绕小目标的上下文信息,增强了系统对部分遮挡的目标的检测能力。
时空信息
在本节中,作者专注于旨在识别小目标的基于视频的目标检测器。虽然许多这些研究已在ImageNet VID数据集上进行了测试,但该数据集最初并不是为了小目标检测而设计的。尽管如此,一些研究也报告了它们在ImageNet VID数据集的小目标上的结果。使用Transformer架构也探讨了在视频中跟踪和检测小目标的问题。尽管图像基础的小目标检测技术可以应用于视频,但它们通常不利用宝贵的时间信息,而这对于在杂乱或遮挡的帧中识别小目标尤其有益。
Transformer用于通用目标检测/跟踪的应用始于TrackFormer和TransT。这些模型使用帧到帧(将前一帧设置为参考帧)的集合预测和模板到帧(将模板帧设置为参考帧)的检测。Liu等人是最早专门用于基于视频的小目标检测和跟踪的Transformer的使用者之一。他们的核心概念是更新模板帧,以捕捉由小目标的存在引起的任何小变化,并在模板帧和搜索帧之间提供全局关注驱动的关系。
随着TransVOD的推出,基于Transformer的目标检测得到了正式的认可。该模型将空间Transformer和时间Transformer应用于一系列视频帧,从而识别并链接这些帧中的目标。TransVOD已经产生了几个变种,每个都具有独特的特性,包括实时检测的功能。PTSEFormer采用渐进策略,侧重于时间信息和目标在帧之间的空间转换。它采用多尺度特征提取来实现这一点。
与其他模型不同,PT-SEFormer直接从相邻帧回归目标Query,而不是整个数据集,提供了更局部化的方法。Sparse VOD提出了一种端到端可训练的视频目标检测器,其中包含时间信息以提出区域建议。相比之下,DAFA强调了视频中全局特征的重要性,而不是局部时间特征。DEFA展示了First In First Out(FIFO)内存结构的低效性,并提出了一种多样性感知内存,该内存使用目标级内存而不是帧级内存用于注意力模块。VSTAM通过逐个元素地改进特征质量,然后在使用这些增强特征进行目标候选区域检测之前执行稀疏聚合。该模型还结合了外部内存,以利用长期的上下文信息。
在FAQ工作中,提出了一种新颖的视频目标检测器,该检测器在解码器模块中使用Query特征聚合。这与侧重于编码器中的特征聚合或对各种帧执行后处理的方法不同。研究表明,这种技术提高了检测性能,胜过了SOTA方法。
结果和基准
数据集
在这一小节中,除了广泛使用的MS COCO数据集,作者编制并呈现了12个新的小目标检测数据集。这些新的数据集主要针对特定应用,不包括通用和海洋环境。图10显示了这些数据集的时间顺序,以及截止到2023年6月15日的谷歌学术引用计数。
UAV123:这个数据集包含了123个由无人机获取的视频,是最大的目标跟踪数据集之一,包含超过110,000帧。
MRS-1800:这个数据集由其他三个遥感数据集的图像组成:DIOR,NWPU VHR-10和HRRSD。MRD-1800旨在用于检测和实例分割,包括1800张手动标注的图像,其中包括飞机、船只和储罐等3种目标。
SKU-110K:这个数据集是一个严格的商品检测测试集,包括来自世界各地各种超市的图像。该数据集包括各种尺度、摄像机角度、光照条件等。
BigDetection:这是一个大规模数据集,通过整合现有数据集并精心消除重复的边界框,同时Token被忽视的目标,而制作的。它在所有尺寸上都有平衡数量的目标,使它成为推动目标检测领域发展的重要资源。在这个数据集上进行预训练,然后在MS COCO上进行微调,可以显著提高性能。
Tang等人:这个数据集源自化工厂内各种类型工作的视频素材,如高温工作、空中作业、受限空间作业等。它包括人、头盔、灭火器、手套、工作服和其他相关目标等类别标签。
Xu等人:这个公开可用的数据集专注于无人机拍摄的图像,包含2,000张旨在检测行人和车辆的图像。这些图像是使用DJI无人机收集的,具有不同的光照水平和密集停放的车辆等多种条件。
DeepLesion:这个数据集包括来自4,427名患者的CT扫描,是同类数据集中最大的之一。它包括各种类型的病变,如肺结节、骨异常、肾病变和淋巴结肿大等。这些图像中的感兴趣目标通常很小,伴随着噪音,使它们的识别具有挑战性。
Udacity自动驾驶汽车:这个数据集专门用于教育目的,包含Mountain View及附近城市的驾驶场景,以2Hz的图像采集率捕获。该数据集的类别标签包括汽车、卡车和行人。
AMMW数据集:这个用于安全应用的主动毫米波图像数据集包括30多种不同类型的目标。其中包括两种打火机(塑料和金属)、仿真火器、刀具、刀片、子弹壳、手机、汤、钥匙、磁铁、液体瓶、吸收材料、火柴等等。
URPC 2018数据集:这个水下图像数据集包括四种类型的目标:海参、海胆、扇贝和海星。
UAV数据集:这个图像数据集包括9000多张在不同天气和光照条件以及各种复杂背景下通过无人机拍摄的图像。该数据集中的目标包括轿车、人、电机、自行车、卡车、公共汽车和三轮车等。
Drone-vs-bird:这个视频数据集旨在解决无人机飞越敏感区域的安全问题。它提供了带标签的视频序列,以区分不同照明、光照、天气和背景条件下的鸟类和无人机。
表2提供了这些数据集的摘要,包括它们的应用、类型、分辨率、类别/实例/图像/帧数量,以及它们的网页链接。
视觉应用基准
在这一小节中,作者介绍各种视觉应用,其中小目标检测性能至关重要。对于每个应用,作者选择了一个最流行的数据集,并报告了其性能指标,以及实验设置的详细信息。
通用应用
对于通用应用,作者评估了所有小目标检测器在具有挑战性的MS COCO基准数据集上的性能。选择这个数据集是基于它在目标检测领域的广泛接受程度以及性能结果的易获得性。MS COCO数据集包括大约160,000张图像,涵盖80个类别。虽然建议作者使用COCO 2017年的训练和验证集来训练他们的算法,但他们并不受限于这些子集。
在表3中,作者检查和评估了所有已经报告在MS COCO上的技术的性能(从他们的论文中编制而来)。表格提供了有关Backbone架构、GFLOPS/FPS(表示计算开销和执行速度)、参数数量(表示模型规模)、mAP(平均精度的平均值:一种目标检测性能指标)和epochs(表示推理时间和收敛性质)的信息。此外,还提供了每种方法的网页链接,以获取更多信息。
这些方法分为3组:
- 基于CNN的方法
- 混合方法
- 仅基于Transformer的方法
表格的最后一行显示了每个指标的表现最佳的方法。值得注意的是,这种比较仅对已报告每个特定指标值的方法是可行的。在存在平局的情况下,被视为最佳的方法是平均精度最高的方法。默认的mAP值是针对“COCO 2017 val”集的,而“COCO test-dev”集的值则带有星号。请注意,报告的mAP仅适用于面积< 322的目标。
从表3中可以看出,大多数技术受益于混合CNN和Transformer架构,实质上采用了混合策略。值得注意的是,仅依赖基于Transformer的架构的Group DETR v2达到了48.4%的mAP。
然而,要实现这样的性能,需要采用额外的技术,如在两个大规模数据集上进行预训练和多尺度学习。就收敛性而言,DINO通过仅经过12个epochs就达到了稳定的结果,同时也获得了令人称赞的32.3%的mAP。相反,原始的DETR模型具有最快的推理时间和最低的GFLOPS。FP-DETR之所以脱颖而出,是因为它具有只有36M参数的最轻量级网络。
综合这些发现,作者得出结论,预训练和多尺度学习是在小目标检测中取得卓越性能最有效的策略。这可以归因于下游任务的不平衡和小目标中缺乏信息性特征。
图11(跨两页)以及图12中更详细的版本,展示了各种Transformer和基于CNN的方法的检测结果。这些结果是使用来自COCO数据集的选定图像进行比较的,由作者使用它们在GitHub页面上提供的公共模型实现。分析结果显示,Faster RCNN和SSD在准确检测小目标方面表现不佳。
具体来说,SSD要么错过了大多数目标,要么生成了大量带有错误标签和定位不准确的边界框。虽然Faster RCNN表现更好,但它仍然产生了低置信度的边界框,并偶尔分配错误的标签。相反,DETR倾向于高估目标的数量,导致单个目标的多个边界框。通常会注意到DETR容易产生假阳性。最后,在评估的方法中,CBNet V2以其卓越的性能脱颖而出。正如观察到的那样,它为它检测到的目标生成了高置信度的分数,尽管偶尔可能会错误地识别一些目标。
航空图像中的小目标检测
在遥感领域,检测小目标的另一个有趣应用是航空图像。这个领域特别吸引人,因为许多组织和研究机构旨在通过航空图像定期监测地球表面,以收集国家和国际统计数据。虽然可以使用各种模态获得这些图像,但本综述仅关注非SAR图像。这是因为SAR图像已经得到了广泛研究,值得进行单独的研究。然而,本综述中讨论的学习技术也可以应用于SAR图像。
在航空图像中,由于目标距离相机较远,因此目标通常显得很小。鸟瞰视图也增加了目标检测任务的复杂性,因为目标可以位于图像的任何位置。为了评估为此类应用而设计的基于Transformer的检测器的性能,作者选择了DOTA图像数据集,它已经成为目标检测领域广泛使用的基准。
图13显示了来自DOTA数据集的一些包含小目标的示例图像。该数据集包括一个预定义的训练集、验证集和测试集。与通用应用相比,这个特定应用从Transformer专家那里获得的关注相对较少。
然而,如表4所示(结果来自论文),ReDet通过其多尺度学习策略和在ImageNet数据集上的预训练,在达到最高的精度值(80.89%)并且仅需要12个训练epochs时脱颖而出。这反映了从COCO数据集分析中获得的见解,即通过解决下游任务中的不平衡问题,并包括来自小目标的信息性特征,可以实现最佳性能。
医学图像中的小目标检测
在医学成像领域,专家通常被要求早期检测和识别异常。错过即使是微不可见或小的异常细胞可能对患者产生严重影响,包括癌症和危及生命的疾病。这些小型目标可以在糖尿病患者的视网膜、早期肿瘤、血管斑块等方面作为异常出现。
尽管这个研究领域具有重要性和潜在的危害性,但只有少数几项研究已经解决了在这一Key应用中检测小目标所面临的挑战。对于对这个主题感兴趣的人,DeepLesion CT图像数据集已被选为基准,因为该数据集的结果是可用的。
图14显示了该数据集的一些示例图像。该数据集分为3个集合:训练集(70%)、验证集(15%)和测试集(15%)。
表5比较了3个基于Transformer的研究的准确性和mAP,与两阶段和一阶段检测器(结果来自他们的论文)一起。MS Transformer在这个数据集中脱颖而出,尽管竞争有限。它的主要创新在于自监督学习,并在分层Transformer模型内部引入了遮挡机制。
总体而言,凭借90.3%的准确性和89.6%的mAP,该数据集似乎相对较少挑战,尤其是考虑到一些肿瘤检测任务对人眼来说几乎是不可见的。
水下图像中的小目标检测
随着水下活动的增加,监测模糊和低光环境的需求也增加了,以用于生态监测、设备维护和监视废弃捕鱼等目的。水的散射和吸收光线的因素使小目标检测任务变得更加具有挑战性。
这些具有挑战性环境的示例图像显示在图15中。基于Transformer的检测方法不仅需要善于识别小目标,还需要对深水中常见的图像质量差、不同通道的颜色变化具有鲁棒性,因为每个通道的光衰减率不同。
表6显示了现有研究针对这一数据集报告的性能指标(结果来自他们的论文)。HTDet是唯一一个特定应用的基于Transformer的技术。它在mAP方面明显优于SOTA基于CNN的方法(mAP高出3.4%)。然而,相对较低的mAP分数确认了水下图像中的目标检测仍然是一项困难的任务。值得注意的是,URPC 2018的训练集包含2901张带标签的图像,测试集包含800张未Token的图像。
主动毫米波图像中的小目标检测
小目标可以很容易地被正常的RGB相机隐藏或隐藏,例如,在机场的人的衣服中。因此,用于安全目的的主动成像技术至关重要。在这些情景中,通常从不同角度捕获多幅图像,以增加检测甚至微小目标的可能性。有趣的是,就像在医学成像领域一样,Transformer很少用于这个特定的应用。
在作者的研究中,作者使用AMMW数据集来关注现有技术的检测性能,如表7所示(结果来自他们的论文)。作者已经确定MATR是唯一一个为这个数据集结合了Transformer和CNN的技术。尽管是唯一的基于Transformer的技术,但它在SOD性能上取得了显著的改进(相对于Yolov5,mAP0.5提高了5.49%,相对于TridentNet,mAP@[0.5,0.95]提高了4.22%),使用相同的Backbone网络(ResNet50)。
图16在可视上将MATR与其他SOTA基于CNN的技术进行了比较。从不同角度组合图像在这种成像方法中大大有助于识别甚至小的目标。用于训练和测试的图像数量分别为35426张和4019张。
视频中的小目标检测
最近,视频中的目标检测领域引起了相当多的关注,因为视频中的时间信息可以提高检测性能。为了评估SOTA技术,已经使用了ImageNet VID数据集,特别关注了该数据集中的小目标的结果。该数据集包括3862个训练视频和555个验证视频,涵盖30类目标。
表8报告了一些最近开发的基于Transformer的技术的mAP(结果来自他们的论文)。虽然Transformer越来越多地被用于视频目标检测,但它们在SOD方面的性能尚未得到深入探讨。在已经报告了ImageNet VID数据集上的SOD性能的方法中,具有FAQ的Deformable DETR表现出色,尽管其mAP@[0.5,0.95]仅为13.2%。这突显了视频SOD领域存在重大的研究空白。
讨论
在这篇综述文章中,作者探讨了基于Transformer的方法如何应对小目标检测的挑战。作者的分类法将基于Transformer的小目标检测器分为7个主要类别:目标表示、快速注意力(适用于高分辨率和多尺度特征图)、架构和块修改、时空信息、改进的特征表示、辅助技术以及完全基于Transformer的检测器。
将这个分类法与CNN-based技术的分类法进行对比,作者可以观察到其中一些类别是重叠的,而其他类别是基于Transformer的技术所独有的。某些策略已经隐式地嵌入到了Transformer中,比如通过编码器和解码器中的自注意力和交叉注意力模块来执行的注意力和上下文学习。另一方面,多尺度学习、辅助任务、架构修改和数据增强在两种范式中都普遍使用。
然而,值得注意的是,虽然CNNs通过3D-CNN、RNN或随时间进行特征聚合来处理时空分析,但Transformer通过使用连续的时空Transformer或在解码器中为连续帧更新目标Query来实现这一目标。
作者注意到,预训练和多尺度学习是最常采用的策略之一,有助于在不同数据集上实现各种性能表现。数据融合是另一种广泛用于SOD的方法。在视频检测系统的背景下,重点是有效地收集时序数据并将其整合到特定帧的检测模块中。
尽管Transformer在小目标的定位和分类方面取得了显著的进展,但也需要认识到涉及到的权衡。这些包括大量的参数、数天的训练时间以及在非常大的数据集上进行预训练。所有这些方面都对能够对其下游任务进行训练和测试的用户群体产生了限制。现在比以往任何时候都更加重要的是,要认识到需要轻量级网络、高效的学习范式和架构的需求。尽管参数数量现在与人类大脑相当,但在小目标检测方面的性能仍然远远落后于人类的能力,突显出当前研究中的一个重大差距。
此外,根据图11和图12中呈现的结果,作者发现小目标检测存在两个主要挑战:漏检和冗余检测框。漏检的问题可能归因于token中嵌入的信息有限。这可以通过使用高分辨率图像或通过增强特征金字塔来解决,尽管这会增加延迟,但可以通过使用更高效、轻量级的网络来抵消。重复检测的问题通常通过NMS等后处理技术来管理。然而,在Transformer的背景下,这个问题应该通过在解码器中最小化目标Query的相似度来解决,可能需要使用辅助损失函数。
作者还研究了专门用于各种基于视觉的任务的小目标检测的Transformer方法的研究。这些任务包括通用检测、航空图像中的检测、医学图像中的异常检测、用于安全目的的主动毫米波图像中的小隐藏目标检测、水下目标检测以及视频中的小目标检测。
除了通用和航空图像应用之外,Transformer在其他应用中发展不足,这与Rekavandi等人关于海事检测的观察相一致。这在医学成像等生命Key领域可能具有重大影响,尤其是考虑到Transformer可能在这些领域具有重要作用。
#Transformer~x5
Transformer它就是个支持向量机,SVM is all you need,支持向量机永不过时。
Transformer 是一个支持向量机(SVM)一种新型理论在学界引发了人们的讨论。
上周末,一篇来自宾夕法尼亚大学、加州大学河滨分校的论文试图研究大模型基础 Transformer 结构的原理,其在注意力层的优化几何与将最优输入 token 与非最优 token 分开的硬边界 SVM 问题之间建立了形式等价。
在 hackernews 上作者表示,这种理论解决了 SVM 将每个输入序列中的「好」标记与「坏」token 分开的问题。该 SVM 作为一个性能优异的 token 选择器,与传统为输入分配 0-1 标签的 SVM 本质上不同。
这种理论也解释了注意力如何通过 softmax 引起稀疏性:落在 SVM 决策边界错误一侧的「坏」token 被 softmax 函数抑制,而「好」token 是那些最终具有非零 softmax 概率的 token。还值得一提的是,这个 SVM 源于 softmax 的指数性质。
论文上传到 arXiv 上面之后,人们纷纷发表意见,有人表示:AI 研究的方向真是螺旋上升,难道又要绕回去了?
绕了一圈,支持向量机还是没有过时。
现在,一篇名为《Transformers as Support Vector Machines》的新论文在自注意力的优化几何和 hard-margin SVM 问题之间建立了一种形式等价,使用 token 对的外积线性约束将最优输入 token 与非最优 token 分开。
论文链接:https://arxiv.org/pdf/2308.16898.pdf
这种形式等价建立在 Davoud Ataee Tarzanagh 等人的论文《Max-Margin Token Selection in Attention Mechanism》的基础上,它能够描述通过梯度下降进行优化的 1 层 transformer 的隐式偏差(implicit bias):
(2) 该论文还证明了 W 参数化在适当的几何条件下梯度下降的局部 / 全局方向收敛。重要的是,过度参数化通过确保 SVM 问题的可行性和保证没有驻点(stationary points)的良性优化环境来催化全局收敛。
(3) 虽然该研究的理论主要适用于线性预测头,但研究团队提出了一种更通用的 SVM 等价物,可以预测具有非线性头 / MLP 的 1 层 transformer 的隐式偏差。
总的来说,该研究的结果适用于一般数据集,可以扩展到交叉注意力层,并且研究结论的实际有效性已经通过彻底的数值实验得到了验证。该研究建立一种新的研究视角,将多层 transformer 看作分离和选择最佳 token 的 SVM 层次结构。
论文结构如下:第 2 章介绍了自注意力和优化的初步知识;第 3 章分析了自注意力的优化几何,表明注意力参数 RP 收敛到最大边际解;第 4 章和第 5 章分别介绍了全局和局部梯度下降分析,表明 key-query 变量 W 向 (Att-SVM) 的解决方案收敛;第 6 章提供了在非线性预测头和广义 SVM 等价性方面的结果;第 7 章将理论扩展到顺序预测和因果预测;第 8 章讨论了相关文献。最后,第 9 章进行总结,提出开放性问题和未来研究方向。
论文的主要内容如下:
注意力层的内隐偏差(第 2-3 章)
这是第一个正式区分 W 与(K,Q)参数化优化动态的结果,揭示了后者的低阶偏差。该研究的理论清楚地描述了所选 token 的最优性,并自然地扩展到了序列到序列或因果分类设置。
梯度下降的收敛(第 4-5 章)
通过适当的初始化和线性头 h (・),组合 key-query 变量 W 的梯度下降(GD)迭代在方向上收敛到(Att-SVM)的局部最优解(第 5 节)。要实现局部最优,所选 token 必须比相邻 token 得分更高。
局部最优方向不一定是唯一的,可以根据问题的几何特征来确定 [TLZO23]。作为一项重要贡献,作者确定了保证向全局最优方向收敛的几何条件(第 4 章)。这些条件包括:
- 最佳 token 在分数上有明显区别;
- 初始梯度方向与最佳 token 一致。
除此以外,论文还展示了过度参数化(即维度 d 较大,以及同等条件)通过确保(1)(Att-SVM)的可行性,以及(2)良性优化 landscape(即不存在静止点和虚假的局部最优方向)来催化全局收敛(见第 5.2 节)。
图 1 和图 2 对此进行了说明。
SVM 等价的通用性(第 6 章)
当使用线性 h (・) 进行优化时,注意力层会固有地偏向于从每个序列中选择一个 token(又称硬注意力)。这反映在了 (Att-SVM) 中,表现为输出 token 是输入 token 的凸组合。与此相反,作者表明非线性头必须由多个 token 组成,从而突出了它们在 transformer 动态过程中的重要性(第 6.1 节)。利用从理论中获得的洞察力,作者提出了一种更通用的 SVM 等价方法。
值得注意的是,他们证明了在理论未涵盖的普遍情况下(例如,h (・) 是一个 MLP),本文的方法能准确预测通过梯度下降训练的注意力的隐含偏差。具体来说,本文的通用公式将注意力权重解耦为两个部分:一个是由 SVM 控制的定向部分,它通过应用 0-1 掩码来选择标记;另一个是有限部分,它通过调整 softmax 概率来决定所选 token 的精确组成。
这些发现的一个重要特点是,它们适用于任意数据集(只要 SVM 可行),并且可以用数字验证。作者通过实验广泛验证了 transformer 的最大边际等价性和隐含偏差。作者认为,这些发现有助于理解作为分层最大边际 token 选择机制的 transformer,可为即将开展的有关其优化和泛化动态的研究奠定基础。
#Transformer~x6
用背包(backpack)装词比用袋子(bag)好?在这篇论文中,斯坦福大学的研究者提出了可干预的 Backpac k 语言模型,通过调控意义向量来干预语言模型行为,引导语言模型输出想要的结果。
以 GPT 为代表的大型语言模型已经并还将继续取得非凡成就,但它们也存在着众所周知的问题,比如由于训练集不平衡导致的偏见问题。
针对这一问题,斯坦福大学几位研究者提出了一种新型神经架构 Backpack,宣称能够调控意义向量来干预语言模型的行为,引导语言模型输出想要的结果。该项目的代码和模型都已发布。
论文地址:https://arxiv.org/abs/2305.16765
项目地址:https://backpackmodels.science
论文一作、斯坦福大学 CS 博士生 John Hewitt 表示,Backpacks 是 Transformers 的替代,它可以在表现力(expressivity)上进行扩展,并为通过控制实现可解释性提供一种新接口。一个 backpack 学习每个字词的 k 个非上下文意义向量,从而无监督地解耦字词的预测用途。
首先我们假设有前半个语句「The CEO believes that _」,我们的问题是消除神经语言模型在该句子的性别分布上的偏见。凭直觉我们就能知道该句子的性别偏见源自「CEO」一词,因为如果把「CEO」换成「护士」,偏见就会发生性别逆转。为了消除在 CEO 上的偏见,必须要对模型进行干预并且要应用到 CEO 一词所出现的所有上下文中。
理想情况下,我们希望采取的干预措施不会改变模型的上下文并且可以预测这个干预带来的影响。通常来说,从可解释性与控制的各个方面看,我们更倾向于通过一个全局应用的容易操作的接口(比如非上下文表征)来实施干预。
但对 Transformer 来说,这种干预却难以实现,因为它们的上下文表征是其输入的单体函数(monolithic function)。单体函数是指内部具有逻辑分支的函数,能够根据输入执行不同的逻辑。对 Transformer 模型的任何干预都会根据上下文情况产生复杂的非线性影响。但我们希望模型能实现丰富的精准干预,nenggou 预测在所有上下文中的情况,并依然能富有表现力;如此一来,这样的模型就能成为 Transformer 的可行替代模型。
针对这些挑战,研究者提出了一种新的神经架构 Backpack,其预测是非上下文表征的对数 - 线性组合。他们的做法是将词汇表中的每个词都表示成一组非上下文的意义向量(sense vector),这些向量表示的是学习到的该词的不同方面。
举个例子,「science」这个词的意义向量可以编码科学的类型、与技术的关系、已经得到公认的科学概念以及科学过程的不同方面(复现或实验),参见下表 1。意义向量学习的不是经典的词义,而是一个词在不同语境中的潜在作用的更一般性方面;事实上,意义向量可被视为经典词向量的一种多向量泛化。
图 1 :Transformer 是序列的单体函数,而 Backpack 的输出是非上下文的、所学词的各个方面的加权和。
在干预意义向量时,为了使干预结果在不同上下文中都是可预测的,Backpack 会将一个序列中的每个词都表示成该序列中所有词的意义向量的一个线性组合。Backpack 的表现能力来自于计算该线性组合的权重的网络模型,其计算方式是将这些权重作为整个序列的一个函数。顺便一提,研究者在实验中使用的网络模型是 Transformer。由于意义向量是根据上下文大致选择的,因此它们可以专门限定到特定领域;每个意义都可以学会仅在某些上下文中才有用,并且是否有用可以预测出来。也就是说,意义对预测的贡献呈对数 - 线性模式,这意味着不管上下文如何,对意义向量的干预也同样适用(直到权重变成非负标量)。
研究者的实验表明 Backpack 语言模型确实表现力强大,并且表明对意义向量进行干预有助于解释和控制模型。在实验中,研究者在 OpenWebText 的 500 亿 token 上训练了 Backpack 语言模型;这个 Backpack 模型的上下文网络有 1.24 亿参数(意义向量有 4600 万参数),能达到一个 1.24 亿参数 Transformer 的困惑度;但如果想要更高的可解释性,就需要更大的模型。研究者还展示了如何通过意义向量来针对性地编码丰富的词义概念。
在四个词汇相似性数据集(例如 SimLex999)上的定量分析结果看,1.7 亿参数的 Backpack 的意义向量优于 60 亿参数的 GPT-J-6B Transformer 的词嵌入,并且接近针对该任务的专用方法的当前最佳表现。研究者还表明意义向量能为 Backpack 语言模型提供一种控制机制。
举个例子,对于具有职业性别刻板偏见的词(如「CEO」或「护士」),往往会学习到与该性别偏见相关联的意义向量;研究者发现通过为该意义向量降幅,能在有限环境中极大降低上下文预测中的性别差异。
表 1:左侧是表示 science 一词的意义向量示例,其中具有丰富的特定领域指向;右侧是以非上下文的方式编辑意义向量的示例(将 MacBook 变得与惠普相关),从而改变了所得的上下文预测。
Backpack 架构
下面首先将定义 Backpack 架构的一般形式,然后会证明连续词袋 word2vec(CBOW)和仅自注意力网络其实就是 Backpack 的特例。
Backpack 的一般形式
Backpack 这个名称灵感来自这一事实:backpack 是指背包,就像是一个袋子(类比于词袋 /bag-of-words),但是背包更有秩序一些。类似于词袋,Backpack 表征也是非上下文意义的加权和;但 Backpack 更加有序,因为这个加权和的权重取决于有序的序列。
Backpack 模型。Backpack 模型是一种概率模型,它将在某一输出空间 Y 上的概率定义为一个 Backpack 表征 o_{1:n} 的对数 - 线性函数:
研究者通过数学形式证明了连续词袋与单层注意力都是 Backpack 的特例,但这里我们不再过多论述了,详情参阅原论文。
使用 Backpack 的语言建模
对上下文化权重参数化
研究者把这 k 个意义看作是头,对于每个头,上下文化权重都为对词的注意力定义一个分布。
训练 Backpack 语言模型的实验
这一节介绍了研究者为了进行验证而做的实验,其中包含训练 Backpack 和 Transformer 语言模型的超参数、数据和优化流程、评估和结果。这里我们不多介绍了,但研究者重点指出:学习 k > 1 个意义向量对于实现优良的语言建模性能而言是必需的。
表 2:语言建模性能,所有模型都训练了 10 万步,token 批大小为 50 万,是在 OWT 上。对于 PPL 指标,越低越好;对于准确度指标,越高越好。注意这些模型的参数没有可比性;每个 Backpack 的上下文化网络中都有一个大小相当的 Transformer。
可以看出,对比每个 Backpack 语言模型以及与 Backpack 的上下文化网络的规格相当的 Transformer 语言模型,Backpack 语言模型的表现大致相当。需要指出,Backpack 的参数更多,这主要来自意义向量。研究者发现,在训练时,Backpack 语言模型的收敛时间长于 Transformer。奇怪的是,尽管 Small Backpack 和 Transformer 实现了几乎一样的 OWT 困惑度,但 Backpack 语言模型在 LAMBADA 和 Wikitext 上的表现却显著更好,同时在 BLiMP 上却又更差。
意义向量中的涌现结构
下面将通过定性和定量实验,来验证意义向量在计算词汇相似性和相关性方面的有效性。这些结果表明意义向量可以成为实施干预的高层面接口。
意义的可视化
下表 3 可视化地展示一些意义,比如意义 12 似乎为几乎所有单词都编码了广泛的相关概念;意义 3 编码了给定 x 的二元分布的特定情况;意义 14 似乎为动词编码了相关的宾语,也为名词编码了相关的修饰词依赖子项。
表 3:可视化地展示了在许多词上的同一意义索引如何编码细粒度的含义、相关性和预测使用情况的概念。
词汇关系测试
从下表 4 可以看到,意义 12(同义词意义)在所有数据集上都表现良好,媲美或者优于 GPT-2-1.5B 和 GPT-J-6B 等嵌入,而 GPT-J-6B 在 RG-65 上则例外。意义 14 是动词宾语意义,仅在动词相似度(VerbSim3500)上表现好,而意义的最小相似性在名词词汇相似性上表现尤其出色 (SimLex999)。这说明新提出的方法足以比肩当前最优的方法,尽管它们的训练任务非常不同,意义向量编码了大量的词汇信息。
表 4:词汇相似性评估结果。所有的数值都是 Spearman 相关度;越高越好。
用于控制的意义向量
最后,研究者通过一些具体案例进行了概念验证,即可以使用意义向量来控制语言模型的行为。
生成限定主题的内容
下图 2 中,通过 Backpack 中的意义干预来控制生成主题,对比了 Transformer 的 PPLM。
降低性别偏见
研究者发现,许多职业名词(比如护士、CEO、教师)的意义向量 10 都带有性别的刻板印象,并且这种刻板印象会通过代词连贯地表达出来。通过调降意义 10(乘以小于 1 的标量),研究者发现可以降低 Backpack 在这些职业名词上的性别偏见。
表 5:在有限设置中降低基于代词的性别偏见。
图 3:对于前半句「when the nurse walked into the room」(当那位护士走进房间),Backpack 语言模型通过将「护士」一词的意义 10 从 0(完全移除)变成 1(原始情况),条件概率分布受到的影响。
知识编辑
研究者还研究了新方法在知识编辑方面的应用。知识编辑是指编辑模型对于世界知识的预测。特别要指出,与专有名词相关的许多词都可以定位到该名词的意义向量。在定性的概念验证实验中,研究者编辑了目标词(比如 MacBook)的意义向量,移除了与另一个词(比如 Apple)的相关性,然后用再一个词(比如 HP)替代了这些相关性。可以想见,这种干预会导致 MacBook 与 HP 在预测结果中产生关联。
表 6:来自 Backpack 的样本,其中 Apple 被投射到了 MacBook 的意义嵌入之外,而 Apple 原来的位置被 HP 替代。第三个样本类似,是美式橄榄球球队和运动员相关的样本。其中加粗的部分为 prompt。
#Transformer~x7
都连载第5回合了 看到了什么就搬来了~~~ 真的好火看来一定要深究一下拉
在 DeepMind 的一篇论文中,研究者假设 PD 没能通过试错得到改进的原因是它训练用的数据无法显示学习进度。当前方法要么从不含学习的数据中学习策略(例如通过蒸馏固定专家策略),要么从包含学习的数据中学习策略(例如 RL 智能体的重放缓冲区),但后者的上下文大小(太小)无法捕获策略改进。并声称无需权重更新、提示和微调,transformer在试错中自主改进.
目前,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 方法学习的是策略而不是强化学习算法。
论文地址:https://arxiv.org/pdf/2210.14215.pdf
研究者的主要观察结果是,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 改进它的速度就越快,直到达到最优。
好了 第5回 终于完事哦