让人记忆深刻的Transformer学习,一遍就能看懂

前言

本文将先着重介绍1:Embedding、2:Positional Encoding、3:Attention和Multi-Head Attention 。最终口语化的展示Transformer整体原理。以下是Transformer的架构图。
在这里插入图片描述

1.Embedding(将文本变为计算机可认识的向量)

Embedding目标为:将token转化为向量,相似的数据对象在向量空间中彼此接近,不相似的数据对象在向量空间中距离更远。(和机器学习中聚类的目的相似)

其中Token可以理解为文本处理的基本单元,它可能是一个字、一个词或者甚至是一句话,具体取决于任务的定义。

回到Embedding的话题,可以把Embedding想象成给每个token分配一个独特的“数字护照”。就像护照帮助机场工作人员识别旅客的身份、国籍等信息一样,Embedding为每一个token生成一组独特的数值(向量),这组数值让模型能够识别出这个token,并理解它与其他token的关系。所有的嵌入向量都会表示在构成的高维空间中。如下图所示:

在这里插入图片描述

此外,对于同一个token,虽然在不同语境中有不同的含义和作用,但是在高维空间中对应的是同一个向量。初始的Embedding向量是静态的,Transformer通过后续的多层自注意力机制(self-attention mechanism)来动态地调整每个token的表示。这个过程允许模型根据token周围的上下文环境来“微调”其向量表示。你可以想象这个过程就像给每个token配备了一个智能变换器,这个变换器能够根据token所处的环境动态调整其“数字护照”的内容,以反映该token在此特定上下文中的具体含义和作用。

下图示例为:mole为多种含义依次为鼹鼠、摩尔、痣的含义。但初始向量表示为一样。
American shrew mole:美洲鼩鼱
One mole of carbon dioxide:1摩尔二氧化碳
Take a biopsy of the mole:对痣进行活组织检查

在这里插入图片描述

而对于不同的token,例如,“猫”、“狗”这两个不同的token可能会有相似的“数字护照”,因为它们在某些方面是相关的(比如都是宠物)。而“鱼”虽然与“猫”的“护照”不同,但因为某种关系(如猫吃鱼),它们的“护照”间也会存在一定的联系。

通过这种方式,Transformer利用这些“数字护照”来捕捉文本中的语义和结构信息,从而更有效地进行各种自然语言处理任务。这样做的好处在于,模型不仅能够理解单个token的意义,还能把握整个文本的上下文含义。

2.Positional Encoding(为每个向量记录位置信息)

位置编码(Positional Encoding)在Transformer模型中扮演着至关重要的角色,因为它解决了模型本身无法感知序列中token顺序的问题。

什么是位置编码?

想象一下你有一串珠子,每颗珠子代表一个token。如果这些珠子没有固定的顺序摆放,即使你知道每一颗珠子代表什么,你也很难理解这串珠子所表达的整体意义。同样的,在处理自然语言时,如果没有某种方式告诉模型每个token在其序列中的位置,模型就无法理解句子的语义。

位置编码就是为了解决这个问题而设计的一种机制。它通过给每个token添加额外的信息(即位置编码),让模型能够知道每个token在其序列中的具体位置,从而更好地理解上下文和语义关系。

为什么需要位置编码?

Transformer使用自注意力机制(self-attention mechanism)来处理输入序列,但这种机制本质上是“无序”的,它只关注token之间的关系而不考虑它们的顺序。因此,为了使模型能够理解序列中的顺序信息,必须引入位置编码。

位置编码是如何工作的?

  • 固定位置编码:最常见的方式是在输入序列进入Transformer之前,将每个token与一个特定的位置编码向量相加。这个位置编码向量是根据token在序列中的位置生成的,并且对于每个位置都是唯一的。这样,当token进入模型时,它们不仅包含了自身的含义,还携带着它们在序列中的位置信息。
  • 相对位置编码:另一种方法是使用相对位置编码,这种方法更关注token之间的相对距离而不是绝对位置。这种方式有助于捕捉长距离依赖关系,使得模型更加灵活和强大。

