AI大模型开发——6.transformer模型(0基础也可懂)(3)

4. 解码处理器

        transformer模型的解码器是负责生成输出序列的部分,它采用与编码器相似但更复杂的结构,以适应序列生成的需求。解码器通过一系列的层来处理信息, 每一层都执行特定的功能, 包括输出嵌入、位置编码、掩蔽自注意力、编码器-解码器注意力、前馈神经网络以及残差连接和层归一化。

        以下是解码器执行步骤的详细说明。

1 输出嵌入 ( Output Embedding)

        解码器的第一步是将其输入序列(即之前生成的输出序列)转换成高维空间中的向量表示。这一过程类似于编码器的输入嵌入,它为模型提供了丰富的表示以捕获词汇的语义信息。

2 位置编码 ( Positional Encoding)

        解码器同样引入位置编码来为序列中的每个元素提供位置信息, 这对于保持序列的顺序关系至关重要。位置编码与输出嵌入向量相加,使模型能够利用位置信息。

3.掩蔽自注意力 ( Masked Self- Attention)

        为了维持自回归特性,即在生成当前位置的输出时只依赖于之前的输出, 解码器中的自注意力机制被修改为掩蔽形式。这通过在计算注意力分数时引入一个掩码来实现,防止模型“看到”当前位置之后的任何位置。

4.编码器-解码器注意力( Encoder- Decoder Attention)

        这一步骤是解码器特有的,允许解码器使用当前已生成的序列(通过掩蔽自注意力处理过的)来“查询”编码器的输出。查询向量来自解码器,而键和值向量来自编码器。这一过程使解码器能够专注于输入序列中与当前生成步骤最相关的部分。

5. 前馈神经网络

        解码器也包含一个前馈神经网络,该网络独立地处理每个位置的表示, 但对不同位置使用相同的参数。这一步骤与编码器中的前馈网络相似, 但参数是独立的。

6.残差连接和层归一化
       每个掩蔽自注意力和编码器-解码器注意力的输出都会通过残差连接,然后进行层归一化处理。前馈网络的输出同样经过残差连接和层归一化处理。这些步骤有助于避免深层网络中的梯度消失问题, 同时提高训练的稳定性。

        解码器是 transformer 模型生成输出序列的核心。它通过综合考虑之前的输出、编码器的信息以及当前位置的上下文来逐步生成序列。解码器内部的多个机制, 包括掩蔽自注意力和编码器-解码器注意力, 确保了模型在每一步都能做出基于全局信息的决策。残差连接和层归一化进一步增强了模型的学习能力, 使transformer能够有效地处理复杂的序列到序列转换任务。

