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

3. 编码处理器(Bert)

        transformer模型的编码器构成了模型处理输入数据的基础部分。编码器的设计使其能够处理复杂的序列数据, 捕获序列内部的细粒度依赖关系。它通过一系列的层来实现, 每一层都包含自注意力机制、残差连接( Residual Connection )、层归一化( Layer Normalization)以及前馈神经网络等关键组件。
        以下是编码器的执行步骤, 详细解释了从自注意力机制开始的过程。
        编码器的首要步骤是使用自注意力机制计算输入序列中所有单元之间的关系, 这一机制允许模型在处理每个单元时, 能够考虑到序列中的所有其他单元, 从而捕获它们之间的上下文关系。实现自注意力机制涉及以下三个主要步骤。

        (1)计算查询( Query)、键( Key) 和值( Value) 向量:这些向量是通过对输入向量应用不同的线性变换得到的。

        (2)计算注意力分数:模型计算查询向量与所有键向量之间的点积, 以得到注意力分数,表示各单元之间的关联度。

        (3)加权值向量求和:使用这些注意力分数对值向量进行加权求和, 得到最终的输出向量。

        值得注意的是, 编码器中采用多头注意力机制, 即将查询、键、值向量分割为多个头, 然后并行计算, 最后将结果合并。这使得模型能够在不同的表示子空间中捕获信息, 提高了处理效率和效果。

        自注意力机制的输出首先通过残差连接,即直接将输入加到输出上, 然后进行层归一化。这一设计帮助避免了在深层网络中常见的梯度消失问题, 并有助于稳定训练过程。

        自注意力机制和残差连接处理后的输出接着传递给前馈神经网络。该网络对每个位置的表示进行独立处理, 但对不同位置使用相同的参数。这一步骤通常包含两次线性变换和一个激活函数。

        再次应用残差连接和层归一化, 步骤与自注意力机制相似, 前馈神经网络的输出也会经过残差连接和层归一化处理。这进一步增强了模型的学习能力,确保了信息在编码器各层中的有效流动。

3.1 编码器自注意力机制

        在 transformer模型的编码器中,自注意力机制发挥着核心作用。它允许编码器在处理每个输入词元时,考虑到整个输入序列的所有词元。这种机制的引入显著提高了模型处理复杂文本、理解长距离依赖关系的能力。我们接着探讨编码器的自注意力机制如何工作,以及它对于提升模型性能的重要性。

        自注意力机制通过计算输入序列中每个词元对于其他所有词元的注意力分数来工作, 这个过程可以分解为以下几个步骤。

        (1)向量表示:首先, 对于输入序列中的每个词元, 模型通过嵌入层将其转换为向量表示。然后, 对每个词元向量应用三组不同的权重矩阵, 生成对应的查询、键和值向量。
        权重矩阵是在神经网络中用于转换输入数据的参数集合, 通过与输入向量进行矩阵乘法操作,生成特定于不同任务(如查询、键、值向量生成)的新向量表示。

        (2)注意力分数计算:对于序列中的每个词元,计算其查询向量与其他所有词元键向量的点积, 以得到注意力分数。这些分数表示每个词元对序列中其他词元的重要性。

        (3)分数标准化:通过应用 Softmax函数对注意力分数进行标准化, 确保分数总和为1。这一步骤使得模型能够根据每个词元对序列中其他词元的相关性分配注意力。

        (4)加权和计算:将标准化后的注意力分数与值向量相乘, 对所有词元进行加权求和, 以生成每个词元的输出向量。这一步骤产生的向量融合了整个序列的信息,反映了每个词元在序列中的上下文相关性。

        自注意力机制的设计使得 transformer模型具有以下几个显著优势。

        1)全局上下文理解:自注意力使模型能够在处理每个词元时, 充分考虑到整个输入序列的信息, 从而更好地理解词元间的上下文和关系。

        2) 并行计算:与基于循环的模型相比,自注意力机制的计算可以高度并行化, 显著提高了处理效率。

        3)长距离依赖:通过直接计算序列中任意两个词元间的关系, 自注意力机制有效地解决了长距离依赖问题, 这在传统的序列处理模型中是一个挑战。

        编码器的自注意力机制允许模型在处理每个词元时,全面考虑整个序列的信息, 显著提升了模型对文本的理解能力。这一机制不仅加深了模型对序列内部复杂关系的捕捉,还提高了处理速度和效率, 使 transformer模型在多种NLP 任务上都表现出色。