旋转位置编码(RoPE)

传统的做法是直接给每个token添加一个固定的位置编码,这就好比给每块拼图标上它在大图中的坐标。但这种方法有局限性,因为它不能灵活地适应不同长度的句子或复杂的语境变化。

而旋转位置编码(RoPE)就像是给每块拼图装上了智能指南针。这个“指南针”不仅告诉模型每个token的基本位置,还能根据上下文动态调整方向,使得模型能够更好地捕捉长距离依赖关系以及不同token之间的相对位置关系。

具体来说,RoPE的优势包括:

  • 增强模型对序列的理解:通过旋转角度的变化,RoPE帮助模型更好地理解token之间的相对位置关系,这对于理解复杂句子结构特别有用。
  • 灵活性更高:与固定的编码方式相比,RoPE可以根据不同的输入自动调整,这意味着它能更好地适应各种长度的文本,无论是短句还是长篇大论。
  • 提升长距离依赖捕捉能力:在长文本中,RoPE有助于模型识别出相隔较远但仍相关的token,提高整体理解力。

总之,RoPE就像是给每个token配备了一个智能导航系统,让Transformer不仅能知道自己的位置,还能灵活应对不同的语境变化,从而更准确地理解和生成文本。这样,无论是在翻译、问答还是文本生成等任务中,都能取得更好的效果。

3. Attention和Multi-Head Attention

计算Attention(注意力得分)过程:

  • 点积:首先,计算Query (Q) 和 Key (K) 的点积,得到一个注意力分数矩阵。
  • 加掩码:然后,将掩码矩阵加到这个注意力分数矩阵上。对于序列掩码,这相当于将未来信息的位置设为负无穷大;对于填充掩码,这相当于将填充部分的分数设为负无穷大。
  • Softmax:接下来,对调整后的分数矩阵应用Softmax函数,将分数转换为概率分布。由于负无穷大的值会被转换为0,这就实现了忽略未来信息或填充部分的效果。
  • 加权求和:最后,根据这些概率分布,对Value (V) 向量进行加权求和,得到最终的输出。

Q、K、V是什么?

想象一下你在图书馆找一本书。你有一个“查询”(Query),那就是你想找到的书的信息或描述。然后,图书馆里的每本书都有一个“键”(Key),这相当于书名或者索引卡片上的信息。当你拿着你的查询去对比这些键时,如果某个键和你的查询匹配上了,你就能找到对应的书,这本书就是“值”(Value)。

在Transformer模型中,每个token都会生成三个向量:Query(Q)、Key(K)和Value(V)。这三个向量就像是上面比喻中的查询、键和书:

  • Query (Q):这是你要寻找的信息,是当前token发出的一个“问题”。
  • Key (K):这是其他tokens提供的“回答”,就像图书馆里每本书的索引卡。
  • Value (V):一旦找到了匹配的Key,你可以得到这个Key对应的Value,也就是你需要的具体信息。

在这里插入图片描述

如何进行运算?

接下来我们看看这些Q、K、V是怎么通过计算来工作的:

点积(Dot Product):

首先,你会把每个token的Query与所有其他tokens的Keys做点积运算。点积就像是比较两个向量的相似度,结果是一个分数,表示这两个向量有多相似。

例如,如果你有8个tokens,每个token都会产生一个Query向量,并且会与每个tokens的Key向量分别做点积运算,这样就会得到一组分数。

在这里插入图片描述
缩放(Scaling):

点积的结果有时候可能会很大或很小,为了使数值更加稳定,通常会对点积的结果除以一个数值(通常是Key向量维度的平方根),这就是所谓的缩放操作。

在这里插入图片描述

Softmax:

接下来,对缩放后的点积结果应用Softmax函数,将这些分数转换为概率分布。这意味着每个分数都被转换成了一个0到1之间的值,并且所有值加起来等于1。这一步骤帮助我们确定哪些tokens最相关。

