Transformer的弱小在于它的设计。 高票答案曾经详细解说了Transformer在长距离依赖建模方面的才干,我就试着从设计方面补充一下“Transformer能够work很好”的其余几个要素吧。抛砖引玉,大家轻拍。
并行计算 + 弱小的表白与泛化才干
传统的循环神经网络(RNN)在处置序列数据时须要按顺序逐渐计算,不可并行。而Transformer可以做到”同时计算一切位置的输入”!它是怎么做到的呢?
上图是论文中 Transformer 的外部结构图,左侧为 Encoder block,右侧为 Decoder block。
首先,Transformer经常使用 位置编码 (Position Encoding)来记载各单词在语句中的位置或秩序,位置编码的值遵照必定规定(如由三角函数生成),每个源单词(或指标单词)的Word Embedding与对应的位置编码相加(位置编码向量与Word Embedding的维度相反)获取自己的编码,并最终成为Encoder的输入。
Transformer的Encoder组件由6个相反结构的Encoder串联而成,Decoder组件也是由6个结构相反的Decoder串联而成。 最后一层Encoder的输入将传入Decoder的每一层。
进一步看,每个Encoder中的Multi-Head Attention, 经过多个独立的留意力头并行计算,可以从不同的子空间中学习到不同的示意,从而使模型拥无关注言语不同方面的才干 。上方是Multi-Head Attention的外部结构,
从上图可以看到 Multi-Head Attention 蕴含多个 Self-Attention 层,首先将输入X区分传递到 h 个不同的 Self-Attention 中,计算获取 h 个输入矩阵。
而后,Multi-Head Attention 将它们拼接在一同 (Concat),传入一个Linear层,获取 Multi-Head Attention 最终的输入Z
Linear层(全衔接的神经网络层)的映射是 非线性变换 ,它的作用是对输入启动维度变换和特色提取。线性变换只能启动繁难的比例缩放敌对移操作,而非线性变换可以引入更多的复杂性,例如曲线外形、峰值和谷底等。这样可以使模型愈加灵敏,能够更好地顺应不同类型的数据散布,从而参与模型的表白才干。
Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 示意残差衔接 (Residual Connection) 用于防止网络退步(这也是RNN的顽疾),而Norm 示意 Layer Normalization,用于对每一层的激活值启动归一化,也就是将每一层神经元的输入都转成均值方差都一样的,这样可以放慢收敛。
除了多头机制,Transformer还经常使用了Feed Forward前馈网络,它由两个线性变换和一个非线性激活函数(通常是ReLU)组成。输入的词向量经过一个线性变换,将其映射到一个更高维度的空间。而后,经过ReLU启动非线性变换。最后,再经过一个线性变换,将其映射回原始的词向量维度。经过多层前馈网络的重叠,模型可以学习到更复杂的特色示意,从而更好地捕捉输入序列中的语义信息。
Transformer架构弱小的表白与泛化才干使之成为GPT等大言语模型的底层**,假设你也对Transformer和大模型感兴味,想把握经常使用和开发大模型的必备技巧,最终进入这一畛域,那么选用一门相应的网课是比拟快的门路。
传统序列模型在处置长序列时,由于信息的传递是依次启动的,容易出现梯度隐没或梯度爆炸的疑问,同时也不可充沛捕捉到序列中不同位置之间的依赖相关。
经过引入留意力机制,咱们可以对 每个位置的留意力权重启动独立计算,不须要像传统序列模型那样依次启动计算,从而成功全局的信息交互。 这也使得自留意力模型在处置长序列时具备更高的效率。
在这个模型中,MatMul是矩阵乘法的操作。详细来说, MatMul将查问矩阵Q与键矩阵K相乘,获取一个留意力分数矩阵。这个留意力分数矩阵示意了查问与每个键之间的相关性或相似度 ,从而选择在留意力机制中调配多少留意力权重给每个键对应的值(Value)。经过将留意力分数矩阵与值矩阵V相乘,可以获取最终的留意力示意。
Scale是指对留意力分数启动缩放的操作。 在计算留意力分数时,通常会将点积的结果除以一个缩放因子,这个缩放因子是留意力机制中的一个超参数。缩放的目的是为了控制留意力分数的大小,使其更稳固和可解释。
详细来说,计算留意力分数的公式为:Attention(Q, K) = softmax(QK^T / sqrt(d_k)) * V
其中,Q示意查问(Query),K示意键(Key),V示意值(Value),d_k示意键的维度。在计算留意力分数时,将点积结果除以sqrt(d_k)来启动缩放。这个缩放因子可以使得留意力分数的范围更适合,防止了点积结果过大或过小的状况。
较大的缩放因子可以参与留意力分数的范围,使得模型愈加关注不同位置之间的差异;较小的缩放因子可以减小留意力分数的范围,使得模型愈加平均地调配留意力权重。
这种留意力机制不依赖于外部的高低文信息,而是经过外部的自我关注来计算留意力权重。因此,它被称为self-attention自留意力机制。
Mask是一种用于控制留意力机制的操作。 它被用来屏蔽或限制模型在计算留意力分数时对某些位置的关注。 在自留意力模型中,经常出现的mask操作有两种:padding mask和sequence mask。
经过经常使用mask操作,自留意力模型可以更好地处置变长序列和生成义务,并且能够控制模型在计算留意力分数时的关注范围。不同的义务和运行场景或许须要不同类型的mask操作。
比如在机器翻译义务中,咱们宿愿将一个源言语句子逐渐翻译成指标言语句子。经常使用sequence mask可以确保模型只能依赖于之前已生成的局部,逐渐生成指标言语句子。
而在文本分类义务中,输入的文本长度或许不分歧。经常使用padding mask可以将填充局部的留意力权重设为0,疏忽填充局部的影响,确保模型只关注实在的文本内容。
如今当咱们议论Transformer时,其实是在议论一个大家族。2018年年终,AllenNLP颁布了一个新模型ELMo。ELMo是一种比Word2vec更好的训练词向量的模型。而之后的BERT、RoBERTa、XLNet、T5、ALBERT、GPT-3等模型从人造言语了解及人造言语生成等角度,不时刷新人造言语处置畛域义务的SotA(State of the Art)体现。
Transformer架构也像其余AI新技术一样,会不时迭代和降级,假设你也对Transformer大家族感兴味,想进入大模型开发这一抢手畛域,那么经过学习一门靠谱的网课会是比拟快的门路。