文章目录
- Transformer
- Transformer架构
- 位置编码
- 编码器
- 多头自注意力
- 前馈网络
- 解码器
- 带掩码的多头自注意力
- 以编码器输出作为输入的多头自注意力
- 前馈网络
本文将介绍一个不使用卷积和循环网络层,而是完全基于注意力机制的模型——Transformer。提出这个模型的论文是Attention Is All You Need:
Transformer
一般注意力模型
自注意力(self-attention)和多头注意力(multi-head attention)
Transformer使用的注意力机制是多头自注意力,即将自注意力和多头注意力结合起来:
图片改自:[1]
下面将以Transformer为例展示多头自注意力,所以这里略过。
Transformer架构
Transformer总体架构如图:
左边为编码器,右边为解码器,表示模块重复N次。
Transformer的编码器将输入进行编码,得到输入的表示。
Transformer的解码器则是自回归的,即在生成下一符号时,使用先前生成的所有符号作为输入。给定,解码器一次生成一个元素直到输出整个序列。
以机器翻译(中文翻译为英文)为例:
(1)训练时
编码器
输入:生存还是毁灭
输出:编码Z
解码器
输入:BEGIN To be or not to be 和 Z(中间插入,如架构图所示)
目标:To be or not to be END
BEGIN和END为开始和结束的标识符。
(2)测试时
编码器
输入:生存还是毁灭
输出:编码Z
解码器自回归输入输出:
输入:BEGIN和Z(中间插入)
输出:To
输入:BEGIN To 和Z(中间插入)
输出:be
输入:BEGIN To be 和Z(中间插入)
输出:or
输入:BEGIN To be or和Z(中间插入)
输出: not
输入:BEGIN To be or not和Z(中间插入)
输出: to
输入:BEGIN To be or not to和Z(中间插入)
输出: be
输入:BEGIN To be or not to be和Z(中间插入)
输出:END
结束
下面三个小节将分别讲解Transformer的位置编码,编码器和解码器
位置编码
Transformer不包含卷积和循环模块。为了让模型能够利用输入的顺序,我们可以给输入的特征向量添加位置编码,增加一些位置信息。
令是输入向量的位置,是输入向量的维度,表示输入向量的第个维度。Transformer使用不同频率的正弦和余弦函数作为位置编码,输入向量的位置编码为:
其中:,
以维度为横坐标,位置为纵坐标,画出位置编码图像:
图片来源:[7]
每一行为一个位置编码。
这种位置编码除了可以表示向量的绝对位置信息,即不同输入向量有不同的位置编码,还包含相对位置信息:
其中
即和可以由和线性表示。
对于输入,位置编码与向量具有相同的维度,所以可以将两者逐元素相加:
编码器
多头自注意力
Transformer总共有个并行的自注意力层/头。每个自注意力头都有自己的可学习权重矩阵和,,自注意力头的查询、键和值根据特征矩阵计算如下:
键(Key)矩阵:
值(Value)矩阵:
查询(Query)矩阵:
以缩放点乘(Scaled Dot-Product)作为打分函数计算注意力得分:
以Softmax()作为对齐函数,计算注意力权重:
自注意力头输出为:
将上述每个头部的自注意力计算过程总结为表达式:
我们的目标仍然是创建一个上下文向量作为注意力模型的输出。因此,要将各个注意力头产生的上下文向量被连接成一个向量。然后,使用权重矩阵对其进行线性变换:
对于每一个头,可以令。由于每个头部的输出尺寸大小都,所以总计算成本与全尺寸单头注意的计算成本差不多。
Transformer的多头自注意力层还使用了残差连接和层归一化,最终输出为:
前馈网络
编码模块最终输出:
其中
解码器
带掩码的多头自注意力
解码器为了保持自回归性,要求解码器中注意力层的输出只与有关,这可以通过在打分函数和对齐函数之间加了一个掩码实现。
掩码:
对齐:
得到上下文矩阵,即自注意力层的输出:
可以看到,使用掩码之后,注意力层的输出只与有关
其他跟编码器的是一样的。
以编码器输出作为输入的多头自注意力
解码器第二个多头自注意力与编码器的一样,不过它的, 矩阵不是使用上一层的输出计算,而是使用编码器的最终编码信息计算。
若编码器的最终输出为;上一层输出为,则:
键(Key)矩阵:
值(Value)矩阵:
查询(Query)矩阵:
前馈网络
与编码器的相同。
暂时介绍到这里,更多细节可能会在后续的博客展开。
参考:
[1] A General Survey on Attention Mechanisms in Deep Learning https://arxiv.org/pdf/2203.14263v1.pdf
[2] Attention Is All You Need https://arxiv.org/pdf/1706.03762.pdf
[3] 《神经网络与深度学习》 邱锡鹏
位置编码推荐进一步阅读:
[4] https://zhuanlan.zhihu.com/p/454482273
[6] https://zhuanlan.zhihu.com/p/106644634
[7] https://kazemnejad.com/blog/transformer_architecture_positional_encoding/