3.2 自注意力机制的查询、键、值向量

        自注意力机制的核心在于通过查询、键和值向量的互动来实现对输入序列的编码, 这一过程使得每个词元能够根据与其他词元的关系确定其上下文相关的表示。这里将介绍查询、键和值向量的概念、生成方式, 以及它们在自注意力机制中的作用。

        在自注意力层中, 输入序列中的每个词元首先被转换为一个固定大小的向量表示, 通常是通过词嵌入得到的。接着, 这些向量通过三个不同的线性变换生成对应的查询、键和值向量。

        1) 查询向量:代表了要评估的目标词元, 用于与序列中其他词元的键向量进行匹配。
        2)键向量:与查询向量配对, 用于序列中每个词元的标识, 对应查询时的匹配对象。
        3)值向量:一旦查询和键的匹配程度(即注意力权重)被确定, 值向量就用于计算最终的输出表示。

        这三组向量是通过对输入向量应用不同的权重矩阵(这些矩阵是模型参数, 通过训练学习得到)得到的, 使得模型能够在不同的子空间中捕捉序列的不同特征。

        为了更具体地说明如何从输入序列的词嵌入向量计算得到查询、键和值向量,下面通过一个具体示例进行说明。一个输入序列是“我爱”, 并且已经通过词嵌入得到了这些词元的向量表示。这次, 将引入不同的权重矩阵来生成查询、键和值向量。

        (1) 输入词嵌入向量。
                                                                 “我”: [1, 0]
                                                                 “爱”: [0, 1]
        (2)权重矩阵。为了简化, 设定每个权重矩阵是二维矩阵(实际应用中, 这些矩阵是通过训练学习得到的)。
                        查询权重矩阵:\left ( \begin{matrix} 1&2 \cr 3&4 \end{matrix} \right )
                        键权重矩阵:\left ( \begin{matrix} 2&3 \cr 4&5 \end{matrix} \right )
                        值权重矩阵:\left ( \begin{matrix} 5&6 \cr 7&8 \end{matrix} \right )
        (3)计算查询、键和值向量。对于每个词嵌入向量, 将应用相应的权重矩阵来生成查询、键和值向量。具体的计算方法是将每个词嵌入向量与每个权重矩阵相乘。例如, 对于词元“我”的嵌入向量[1,0],其查询、键和值向量分别为:
                                1)查询向量[1,2]。
                                2)键向量[2,3]。
                                3)值向量[5,6]。

        对于“爱”的嵌入向量[0, 1],其查询、键和值向量分别为:
                                1)查询向量[3,4]。
                                2) 键向量[4,5]。
                                3)值向量[7,8]。

        查询、键和值向量共同工作,为模型提供了一种灵活的方式来编码和处理序列数据。查询、键和值向量使模型能够以高度灵活和效率的方式处理序列数据, 捕捉词元之间的复杂关系。通过这种机制, 每个词元能够获得一个丰富的上下文相关表示, 极大地提升了模型对文本的理解能力。自注意力机制这一独特设计是 transformer模型在多种NLP 任务中取得显著成绩的关键因素之一。

