开篇
我个人的观点是要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤):
理解NLP基础
在探讨Transformers之前,了解自然语言处理(NLP)的一些基本知识至关重要。NLP使计算机能够理解和生成自然语言,文本的表征是其核心任务之一。传统的语言模型往往依赖于递归神经网络(RNN)处理序列数据,但RNN在长序列中表现较差。为了解决这一问题,必须引入先进的方法和架构。
Transformers的出现
Transformers架构于2017年首次提出,迅速改变了NLP领域。它的核心在于解决RNN无法并行化的缺陷,并利用自注意力机制来捕捉序列中各个词之间的关系。这种架构不仅提升了处理速度,同时也改善了上下文理解能力,极大增强了模型的表现。
Transformers的结构
Transformers由编码器和解码器组成。编码器负责处理输入信息,而解码器则生成最终输出。这一结构使得模型能够有效地进行信息处理,将多层编码器和解码器堆叠在一起,增加了模型的表达能力。位置编码的引入,让模型了解到输入序列中词的顺序,弥补了仅靠自注意力机制的局限。
动手实践
实践是深入理解Transformers的最佳方式。构建一个简单的Transformer模型,通过Python及深度学习框架,如TensorFlow或PyTorch,可以帮助对其原理有更直观的认识。从零开始,实现基本的自然语言生成任务,能够切身感受到Transformers的强大。
什么是Transformer
Transformer架构源于2017年谷歌团队的论文“Attention Is All You Need”。这一创新的模型,革命性地引入了自注意力机制,致力于解决处理长序列信息中的难题。传统的循环神经网络(RNN)在面对长数据序列时,常常面临信息遗失和效率低下的问题。然而,Transformer通过自注意力机制,捕捉了长距离依赖关系,使得这些缺陷得到了有效克服。
Transformer的意义体现在它的长距离依赖关系处理和并行计算,而这两点都离不开其提出的自注意图机制。
首先,Transformer引入的自注意力机制能够有效捕捉序列信息中长距离依赖关系,相比于以往的RNNs,它在处理长序列时的表现更好。
而自注意力机制的另一个特点时允许模型并行计算,无需RNN一样t步骤的计算必须依赖t-1步骤的结果,因此Transformer结构让模型的计算效率更高,加速训练和推理速度。
Transformer最开始应用于NLP领域的机器翻译任务,但是它的通用性很好,除了NLP领域的其他任务,经过变体,还可以用于视觉领域,如ViT(Vision Transformer)。
这些特点让Transformer自2017年发布以来,持续受到关注,基于Transformer的工作和应用层出不穷。包括当下最热门的AI大语言模型/聊天机器人,比如ChatGPT、文心一言、Bard等等。
这些AI大模型能生成“真假难辨”的新闻、专业论文等等,跟人类进行对话,生成代码等一系列复杂的任务。
比如,就拿这个题目的问题去问ChatGPT。我想让它给一个没有深度学习、知识的人介绍Transformer,看他如何作答。
如果觉得还是有不少专业词汇不理解,重新让它更通俗的解释Transformer。
Transformer中最重要的一个方面是自注意力机制,那么到底应该如何理解这个概念呢。
什么是注意力机制
首先来看注意力机制(Attention)用来干嘛?
我们人类在感知环境的时候(比如看一张图像或者一个句子),大脑能够让我们分清那部分是重要的,哪部分是次要的,从而聚焦更重要的方面以获得对应的信息。
而我们在设计神经网络模型
的时候,希望模型也能具有这样的能力。例如,预测一个句子中的单词时,使用一个注意力向量来估计它在多大程度上与其他元素相关。
简单的说,注意力机制描述了(序列)元素的加权平均值,其权重是根据输入的query和元素的键值进行动态计算的。具体地,在注意力机制中,有4个概念需要明确。
- Query:Query(查询)是一个特征向量,描述我们在序列中寻找什么,即我们可能想要注意什么。
- Keys:每个输入元素有一个键,它也是一个特征向量。该特征向量粗略地描述了该元素“提供”什么,或者它何时可能很重要。键的设计应该使得我们可以根据Query来识别我们想要关注的元素。
- Values:每个输入元素,我们还有一个值向量。这个向量就是我们想要平均的向量。
- Score function:评分函数,为了对想要关注的元素进行评分,我们需要指定一个评分函数f该函数将查询和键作为输入,并输出查询-键对的得分/注意力权重。它通常通过简单的相似性度量来实现,例如点积或MLP。
由此,权重通过softmax函数计算得出:
下图直观描述注意力如何作用在一系列单词上。对于每个单词,都有一个键和一个值向量。使用评分函数(在本例中为点积)将query与所有键进行比较以确定权重。最后,使用注意力权重对所有单词的值向量进行平均。(为了简单起见,softmax 没有可视化。)
大多数注意力机制在使用哪些query、如何定义键、值向量,以及使用什么评分函数方面有所不同。Transformer 架构内部应用的注意力称为自注意力(self-attention)。在自注意力中,每个序列元素提供一个键、值和query。对于每个元素,根据其query作用一个注意力神经层,检查所有序列元素键的相似性,并为每个元素返回一个不同的平均值向量
自注意力机制的基础
自注意力机制,是Transformer架构中的关键环节。它的目标是使序列中的每个元素能够关注其他元素,这在处理自然语言时显得尤为重要。传统的序列处理方法往往只关注相邻元素,限制了信息的全面提取。自注意力机制突破了这一点,使得每个词能够通过关注其他词进行信息交互,形成了更加灵活和高效的处理方式。
缩放点积注意力的核心
缩放点积注意力是自注意力机制的核心概念。这种机制通过将一组查询(Q)、键(K)和值(V)矩阵结合起来进行计算。查询、键、值的维度相同,这样可以在同一维度内进行运算。具体来说,计算过程涉及到首先对查询和键进行点积操作,然后经过缩放处理,最后通过softmax函数归一化得到注意力权重。这个过程使得模型能够识别出序列中哪些词对于某个上下文最为重要。
多头注意力的提升
多头注意力机制在缩放点积注意力的基础上进一步提升了自注意力的效果。通过将多个独立的注意力头并行计算,模型能够从不同的子空间中提取信息。每个注意力头关注的方面各有不同,使得模型具备了多样化的信息捕捉能力。最终,这些不同的头的输出会被拼接并传入后续的层中,这一过程增强了模型对于上下文信息的理解能力。
具体来说,给定一个查询、键和值矩阵,我们将它们转换为h个子查询、子键和子值,然后分别输入给点击注意力模型,最后连接头部并将它们与最终的权重矩阵组合起来。
Transformer编码器
最初,Transformer 模型是为机器翻译而设计的。它是一个编码器-解码器结构,其中编码器将原始语言的句子作为输入并生成基于注意力的表征。而解码器关注编码信息并以自回归方式生成翻译的句子,就像 RNN一样。
编码器由N个相同的模块组成,输入x首先通过上面提到的多头注意力块。使用残差连接
将输出添加到原始输入,每一次都有归一化操作。
提一下位置编码
上面已经提到过,多头注意力模块是置换同变性的,并且无法区分一个输入是否出现在序列中的另一个输入之前。然而,在语言理解等任务中,位置对于解释输入单词非常重要。因此可以通过输入特征添加位置信息。Transformer通过向输入的每个嵌入(embedding)中添加一个向量完成位置编码(position encoding)。
最后说一下为什么说Transformer目前占绝对主导地位?
Transformer的无可替代性
在当今的科技界,Transformer的地位确立无疑。自从Bert以及GPT系列的开山鼻祖出现,它在大规模算力下展现的并行计算和序列数据关联能力被广泛证明。这些优势使其在工业应用中屹立不倒。例如,OpenAI的诸多AI产品均基于Transformer架构,证明了其强大的适应性与稳定性。
规模化与扩展性
Transformer架构的另一个显著优势在于其优秀的扩展性。只需通过简单的堆叠模型层数,即可显著提升效果。而相比之下,传统的CNN和RNN架构在增加层数时往往面临过拟合和训练困难等问题。Nvidia显卡H100的16896个FP32核,使得大规模模型训练成为可能,而Transformer特有的并行计算设施,使这一过程如鱼得水,达到了无与伦比的效率。
适应性与应用场景广泛
不仅如此,Transformer的通用性也是不容忽视的一大优点。从自然语言处理到图像识别、再到视频处理,Transformer在各类数据处理任务中均表现优异,几乎覆盖了当前主流的数据处理需求。其SOTA表现,使得其他架构望尘莫及。
与其他架构的比较
虽然近年来Mamba和RWKV等基于RNN的新型架构也取得了不少进展,但在大规模推广和应用上仍有所欠缺。Mamba的选择性状态空间模型和RWKV的时间复杂度优化虽然具备创新性,但在产业应用上,Transformer依然保持了不可动摇的领先地位。尤其在算力资源充分的条件下,Transformer只需要Decoder部分即可完成高效并行计算,使得其更具竞争力。
结语
Transformer在当代大模型开发中的主导地位毋庸置疑。无论是其经过验证的强大性能、优异的扩展性、广泛的适应性,还是与其他架构的对比,均证明了Transformer是当前工业应用和创业项目中减少风险的重要保障。当今的科技界纷纷选择Transformer作为首选架构,未来仍将是它的舞台。