论文阅读四十一:Transformer中重要的是什么?并非所有的注意力都需要
摘要
虽然扩展基于Transformer的大型语言模型(LLM)在各种任务中表现出了良好的性能,但它也引入了冗余架构,给现实世界的部署带来了效率挑战。尽管对LLM中的冗余有一些认识,但transformers中不同架构(如MLP和Attention层)之间的冗余可变性尚未得到充分探索。在这项工作中,我们使用基于相似性的度量来研究Transformer中不同模块之间的冗余,包括块、MLP和注意力层。令人惊讶的是,尽管注意力层在区分transformers和其他架构方面起着关键作用,但我们发现这些层中的很大一部分表现出过高的相似性,可以在不降低性能的情况下进行修剪。例如,Llama-2-70B通过修剪一半的注意力层,实现了48.4%的加速,性能仅下降了2.4%。此外,通过在整个训练过程中跟踪模型检查点,我们观察到注意力层冗余是固有的,并且在训练阶段是一致的。此外,我们还提出了一种联合丢弃Attention和MLP层的方法,使我们能够更积极地丢弃其他层。例如,当丢弃31层(Attention+MLP)时,Llama-2-13B在MMLU任务上仍然保留了90%的性能。我们的工作为未来的网络架构设计提供了宝贵的见解。代码发布于:https://github.com/CASE-Lab-UMD/LLM-Drop 。
引言
基于Transformer的大型语言模型(LLMs)各种领域取得卓越性能。然而,扩展这些模型也引入了冗余架构,称为overarching,导致效率低下,使实际部署复杂化,即,不断膨胀的部署成本和资源需求。例如,虽然Llama-2-70B的部署成本在FP16精度上超过了128GB,超过了单个A100 GPU的容量,但可以在深度上降低,而不会显著影响性能。
虽然一些先前工作已经提出通过移除冗余参数或架构来促进LLM的高效性,但这些方法常常使用通用技术,忽视了transformer架构的独特特点。具体地,transformer架构由多个堆栈模块组成,每个包含MLP层和Attention层,它们是不同的函数,并且展示相应不同的冗余水平。这激励更加深入的研究Transformers的特定冗余,目标是识别和解决最关键的模块。
本工作中,我们系统地探索了三个关键Transformer组件的冗余:模块(Block)、MLP和注意力(Attention)。使用基于相似度的指标,我们评估每个组件的重要性,并渐进地丢弃这些作为冗余。我们首先应用“Block Drop"方法,但观察到移除整个模块导致显著性能衰退。这表明需要更加精细的策略。
进一步实验,我们探索MLP和Attention层的分开剪枝。我们的发现揭示了虽然丢弃MLP层负面影响性能,大量Attention层,Transformer架构的核心,使其区别于其他主流框架(如,RWKV和Mamba),可以剪枝,没有模型性能退化。例如,Llama2-70B中,丢弃50%的注意力层,其结果于全模型具有可比性,说明这些层中存在高度冗余。
基于这些见解,我们提出更加灵活的方法,”Joint Layer Drop“,同时针对MLP层和注意力层。通过结合这些层的重要性分数,我们发现联合丢弃低重要性的Attention和MLP层,相较于仅剪枝一种类型的层,在高稀疏条件下产生更好的性能,
我们的工作证明,Attention层中的冗余不仅显著,而且在不同训练阶段中一致,说明这种冗余是Transformer架构的固有属性。这些发现为更加高效的Transformer设计开辟了道路,减少内存(即,KV-Cache)和计算成本(如,推理速度),同时保持性能。
总之,我们的关键贡献如下:
- 通过三关键Transformer组件的深度冗余分析,Block、MLP和Attention,我们发现Attention中惊人的冗余水平。
- 我们提出”Attention Drop“,简单但有效的算法用于以无训练方式移除冗余的Attention层。此外,我们介绍”Joint Layer Drop“,通过联合针对Attention和MLP层,进一步高丢弃率下提升了性能。
- 我们广泛的实验证明了丢弃注意力的有效性,例如,在Llama-2-70B中删除50%的注意力层只会导致2.4%的性能下降,同时实现高达48.4%的加速。
- 我们进一步表明,在整个训练过程中,注意力层始终保持高冗余,这表明它是一种固有属性,并为未来的架构设计提供了有价值的见解。