3.3 自注意力机制计算注意力分数

        自注意力机制的核心环节之一是计算注意力分数, 这一过程决定了序列中的每个词元在当前词元的表示中的相对重要性。这些分数反映了词元间的相互影响力度,是构建深度语言理解的基石。本小节将探讨如何用自注意力机制计算这些注意力分数, 并分析其对模型性能的影响。

        在自注意力机制中, 每个词元的查询向量与序列中所有词元的键向量进行点积操作, 以计算注意力分数。这一计算过程可以分解为以下几个步骤。
        (1)向量准备:从输入序列生成查询、键和值向量, 这是通过将输入词元的嵌入表示分别乘以查询、键、值的权重矩阵完成的。
        (2)点积计算:对于序列中的每个词元,计算其查询向量与所有键向量的点积, 从而得到一组原始的注意力分数。这些分数衡量了在特定查询下,序列中每个词元的相关性程度。
        (3)缩放操作:点积结果通常会被缩放, 具体是除以键向量维度的平方根。这一步骤有助于避免在 Softmax归一化过程中出现梯度消失或爆炸的问题, 从而提高模型的稳定性和训练效率。
        梯度爆炸是指在神经网络的训练过程中, 梯度的大小急剧增加至非常大的数值, 导致权重更新过大。

        接着使用前面的例子, 其中包含两个词元, 分别为“我”和“爱”, 并已经计算出它们的查询、键和值向量。

        (1) 向量准备。每个词元的查询、键和值向量。
                        “我”的查询向量: [1, 2], 键向量: [2, 3], 值向量 : [5, 6]
                        “爱”的查询向量: [3, 4], 键向量: [4, 5], 值向量: [7, 8]
        (2)点积计算。对于序列中的每个词元,计算其查询向量与所有键向量的点积。这里有四个点积需要计算:

        点积是通过将两个向量的对应元素相乘后再求和来计算的, 即对于两个向量a和b, 点积为    a \cdot b=a_{1}b_{1}+a_{2}b_{2}+ \cdots +a_{n}b_{n}.

                         “我”的查询向量与“我”的键向量的点积
                         “我”的查询向量与“爱”的键向量的点积
                         “爱”的查询向量与“我”的键向量的点积
                         “爱”的查询向量与“爱”的键向量的点积

        (3)缩放操作。每个点积的结果将被缩放,具体操作是除以键向量维度的平方根(在这个例子中是\sqrt{2})。根据上述计算, 得到了缩放后的点积结果如下

                 “我”的查询向量与“我”的键向量的点积缩放结果: 5.66

                 “我”的查询向量与“爱”的键向量的点积缩放结果: 9.90

                 “爱”的查询向量与“我”的键向量的点积缩放结果: 12.73

                 “爱”的查询向量与“爱”的键向量的点积缩放结果: 22.63

        通过这种方式计算得到的注意力分数使得模型在处理每个词元时,能够综合考虑整个序列的信息。这不仅增强了模型对于长距离依赖的捕捉能力,也使得模型能够更精准地理解和反映词元间的复杂关系。此外, 这种计算方法的并行性质大大提高了处理效率, 是transformer模型在多项任务上表现出色的关键因素之一。

3.4 自注意力机制 Softmax 标准化

        在 transformer模型的自注意力机制中, Softmax标准化确保了模型能够根据每个词元对其他词元的相对重要性分配“注意力”。通过这一过程,模型生成的是一个概率分布, 指示了在给定上下文中每个词元的重要程度。这里将探讨 Softmax标准化的作用、过程及其对于模型性能的影响。

        Softmax函数可以将自注意力机制中计算得到的原始注意力分数转换为概率分布, 其满足以下两个条件:
                    非负性:每个元素的输出值在0到1之间, 表示概率。
                    归一性:所有元素的输出值之和为1, 表示完整的概率分布。

        这使得模型能够清晰地判断在处理每个词元时,序列中的其他词元相对于当前词元的重要性。在自注意力机制中, Softmax标准化应用于缩放后的注意力分数上, 具体步骤如下。

        (1)应用 Softmax函数:对于给定词元的每个注意力分数, 应用 Softmax函数, 计算方式为将e的指数应用于每个分数, 然后除以所有e的指数之和。
                                        Softmax (score_{i})= \frac {e^{ score_{i}}}{ \sum \limits _{j}e^{score_{j}}}
