Transformer详解


1️⃣ Transformer介绍

从时序模型来看,传统的RNN,GRU,LSTM,Seq2Seq等 存在一个问题,就是不能并行计算。

Transformer结构可以解决这个问题。该结构在2017发表的论文《Attention is All you Need》 中被提出,之后用于Bert,GPT2,GPT3等模型中。

Transformer完全基于注意力机制,没有使用RNN,CNN等结构


2️⃣ 原理介绍

我们首先来看一个基于Transformer的中译英的整体架构:
在这里插入图片描述
Transformer由编码器和解码器构成,编码器中有6个encoder block;解码器中有6个decoder block。Transformer 的工作流程大体如下:

第一步:词嵌入+位置编码
首先将原始输入序列转换为固定维度的向量表示,即 词Embedding。此外由于Transformer没有使用RNN结构,没有序列顺序,因此通过引入位置编码,得到 位置Embedding 提供位置信息。

然后我们将词Embedding位置Embedding相加得到每个单词的 单词表示 x 。然后所有 单词表示x 组成下图中蓝色矩阵被称为“表示矩阵X”,其中每一行是一个 单词表示 x表示矩阵X 的维度为 n × d m o d e l n×d_{model} n×dmodel,其中n是单词个数, d m o d e l d_{model} dmodel单词表示x 的维度(论文中是512)

在这里插入图片描述

第二步:编码器
表示矩阵X 输入编码器中,经过6个encoder block得到 编码矩阵C 。C和维度和X的维度一样

在这里插入图片描述
第三步:解码器

解码器接受编码器的输出 编码矩阵C表示矩阵X。解码器根据翻译过的单词1~i翻译单词 i+1。在翻译单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 表示矩阵X 中 i+1及其之后的单词。
例如,首先输入翻译开始符 “<Begin>”,掩盖 表示矩阵X 中的"I have a cat",预测第一个单词 “I”;然后输入 “<Begin>” 和单词 “I”,掩盖 表示矩阵X 中的"have a cat",预测单词 “have”。
在这里插入图片描述
上面介绍了一个大致的流程,现在我们来详细介绍其中的细节。

1.输入数据准备

Transformer 中 单词表示x词Embedding位置 Embedding (Positional Encoding)相加得到
在这里插入图片描述

1.1 词嵌入

原始输入序列被转化为固定维度的向量表示,这一步通过词嵌入(如 Word2Vec、GloVe)或模型自学的嵌入向量完成

1.2 位置编码(Positional Encoding)
Transformer 不采用 RNN 的结构,没有单词的顺序信息,而这部分信息对于 NLP 来说非常重要【RNN是按照时序顺序处理的,当前时刻的输入包括上一时刻的隐藏层状态,因此天然包括单词的顺序信息】。因此通过引入位置编码,得到 位置Embedding 来提供位置信息,位置Embedding用PE表示:
P E ( p o s , 2 i ) = sin ⁡ ( p o s 10000 2 i d m o d e l ) , P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 10000 2 i d m o d e l ) PE_{(pos,2i)}=\sin\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right),\quad PE_{(pos,2i+1)}=\cos\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right) PE(pos,2i)=sin(10000dmodel2ipos),PE(pos,2i+1)=cos(10000dmodel2ipos)
其中, p o s pos pos 是单词在句子中的位置(从 0 开始计数), d m o d e l d_{model} dmodel是表示PE的维度 (与词 Embedding一样); i i i 是维度索引(从 0 到 ⌊ d m o d e l / 2 ⌋ − 1 \lfloor d_{model}/2 \rfloor - 1 dmodel/21

词Embedding位置Embedding相加得到每个单词的 单词表示 x

举个例子:
假设我们有一个中文句子:“我 爱 学习 人工智能”,共 4 个单词。我们将为这个句子计算位置编码,并展示如何将其与词嵌入结合。

  1. 参数设定
    假设词嵌入的维度 d m o d e l = 4 d_{model} = 4 dmodel=4(为了简化计算,通常实际中 d d d 较大,如 512)。
    句子长度为 4,因此 p o s = 0 , 1 , 2 , 3 pos = 0, 1, 2, 3 pos=0,1,2,3(对应“我”、“爱”、“学习”、“人工智能”)。
    位置编码的维度与词嵌入相同,因此 P E PE PE是一个 4×4 的矩阵(4 个位置,每个位置有 4 维)。
  2. 计算位置编码
    我们逐一计算每个位置 p o s pos pos 的位置编码向量 P E ( p o s ) PE_{(pos)} PE(pos)。由于 d m o d e l = 4 d_{model} = 4 dmodel=4,维度索引 i i i 取值为 0 , 1 0, 1 0,1【i的取值范围是 0 到 ⌊ d m o d e l / 2 ⌋ − 1 \lfloor d_{model}/2 \rfloor - 1 dmodel/21】。
    公式:
    对于 i = 0 i = 0 i=0,计算维度 0 和 1:
    P E ( p o s , 0 ) = sin ⁡ ( p o s 10000 0 4 ) = sin ⁡ ( p o s ) , P E ( p o s , 1 ) = cos ⁡ ( p o s 10000 0 4 ) = cos ⁡ ( p o s ) PE_{(pos, 0)} = \sin\left(\frac{pos}{10000^{\frac{0}{4}}}\right) = \sin(pos), \quad PE_{(pos, 1)} = \cos\left(\frac{pos}{10000^{\frac{0}{4}}}\right) = \cos(pos) PE(pos,0)=sin(1000040pos)=sin(pos),PE(pos,1)=cos(1000040pos)=cos(pos)
    (因为 10000 0 / 4 = 10000 0 = 1 10000^{0/4} = 10000^0 = 1 100000/4=100000=1
    对于 i = 1 i = 1 i=1,计算维度 2 和 3:
    P E ( p o s , 2 ) = sin ⁡ ( p o s 10000 2 4 ) = sin ⁡ ( p o s 10000 0.5 ) , P E ( p o s , 3 ) = cos ⁡ ( p o s 10000 2 4 ) = cos ⁡ ( p o s 10000 0.5 ) PE_{(pos, 2)} = \sin\left(\frac{pos}{10000^{\frac{2}{4}}}\right) = \sin\left(\frac{pos}{10000^{0.5}}\right), \quad PE_{(pos, 3)} = \cos\left(\frac{pos}{10000^{\frac{2}{4}}}\right) = \cos\left(\frac{pos}{10000^{0.5}}\right) PE(pos,2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值