做网站选大公司好还是小公司游戏优化大师官网
背景
最近在不断深入学习LLM的相关内容,那么transformer就是一个绕不开的话题。然而对于一个NLP门外汉来说,论文看得是真头疼,总览全网,我们似乎缺少一个至高而下的高层级理解。所以本文就来弥补此方面的缺失~
本文并不讲解有关Transformer的任何详细的模型结构说明,而是从论文出发,为大家详细解释Transformer原理的高层级理解,希望大家即使不了解模型细节,也可以理解Transformer的算法原理,并在此基础上可以更快的入门Transformer!
算法背景介绍
- 序列建模:在处理语言建模和机器翻译等序列问题时,传统上我们使用循环神经网络(RNN)或长短时记忆网络(LSTM)等模型。这些模型通过递归地处理序列中的每个元素来捕捉序列的依赖关系。
在很久很久以前~~,大模型针对上下文的理解使用的是循环神经网络。
循环神经网络比普通的神经网络多了一个特殊的隐藏层,用以保存上一次运行的输出。针对于循环神经网络的每一次运行,输入有两个:
- 当前输入
- 之前的输出结果
此时相当于模型对于当前的运算会参考之前的输出结果……
类似的,也就可以用于NLP任务上,这样模型在预测当前单词的时候会参考之前的文本。
但是这种方式存在一个最大的弊端,会产生信息在不断丢失的问题。相当于,虽然每一次运行都会参考之前的输出,但是对于该算法来说,影响最大的上一次的运行、其次是上上次运行、其次是上上上次运行……也就是说越远的单词对于当前的预测的影响越低!
可以在我们实际的语言交流中,单词的相关性并非和单词位置绑定,有可能最开始的单词和最末尾的单词相关性很大呢!所以该算法在发展了几年之后很快就不适用了。
- 注意力机制:注意力机制允许模型在处理序列时,关注到与当前任务最相关的部分,而忽略其他不相关的信息。这有助于模型更好地捕捉长距离的依赖关系。
这是本文的重点也是后续LLM大预言模型的奠基!
Transformer模型介绍
- 核心思想:Transformer模型完全基于注意力机制,不使用任何递归或循环操作。它利用自注意力(Self-Attention)机制来捕捉序列内部的依赖关系。
循环递归方法的最大问题就在于对于长上下文的单词之间的相关性获取不清晰。
自注意力机制全部摒弃了上诉的方案,详细的原理请继续阅读~
- 模型架构:Transformer模型由编码器(Encoder)和解码器(Decoder)两部分组成。编码器和解码器都包含多个相同的层,每层都有自注意力机制和前馈神经网络(Feed Forward Neural Network)。
- 自注意力机制:自注意力机制允许模型在处理序列中的每个元素时,都考虑到序列中的其他所有元素。这使得模型能够捕捉到元素之间的长距离依赖关系。
- 多头注意力(Multi-Head Attention):为了提升模型的表达能力,Transformer使用了多头注意力机制。这相当于将输入分成多个部分,每个部分都经过一个自注意力机制的处理,然后将结果拼接起来。
模型的优势
- 并行化:由于Transformer不依赖于递归操作,因此可以实现更高的并行计算能力,加快训练速度。
- 长距离依赖:通过自注意力机制,Transformer能够更好地捕捉序列中的长距离依赖关系。
- 性能提升:实验结果显示,Transformer在机器翻译等任务上的性能优于传统的循环神经网络和卷积神经网络模型。
自注意力机制的高层级原理说明
自注意力机制(Self-Attention Mechanism)是一种允许模型在处理单个序列时,序列中的每个元素(如单词)都能关联到其他元素的方法,从而捕获元素间的依赖关系,无论这些元素在序列中的距离有多远。这种机制是Transformer模型的核心组成部分。
自注意力机制的原理可以概括为以下几点:
-
输入表示:首先,将输入序列(如句子中的单词)转换为一系列高维向量(称为嵌入向量)。这些向量既包含了单词本身的信息,也包含了位置信息,因为Transformer模型本身并不理解序列中元素的顺序,需要通过额外的位置编码来提供这一信息。
第一部分并不涉及自注意力机制的核心,主要是对输入进行了一次embedding操作,即文本转向量的操作。除此之外还额外添加了一个位置信息。对于本处嵌入向量不理解的同学,可以先暂时暂停此处,搜索一下文本嵌入的相关知识。此部分的理解对于后续的理解还是很重要的。
-
查询、键和值:在自注意力层中,每个嵌入向量被转换为三个向量:查询(Query)、键(Key)和值(Value)。这三个向量是通过将原始嵌入向量与三个不同的权重矩阵相乘得到的。查询向量用于与其他元素的键向量进行比较,键向量用于与查询向量进行相似度计算,而值向量则包含了实际要提取的信息。
查询(Query)、键(Key)和值(Value)是注意力机制(Attention Mechanism)中的核心概念,它们在Transformer模型中被广泛用于计算序列中的元素之间的关系,即相关性。
可能很多读者看到这里会有一个疑惑,那就是为什么要求这些相关性?
其实本质的原因在于模型在进行当前单词推理的时候,需要参考往期元素,那么谁来决定参考哪些往期元素呢?这就是原因,相关性越高的元素,被当前操作参考的权重越大。
-
相似度计算:使用点积(或缩放点积)计算每个查询向量与序列中所有键向量的相似度。这一步骤的目的是确定序列中哪些元素与当前元素(由查询向量表示)最相关。
查询(query)相当于当前需要处理的单词的嵌入向量,键(key)相当于和位置信息绑定的其他元素的嵌入向量,值(value)相当于关联性的程度。
-
权重分配:根据相似度得分(通常通过softmax函数进行归一化),为序列中的每个元素的值向量分配权重。相似度得分高的元素将获得更高的权重,这意味着它们对当前元素的表示贡献更大。
-
加权求和:将加权后的值向量进行求和,得到当前元素的自注意力输出。这个输出向量包含了序列中所有元素对当前元素的影响,从而能够捕获元素间的长期依赖关系。
-
并行处理:由于自注意力机制在计算每个元素的输出时,都是独立于序列中其他元素的计算的,因此可以实现高度的并行化。这使得Transformer模型在训练时能够比传统的循环神经网络(RNN)或卷积神经网络(CNN)更快。
-
多头自注意力:Transformer模型还采用了多头自注意力机制,即使用多个不同的自注意力层来并行地处理输入序列。每个头都可以学习到输入序列的不同方面的信息,然后通过拼接和线性变换将这些信息合并起来,以获得更丰富的表示。
查询(Query)、键(Key)和值(Value)
查询(Query)、键(Key)和值(Value)是注意力机制(Attention Mechanism)中的核心概念,它们在Transformer模型中被广泛用于计算序列中的元素之间的关系。以下是针对这三个概念的详细描述:
- 查询(Query):
- 定义:在注意力机制的上下文中,查询是一个向量,它代表了当前位置(如解码器中的当前时间步)对输入序列中其他位置信息的需求或关注点。
- 作用:查询用于与序列中所有位置的键(Key)进行比较,以决定哪些位置的信息对当前位置的输出有重要影响。
- 计算方式:查询通常是通过模型的某些层的输出得到的,这些层可能包括嵌入层、自注意力层或编码器的输出。
- 键(Key):
- 定义:键也是向量,它代表了序列中每个位置的信息,用于与查询进行比较,以决定该位置的信息是否应该被包含在最终的注意力权重中。
- 作用:键是序列中每个元素(或位置)的表示,它们与查询进行相似性比较,以计算注意力分数(Attention Scores)。
- 计算方式:键通常是通过将输入序列通过嵌入层或编码器层的输出得到的,与查询的计算方式相似,但在注意力机制中,键用于与查询进行比较。
- 值(Value):
- 定义:值同样是向量,它们包含了序列中每个位置的实际信息,这些信息将被用来根据注意力权重进行加权求和,以产生注意力机制的输出。
- 作用:值代表了序列中每个位置的实际内容,是最终注意力机制输出的重要信息来源。注意力权重决定了每个值向量对当前输出的贡献程度。
- 计算方式:值通常与键的计算方式相同,因为在实际实现中,键和值通常来自同一组输入(尽管在自注意力机制中,它们可以相同,也可以不同)。然而,在注意力机制的输出计算中,值会根据注意力权重进行加权求和。
在Transformer模型中,自注意力层(Self-Attention Layer)使用了这些概念来计算序列内部元素之间的依赖关系。通过查询、键和值的交互,模型能够学习到序列中哪些元素对于当前位置是重要的,并将这些信息以加权求和的形式融入到当前位置的输出中。
总结
在Transformer模型中,自注意力机制(Self-Attention Mechanism)扮演着至关重要的角色。它是Transformer模型架构的核心组成部分之一,负责处理序列数据中的依赖关系,特别是那些长距离依赖关系,这在自然语言处理(NLP)等任务中尤为重要。