其中, score_{i}是词元i缩放后的注意力分数, 分母是所有词元的缩放分数的e指数之和。

        (2)生成概率分布: Softmax函数的输出为一个概率分布, 其中, 每个值表示在给定查询词元的上下文中, 对应键词元的相对重要性。

        基于3.3例子的数据,可以得到通过 Softmax标准化处理后的注意力权重如下。
                        对于“我”的查询:
                        对“我”的注意力权重:0.014。
                        对“爱”的注意力权重:0.986。

                        对于“爱”的查询:
                        对“我”的注意力权重:0.00005。
                        对“爱”的注意力权重:0.9999。

        Softmax标准化是自注意力机制中不可或缺的一环, 它有几个关键作用。

        区分重要性:通过转换为概率分布, 模型能够更清晰地区分序列中哪些词元对当前词元更重要, 哪些较不重要。这有助于模型构建更准确的上下文表示。

        增强模型的泛化能力: Softmax标准化使得模型在处理不同类型的输入时更加灵活,能够适应各种长度和结构的序列。

        促进梯度流动: Softmax函数的归一化特性有利于梯度在模型中的流动, 避免了梯度消失或爆炸的问题, 从而提高了模型的训练稳定性和效率。

         Softmax标准化通过将注意力分数转换为概率分布, 使得模型能够在处理每个词元时做出更加细致和准确的判断。这一步骤不仅提高了模型对序列内部结构的理解能力, 也增强了模型的训练稳定性和泛化性能, 是实现高效深度语言理解的关键环节。

3.5自注意力机制加权值向量

        在 transformer模型的自注意力机制中, 加权值向量的计算是生成最终输出表示的关键步骤。经过 Softmax标准化的注意力分数指示了序列中各个词元对当前处理词元的重要性, 基于这些分数进行的加权和操作产生了融合全局上下文信息的词元表示。下面将探讨自注意力机制如何通过加权值向量来实现这一过程, 以及其对模型性能的影响。

        加权值向量的计算包含以下几个步骤。

        (1)应用注意力权重:对于序列中的每个词元, 将其对应的 Softmax标准化后的注意力分数应用于所有值向量。这一步骤通过将每个值向量乘以其对应的注意力权重来完成, 从而得到加权的值向量。

        (2)求和得到输出:对于每个词元, 将其所有加权的值向量求和, 生成一个综合了整个输入序列信息的输出向量。这意味着每个词元的输出不仅包含自身的信息,还融入了序列中其他词元的上下文信息。

        结合之前的数据进一步说明。首先,有两个词元“我”和“爱”, 以及它们对应的值向量。
                                 “我”的值向量: [5, 6]
                                 “爱”的值向量: [7, 8]

        3.4计算得到了每个词元对于序列中所有词元(包括自己) 的Softmax标准化后的注意力权重。这些权重反映了在给定的查询词元上下文中,每个键词元的相对重要性。

                 对于“我”的查询, 其对“我”和“爱”的注意力权重分别是: 0.014 和 0.986

                 对于“爱”的查询,其对“我”和“爱”的注意力权重分别是: 0.00005 和 0.9999

        将每个值向量乘以对应的注意力权重,得到加权的值向量。这表示在计算输出向量时, 每个词元的贡献将根据它们的注意力权重进行调整。

        接下来, 对于每个查询词元, 将它针对序列中所有词元的加权值向量求和, 以生成一个综合了整个输入序列信息的输出向量。

        对于“我”,将加权的值向量[5,6]和[7,8](根据其注意力权重调整过的) 进行求和, 得到输出向量[6.97, 7.97]。
                                0.014*5+7*0.986=6.97, 0.014*6+8*0.986=7.97

        对于“爱”, 同样地, 将加权的值向量求和, 得到输出向量[7.00,8.00]。 

        这个过程允许模型在处理每个词元时考虑到序列中的所有其他词元,从而捕获语言数据中的复杂上下文关系。