4.1 掩蔽自注意力机制

        在 transformer模型中, 注意力掩码机制( Attention Masking Mechanism) 可以确保模型在生成当前词元时, 只能使用之前的词元信息, 从而防止信息的泄露。这里将探讨注意力掩码机制的工作原理、应用场景以及它对模型性能的影响。

        注意力掩码机制通过修改自注意力层的输入来实现。在计算注意力分数之前, 模型会引入一个掩码( Mask), 用于调整分数的大小, 使得某些不应被当前词元“看到”的位置的分数变得极小(在实践中通常设置为一个非常大的负数),这样经过 Softmax函数处理后, 这些位置的注意力权重接近于零。

        在解码器的自注意力层中,掩码防止了当前位置之后的词元对当前词元的生成产生影响。这意味着, 对于序列中的第i个词元, 掩码将确保只有在它之前的词元(包括自身)在计算注意力时被考虑。

        下面以一个简单的序列的注意力分数矩阵(未经过掩码处理),序列长度为4, 即有4个词元为例进行说明。
        (1) 应用掩码前的注意力分数矩阵如下。
                 [
                 [1, 2, 3, 4],#词元1 对其他所有词元的注意力分数
                 [2, 3, 4, 1], # 词元2 对其他所有词元的注意力分数
                 [3, 4, 1, 2],#词元 3 对其他所有词元的注意力分数
                 [4, 1, 2, 3] # 词元4对其他所有词元的注意力分数
                 ]
        上述矩阵表示每个词元对序列中其他所有词元的原始注意力分数。

        (2)构造掩码矩阵。现在处理的是解码器的自注意力层, 需要防止词元“看到”它之后的词元。为此,构造一个掩码矩阵, 使得每个词元只能“看到”它之前和它自己的位置。
                 [
                 [0, - inf, - inf, - inf], # 词元1 只能看到自己
                 [0, 0, - inf, - inf], # 词元2 能看到词元1和自己
                 [0, 0, 0, - inf], # 词元3能看到词元1、2和自己
                 [0, 0, 0, 0] # 词元 4 能看到所有人

                 ]
        (3) 通过矩阵加法应用掩码到注意力分数。
                 [[ 1, - inf, - inf, - inf],
                 [ 2, 3, - inf, - inf],
                 [ 3, 4, 1, - inf],
                 [ 4, 1, 2, 3]]
        通过掩码, 将某些位置的分数设置为非常大的负数(这里用- inf表示), 从而确保在计算 Softmax时, 这些位置的注意力权重接近于零。

        (4)计算 Softmax 后的注意力权重矩阵。
                 [[1. 0. , 0. , 0. ],
                 [0.26894142, 0.73105858, 0. , 0. ],
                 [0.25949646, 0.70538451, 0.03511903, 0. ],
                 [0.64391426, 0.0320586 , 0.08714432, 0.23688282]]
        在该矩阵中,每一行的值表示给定词元对序列中其他词元的注意力权重。由于掩码的作用,每个词元只能“看到”它之前的词元和自己, 这反映在权重接近于零的位置。

        在文本生成、机器翻译等任务中,解码器需要根据已生成的词元序列来预测下一个词元。注意力掩码机制确保模型在生成每个新词元时, 只依赖于先前的词元, 符合自回归生成的原则。

        在训练阶段,由于整个目标序列是已知的, 存在信息泄露的风险, 因此, 需要用注意力掩码机制防止这种情况, 以确保模型的训练过程中不会使用未来的信息。

        注意力掩码机制对提高 Transformer模型在序列生成任务中的性能至关重要。
        提升模型的准确性:通过防止信息的泄露, 模型能够准确地学习序列之间的依赖关系, 提高生成任务的准确性。
        增强模型的可靠性:掩码机制确保了模型生成过程的合理性, 使得模型在面对不同长度的序列时表现出更好的鲁棒性和可靠性。
        促进学习效率:通过减少不必要的信息干扰, 掩码机制有助于模型更高效地学习序列的内在规律, 加快训练速度, 提高收敛效率。

