AI 入门 101
什么是Transformer神经网络?

Transformer神经网络描述
Transformer是一种专门用于处理和解释序列数据的机器学习模型,使其适合自然语言处理任务。为了更好地理解什么是机器学习Transformer以及它们如何工作,让我们更详细地了解Transformer模型和驱动它们的机制。
本文将涵盖:
- 序列到序列模型
- Transformer神经网络架构
- 注意力机制
- Transformer与RNNs/LSTMs的区别
序列到序列模型
序列到序列模型是一种用于将一种类型的序列转换为另一种类型的序列的NLP模型。序列到序列模型有多种类型,例如循环神经网络模型和长短期记忆(LSTM)模型。
传统的序列到序列模型,如RNN和LSTM,不是本文的重点,但了解它们对于理解Transformer模型的工作原理和为什么它们优于传统的序列到序列模型至关重要。
简而言之,RNN模型和LSTM模型由编码器和解码器网络组成,分析输入数据的各个时间步。编码器网络负责形成输入数据中单词的编码表示。在每个时间步,编码器网络接收输入序列和来自前一个时间步的隐藏状态。隐藏状态值会在数据通过网络时更新,直到最后一个时间步,生成一个“上下文向量”。然后将上下文向量传递给解码器网络,用于生成目标序列,通过预测输入单词在各个时间步的最可能的单词来实现。
这些模型可以通过使用“注意力机制”来增强。注意力机制定义了网络在生成输出时应该关注输入向量的哪些部分。换句话说,注意力机制允许Transformer模型处理一个输入单词,同时也关注其他输入单词所包含的相关信息。注意力机制还可以屏蔽不包含相关信息的单词。
Transformer神经网络架构
我们稍后将更详细地介绍注意力机制,但现在让我们从更高的层次上了解一下Transformer神经网络的架构。
一般来说,Transformer神经网络的结构如下:

虽然这种一般结构可能在不同网络之间有所不同,但核心组件将保持相同:位置编码、词向量、注意力机制、前馈神经网络。
位置编码和词向量
Transformer神经网络通过接收一系列输入并将这些输入转换为两个其他序列来工作。Transformer生成一个词向量嵌入序列和位置编码序列。
词向量嵌入只是将文本表示为神经网络可以处理的数字格式。同时,位置编码是包含当前单词在输入句子中相对于其他单词的位置信息的向量化表示。
其他基于文本的神经网络模型,如RNN和LSTM,也使用向量来表示输入数据中的单词。这些向量嵌入将单词映射到固定值,但这限制了单词的使用,因为单词可以在不同的上下文中使用。Transformer网络通过使单词值更加灵活来解决这个问题,使用正弦函数允许单词向量根据单词在句子中的位置取不同的值。
这使得神经网络模型即使在向量通过Transformer网络的各个层时,也能保留输入单词的相对位置信息。
位置编码和词向量嵌入相加,然后传递给编码器和解码器网络。虽然Transformer神经网络使用编码器/解码器模式,就像RNN和LSTM一样,但它们之间的一个主要区别是所有输入数据同时被馈送到网络中,而RNN和LSTM则是顺序地馈送数据。
编码器网络负责将输入转换为网络可以学习的表示,而解码器网络则执行相反的操作,将编码转换为用于生成输出句子中最可能的单词的概率分布。编码器和解码器网络都具有注意力机制。
由于GPU能够进行并行处理,多个注意力机制被并行使用,计算所有输入单词的相关信息。这被称为“多头”注意力,能够帮助神经网络学习单词在句子中的上下文,并且这是Transformer网络相对于RNN和LSTM的一个主要优势。
注意力机制
注意力机制是Transformer网络中最重要的部分。注意力机制使得Transformer模型能够超越传统RNN或LSTM模型的注意力限制。传统的序列到序列模型丢弃所有中间状态,只使用最终状态/上下文向量来初始化解码器网络以生成输入序列的预测。
丢弃所有中间状态,只使用最终上下文向量的方法在输入序列较短时效果还可以。但是,当输入序列的长度增加时,模型的性能会由于这种方法而降低。这是因为用单个向量来总结长输入序列变得非常困难。解决方案是增加模型的“注意力”,并利用中间编码器状态来构造解码器的上下文向量。
注意力机制定义了当为任何给定标记创建编码时,其他输入标记对模型的重要性。例如,“it”是一个常见的代词,通常用于指代动物时不知道其性别。注意力机制允许Transformer模型确定在当前上下文中“it”指的是一只松鼠,因为它可以检查输入句子中的所有相关单词。
注意力机制可以以三种不同的方式使用:编码器-解码器、编码器仅、解码器仅。
编码器-解码器注意力允许解码器在生成输出时考虑输入序列,而编码器仅和解码器仅注意力机制允许网络分别考虑前一个和当前序列的所有部分。
注意力机制的构造可以分为五个步骤:
- 计算所有编码器状态的分数。
- 计算注意力权重
- 计算上下文向量
- 使用前一个时间步的输出更新上下文向量
- 使用解码器生成输出
第一步是让解码器计算所有编码器状态的分数。这是通过训练解码器网络来完成的,解码器网络是一个基本的前馈神经网络。当解码器在输入序列的第一个单词上被训练时,尚未创建任何内部/隐藏状态,因此通常使用编码器的最后一个状态作为解码器的前一个状态。
为了计算注意力权重,使用softmax函数来生成注意力权重的概率分布。
一旦注意力权重被计算,需要计算上下文向量。这是通过将注意力权重和隐藏状态相乘来完成的,每个时间步都这样做。
计算上下文向量后,它与前一个时间步生成的单词一起用于生成输出序列中的下一个单词。由于在第一个时间步解码器没有前一个输出来参考,因此通常使用一个特殊的“开始”标记来代替。
Transformer与RNNs/LSTMs的区别
让我们快速介绍一下RNN和LSTM的一些区别。
RNN按顺序处理输入,同时维护和更新一个隐藏状态向量,该向量由输入单词在网络中移动时改变。RNN的隐藏状态通常包含很少与早期输入相关的信息。新的输入经常覆盖当前状态,从而导致信息丢失并随着时间的推移而降低性能。
相比之下,Transformer模型同时处理整个输入序列。注意力机制允许每个输出单词都能利用每个输入和隐藏状态,使得网络对于长文本更可靠。
LSTM是RNN的修改版本,用于处理更长的输入序列。LSTM架构使用一种称为“门”的结构,包括“输入门”、“输出门”和“遗忘门”。门控设计解决了RNN模型中常见的信息丢失问题。数据仍然是顺序处理的,架构的递归设计使得LSTM模型难以使用并行计算进行训练,从而使得训练时间更长。
LSTM工程师经常将注意力机制添加到网络中,这被认为可以提高模型的性能。然而,后来发现注意力机制本身就可以提高准确率。这个发现导致了使用注意力机制和并行计算的Transformer网络的创建,得益于GPU。