3.6 多头注意力机制

        每个注意力机制的执行被视为一个“头”, 因为单一头的信息表达能力有限, 所以通过并行运用多个头, 可以捕获和表达数据的多维度信息。多头注意力机制是 transformer 模型的一个创新点, 允许模型在不同的表示子空间中并行捕捉信息。通过这种方式,模型能够从多个维度理解数据, 增强了其捕捉复杂关系的能力。这里将探讨多头注意力机制的工作原理、实现及transformer模型性能的影响。

        多头注意力机制通过将输入的查询、键和值向量分拆成多组向量, 并分别应用自注意力机制,以实现对不同子空间的并行处理。具体步骤如下。

        (1) 分拆向量:对于每个输入向量(查询、键、值),模型将其分拆成多个较小的向量。例如,如果原始向量的维度是512, 而选择8个注意力“头”, 则每个头处理的向量维度将是64。

        (2)独立应用自注意力:在每个表示子空间中, 模型独立地计算注意力分数, 应用 Softmax标准化, 并生成加权值向量。这一过程允许模型捕捉输入序列中不同类型的信息。

        (3)合并输出:最后, 模型将所有头的输出向量合并回一个单一的向量, 以便进行进一步的处理。这通常通过连接( concatenation)所有头的输出向量, 然后应用一个线性变换来完成。

        下面结合示例进一步说明。

        对于每个头, 已经计算出其输出向量。合并这些不同头的输出, 以获得一个综合的表示。合并的方法通常是将所有头的输出向量拼接起来, 然后乘以另一个权重矩阵(有时称为输出权重矩阵),这个过程可以表示为

                                MultiHead(Q,K,V)= Concat(head₁,head₂,..., headn) W^{o}

        其中, head_{i}是第 i个头的输出向量, W^{o}是输出权重矩阵, 用于将拼接后的向量转换为最终的输出维度。
        假设在一个两头注意力机制中, 对于“我”和“爱”。

                 第一个头的输出向量分别是[0.5, 0.8] 和[0.9, 0.1]。

                 第二个头的输出向量分别是[0.2, 0.3] 和[0.4, 0.5]。

        则拼接这两个头的输出如下。

                 对于“我”: [0.5, 0.8, 0.2, 0.3]

                 对于“爱”: [0.9, 0.1, 0.4, 0.5]

        最后, 输出权重矩阵W^{o}将这个拼接的向量转换为最终的输出向量,完成多头注意力的合并。多头注意力机制的引入对 transformer模型具有以下几个重要意义。

        提高表达能力:通过并行处理多个子空间, 模型能够同时捕捉输入序列不同方面的信息,如不同级别的语义和语法关系, 从而提高整体的表达能力。

        增加灵活性:多头注意力机制使模型在处理各种复杂任务时更加灵活, 因为它可以学习到在特定任务中哪些信息更为重要。

        改善长距离依赖捕捉:每个“头”关注序列的不同部分, 这有助于模型更好地处理长距离依赖问题, 提升了对长序列数据的理解。

        多头注意力机制通过并行处理多个表示子空间,显著提升了模型的信息处理能力和性能。这一机制不仅增强了模型的表达能力,也提高了其对复杂语言结构的理解, 是模型在多种NLP任务中取得成功的重要因素。

3.7 编码器残差连接

        在 transformer模型的编码器中, 残差连接允许模型在加深网络层数时, 防止性能退化, 确保了信息的有效流动。本小节将介绍残差连接的概念、作用以及其如何在 transformer 模型中被应用来增强模型的学习能力。

        残差连接是一种网络结构设计,允许模型的输入直接跳过一些层而加到后面的层上。在数学上, 如果将一个层的输入表示为x, 该层的输出为F(x),则残差连接的输出将是F(x)+x。这种设计可以帮助模型学习到恒等映射( identity mapping), 使得深层网络的训练变得更加容易。
        恒等映射是指一种函数或操作, 使得经过这个操作的输出与输入完全相同, 即输出值等于输入值, 这在帮助深层网络学习时保持信息流的完整性方面非常重要。

        transformer模型中的每一个编码器层都包括残差连接,它们被应用于自注意力机制和前馈神经网络之后。具体而言,对于自注意力层和前馈神经网络, 模型首先计算它们的输出, 然后将这个输出与输入相加, 最后通过层归一化处理。
        (1)自注意力残差连接:自注意力层的输出与其输入直接相加, 形成了一个残差连接。
        (2)前馈神经网络残差连接:前馈神经网络层同样采用了输入与输出相加的方式, 形成另一个残差连接。

        残差连接在 transformer模型中有着多重作用。
        促进深层网络训练:残差连接帮助解决了随着网络加深导致的梯度消失或爆炸问题, 使得模型能够有效地训练更深层的网络结构。
        增强学习能力:通过允许信息直接传递,残差连接使得模型在每一层都能接触到原始输入的信息, 从而增强了模型对输入数据的学习能力。
        保持信息流动:残差连接确保了即使在深层网络中, 信息也能够有效地流动, 防止信息在传递过程中的丢失。

        引入残差连接极大地提高了 transformer模型的性能,特别是在处理复杂的NLP 任务时。它使得模型能够深入学习到数据的细节, 同时保持了训练过程的稳定性。这一设计是 transformer能够有效处理各种任务的关键因素之一,显著提升了模型的准确性和可靠性。

