Hg's Blog

学习 分享 进步

0%

Transformer 学习笔记

Transformer 笔记

输入 -> 编码 -> 解码 -> 输出

Transformer 结构

注意点:

每个小 Encoder 结构都是一样的,但是参数都不同,分别训练

每个小 Decoder 结构都是一样的,但是参数都不同,分别训练

Encoder 和 Decoder 是不一样的

image-20220804104944103

这里的N在文章中为6

Encoder 和 Decoder

Encoder

结构 : 输入、注意力机制、前馈神经网络

六个大的模块之间是串行的

每一个模块注意力层和前馈神经层自身可以并行计算,不同单词之间没有依赖关系;注意力层和前馈神经层又是串行关系。

输入

包括:

  • Embedding

  • 位置编码

位置编码记录了词序信息。

关于位置编码,对于所有的 timeline 上的位置共享一套参数

RNN 网络输入有天然的时序关系;Transformer 的 multihead 机制是同时处理所有输入的,忽略了时序关系,因此需要位置编码。

位置编码的公式:

$PE_{(pos,2i)}=\sin(pos/10000^{2i/d_{model}})$

$PE_{(pos,2i+1)}=\cos(pos/10000^{2i/d_{model}})$

其中 $i$ 是位置编码维度(如 0-511)

位置编码(512d)+Embedding(512d)得到 transformer 的输入

位置嵌入有效的原因:在绝对位置信息中包含相对位置信息,$pos+k$ 位置的位置向量中的某一维 $2i$ 或 $2i+1$ 能够被 $pos$ 位置和 $k$ 位置的位置向量中的 $2i$ 和 $2i+1$ 维线性组合。但这种相对位置信息会在注意力机制那里消失。

推理公式:

$PE_{(pos+k,2i)}=PE_{(pos,2i)}\times PE_{(k,2i+1)}+PE_{(pos,2i+1)}\times PE_{(k,2i)}$

$PE_{(pos+k,2i+1)}=PE_{(pos,2i+1)}\times PE_{(k,2i+1)}-PE_{(pos,2i)}\times PE_{(k,2i)}$

注意力机制

$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$

$Q$ 是输入,点乘 $K$(表示区域),得到相似度向量,softmax 归一化后乘 $V$ 得到 Attention Value

在只有单词向量的情况下,将单词向量与 $QKV$ 矩阵相乘得到 $QKV$ 向量。

作归一化的原因:随着$d_k$的增大,$QK^T$的结果也随之增大,而如果点乘后的值过大,会导致softmax函数趋近于边缘,梯度较小。为了抵消影响,需要将点积缩放。

Normalization

diif_norm

CV 使用 Batch Norm

BN 是对于每一个特征在 batch_size 上作特征缩放。

BN的:

  • 优点:可以解决内部协变量偏移;缓解了梯度饱和问题,加快收敛
  • 缺点:batch_size 较小的时候效果差;在 RNN 中效果比较差,因为输入是动态的,不能有效地得到整个batch_size 中的均值和方差。

NLP 使用 Layer Norm

LN是针对每一个样本进行特征缩放。

为什么 CV 任务用 BN 而 NLP 任务使用 LN ?

词向量是学习出来的用来表示语义的参数,不是真实存在的;而图像的像素是真实存在,包含图像特征的信息。