魔改Transformer!9种提速又提效的模型优化方案

Transformer目前已经成为人工智能领域的主流模型,应用非常广泛。然而Transformer中注意力机制计算代价较高,随着序列长度的增加,这个计算量还会持续上升。

为了解决这个问题,业内出现了许多Transformer的魔改工作,以优化Transformer的运行效率。我这次就给大家分享9篇对Transformer模型进行效率优化的改进文章,以方便大家更高效地使用模型,寻找论文创新点

文章主要涉及4个方向:稀疏注意力机制、Transformer处理长文本、Transformer运行提效以及卷积Attention,原文及源码都已整理

一、稀疏注意力机制

1.1 Longformer: The Long-Document Transformer

长文档Transformer

「方法简述:」Transformer-based models处理长序列时存在困难,因为它们的自注意力操作与序列长度呈二次方关系。Longformer通过引入一个与序列长度呈线性关系的注意力机制解决了这个问题,使其能够轻松处理数千个标记或更长的文档。 Longformer在字符级语言建模方面表现优秀,并在各种下游任务上取得了最先进的结果。此外,Longformer还支持长文档生成序列到序列任务,并在arXiv摘要生成数据集上展示了其有效性。

图片

1.2 Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting

增强局部性并打破Transformer在时间序列预测中的内存瓶颈

「方法简述:」时间序列预测是许多领域中的重要问题,包括太阳能发电厂能源输出、电力消耗和交通拥堵情况的预测。本文提出了使用Transformer来解决这种预测问题的方法。虽然初步研究表明其性能令人印象深刻,但作者发现它有两个主要缺点:局部性不敏感和内存瓶颈。为了解决这两个问题,作者提出了卷积自注意力和LogSparse Transformer,它们能够更好地处理局部上下文并降低内存成本。实验表明,这些方法在时间序列预测方面具有优势。

图片

1.3 Adaptive Attention Span in Transformers

Transformers中的自适应注意力跨度

「方法简述:」论文提出了一种新的自注意力机制,可以学习其最优的注意力跨度。这使得我们可以显著扩展Transformer中使用的最大上下文大小,同时保持对内存占用和计算时间的掌控。作者在字符级语言建模任务上展示了该方法的有效性,在该任务中,作者使用最大8k个字符的上下文实现了在text8和enwiki8上最先进的性能

图片

二、Transformer处理长文本

2.1 Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

超越固定长度上下文的注意语言模型

「方法简述:」Transformers在语言建模中受到固定长度上下文的限制,作者提出了一种新的神经网络架构Transformer-XL,可以学习超过固定长度的依赖关系。它由一个段级别循环机制和一个新的位置编码方案组成,能够捕捉更长的依赖关系并解决上下文碎片化问题。该方法不仅在短序列和长序列上都取得了更好的性能,而且在评估期间比普通的Transformers快1,800+倍。

图片

三、Transformer运行提效

3.1 REFORMER: THE EFFICIENT TRANSFORMER

高效的Transformer

「方法简述:」大型Transformer模型训练成本高,尤其是在长序列上。论文提出了两种技术来提高效率:使用局部敏感哈希替换点积注意力,将复杂度从O(L^2)降低到O(L log L);使用可逆残差层代替标准残差,允许只存储一次激活。由此产生的Reformer模型在长序列上表现相当,但更内存高效和更快。

图片

3.2 RETHINKING ATTENTION WITH PERFORMERS

重新思考注意力机制:Performer模型

「方法简述:」论文介绍了Performers,一种Transformer架构,可以以可证明的准确性估计常规(softmax)全秩注意力Transformers,但仅使用线性空间和时间复杂度。为了近似softmax注意力核,Performers使用了一种新颖的快速注意通过正交随机特征方法(FAVOR+),并可以用于高效地建模可核化的注意力机制

图片

3.3 Linformer: Self-Attention with Linear Complexity

具有线性复杂度的自注意力机制

「方法简述:」大型Transformer模型在自然语言处理应用中表现出色,但长序列的训练和部署成本很高。本文提出一种新自注意力机制,将复杂度从O(n^2)降低到O(n),同时保持性能不变。由此产生的Linformer比标准的Transformer更节省时间和内存。

图片

四、卷积Attention

4.1 Conformer: Convolution-augmented Transformer for Speech Recognition