3.8 编码器层归一化        

        层归一化在 transformer模型的编码器中负责在每个子层的输出上进行归一化处理, 以稳定训练过程并加速收敛。接下来将探讨层归一化的原理、在编码器中的应用,以及它对模型性能的影响。
        层归一化是一种特殊的归一化技术,与批归一化( Batch Normalization)不同, 层归一化是对单个样本的所有特征进行归一化。具体而言,对于每个样本,层归一化会计算所有特征的平均值和标准差, 并使用这些统计量来归一化每个特征。数学上,对于给定的输入向量x, 层归一化的输出为
                                            LN(x) = \frac{x - \mu}{\sigma} \gamma + \beta
        其中,μ和σ分别是向量x的均值和标准差,γ和β是可学习的参数, 用于调整归一化后数据的缩放和偏移。

        下面以输入向量[1.0,2.0,3.0,4.0,5.0]为例进一步说明。
        (1)计算均值(μ)。计算输入向量的均值。均值是指所有特征值的平均值, 计算公式是:
                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mu = \frac {1}{N} \sum \limits _{i=1}^{N}x_{i}
        其中, x_{i}是输入向量中的第i个元素, N是向量中元素的总数。
        (2)计算标准差(σ)。计算输入向量的标准差。标准差衡量的是每个特征值与均值的偏离程度, 计算公式是:
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sigma = \sqrt { \frac {1}{N} \sum \limits _{i=1}^{N}(x_{i}- \mu )^{2}}
        (3)归一化处理。用每个特征值减去均值并除以标准差来归一化输入向量:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        x_{norm}= \frac {x_{ \bar {i}}- \mu }{ \sigma }
        (4)应用可学习参数(y和β)。使用可学习的参数(在该例子中, 简化为γ=1和β=0)来调整归一化后数据的缩放和偏移:
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        x_{LN}=x_{norm} \cdot \gamma + \beta

        最后进行计算得到如下结果:
        1)均值:输入向量的均值是 3.0。
        2) 标准差:输入向量的标准差约是1.41。
        3)归一化处理:归一化后的向量是[-1.41,-0.71,0.00,0.71,1.41]。
        在该例子中,γ=1和β=0, 所以应用这些参数后的结果与归一化处理的结果相同。

        在 transformer模型的编码器中, 层归一化被应用在每个子层(自注意力层和前馈神经网络层)的输出上以及在残差连接之后。这样做的目的是为了增强训练过程的稳定性, 并帮助模型更快地收敛。通过对每个子层的输出进行归一化,模型能够在训练过程中维持激活值分布的一致性,减少内部协变量偏移( Internal Covariate Shift)。

        激活值是指神经网络中非线性激活函数的输出, 这些值作为网络中下一层的输入, 对模型的非线性表达能力至关重要。

        协变量是指模型输入数据中的变量, 在统计学和机器学习中通常用来表示影响因变量(实验或模型中被预测或研究的变量, 通常作为输出结果) 的独立变量或特征。

        

        层归一化对 Transformer模型性能的提升主要体现在以下几个方面。
        训练稳定性:通过在每个子层后应用层归一化, 模型的训练过程变得更加稳定,从而减少了训练过程中的梯度消失或爆炸问题。
        加速收敛:归一化有助于将激活值保持在一个合理的范围内, 这使得模型参数的学习更加有效, 进而加速了收敛速度。
        增强泛化能力:层归一化还被认为能够提升模型的泛化能力, 虽然其具体机理仍在研究之 )中, 但实践证明, 包含层归一化的模型通常能够在多个任务上获得更好的性能。