4.2 编码器-解码器注意力

        编码器-解码器注意力机制允许解码器层访问整个编码器的输出, 从而在生成序列时能够考虑到输入序列的全部信息。本小节将探讨编码器-解码器注意力的工作原理、实现以及对模型性能的影响。

        编码器-解码器注意力机制的核心思想是让解码器能够“注意”到编码器输出的每个位置。具体实现时, 解码器的每个层都会接收到编码器的最终输出,以此作为其注意力机制的键和值向量, 而查询向量则来自于解码器前一层的输出。

        具体实现过程如下。
        (1)接收编码器输出:解码器的每个注意力层都会接收编码器输出的一个复制版本, 这个复制的输出在解码器中被用作键和值向量。
        (2)生成查询向量:查询向量来源于解码器当前层的前一层输出。在第一层解码器中,查询向量来源于目标序列的嵌入表示。
        (3)计算注意力权重:通过计算解码器的查询向量与编码器输出的键向量之间的点积, 然后应用 Softmax 函数来生成注意力权重。
        (4)生成加权和输出:这些注意力权重被用于编码器输出的值向量, 可以通过加权求和来生成当前解码器层的输出。

        为了具体说明编码器-解码器注意力机制, 下面以一个简化的例子进行演示。用户输入的是“你好”,要计算如何得到回答的第一个预测字。这里跳过实际的嵌入和编码过程, 直接使用编码器输出和解码器输入的示例向量来解释步骤。
        (1)编码器输出向量(设定2个字的输出, 每个字由二维向量表示)。
                        “你”-> [1.0, 2.0]
                        “好” -> [2.0, 3.0]
        (2)解码器输入向量(设定开始生成回答, 第一个字的嵌入表示)。
        实际的 transformer模型中,解码器开始生成序列时, 通常会使用一个特殊的开始标记(如< start>或类似的标记), 它告诉模型开始生成回答或翻译的文本。
                        第一个预测字的嵌入表示 ->[0.5, 1.5]
        (3) 编码器的每个输出向量将被用作键和值向量。
                键向量:
                        K1: [1.0, 2.0]
                        K2: [2.0, 3.0]
               值向量:
                        V1: [1.0, 2.0]
                        V2: [2.0, 3.0]
        (4)生成查询向量。解码器的查询向量来自于解码器当前层的前一层输出。在第一层解码器中, 查询向量来源于目标序列的嵌入表示。
                查询向量:
                        Q: [0.5, 1.5]

        (5)计算注意力权重。注意力权重是通过计算解码器的查询向量与编码器输出的键向量之间的点积得到的, 然后应用 Softmax函数。
                计算点积:
                         Score1 = Q · K1 = [0.5, 1.5] [1.0, 2.0] = 3.5
                         Score2 = Q · K2 = [0.5, 1.5] · [2.0, 3.0] = 6.0
        对分数应用 Softmax函数, 将分数转换为总和为1的概率。 Softmax的计算包括对每个分数取指数, 然后除以所有指数的总和。应用 Softmax:
                         exp( Scorel) = e^3.5
                         exp(Score2) = e^6.0
                         总和 = exp(Score1) + exp(Score2)
                         Softmax(Score1) = exp(Score1) / 总和 = 0.07585818002124355
                         Softmax(Score2) = exp(Score2) / 总和 = 0.9241418199787566
        (6)计算加权和。使用注意力权重对值向量进行加权求和, 这个加权和形成了这一解码步骤的注意力机制的输出。
        输出 = Softmax(Score1) * V1+ Softmax(Score2) * V2 = [1.92414182, 2.92414182]

        最终的输出向量[1.92414182,2.92414182]是通过将每个编码器输出的值向量与它们相对应的注意力权重相乘, 并将这些乘积相加得到的。该输出向量捕捉了解码器在特定解码步骤中, 基于注意力权重对编码器输出的综合表示。

        编码器-解码器注意力机制极大地增强了 transformer模型处理序列到序列任务(如机器翻译、文本摘要等)的能力, 主要有以下几个好处。
        提高翻译准确性:通过利用编码器的全部输出信息, 解码器能够更准确地理解源序列的语义, 从而生成更准确的目标序列。
        增强上下文理解:这种注意力机制确保了解码器在生成每个词元时都能充分考虑输入序列的上下文信息, 提高了生成文本的连贯性和一致性。
        促进模型泛化:编码器-解码器注意力使得模型能够在训练和推理时有效地处理不同长度的输入序列, 增强了模型的泛化能力。

        编码器-解码器注意力机制通过解码器能够访问编码器的全部输出, 极大地提升了模型的性能, 使其在多种复杂任务中取得了卓越成绩。

5 输 出 生 成

        在 transformer模型中,输出生成阶段是整个模型生成预测结果的最后一步, 直接关系到模型的最终性能和应用效果。这一阶段主要通过线性层和 Softmax层的协同工作来完成, 将解码器的复杂表示转换为对词汇表中每个词的具体预测。

5.1 Transformer线性层

        在 transformer模型的输出阶段,线性层( Linear Layer) 起到了将解码器的输出转换为最终预测结果的关键作用。每个解码器层的输出首先通过线性层, 然后通过 Softmax层来生成对词汇表中每个词的概率分布。本小节将探讨线性层的作用、结构以及它对模型性能的影响。
        线性层, 也被称为全连接层, 是深度学习中最基本的组件之一。在transformer模型中,线性层的主要作用是对解码器层的输出进行变换,并将其映射到一个与词汇表大小相同的空间中,为生成最终的输出序列做准备。
        一个线性层简单地由一个权重矩阵W和一个偏置向量b组成。给定解码器输出向量x, 线性层的计算公式为y=xW+b。其中, y是映射后的向量, 其维度与模型的词汇表大小相同。这使得每个元素可以对应词汇表中的一个词。

        为了进一步说明,下面将使用上个例子中的输出向量[1.92414182,2.92414182]作为输入。为了简化, 设定模型的词汇表大小为3, 即希望线性层的输出是一个三维向量, 每个维度对应词汇表中的一个词。

        在大语言模型中,实际的词汇表大小通常是非常大的, 可能包含数万到数百万不同的词汇,以覆盖广泛的语言用途和领域。
        (1)线性层参数。
        1)权重矩阵:设定为一个2×3的矩阵, 因为输入是二维的, 而输出是三维的(与词汇表大小相匹配)。
        2) 偏置向量:设定为一个三维向量。
        设定权重矩阵和偏置向量如下。
                         W = [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]
                         b = [0.1, 0.2, 0.3]
        (2)线性层计算。线性层的输出y可以通过xW+b计算得到, 其中, xW是向量x与矩阵W的点积。具体计算如下。
                         xW的第一个元素是 1.92414182×0.1+2.92414182×0.4
                         xW的第二个元素是 1.92414182×0.2+2.92414182×0.5
                         xW的第三个元素是 1.92414182×0.3+2.92414182×0.6
        然后将xW的每个元素分别加上偏置向量b的相应元素得到最终的输出向量y。