用于语音识别的卷积增强Transformer

「方法简述:」Conformer是一种结合了卷积神经网络和Transformer的模型,用于语音识别。它能够同时捕捉音频序列的局部和全局依赖关系,并实现了最先进的准确率。在LibriSpeech基准测试中,Conformer在不使用语言模型的情况下实现了2.1%/4.3%的WER,在使用外部语言模型的情况下实现了1.9%/3.9%的WER。此外,它还具有竞争力的小模型,只有10M参数。

图片

4.2 LITE TRANSFORMER WITH LONG-SHORT RANGE ATTENTION

具有长短范围注意力的轻量级Transformer

「方法简述:」本文提出了一种高效的移动自然语言处理架构Lite Transformer,它使用长短范围注意力(LSRA)来提高性能。LSRA将一组头专门用于局部上下文建模(通过卷积),另一组头则专门用于长距离关系建模(通过注意力)。在三个语言任务上,Lite Transformer始终优于普通的Transformer。在受限资源下,Lite Transformer比Transformer在WMT’14英法翻译任务上高出1.2/1.7 BLEU分数。

图片

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### 构建和训练 Transformer 预测模型 #### 数据准备 在应用 Transformer 进行预测任务时,数据准备工作至关重要。这一步骤涉及文本预处理、分词、词嵌入以及训练集和测试集的划分[^3]。 对于文本预处理而言,通常需要清理文本中的噪声(如HTML标签)、转换为小写、去除停用词等操作。接着采用合适的分词工具将文本分割成单词或子词单元。之后利用预训练好的词向量模型(如Word2Vec, GloVe),或是直接使用 BERT 的 WordPiece tokenizer 来获取输入序列对应的词嵌入表示形式。最后按照一定比例随机分配样本至训练集合验证集中以便后续评估模型性能。 #### 模型搭建 构建一个基于 PyTorch 或 TensorFlow 的 Transformer 结构作为核心组件来完成特定类型的预测任务。这里给出一段简单的 Python 代码片段展示如何定义一个基础版本的 Transformer 类: ```python import torch.nn as nn from transformers import BertModel class SimpleTransformer(nn.Module): def __init__(self, num_classes=2): super(SimpleTransformer, self).__init__() self.bert = BertModel.from_pretrained('bert-base-uncased') self.fc = nn.Linear(768, num_classes) def forward(self, input_ids, attention_mask=None): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)[0][:, 0, :] logits = self.fc(outputs) return logits ``` 此部分主要依赖于 Hugging Face 供的 `transformers` 库中已经实现好了的各种变体结构,比如上述例子里面使用的 BERT 模型。通过继承自 `nn.Module` 并重载其构造函数与前馈传播方法即可快速创建属于自己的分类器或其他用途的神经网络架构。 #### 训练过程 为了使所建立起来的 Transformer 能够适应具体应用场景下的需求,在正式投入使用之前还需要经历一系列迭代优化的过程——即所谓的“训练”。一般情况下会遵循如下几个要点来进行设置: - **损失函数**:针对不同性质的任务选用恰当的目标函数衡量当前输出同真实标记之间的差异程度; - **优化算法**:借助 AdamW 等先进梯度下降策略调整参数权重从而最小化累积误差; - **超参调节**:合理配置批量大小(batch size),学习率(learning rate)等因素影响收敛速度及最终果; 下面是一段用于启动整个流程并监控进度变化情况的小脚本样例: ```python model.train() optimizer.zero_grad() for epoch in range(num_epochs): running_loss = 0.0 for batch_idx, (inputs, labels) in enumerate(train_loader): optimizer.zero_grad() outputs = model(**inputs).logits loss = criterion(outputs.view(-1), labels.view(-1)) loss.backward() optimizer.step() running_loss += loss.item() if batch_idx % log_interval == 0 and not batch_idx == 0: print(f'Epoch {epoch}, Batch {batch_idx}/{len(train_loader)}, Loss: {running_loss / log_interval:.4f}') running_loss = 0.0 torch.save(model.state_dict(), 'simple_transformer.pth') print("Training completed.") ``` 这段程序展示了怎样循环遍历所有批次的数据执行反向传播更新权值,并定期打印平均损耗信息直至结束为止。同时保存下最优的一组参数组合方便以后加载继续实验或者部署上线服务端口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值