3.9编码器前馈神经网络

        在transformer模型的编码器中, 除了自注意力机制和残差连接外,前馈神经网络也是其核心组成部分之一。每个编码器层都包含一个前馈神经网络,该网络对自注意力层的输出进行进一步处理。下面将讨论前馈神经网络的结构、作用以及它对模型性能的贡献。

        transformer模型中的前馈神经网络是由两层线性变换组成的, 这两层之间有一个ReLU( Rectified Linear Unit) 激活函数。第一层线性变换在 transformer 的前馈神经网络中起着将输入数据映射到一个更高维度空间的作用,它有助于模型捕获更复杂的特征和模式。通过这个变换, 模型可以在更广泛的特征空间中探索数据的内在联系, 为ReLU激活函数提供了丰富的输入, 使其能够引入非线性,从而增强模型的表达能力。第二层线性变换的作用是将ReLU激活后的数据映射回原始数据的维度, 或者是预定的输出维度, 以便于与 Transformer模型中的其他组件(如多头注意力机制的输出)进行整合。这一步骤是整个前馈神经网络的收尾, 它确保了网络输出可以适应模型中后续处理的需求, 如残差连接和层归一化, 进一步促进了模型中不同层之间的有效信息流动。

        具体而言, 前馈神经网络可以表示为以下形式:

                FFNN(x)=max(0,xW₁+b₁)W₂+b₂
        其中, W₁和W₂是网络的权重矩阵, b₁和b₂是偏置项, x是自注意力层(或上一个前馈神经网络层)的输出。

        下面以自注意力层的输出x是一个具有3个特征的向量[0.5,-0.4,0.3]为例进行说明。
        每一层的权重矩阵和偏置项都是模型的参数。
        (1)第一层线性变换:将自注意力层的输出x与第一层的权重矩阵W₁相乘,再加上偏置项b₁₀这里为了说明直接设定如下。
                         W1 = [[0.2, 0.3, 0.5], [0.1, -0.3, 0.4], [0.5, 0.2, -0.1]]
                         b1 = [0.1, 0.2, 0.3]
        计算得到的结果是:[0.31,0.53,0.36]。
        (2) ReLU 激活函数:对第一层的输出应用ReLU 激活函数。ReLU激活函数定义为 max(0,x),它将所有的负数转换为0, 而正数保持不变。
        应用ReLU 激活函数后的结果仍为[0.31,0.53,0.36]。
        (3)第二层线性变换: 将ReLU的输出与第二层的权重矩阵W₂相乘, 再加上偏置项b₂, 得到前馈网络的最终输出。权重和偏置直接设定如下。
                        W2 = [[0.4, -0.2, 0.1], [-0.1, 0.5, -0.3], [0.3, 0.1, 0.2]]
                        b2 = [-0.2, 0.1, 0.4]
        最终的输出结果是[-0.021,0.339,0.344]。

        值得注意的是, 尽管整个 transformer模型共享相同的前馈神经网络结构, 但每个编码器层中的前馈神经网络都有自己的参数, 这使得每层能够学习到不同的表示。

        前馈神经网络在 transformer编码器中扮演着以下几个重要角色。
        增加非线性:通过引入ReLU激活函数, 前馈神经网络为模型增加了非线性变换,这对于学习复杂的数据表示至关重要。
        提供额外的抽象层:前馈神经网络允许模型在自注意力层捕获的信息基础上进一步进行抽象和转换, 增强了模型的表达能力。
        独立处理每个位置:前馈神经网络在处理序列时对每个位置的词元独立操作, 这增加了模型对每个词元独特性的处理能力, 同时保持了操作的高效性。
        前馈神经网络对于提升 Transformer模型的性能起到了关键作用。
        增强模型的复杂度和灵活性:前馈神经网络使模型能够捕获更加复杂的特征, 并且通过参数的独立学习, 为不同的编码器层提供了灵活性。
        促进深度学习:前馈神经网络的加入, 配合自注意力机制和残差连接, 支持模型的深层结构, 这对于处理复杂的自然语言任务是必要的。
        提高准确性和泛化能力:通过在每个编码器层增加额外的非线性处理步骤, 前馈神经网络有助于提高模型在各种任务上的准确性和泛化能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值