Transformer

Transformer

先放一个jalammar博客

Transformer
Transformer

transformer总体结构

Transformer

  • 为什么有多个encoder呢?:从下往上可以提取表层的词法信息 -> 抽象的语义信息
  • encoder到decoder的部分就是attention部分,进行信息传递和交互
  • encoder和decoder的数量是一样的

encoder结构

Transformer
Transformer
Transformer
什么是attention?:

  • 语言学角度:描述词与词的关联关系
  • 机器学习角度:神经网络隐层之间的相似度表示

什么是self-attention?:

  • self-attention 表示句子内部词与词之间的关联关系
  • 可以解决指代消解等问题

什么是encoder-decoder-attention?:

  • 编码序列与解码序列中词与词的关联关系
  • 以机器翻译为例:表征翻译中源端到目标可能互译词之间的对应关系

Transformer

详细的attention计算

Transformer
Q表示为了编码当前词,需要去注意其它(其实也包括它自己)的词,我们需要有一个查询向量。而Key向量可以认为是这个词的关键的用于被检索的信息,而Value向量是真正的内容。
Transformer
Self-Attention里的Query不是隐状态,并且来自当前输入向量本身,因此叫作Self-Attention。另外Key和Value都不是输入向量,而是输入向量做了一下线性变换。当然理论上这个线性变换矩阵可以是Identity矩阵,也就是使得Key=Value=输入向量。因此可以认为普通的Attention是这里的特例。这样做的好处是模型可以根据数据从输入向量中提取最适合作为Key(可以看成一种索引)和Value的部分。类似的,Query也是对输入向量做一下线性变换,它让系统可以根据任务学习出最适合的Query,从而可以注意到特定的内容。
Transformer
Transformer
dk\sqrt{d_k}表示维度的大小

  • 新的向量的尺度远小于词向量的尺度,维度为64,这种架构选择可以使(大部分)多头注意力计算不变

Transformer
多头的attention的好处:

  • 机器学习角度:参数变多了,拟合数据的能力变强,可以考虑到不同位置的attention
  • 语言学角度:不同的子空间可以表示不同的关联关系(指代、依存、其他的句法信息)对于attention赋予了多个子空间
    Transformer
    Transformer
    attentionconcatnateW0把不同的attention进行concatnate然后乘以一个W^0达到压缩的目的,避免后面进行矩阵计算的 开销比较大

以上可以并行的操作,但是丢失了位置信息,所以我们需要对位置建模

Transformer
PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i) = sin(pos/10000^{2i/d_{model}})
PE(pos,2i+1)=cos(pos/100002i/dmodel)PE(pos,2i+1) = cos(pos/10000^{2i/d_{model}})

Residual connection

Transformer
Transformer
Residul Connect 对比深层的神经网络有较好的作用:

  1. 直连层:减少信息的丢失
  2. Layer Norm 层防止weights过大或者过小的导致梯度消失或者梯度爆炸,保证训练的稳定性

Transformer
这里需要注意的是:decoder的self-attention是masked的,拿机器翻译来说,我们在翻译的时候只可以看到以前已经翻译的信息,看不到即将翻译的信息

Transformer

输出层的隐层

Transformer

损失函数

Transformer
交叉熵或者相对熵

Transformer