深度学习与Transformers模型入门
立即解锁
发布时间: 2025-08-31 02:05:55 阅读量: 8 订阅数: 16 AIGC 

# 深度学习与Transformers模型入门
## 作者与贡献者简介
### 作者
- **Uday Kamath**:拥有超过二十年分析产品开发经验,融合了统计学、优化、机器学习、生物信息学和进化计算等多领域知识。他在众多期刊、会议和书籍上发表过文章,著有《XAI: An Introduction to Interpretable XAI》《Deep Learning for NLP and Speech Recognition》等。曾担任Digital Reasoning首席分析官、Falkonry顾问和BAE Systems Applied Intelligence首席数据科学家等高级职位,拥有多项专利,利用人工智能在合规、网络安全、金融犯罪和生物信息学等领域开发了商业产品。目前担任Smarsh首席分析官,负责金融领域和医疗保健方面的数据科学、深度学习分析产品研究等工作。
- **Kenneth L. Graham**:有二十年解决多领域定量问题的经验,涵盖蒙特卡罗模拟、自然语言处理、异常检测、网络安全和行为分析等。过去十年专注于为政府和行业构建自然语言处理可扩展解决方案,包括实体共指消解、文本分类、主动学习、自动语音识别和时间归一化等。目前在AppFolio担任高级机器学习工程师,拥有五项自然语言处理相关专利、七篇研究论文,并获得凝聚态物理博士学位。
- **Wael Emara**:在学术界和工业界拥有二十年经验,获得计算机工程和计算机科学博士学位,专注于机器学习和人工智能。技术背景和研究涵盖信号与图像处理、计算机视觉、医学成像、社交媒体分析、机器学习和自然语言处理等领域。在多个机器学习主题的同行评审出版物上有贡献,活跃于大纽约地区的技术社区。目前在Smarsh, Inc. for Digital Reasoning担任首席数据科学家,从事最先进的人工智能自然语言处理系统研究。
### 贡献者
|姓名|所属机构|所在地|
| ---- | ---- | ---- |
|Krishna Choppella|BAE Systems AI|加拿大多伦多|
|Mitch Naylor|Smarsh, Inc.|田纳西州纳什维尔|
|Vedant Vajre|Stone Bridge High School|弗吉尼亚州阿什本|
## 深度学习:历史视角
深度学习的发展历程丰富且曲折,以下是其重要发展节点:
1. **早期神经元模型**:20世纪40年代初,S. McCulloch和W. Pitts使用“阈值逻辑单元”模拟智能行为,该简单模型成为所有神经架构的基础,不过权重是手动调整而非学习得到。1949年,Donald Hebb提出神经通路中多个神经元随时间激发和强化的理论,为复杂神经处理奠定基础。1958年,Frank Rosenblatt扩展了McCulloch - Pitts神经元,提出“Mark I Perceptron”,通过反复输入数据并减少预测输出与期望输出的差异来学习权重,诞生了基本的神经学习算法。
2. **感知机的局限与AI寒冬**:然而,Marvin Minsky和Seymour Papert在《Perceptrons》一书中揭示了感知机在学习简单异或(XOR)函数时的局限性,引发了第一次AI寒冬。
3. **循环神经网络的出现**:1982年,John Hopfield引入“Hopfield Networks”,这是最早的循环神经网络(RNN)之一,可作为内容寻址记忆系统。
4. **反向传播算法的突破**:1986年,David Rumelhart、Geoff Hinton和Ronald Williams发表了“Learning representations by back - propagating errors”,证明了多层神经网络通过反向传播误差可以克服感知机的弱点,学习复杂模式。此后,LeCun等人将神经网络首次广泛应用于美国邮政服务的手写数字识别,证明了卷积操作和权重共享在计算机视觉特征学习中的实用性。
5. **长短期记忆网络的提出**:但反向传播算法存在梯度消失、梯度爆炸和无法学习长期信息等问题。1997年,Hochreiter和Schmidhuber提出“Long short - term memory(LSTM)”架构,解决了长期依赖问题。
6. **深度学习的复兴**:2006年,Hinton等人发表了“A fast learning algorithm for deep belief nets”,强调了逐层无监督训练后进行有监督微调的有效性,引发了深度学习的复兴。随后,Bengio等人深入探讨了深度学习网络多层结构在特征分层学习方面的优势,Fei - Fei Li等人推出的ImageNet数据集凸显了数据在学习目标识别、分类和聚类等基本任务中的重要性。同时,计算机硬件的改进,特别是GPU的发展,以及大量数据的存在,使得深度学习成为许多先进技术的基础。
7. **自然语言处理的发展**:Mikolov等人和Graves提出了基于RNN和LSTM的语言模型,成为自然语言处理(NLP)架构的基础。Collobert和Weston的研究展示了预训练词嵌入、文本卷积神经网络和多任务学习中嵌入矩阵共享等概念。Mikolov等人进一步改进了词嵌入训练效率,提出了“word2vec”。Sutskever的研究提出了无Hessian优化器,有效训练RNN处理长期依赖问题,并引入了序列到序列学习框架,成为许多NLP任务的核心架构。为克服序列到序列框架的瓶颈,Bahdanau等人提出了注意力机制,在Transformers及其变体中发挥了关键作用。
## Transformers与分类
### 模型简介
2017年,“Attention Is All You Need”论文中引入了Transformers架构,用于解决序列到序列问题,它是循环或卷积层的替代方案。自引入以来,对标准Transformers的改进研究众多,主要集中在架构修改、预训练方法和应用三个方面。
### 改进的Transformer架构
#### 1. Transformer块的更改
对Transformer块的修改主要分为以下五类:
- 减少内存占用和计算量
- 在Transformer块之间添加连接
- 自适应计算时间(如允许训练期间提前停止)
- 循环或分层结构
- 更彻底地改变架构(如神经架构搜索)
部分修改后的Transformer模型如下表所示:
|修改类型|Transformer模型|
| ---- | ---- |
|轻量级Transformer|Lite Transformer、Funnel Transformer、DeLighT|
|跨块连接|Realformer、Transparent Attention|
|自适应计算时间|Universal Transformer、Conditional Computation Transformer、DeeBERT|
|循环|Transformer - XL、Compressive Transformer、Memformer|
|分层|HIBERT、Hi - Transformer|
|不同架构|Macaron Transformer、Sandwich Transformer、Differentiable Architecture Search|
#### 2. Transformer子层的更改
Transformer块通常由位置编码、多头注意力、带层归一化的残差连接和位置前馈网络四个部分组成。对Transformer子层的更改主要集中在这些组件上,尤其是多头注意力机制。
##### 多头注意力机制的改进
对多头注意力机制的研究主要集中在两个方面:
- 降低注意力机制的计算复杂度:有低秩近似方法,如Linformer和Performer;通过稀疏化注意力机制降低复杂度,如Longformer和BigBird;还有一些通过排序或聚类输入令牌引入可学习稀疏性的方法,如Reformer。
- 改进注意力机制的学习能力:例如允许注意力头之间“通信”和共享信息、学习最佳关注范围、在不同注意力头中使用不同关注范围等。
部分修改后的多头注意力模块如下表所示:
|修改类型|Transformer模型|
| ---- | ---- |
|低秩|Performer、Nystromformer、Synthesizer|
|含先验的注意力|Gaussian Transformer、Realformer、Synthesizer、Longformer|
|改进的多头注意力|Talking - heads Attention、Multi - Scale Transformer|
|复杂度降低|Longformer、Reformer、Big Bird、Performer、Routing Transformer|
|原型查询|Clustered Attention、Informer|
|聚类键值内存|Set Transformer、Memory Compressed Transformer、Linformer|
##### 位置编码的更改
位置编码是将序列顺序信息编码到Transformer中的一种方式,目前使用的位置编码主要有四种:绝对位置编码(如标准Transformer)、相对位置编码(如Transformer - XL)、包含绝对和相对位置信息的混合编码以及以其他方式提供序列顺序信息的隐式编码。具体如下表所示:
|修改类型|Transformer模型|
| ---- | ---- |
|绝对位置|Original Transformer|
|相对位置|Transformer - XL|
|绝对/相对混合|Roformer|
|其他表示| R - Transformer|
##### 残差连接和位置前馈网络的更改
对残差块和位置前馈网络的修改包括调整层归一化的位置、用其他方法替代层归一化、完全移除层归一化或引入可逆残差层以节省内存(如Reformer)。同时,也有研究尝试改变位置前馈网络的激活函数、增加其表示能力或移除前馈网络。
### 预训练方法和应用
大量研究关注Transformer的预训练方法,主要有仅编码器模型(如BERT)、仅解码器模型(如GPT - 3)和编码器 - 解码器模型(如T5和ByT5)。此外,还有许多针对特定数据领域(如金融或医学文本)和特定数据类型(如图像或视频)的应用和领域特定Transformer模型。
## 资源推荐
### 库和实现
|组织|语言和框架|API|预训练模型|
| ---- | ---- | ---- | ---- |
|AllenNLP|Python和PyTorch|是|是|
|HuggingFace|Jax、PyTorch和TensorFlow|是|是|
|Google Brain|TensorFlow|是|否|
|GluonNLP|MXNet|是|是|
### 书籍
- 《Transfer Learning for Natural Language Processing》by Paul Azunre
- 《Transformers for Natural Language Processing》by Denis Rothman
- 《Deep Learning Algorithms: Transformers, gans, encoders, rnns, cnns, and more》by Ricardo A. Calix
- 《Python Transformers By Huggingface Hands On》by Joshua K. Cage
- 《Deep Learning for NLP and Speech Recognition》by Uday Kamath, John Liu, and James Whitaker
### 课程、教程和讲座
- 《The Annotated Transformer》by Alexander Rush et al.:[链接](http://nlp.seas.harvard.edu/2018/04/03/attention.html)
- HuggingFace课程:[链接](https://huggingface.co/course)
- DeepLearning.AI序列模型课程:[链接](https://www.coursera.org/learn/nlp-sequence-models)
- DeepLearning.AI Transformers和BERT课程:[链接](https://www.coursera.org/learn/attention-models-in-nlp)
- 斯坦福大学CS224N:自然语言处理与深度学习课程:[链接](http://web.stanford.edu/class/cs224n/)
- 加州大学伯克利分校应用自然语言处理课程:[链接](https://people.ischool.berkeley.edu/~dbamman/info256.html)
- 高级自然语言处理与spaCy课程:[链接](https://course.spacy.io/en/)
- 《Deep Learning for Coders with fastai and PyTorch》by Sylvain Gugger and Jeremy Howard:[链接](https://course.fast.ai/)
- Jay Alammar对Transformers及相关架构的可视化解释:[链接](https://jalammar.github.io/)
### 案例研究
在相关学习中,每个章节结尾都有案例研究,帮助读者了解模型和方法的应用,案例研究选择在至少与NVIDIA K80一样强大的GPU上约一小时内运行完成,相关案例也可在Github仓库中获取:[链接](https://github.com/CRCTransformers/deepdive-book)。
下面是深度学习发展历程的mermaid流程图:
```mermaid
graph LR
A[早期神经元模型] --> B[感知机局限与AI寒冬]
B --> C[循环神经网络出现]
C --> D[反向传播算法突破]
D --> E[长短期记忆网络提出]
E --> F[深度学习复兴]
F --> G[自然语言处理发展]
G --> H[Transformers引入]
```
通过以上内容,我们对深度学习和Transformers模型有了较为全面的了解,包括其发展历程、架构改进、预训练方法、应用以及相关学习资源等。希望这些信息能帮助大家在深度学习和自然语言处理领域不断探索和进步。后续我们还会深入探讨Transformers的基础知识和实际应用案例。
## Transformers基础与介绍
### 编码器 - 解码器架构
许多自然语言处理问题,如机器翻译、问答系统和文本摘要等,通常使用序列对作为输入来训练模型,且序列长度可变。解决这类问题常用编码器 - 解码器架构,其结构如下:
```mermaid
graph LR
A[输入序列] --> B[编码器]
B --> C[固定长度输出状态]
C --> D[解码器]
D --> E[输出序列]
```
编码器负责将可变长度的输入序列转换为固定长度的输出状态,解码器则根据该输出状态生成特定的输出序列。
### Transformers的构建模块
#### 1. 注意力机制
注意力机制是Transformers的核心,它允许模型在处理序列时关注不同位置的信息。通过计算输入序列中每个位置与其他位置的相关性,为每个位置分配不同的权重,从而更好地捕捉序列中的依赖关系。
#### 2. 多头注意力机制
多头注意力机制是注意力机制的扩展,它通过多个不同的注意力头并行计算,使模型能够从不同的表示子空间中学习信息,增强了模型的表达能力。
#### 3. 位置编码
由于Transformers本身不具备捕捉序列顺序信息的能力,因此需要使用位置编码来将序列的顺序信息融入模型。位置编码可以是绝对位置编码、相对位置编码、混合编码或隐式编码等。
#### 4. 残差连接
残差连接用于解决深度神经网络中的梯度消失和梯度爆炸问题,它允许信息在网络中更顺畅地流动。在Transformers中,残差连接通常应用于多头注意力机制和位置前馈网络之后。
#### 5. 编码器 - 解码器框架
编码器 - 解码器框架将编码器和解码器结合起来,实现序列到序列的转换。编码器处理输入序列,解码器根据编码器的输出生成输出序列。
### 各构建模块的详细解析
#### 多头注意力机制
多头注意力机制的计算步骤如下:
1. 将输入序列通过线性变换得到查询(Query)、键(Key)和值(Value)三个矩阵。
2. 计算查询和键之间的相似度得分,常用的计算方法是点积。
3. 对相似度得分进行归一化处理,通常使用Softmax函数。
4. 根据归一化后的得分,对值矩阵进行加权求和,得到注意力输出。
5. 将多个注意力头的输出拼接起来,再通过一个线性变换得到最终的多头注意力输出。
#### 位置编码
不同类型的位置编码有不同的特点和应用场景:
|位置编码类型|特点|应用模型|
| ---- | ---- | ---- |
|绝对位置编码|为每个位置分配一个唯一的编码,直接表示位置信息|标准Transformer|
|相对位置编码|考虑位置之间的相对关系,更灵活地捕捉序列顺序|Transformer - XL|
|绝对/相对混合编码|结合了绝对和相对位置信息的优点|Roformer|
|其他表示|以其他方式提供序列顺序信息| R - Transformer|
#### 残差连接和位置前馈网络
残差连接的作用是在网络中添加捷径,使得梯度能够更容易地传播。位置前馈网络通常是一个两层的全连接神经网络,用于对多头注意力机制的输出进行进一步的非线性变换。对它们的修改包括调整层归一化的位置、改变激活函数、增加表示能力或移除某些组件等。
### 实际案例研究
为了更好地理解Transformers的实际应用,下面通过一个具体的案例进行说明。我们可以使用知名的库和数据集,按照以下步骤进行操作:
1. **数据准备**:选择合适的数据集,如常见的自然语言处理数据集,并进行预处理,包括分词、编码等操作。
2. **模型构建**:使用相应的库构建Transformers模型,配置模型的参数,如层数、头数等。
3. **模型训练**:将准备好的数据输入到模型中进行训练,设置训练的超参数,如学习率、批次大小等。
4. **模型评估**:使用测试数据集对训练好的模型进行评估,计算评估指标,如准确率、召回率等。
5. **结果分析**:分析模型的性能,根据评估结果对模型进行调整和优化。
通过以上步骤,我们可以更深入地了解Transformers在实际应用中的操作流程和性能表现。
综上所述,Transformers凭借其强大的架构和优秀的性能,在自然语言处理等多个领域取得了显著的成果。通过对其构建模块的深入理解和实际案例的应用,我们能够更好地掌握和运用这一技术,为相关领域的发展提供有力支持。同时,持续关注架构的改进和预训练方法的研究,将有助于进一步提升模型的性能和应用效果。
0
0
复制全文
相关推荐









