# 背景
给定一个翻译任务:将 I love you baby 翻译为中文。
先把每一个词转换成对应的 词向量,考虑按照下面方式处理:
- 直接丢到 MLP 中,那么:
- 每个词都会失去上下文信息,且长度只能一一对应

- 用 RNN,那么:
- 会面临串行计算
- 句子太长会导致记不住长距离的信息

# 注意力机制 Attention
上面两个方法都有缺陷,可以考虑按照下面的方法处理:
- 首先,给每个
词向量加上各自的位置编码(表示该词出现在整个句子中的位置),现在这个词向量就具备了位置信息

- 但现在每个词都还没有其他词的上下文信息(注意不到其他词的存在)。用
权重矩阵与第一个词向量相乘(MatMul),得到维度不变的 矩阵。同理,用 矩阵处理得到 。同理,得到 。- 其中 矩阵都是可以经过训练学习到的一组权重值。
- 实际在 GPU 中运算时,是把词向量拼接成一个矩阵,再与 W 矩阵相乘。



- 现在,原来的词向量已经通过线性变换映射成了维度相同的 。将 与 做
内积得到 ,表示在第一个词的视角下,与第二个词的相似度系数。同理,得到 。

- 得到相似度系数后,分别和 v 向量相乘,再相加,得到 ,表示在第一个词的视角下的全部上下文信息。同理,得到 。


- 从全局的视角看,就是把最初的词向量,处理得到新的词向量(包含了位置信息和其他词上下文信息),这就是
注意力机制 Attention的原理

# 多头注意力机制 Multi-Head Attention
对于注意力机制而言,通过一种方式计算一次相关性,那么灵活性会大大降低。
- 之前是每个词向量计算一组 ,现在基于原来的 ,再经过两个
权重矩阵W 变成两组 ,相当于给每个词向量两次学习机会,学习到不同的待计算相似度的 $q_{ij}, k_{ij}, v_{ij} $(头部 head)来增加语言的灵活性。

- 两个
head经过注意力层的计算,得到 向量,再把两个 向量拼接起来,得到和原词向量相同维度的新词向量。这种方式也即多头注意力机制机制 Multi-Head Attention。


# Transformer 论文架构图
# 整体架构
- 把输入的内容通过
词嵌入 Word Embedding的方式转换为向量矩阵

- 加入位置信息

- 经过多头注意力的处理,输入、输出的矩阵在维度上没有变化,输出的矩阵的每个词向量都增加了上下文信息。
- 后面的
Add & Norm是优化步骤。表示残差网络和归一化,是为了解决梯度消失问题、让分布更加稳定。
- 后面的

# 多头注意力架构
- 单头注意力:先让 q, k 内积,得到一个
相似度系数的矩阵,再和 v 相乘,得到包含上下文信息的词向量矩阵- Scale:缩放
- Mask:掩码
- SoftMax:将输出映射到(0, 1)区间
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\fracQK{\sqrt{d_k}})V

- 多头注意力机制
q,k,v 分别经过线性变换 Linear(矩阵乘法)拆分成多组(相当于给了多次机会学习到不同的相似度关系),依次经过单头注意力机制运算后,把运算结果拼接 Concat 起来。最后再用权重矩阵 进行线性变换
MultiHead(Q,K,V)=Concat(head1,…,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)\beginalign\*} \\text{MultiHead}(Q, K, V) &= \\text{Concat}(\\text{head}\_1, \\dots, \\text{head}\_h) W_i &= \textAttention}(Q W\_i

# 编码器与解码器

用原来的翻译任务为例:
编码器:
- 输入要翻译的文本
- 经过 词嵌入 Embedding,引入位置编码 Positional Encoding
- 经过多头注意力、残差和归一化
- 送入一个全连接神经网络 Feed Forward,再残差和归一化
- 结果送入解码器的一个多头注意力机制的两个输入中(作为
K,V)
解码器:
- 输入要翻译的文本
- 经过 词嵌入 Embedding,引入位置编码 Positional Encoding
- 经过
掩码后的多头注意力、残差和归一化,送入多头注意力的一个输入中(作为Q) K,V,Q进行多头注意力,再残差和归一化- 最后结果一层线性变换的神经网络,把向量投射到词表向量中
- Softmax 转化为概率
Masked Attention
- 作用:屏蔽未来位置信息,保证解码器只能基于已生成的前缀序列预测下一个词
- Transformer 解码器是自回归生成模型:每一步的输出都依赖于之前所有的输出
- 掩码是一个上三角矩阵,未来位置的注意力权重置为 −∞(或极小值)
参考链接:Transformer 其实是个简单到令人困惑的模型【AI入门06】_哔哩哔哩_bilibili