这个输出向量 y 表示在给定解码器输出的条件下, 经过线性层处理后得到的新向量, 其维度与模型的词汇表大小相同, 最终的输出向量y是:
                        y = [1.46207091,2.04689927,2.63172764]

        线性层对 Transformer模型的性能有直接影响, 从以下三个方面进行分析。
        精确度:通过精细的权重调整, 线性层可以帮助 transformer模型准确地预测下一个词元。它的参数在训练过程中被优化, 以最小化预测错误。
        灵活性:线性层的简单性使得 transformer 模型易于调整和优化。它可以根据不同任务的需要调整输出空间的维度, 提供了模型设计的灵活性。
        效率:尽管简单, 线性层在处理大规模词汇表时非常高效。配合模型的其他部分, 能够快速地处理和生成文本。
         transformer模型中的线性层虽然结构简单, 但在将解码器输出转换为最终预测结果的过程中扮演了不可或缺的角色。它直接影响到模型的预测精度和效率,是模型输出阶段的关键组件。通过在模型训练过程中学习到的权重和偏置, 线性层能够有效地将解码器的复杂表示映射到具体的词汇预测上, 从而完成文本生成任务。

5.2 Transformer Softmax层

        在 transformer模型的输出生成阶段, Softmax层负责将线性层的输出转换为最终的概率分布,从而确定每个可能词元的预测概率。本小节将详细探讨 Softmax层的作用、原理以及它对模型性能的影响。

        Softmax层的主要作用是将线性层的输出(即对每个词元的未规范化分数, 也称为 logits)转换成一个概率分布,表明了在给定的上下文中,下一个词元是词汇表中每个词的概率。这一步是生成文本过程中的关键步骤, 因为它直接关系到模型预测的准确性。
        给定一个向量z, 其中每个元素 z₁代表模型对词汇表中第i个词作为下一个词的预测分数, Softmax函数按如下公式计算每个词的概率:
                                        Soft \max (z_{i})= \frac {e^{z_{i}}}{ \sum \limits _{j}e^{z_{j}}}
        其中, 分子是当前词元的预测分数的指数, 分母是词汇表中所有预测分数的指数之和。这样, Softmax层的输出是一个概率分布,所有元素的和为1。

        下面结合上一节线性层的输出[1.46207091,2.04689927,2.63172764]进一步说明。
        (1)设定线性层输出z。
                        z=[1.46207091,2.04689927,2.63172764]
        (2)计算。
        计算指数:对向量z中的每个元素计算指数e^{i}
        计算指数之和:将所有指数值相加, 得到分母 \sum \limits _{j}e^{z_{j}}
        计算概率分布:将每个元素的指数除以指数之和, 得到每个词的概率。
        最后计算概率分布如下。
                        [0.16623529,0.29833964,0.53542506]
        第一个词的概率是0.16623529。
        第二个词的概率是 0.29833964。
        第三个词的概率是 0.53542506。
        这些概率表明模型预测下一个词为词汇表中第三个词的可能性最高,其次是第二个词, 最不可能的是第一个词。在生成文本或进行序列预测时, 模型会根据这个概率分布来选择下一个最可能的词元, 这里就是选择概率最高的第三个词。

         Softmax层对 Transformer模型性能的提升主要体现在以下几个方面。

        提高预测准确性:通过转换为概率分布, 模型能够清晰地表达对下一个词元的预测置信度,从而提高预测的准确性。
        支持多类分类: Softmax层天然支持多类分类问题, 非常适合处理词汇预测任务, 因为它可以同时考虑所有可能的输出词元。
        增强模型的解释性:输出的概率分布使得模型的决策过程更加透明, 有助于理解模型是如何基于当前上下文来生成下一个词元的。

        transformer模型中的 Softmax层将线性层的输出转换为一个概率分布, 指导模型生成下一个最可能的词元。通过精确计算每个词元的预测概率, Softmax层极大地提高了模型在文本生成任务中的性能。

  • 19
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值