Transformer

Transformer

1. 模型概述

Transformer是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence)任务的深度学习模型架构,它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制(self-attention mechanism),这是一个关键的创新,使其在处理序列数据时表现出色。

1.1 基本结构

transformer基本模型图如下图所示。模型的左半边Encoder部分可以看作是一个编码器,右半边Decoder部分可以看作是一个解码器,其中编码器是双向的,解码器是单向的需要循环迭代输出。

transformer基本结构

1.2 特点与创新

  1. 训练并行: 即所有字是同时训练的,这样就大大增加了计算效率
  2. 自注意力机制: 核心概念之一,它使模型能够同时考虑输入序列中的所有位置,而不是像循环神经网络(RNN)或卷积神经网络(CNN)一样逐步处理。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。
  3. 多头注意力(Multi-Head Attention):自注意力机制被扩展为多个注意力头,每个头可以学习不同的注意权重,以更好地捕捉不同类型的关系。多头注意力允许模型并行处理不同的信息子空间。
  4. 堆叠层(Stacked Layers):Transformer通常由多个相同的编码器和解码器层堆叠而成。这些堆叠的层有助于模型学习复杂的特征表示和语义。
  5. 位置编码(Positional Encoding):由于Transformer没有内置的序列位置信息,它需要额外的位置编码来表达输入序列中单词的位置顺序。
  6. 残差连接和层归一化(Residual Connections and Layer Normalization):这些技术有助于减轻训练过程中的梯度消失和爆炸问题,使模型更容易训练。
  7. 编码器和解码器:Transformer通常包括一个编码器用于处理输入序列和一个解码器用于生成输出序列,这使其适用于序列到序列的任务,如机器翻译。

2. 模型细节

2.1 编码器(Encoder)

编码器

2.1.1 输入部分(Embedding)

为了能够把文本数据或音频数据输入进Transformer这个黑盒子里面处理,我们必须先通过Embedding将其转换成编码标识,使其成为计算机能够处理的数字。

在理解Embedding层之前,我们需要关注于文本数据的特点,举例:“我爱北京天安门”,我们在做文本数据处理得时候,传统的汉字是不能给计算机做运算的,为了解决汉字运算的问题,提出了将汉字进行编码(或叫文本张量表示)的思想。目前主流的编码方式有one-hot编码及word Embedding。

a. One-hot编码

该编码格式较为傻瓜式,就是将词库中所有的单词,从[0,max_len-1]的进行编号,使用哪个词对应的编号位置部分置1,其余部分置0。

b. word2vec编码

word to vec,即文本推导张量,存在两个模式,一个是CBOW,一个是skipgram

  • CBOW 类似于我们在英文考试中的完形填空,即根据上下文推导中间的单词
  • skipgram与之相反,通过某个单词,推导上下文,计算机复杂度更大
c. 位置编码

在Transformer中,我们需要将词向量和位置向量进行叠加,这样才能得到一个完整的词嵌入。位置编码的作用就是为了给词向量加上位置信息,使得词向量在空间中的位置不同,从而使得模型能够区分不同位置的词。

位置编码
具体例子

Transformer的输入部分其实就是词向量位置向量的叠加:比如下面一句话”我有一只猫”,经过分词之后的得到的token是 一只 ,那么 一只 词向量位置向量的叠加后的向量再放在一起组成的矩阵就是这句话的词嵌入

词嵌入 词嵌入

2.1.2 注意力机制(Self-attention)

在拿到一个Embedding的向量后,我们下一步要做的事就是利用Self-Attention机制去计算不同单词之间词向量的相似度