在这里插入图片描述
掩码(Masking):

在Transformer模型中也是非常重要的一个步骤,尤其是在处理序列数据时。让我们用口语化的方式来解释一下掩码的过程及其作用。

掩码的作用
想象你在看一部电影,但这部电影有些部分被遮住了,你只能看到部分内容。掩码在Transformer中的作用类似,它用来遮住某些你不希望模型看到的部分,以确保模型只关注到应该关注的信息。

为什么需要掩码?

  • 防止信息泄露:特别是在自注意力机制中,我们不希望未来的token影响当前token的表示。例如,在语言生成任务中,如果模型看到了未来的信息,它可能会作弊,直接使用未来的信息来生成当前的词。
  • 处理变长序列:在实际应用中,输入序列的长度通常是不同的。为了统一处理这些序列,通常会将它们填充到相同的长度。但是,填充的部分不应该对模型产生影响,因此需要用掩码来忽略这些填充部分。

掩码的类型

  1. 序列掩码(Sequence Mask)
    目的:防止未来的信息泄露。

如何工作:

在自注意力计算过程中,对于每个位置i,我们只允许模型关注位置i及之前的信息,而忽略位置i之后的信息。
这是通过创建一个上三角矩阵来实现的,这个矩阵的上三角部分(包括对角线)为负无穷大(或非常小的值),下三角部分为0。
当进行Softmax操作时,负无穷大的值会被转换成0,这样未来的信息就不会参与到当前token的注意力计算中。
举个例子,假设有一个句子“我喜欢看电影”,当我们处理“我”这个词时,我们不希望模型知道“喜欢”和“看电影”这两个词,直到它处理到相应的词为止。

  1. 填充掩码(Padding Mask)
    目的:忽略填充部分的影响。

如何工作:

对于不同长度的输入序列,我们会用特殊的标记(如)将其填充到相同的长度。
在计算注意力权重时,我们需要创建一个与输入序列相同形状的掩码矩阵,其中填充部分对应的值为0,非填充部分对应的值为1。
在后续的计算中,我们将这个掩码应用于注意力权重矩阵,使得填充部分的权重为0,从而不影响最终的结果。

在这里插入图片描述

加权求和(Weighted Sum):

最后,使用上一步得到的概率分布作为权重,对所有tokens的Value向量进行加权求和。换句话说,根据前面步骤得出的相关性分数,决定从哪些tokens中获取更多的信息,并把这些信息组合起来形成最终的输出。
在这里插入图片描述

4. Transformer整体原理(故事化)

Transformer想象成一个“电影翻译团队”,这个团队由两个核心部门组成:编码器(Encoder)和解码器(Decoder)。他们的任务是把一部外国电影翻译成中文,同时还要保证翻译的内容既准确又自然。

1. 编码器(Encoder):电影分析专家

编码器是一个电影分析团队,他们的任务是先看懂这部电影,并提取出关键信息。这个团队的工作分为几个步骤:

第一步:把电影拆成场景(输入处理Embedding
电影是由一个个场景组成的,比如“主角走进房间”“反派开始阴谋”等等。编码器先把这些场景拆开,然后把每个场景转换成一种“内部语言”(向量表示),方便后续分析。

这一步就像把电影的字幕翻译成一种中间语言,但还没开始真正的翻译。

第二步:标记场景顺序(位置编码
电影是有时间顺序的,不能把结局放到开头。为了让编码器知道每个场景的顺序,团队会给每个场景加上一个“时间戳”(位置编码)。这样,编码器就知道“主角走进房间”发生在“反派开始阴谋”之前。

第三步:分析场景之间的关系(自注意力机制
这是编码器最核心的工作!团队会分析每个场景和其他场景的关系。比如:

“主角走进房间”这个场景可能和“反派开始阴谋”有关,因为反派正在房间里等着主角。

通过计算每个场景之间的“相关性分数”,团队可以知道哪些场景需要重点关注。

这个过程就像你在看电影时,突然意识到某个细节和后面的剧情有联系,于是你会特别注意它。

第四步:提炼场景信息(前馈神经网络
分析完场景之间的关系后,团队会用一个小型神经网络对每个场景的信息进行“提炼”,让每个场景的表示更加丰富和准确。

这就像把每个场景的关键信息总结成一句话,方便后续使用。

第五步:保持信息稳定(残差连接和层归一化
在分析过程中,团队会不断检查自己的工作,确保信息不会丢失或混乱。他们会用“残差连接”把之前的信息保留下来,同时用“层归一化”让每个场景的表示保持在合理的范围内。

这就像你在写笔记时,时不时回头看看之前的内容,确保没有写错。

2. 解码器(Decoder):电影翻译大师

现在,编码器已经完成了对电影的分析,接下来轮到解码器上场了。解码器的任务是把编码器提取的信息翻译成你的母语,同时还要保证翻译的内容流畅自然。

第一步:开始翻译(初始输入处理

解码器会从编码器那里拿到整部电影的“分析报告”(编码器的输出),同时它也会参考自己已经翻译好的部分内容(当前生成的部分输出)。

这就像你在翻译电影时,一边看原版字幕,一边参考自己已经翻译好的部分。

第二步:避免剧透(掩码自注意力机制

解码器在翻译时有一个重要的规则:不能剧透!也就是说,它只能参考已经翻译好的内容,而不能提前知道后面的剧情。

为了实现这一点,解码器会用“掩码”遮住未来的信息,只关注当前和之前的内容

这就像你在翻译时,不会提前看后面的剧情,而是专注于当前正在翻译的部分。

第三步:结合原版信息(交叉注意力机制

解码器不仅会参考自己已经翻译的内容,还会从编码器的“分析报告”中提取有用的信息。比如:

如果编码器发现“主角走进房间”和“反派开始阴谋”有很强的关联,解码器就会在翻译时特别注意这一点。

这个过程就像你在翻译时,突然想起原版电影中的某个细节,于是你把它巧妙地融入到翻译中。

第四步:优化翻译(前馈神经网络

解码器会用一个小型神经网络对翻译的内容进行优化,让翻译更加准确和自然。

这就像你在翻译完一段话后,再仔细检查一遍,确保没有语法错误或表达不清的地方。

第五步:保持翻译质量(残差连接和层归一化

和编码器一样,解码器也会用“残差连接”和“层归一化”来确保翻译过程的稳定性。

这就像你在翻译时,时不时回顾一下之前的内容,确保整体风格一致。

第六步:生成最终翻译(输出

经过多层处理后,解码器会生成最终的翻译结果。这个结果会通过一个线性层和Softmax函数,生成一个概率分布,用于预测下一个词

这就像你在翻译完一句话后,根据上下文决定下一个词该用什么。

3. 总结:Transformer如何工作?

编码器就像电影分析团队,负责理解输入内容(比如原版电影),并提取出关键信息。

解码器就像翻译大师,负责根据编码器的分析结果,生成流畅自然的输出(比如翻译后的电影)。

两者通过自注意力机制和交叉注意力机制紧密合作,确保模型能够捕捉输入和输出之间的关系。

最终,Transformer就像一个高效的“翻译团队”,能够处理各种复杂的任务,比如翻译、问答、文本生成等。

举个例子:翻译一句话

假设我们要把英文句子“The cat sat on the mat”翻译成中文“猫坐在垫子上”。

编码器会先分析英文句子,理解每个词的含义以及它们之间的关系。比如,它会发现“cat”是主语,“sat”是动词,“mat”是地点。

解码器会根据编码器的分析结果,逐步生成中文翻译。它会先翻译“猫”,然后根据上下文生成“坐在”,最后生成“垫子上”。

在整个过程中,编码器和解码器通过注意力机制不断交换信息,确保翻译的准确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值