欢迎关注我的公众号 [极智视界],获取我的更多经验分享
大家好,我是极智视界,本文采用 大白话来解读一下 Transformer,既然是大白话就不贴数学公式了。
邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:t.zsxq.com/0aiNxERDq
可以说 Transformer 是划时代的。
解读 Transformer,必须要先说说它的出现,带来的重要意义。Transformer的贡献主要有以下几点:
- 引领了自注意力机制的研究方向:Transformer的提出让自注意力机制开始受到广泛关注,进一步推动了注意力机制的发展,目前自注意力机制已经成为了自然语言处理和计算机视觉领域中重要的技术,被广泛应用在各种模型中;
- 改善了序列建模的能力:传统基于循环神经网络 (RNN) 的序列建模方法在长序列的处理上存在梯度消失和梯度爆炸等问题,导致模型的学习能力下降。Transformer使用自注意力机制,可以避免以上问题,能够更好地处理长序列数据,提高了序列建模的能力;
- 提高了模型的并行计算能力:传统基于 RNN 的模型的计算流程是依次进行,无法并行计算,而 Transformer 使用自注意力机制,使各个位置的计算可以独立进行,并且可以并行计算,完美匹配了现代 AI 加速器的特性,从而提高了模型的计算效率。这一创新不仅使得模型可以更快地训练和推断,同时也为模型在分布式环境下的应用提供了更多可能性;
- 推动了预训练模型的发展:Transformer 在序列建模方面的优秀表现,也推动了预训练模型的发展。BERT、GPT 等基于 Transformer 结构的预训练模型被广泛应用,催生出了 AIGC,为 AI 带来了变革;
还是一图胜千言,来看看 Transformer 的模型架构,上图:
可以很清晰的看到,Transformer 是一个 Encoder-Decoder 的架构,其基本架构是左边一个编码器,后边一个解码器,说基本架构的原因是,编码器和解码器都不止一个,而是 Nx 个。
- 左边编码器的工作流是:输入的文本句子经过 Embedding词嵌入 后和一个位置编码结合进入编码器。编码器内首先是一个多头自注意力,然后Add可以理解为残差网络里的恒等映射,后接一个LN(层归一化),接着送入一个MLP网络;
- 右边解码器的工作流是:输入有两部分,一部分是上一个解码器的输出,另一部分是编码器的输出。当上一个解码器的输出作为输入时,首先还是要嵌入一个位置编码,然后进一个带掩码的多头自注意力层 ,然后接残差连接和 LN。这样就形成了编码器内部的 queries(q),然后结合左边编码器的输出作为 memory keys(k)和 values(v),这样就形成了解码器多头注意力的三个输入 q、k、v,最后同样再接一个 MLP 就可以了;
- 在完成编码器和解码器之后,再接一个 fc 和 softmax 就能得到网络的输出了;
以上大白话了 Transformer 的网络架构,其中最主要的可能有几点:多头自注意力、多头注意力、带掩码的多头自注意力、位置编码、输入输出流的连接。
毫无疑问,在 Transformer 中注意力机制肯定是最重要的,毕竟人家论文题目都叫 “Attention is all you need” 。但是你可能又会比较晕,怎么一下多头注意力,一下多头自注意力,一下又带掩码的多头自注意力了。
解释一下,首先需要知道什么是注意力,也就是 Dot-Product Attention,结构如下图,有三个输入 q、k、v。(在 Transformer 里又加入了 Scaled 的概念,目的是整体缩放一下,降低长短不一句子在做 softmax 对于概率求导的影响,这会影响训练的收敛)。
有了注意力后,再来看多头注意力,也就是 Multi-Head Attention,结构如下图:
可以看到,多头注意力其实就是在注意力的基础上,将 q、k、v 从单个数变成矩阵再同时进行注意力,接着拼接,这样可以并行计算加速。
了解了什么是多头注意力后,再来说说什么是多头自注意力,多了个”自”,这个意思是说 q、k、v 都是自己,是一模一样的,也就是自己和自己做多头注意力。
有了以上的概念后再来解释带掩码的多头自注意力,所谓带掩码,这个出现在解码器中,意思是把当前位置后面的词掩盖掉,不让解码器看到,这是因为对于解码器来说,期望看到的是当前位置往前的句子,而不应该一下子就看到全部的句子,实际采用-∞的数去做掩码。
所以整体来说,在 Transformer 的架构中,总共是有三种类型的注意力机制:
- 编码器中的多头自注意力;
- 解码器中的带掩码的多头自注意力;
- 解码器中的多头注意力(q来自自身解码器,k、v来自编码器);
在 Transformer 中还需要注意的一点是位置编码,Transformer 不像循环神经网络和卷积神经网络那样是关注局部信息的(意味着数据是有序一块块喂的),Transformer 的特点是一下子喂全部的数据,它能一下子看到全局的信息,所以即使你是乱序的,也不会影响 Transformer 本身的特征提取,只是乱序会影响输出的语义。所以为了获得特定的输出语义,其实需要给 Transformer 的输入序列嵌入一个位置编码,能够告诉 Transformer 输入序列的位置信息。Transformer 中的位置编码采用 sine、cosine函数来设计,使用三角函数的好处在于,三角函数是周期性的,所以在推理的时候可以拓展到比训练阶段遇到的序列长度更加长的序列。
上面这些就是 Transformer 中一些比较关键的点了,Transformer 更加大的意义在于它的变体。基于 Transformer 衍生出了图像里的 SOTA 模型、多模态里的 SOTA 模型,还引领了目前预训练大模型的发展,催生出了划时代的 AIGC 模型。真可谓不得不跟。
好了,以上分享了 大白话解读 Transformer。希望我的分享能对你的学习有一点帮助。
【公众号传送】
畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。不敢说会对你学习有所帮助,但一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq