Transformer解析

为什么要有Transformer的架构

Seq2seq + attention 有2个限制:

  1. 处理长句子中分散得很远的单词之间的长期依赖关系是一项挑战
  2. 他是一个单词一个单词顺次输入的,意味着在完成时间步长t-1的计算之前不能进行时间步长t的计算

Transformer架构

论文attention is all your need的论文中的架构:
Transformer解析_第1张图片

输入

embedding要考虑词序
为什么?
在这里插入图片描述

Transformer解析_第2张图片

encoder-decoder架构

transformer包含一堆编码器和解码器,蓝色部分是 encoder stack,紫色部分是decoder stack。
Transformer解析_第3张图片

而每个encoder和decoder的内部结构:
Transformer解析_第4张图片

Multihead Attention

和self-attention的区别是:使用不同的K、Q、V,得到多个attention vector,形成n个vector得到一个matrix。(n是样本数,d是embedding的feature维度数)
Transformer解析_第5张图片

从multihead attention层 ——> add + normalize层
layernorm层将上一层得到的context matrix + 开始的输入matrix,进行归一化。归一化的目的:对每个样本进行归一化。
Transformer解析_第6张图片
为什么Transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?
区别:Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。

add + normalize层 ——> feedforward 层
经过上一层的归一化后,进行线性变换。
Transformer解析_第7张图片
Transformer的encoder stack部分由多个encoder串联在一起,例如上一个encoder输出后,输入到下一个encoder。
Transformer解析_第8张图片

decoder部分

Decoder 结构,从下到上依次是:

  • Masked Multi-Head Self-Attention
  • Multi-Head Encoder-Decoder Attention
  • FeedForward Network

输入

decoder输入:encode的embedding + 起始符号
Transformer解析_第9张图片
decoder内部和encode相似,不过最下面一个的muultihead attention经过mask

接着将这第一个单词作为最下面masked multi-head attention的输入

Masked Multi-Head Self-Attention

Transformer解析_第10张图片
参考博客:transformer详解
Transformer解析_第11张图片
之后再做 softmax,就能将 - inf 变为 0,得到的这个矩阵即为每个字之间的权重

Multi-Head Encoder-Decoder Attention

Encoder最后输出的context matrix,将其复制成2份,作为decoder attention部分中的K和V。Q作为Decoder中Masked Multi-Head Self-Attention的输出。

输出

decode出来后
Transformer解析_第12张图片

Transformer解析_第13张图片

问答:
https://blog.csdn.net/taoqick/article/details/107010068

你可能感兴趣的:(transformer,深度学习,自然语言处理)