近年来,Transformer模型 引起了广泛关注,它在近几年的 **自然语言处理(NLP)**领域掀起了一场风暴。Transformer是一种利用注意力机制(Attention)显著提升深度学习NLP翻译模型性能的架构。
它最初在《Attention is All You Need》这篇论文中被提出,并迅速确立为大多数文本数据应用中的主流架构。
自那之后,包括谷歌的 BERT和OpenAI的GPT 系列在内的众多项目都在此基础上进行了拓展,并发布了远远超越现有最先进基准的性能结果。
本文内容:Transformer的应用场景、为何优于RNN、架构组件以及训练和推理过程中的行为表现。
什么是Transformer
Transformer架构在处理本质上具有序列特性的文本数据方面表现出色。
它以一个文本序列作为输入,并产生另一个文本序列作为输出,例如将输入的英文句子翻译成西班牙语。
其核心由多层编码器(Encoder)和解码器(Decoder)堆叠而成。
为避免混淆,我们将单个层称为编码器或解码器,而将一组编码器层称为编码器栈(Encoder Stack),一组解码器层称为解码器栈(Decoder Stack)。
编码器栈和解码器栈各自为其输入配备了相应的嵌入层(Embedding Layer)。
最后,有一个输出层来生成最终输出。
所有编码器之间是完全相同的,同样,所有解码器之间也是如此。
-
编码器包含至关重要的自注意力层(Self-Attention Layer),用于计算序列中不同单词之间的关系,以及一个前馈层(Feed-Forward Layer)。
-
解码器则包含自注意力层、前馈层,以及一个额外的编码器-解码器注意力层(Encoder-Decoder Attention Layer)。
-
每个编码器和解码器都有自己的一套权重。
编码器是一个可复用的模块,是所有Transformer架构的标志性组件。
除了上述两层外,它还在两层周围配备了残差跳跃连接(Residual Skip Connections)和两个层归一化层(LayerNorm Layers)。
Transformer架构存在多种变体,其中一些完全不需要解码器,仅依赖编码器工作。
注意力机制的作用是什么?
Transformer之所以取得突破性表现,关键在于其使用的注意力机制。
在处理一个单词时,注意力机制使模型能够聚焦于输入中与该单词紧密相关的其他单词。
例如,“球”(Ball)与“蓝色”(blue)和“拿着”(holding)紧密相关,但“蓝色”(blue)与“男孩”(boy)则不相关。
Transformer架构通过让每个输入序列中的单词与序列中的其他所有单词建立关系,从而实现自注意力机制。
可以看下面两个句子:
-
猫喝了牛奶因为它饿了。
-
猫喝了牛奶因为它很甜。
在第一个句子中,“它”指的是“猫”,而在第二个句子中则指的是“牛奶”。
当模型处理单词“它”时,自注意力机制为模型提供更多关于其意义的信息,以便将“它”与正确的单词相关联。
为了使Transformer能够更细致地处理句子的意图和语义,它为每个单词计算多个注意力得分。
例如,在处理单词“它”时,第一个得分突出显示“猫”,而第二个得分则突出显示“饿了”。
因此,在将“它”翻译成另一种语言时,模型会将“猫”和“饿了”的某些方面融入到翻译后的单词中。
训练Transformer
Transformer在训练和推理过程中的工作方式略有不同。
首先,我们来看训练过程中的数据流。训练数据由两部分组成:
-
源或输入序列(例如,对于翻译问题,英文的“You are welcome”)
-
目标或输出序列(例如,西班牙文的“De nada”)
Transformer的目标是通过使用输入和目标序列来学习如何输出目标序列。
Transformer处理数据的过程如下:
-
输入序列首先会被转换为嵌入向量(并附加位置编码),然后送入编码器进行处理。
-
编码器层叠结构会对这些嵌入向量进行处理,并生成输入序列的编码表示。
-
目标序列在开头会添加一个句子起始标记,随后被转换为嵌入向量(并附加位置编码),然后送入解码器。
-
解码器层叠结构会结合编码器的编码表示,共同处理这些信息,以生成目标序列的编码表示。
-
输出层将这些编码表示转换为单词概率,从而得到最终的输出序列。
-
Transformer的损失函数会将这一输出序列与训练数据中的目标序列进行比较。通过反向传播,这一损失值被用来生成梯度,以训练Transformer模型。
推理过程
在推理阶段,我们只有输入序列,没有目标序列作为解码器的输入。
Transformer的目标是仅根据输入序列生成目标序列。
类似于Seq2Seq模型,我们通过一个循环生成输出,将上一时间步的输出序列作为下一时间步解码器的输入,直到遇到句子结束标记。
但与Seq2Seq模型不同的是,在每个时间步,我们都重新输入到目前为止生成的所有输出序列,而不仅仅是最后一个单词。
推理过程中的数据流为:
-
输入序列被转换成嵌入向量(并加入位置编码),送入编码器。
-
编码器堆叠层处理这些嵌入向量,生成输入序列的编码表示。
-
我们使用一个仅包含句子开始标记的空序列代替目标序列,将其转换成嵌入向量(并加入位置编码),送入解码器。
-
解码器堆叠层结合编码器的编码表示,对空序列的嵌入向量进行处理,开始生成目标序列的编码表示。
-
输出层将编码表示转换为单词概率,并生成输出序列。
-
取输出序列的最后一个单词作为预测单词,将其填充到解码器输入序列的第二个位置,此时解码器输入序列包含句子开始标记和第一个预测单词。
-
重复步骤3至6,直到预测出句子结束标记。注意,由于编码器序列在每次迭代中都不变,因此我们不需要重复步骤1和2(感谢Michal Kučírka指出这一点)。
Teacher Forcing
在训练过程中,我们将目标序列作为解码器的输入,这种方法被称为教师强制。
为什么采用这种方法,以及这个术语的含义是什么呢?
在训练时,我们本可以采用与推理时相同的方法,即通过一个循环,取输出序列的最后一个单词,附加到解码器输入,并送入解码器进行下一轮迭代。
但这样做不仅会使训练过程耗时更长,还会增加模型训练的难度。
因为模型需要基于可能错误的第一个预测单词来预测第二个单词,以此类推。
相反,通过给解码器提供目标序列作为输入,我们实际上是在给模型一个提示,就像老师指导学生一样。
即使模型预测的第一个单词是错误的,它也能利用正确的第一个单词来预测第二个单词,从而避免错误不断累积。
此外,Transformer能够并行输出所有单词,无需循环,这大大加快了训练速度。
Transformer的用途及其优势
Transformer的多种用途,Transformer是一种极其灵活的模型,广泛应用于自然语言处理(NLP)的各个领域,如语言模型构建、文本分类等。
在序列到序列(Sequence-to-Sequence)的模型中,Transformer更是大放异彩,被用于机器翻译、文本摘要、问答系统、命名实体识别以及语音识别等多种应用场景。
针对不同的问题,Transformer架构有不同的变体。
其基本编码器层(Encoder Layer)作为这些架构的通用构建块,通过添加针对特定应用领域的“头”(heads)来适应不同的解决方案需求。
Transformer的分类架构
以情感分析为例,该应用将文本文档作为输入。分类头(Classification head)接收Transformer的输出,并预测文本的类别标签,如正面或负面情感。
Transformer的语言模型架构
在语言模型架构中,模型接受输入序列(如文本句子)的初始部分,并通过预测后续句子来生成新文本。
语言模型头(Language Model head)利用Transformer的输出,为词汇表中的每个单词生成一个概率。
概率最高的单词即成为句子中下一个单词的预测输出。
为何Transformer优于RNN?
在Transformer出现之前,递归神经网络(RNN)及其变种(如长短期记忆网络LSTM和门控循环单元GRU)是NLP应用的标配架构。
然而,Transformer的出现彻底改变了这一格局。
虽然基于RNN的序列到序列模型表现不俗,且注意力机制(Attention Mechanism)的引入进一步提升了其性能,但RNN仍存在两大局限:
-
难以处理长句中相隔较远的单词之间的长距离依赖关系。
-
必须按顺序逐个处理输入序列中的单词,即只有完成前一个时间步的计算后,才能进行下一个时间步的计算,这导致训练和推理速度较慢。
相比之下,卷积神经网络(CNN)能够并行计算所有输出,从而提高卷积速度。
但在处理长距离依赖方面,CNN也有其局限性:在卷积层中,只有足够接近以至于能够被卷积核覆盖的图像部分(或文本数据中的单词)才能相互作用。
对于距离较远的元素,则需要更深的网络层数。
而Transformer架构则巧妙地解决了上述问题。它彻底摒弃了RNN,完全依赖于注意力机制的优势:
-
并行处理序列中的所有单词,极大地加速了计算过程。
-
无论输入序列中单词之间的距离如何,Transformer都能有效计算它们之间的依赖关系,无论是相邻单词还是相隔较远的单词。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。