在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合

server/2025/2/9 14:17:06/

文章目录

  • 传统的神经网络框架存在的问题
  • 一. Transformer架构综述
    • 1.1 transformer的输入
      • 1.1.1 词向量
      • 1.1.2 位置编码(Positional Encoding)
      • 1.1.3 编码器与解码器结构
      • 1.1.4 多头自注意力机制
  • 二.Transformer分步详解
    • 2.1 传统词向量存在的问题
    • 2.2 详解编解码器中自注意力机制
      • 2.2.1 缩放点积注意力机制
        • 计算步骤
      • 矩阵形式
      • 2.2.2 softmax函数
      • 2.2.3 多头机制
  • 三.FNN与MoE策略
  • 四.论文参考
    • 4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型
    • 4.2 模型越狱-拒绝由LLMs单一方向调解
    • 4.3 LLM MOE策略的演化


文章学习b站
Transformer模型详解,Attention is all you need
【Transformer速通指南】三天掌握自注意力机制!

  • Transformer 是模型架构,是 LLM 和 MoE 的基础。其核心是自注意力机制(Self-Attention),摒弃了传统 RNN 和 CNN 的序列处理方式。作用实现不同维度领域的数据归一化。
  • LLM 是基于 Transformer 的大规模应用模型。
  • MoE 是一种优化架构的策略,用于扩展模型规模。

传统的神经网络框架存在的问题

传统神经网络框架存在一些局限性,具体如下:

  • 循环神经网络(RNN):RNN在处理序列数据时,需要按照时间顺序逐步迭代计算每个时间步的结果。这种串行处理方式限制了模型的并行化能力,导致训练和推理过程相对缓慢。此外,RNN在捕捉长距离依赖关系时面临挑战,如梯度消失或爆炸问题,这进一步限制了其性能。

  • 卷积神经网络(CNN):虽然CNN在处理具有局部结构的数据(如图像)方面表现出色,但在处理序列数据时存在一定的局限性。CNN通过滑动窗口机制捕捉局部特征,但难以直接建模长距离依赖关系,因为它们本质上是基于局部感受野的设计,缺乏全局视角。尽管可以通过堆叠多层卷积层来部分缓解这一问题,但这通常伴随着计算成本的增加和参数数量的增长。

  • Transformer模型:与上述两种架构不同,Transformer通过引入自注意力机制彻底改变了序列数据的处理方式。自注意力机制允许模型直接访问输入序列中的所有位置,并为每个位置分配不同的权重,即所谓的“关注度”。这种方式使得Transformer能够高效地捕捉长距离依赖关系,同时支持高度的并行化计算,从而显著提高了训练效率。在Transformer中,每个词都通过Q(查询)、K(键)和V(值)向量来计算与其他词的相关性,进而确定在整个上下文中该词的重要性。

综上所述,每种传统的神经网络架构都有其特定的应用场景和局限性。RNN擅长处理序列数据但受限于其串行特性;CNN在图像处理领域表现优异但对长距离依赖关系的支持有限;而Transformer则通过创新的自注意力机制解决了这些问题,提供了更强大的序列建模能力和更高的计算效率。这些特点使Transformer成为现代自然语言处理和其他涉及序列数据领域的首选架构之一。

一. Transformer架构综述

在这里插入图片描述
图1-1 transformer整体流程图
在这里插入图片描述
图1-2 transformer模型子结构示意图

整体分为下方输入单元、左侧编码器、右侧解码器、上侧推演结果,其中图1-1描述了transformer大致组件。图1-2描述了每个组件中重要的核心处理方法。

  • Transformer的输入和输出是什么?
    输入: Inputs,Outputs(shifted right)
    输出:Output Probabilities

下列以模型处理英译汉为例解释transformer模型的整体运作过程。

transformer_34">1.1 transformer的输入

例如Are you OK ? 待翻译句子和标注数据 你好吗?进入模型,经模型处理后输出 你干什么?,如图1-3所示。
在这里插入图片描述
图1-3 数据输入输出示意图

1.1.1 词向量

Are you OK ?你好吗?进入模型时,具体会被模型的第一个组件词向量处理,如图1-4所示。
在这里插入图片描述
图1-4 词向量层示意图

假设每个单词用4维向量表示,则["Are","you","OK","?"] 四个词的句子可以用4 * 4的词向量矩阵表示,每一行是一个词的词向量,如图1-5所示。
在这里插入图片描述
图1-5 待译数据词向量

同理,标注词["你","好吗","?"]也会被处理成 3* 4的词向量矩阵,如图1-6所示。
在这里插入图片描述
图1-6 标注数据词向量

1.1.2 位置编码(Positional Encoding)

得到Input Embedding和Output Embedding的词向量后,transformer会对其进行位置编码。目的是把位置信息附加到原始的信息上。如图1-7所示。
在这里插入图片描述
图1-7 从词嵌入到位置编码示意图

在没有位置编码时
在这里插入图片描述
图1-8 词向量示意图

即模型可能当成You are OK ?OK ? you are等进行处理。那么这样子就可能违背本意,如图1-8所示。

对于初学者而言,下面的讨论可能会显得晦涩难懂,不清楚其目的和实施的理由。这并不意外,因为这部分内容旨在提供一个整体框架或概览,而不会深入探讨每一个细节。现阶段,您无需过分担忧具体的实现步骤或背后的原理。当前的重点在于理解这种方法的大致轮廓以及它试图达成的目标。具体的操作细节、技术术语以及每一步骤背后的原因将会在后续章节中详细展开。

为了帮助您更好地跟随学习进度,这里将给出一个高层次的概念性描述。首先,我们采取一种系统化的方法来解决问题,这种方法依赖于一系列预先设定的步骤和规则。这些步骤被设计成能够引导用户从问题的起始点顺利到达解决方案。虽然此时您可能对其中的具体操作流程感到困惑,但随着逐步深入的学习,每一个环节都将得到清晰的解释和实例说明。

位置编码会用正弦函数和余弦函数的计算实现

位置编码的正余弦公式

其中:

  • pos 表示词在序列中的位置。

  • i 表示编码向量中的维度索引。

  • d_model 表示模型嵌入维度大小。

  • 对于偶数维度(即 i 是偶数),使用正弦函数:

    P E pos , 2 i = sin ⁡ ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i=sin(100002i/dmodelpos)

  • 对于奇数维度(即 i 是奇数),使用余弦函数:

    P E pos , 2 i + 1 = cos ⁡ ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i+1=cos(100002i/dmodelpos)

其中,pos 表示词语在序列中的位置,i 表示该词语向量中的第 i 维度。d_model表示总维度数
例如["Are","you","OK","?"]中, "you"的索引下标为1,且前文假设词向量有4个维度(现设4个维度分别为维度0,维度1,维度2,维度3)。因此"you"的位置编码为PE(1,0),PE(1,1),PE(1,2),PE(1,3),如图1-9所示。
在这里插入图片描述
图1-9 位置编码示意图

再次说明,如上你可能看不懂为什么要这么做,后续在章节2中介绍自注意力机制,你会有所理解

1.1.3 编码器与解码器结构

在这里插入图片描述
图1-10 输入序列经过位置编码进入编解码器图

经过位置编码后,英文的待译数据和中文的标注数据分别输入到编码器和解码器中,会经过三个计算过程。如图1-11
在这里插入图片描述
图1-11 编解码器整体处理流程图

  • 编码器会基于 自注意力机制(Multi-Head Attention)前馈神经网络(Feed Forward)对"英文的待译数据"进行编码,如图1-12所示
    在这里插入图片描述
    图1-12 编码器处理流程图

  • 解码器会基于 带有掩码的(Masked)自注意力机制(Multi-Head Attention)对"中文的标注数据"进行编码,如图1-13
    在这里插入图片描述
    图1-13 解码器处理流程图

  • 编码器-解码器注意力层: 对两组数据一起解码,得到解码器最终输出。如图1-14 所示。
    在这里插入图片描述
    图1-14 从编码器-解码器注意力层到解码器最终输出图

总体来说编解码器通过自注意力机制,和前馈神经网络将输入数据中的全局信息附加到解码结果并最终输出。如图1-15所示。
在这里插入图片描述

1.1.4 多头自注意力机制

在这里插入图片描述
图1-16 多头自注意力机制整体示意图

其中自注意力机制(Muti Head Self Attention)会分别使用多个自注意力机制对Q,K,V 三个线性层(Linear)对输入数据进行线性变换并使用缩放点积注意力机制(Scaled Dot Product Attention)将特征变换后的Q,K,V进行结合,最后使用fc线形层整合多头结果。 如图1-17所示。
在这里插入图片描述
图1-17 自注意力机制计算流程图
在这里插入图片描述
图1-18 自注意力机制源码实现图

在章节2,我们会详细介绍Q,K,V参数的作用,为什么是这样搞。

以编码器中的自注意力机制层,说明自注意力机制是如何工作的。首先输入的数据是经过位置编码后的["Are","you","ok","?"],其黄色表示["Are","you","ok","?"]的词向量矩阵,分别于Q,K,V进行线性变换得到,三组结果qx,kx,vx。如图1-19所示。
在这里插入图片描述
图1-19 举例说明自注意力机制计算流程图

接着将三组结果交给缩放点积注意力机制整合成最终结果。

关于自注意力机制和缩放点积注意力机制将在第二章详细介绍。


二.Transformer分步详解

在之前的概述中,您可能对编码器与解码器之间的映射关系感到困惑,不明白为何需要通过Q(查询)、K(键)和V(值)来进行信息处理和统一归一化为啥是softmax函数处理,以及为何位置编码采用了正余弦函数的形式,。接下来,我们将详细探讨这些问题,以期为您提供清晰的理解。

首先,让我们明确编码器和解码器在序列到序列(Seq2Seq)任务中的角色。编码器的任务是将输入序列转换为一个固定长度的内部表示形式,通常称为上下文向量或特征向量。这个内部表示捕捉了输入序列的关键信息,并将其压缩成一个抽象表达。而解码器则接收这个内部表示,并逐步生成输出序列,每一步都可能依赖于前一步的输出以及从编码器传递过来的上下文信息。这种结构使得模型能够处理不同长度的输入和输出序列,适用于如机器翻译、文本摘要等任务。

接下来,讨论Q、K、V的概念及其在自注意力机制中的应用。在Transformer架构中,为了有效处理输入序列中不同位置之间的关系,每个输入都需要经过线性变换,从而生成Q、K、V三个不同的向量。这些向量分别代表查询、键和值,它们的作用在于计算序列中元素间的相似度并确定权重,以便实现对不同位置信息的有效区分。

最后,我们来解释为什么位置编码采用正余弦函数。由于Transformer模型缺乏像循环神经网络(RNNs)那样的递归结构或卷积神经网络(CNNs)那样的卷积结构,它无法直接识别序列中元素的位置信息。因此,位置编码被引入,其目的是赋予模型关于序列中各元素相对位置的知识。位置编码通常由正弦和余弦函数生成,确保每个位置都有独特的表示。选择正余弦函数的原因在于,这种方法可以保证对于任何给定的位置偏移,都可以通过固定的数学运算获得对应的编码,这有助于模型学习到位置间的相对距离关系。此外,正余弦函数的周期性特性允许模型处理任意长度的序列,而不会因为位置过远而导致位置信息丢失或混淆。

综上所述,通过对编码器和解码器的工作原理、QKV在自注意力机制中的作用以及位置编码为何采用正余弦函数的深入解析,希望能帮助您更准确地理解这些概念背后的逻辑和技术细节。

2.1 传统词向量存在的问题

预训练好的词向量一旦生成就保持不变,这意味着它们无法根据不同的语境灵活调整。例如:

  • “它无法通过这条河,因为它太累了。” 在这句话中,“它”指的是某个行动者,比如一个人或动物,表明是由于疲劳导致无法过河。
  • “它无法通过这条河,因为它太窄了。” 而在这句话里,“它”指的是河流本身,表示由于河道狭窄而不能通过。

如果词向量固定不变,那么在处理这两个句子时就会遇到问题,因为“它”这个词在两个句子中的含义完全不同。第一个句子中的“它”指的是执行动作的主体,而在第二个句子中则是指物体(河流)的一个属性(宽度)。这种情况下,固定的词向量无法准确捕捉到“它”在不同语境下的具体含义。

因此,虽然预训练词向量能够提供一个良好的起点,为词汇赋予基于大规模文本数据学习得到的通用意义,但它们并不足以应对所有情况。为了更好地理解和区分词语在不同上下文中的意义,我们需要采用更先进的模型,如ELMo、BERT等,这些模型可以根据词语所在的特定环境动态调整词向量,从而更加精准地反映词语的实际用法和意义。这样,即使是像“它”这样的代词,在不同的句子中也能被正确理解。

2.2 详解编解码器中自注意力机制

主要目标是使计算机能够在处理文本时,从上下文语句中识别并关注最关键的信息。Transformer模型通过其自注意力机制实现了这一目标,该机制允许模型根据输入序列的上下文动态地为每个词分配相应的权重。这意味着在解析一个句子或段落时,Transformer能够自动判断哪些词语对于理解整体意义最为重要,并给予这些词语在上下文词语中的关注度。如图2-1所示。
在这里插入图片描述
图2-1 transformer的自注意力词热度权重图

具体来说,在Transformer架构中,每个词首先被转化为三个向量:查询(Query)、键(Key)和值(Value)。通过计算查询向量与所有键向量之间的相似度得分,模型可以确定当前词与其他词的相关性,从而形成一个注意力分布。这个分布随后用于加权求和所有值向量,生成一个反映整个上下文中关键信息的新表示形式。这样,Transformer不仅能够捕捉到词汇间的直接联系,还能够理解更为复杂的依赖关系,确保了对文本深层次含义的准确把握。因此,借助于这种机制,Transformer可以在各种自然语言处理任务中更有效地利用信息,提高理解和生成文本的能力。

2.2.1 缩放点积注意力机制

Q用于“查找”,即寻找与当前位置相关的信息;K存储序列中每个位置的信息,供Q进行查询时使用(每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征,如图2-2);V包含了实际的信息内容,根据Q和K的相似度(即注意力权重)进行加权求和。通过这种方式,模型能够动态地聚焦于输入序列中最相关的部分,从而更好地捕捉序列数据中的复杂依赖关系。
在这里插入图片描述
图2-2 与Q,K,V线性变换的关系图

假设我们有一个输入序列,其对应的查询向量为 Q Q Q,键向量为 K K K,值向量为 V V V。这些向量通常由线性变换从原始输入嵌入得到。

计算步骤
  1. 计算点积:对于每个查询 q i ∈ Q q_i \in Q qiQ,计算它与所有键 k j ∈ K k_j \in K kjK的点积。获取当前词与每个词的相关程度。

    score ( q i , k j ) = q i T k j \text{score}(q_i, k_j) = q_i^T k_j score(qi,kj)=qiTkj

  2. 缩放分数:由于点积的结果大小与向量维度 d k d_k dk有关,为了防止梯度消失或爆炸,我们需要将得分除以 d k \sqrt{d_k} dk 进行缩放。

    scaled score ( q i , k j ) = q i T k j d k \text{scaled score}(q_i, k_j) = \frac{q_i^T k_j}{\sqrt{d_k}} scaled score(qi,kj)=dk qiTkj

  3. 应用softmax函数:对每个查询 q i q_i qi对应的键分数应用softmax函数,以获得最终的注意力权重 α i j \alpha_{ij} αij

    α i j = softmax j ( q i T k j d k ) = exp ⁡ ( q i T k j d k ) ∑ k exp ⁡ ( q i T k d k ) \alpha_{ij} = \text{softmax}_j\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right) = \frac{\exp\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right)}{\sum_{k}\exp\left(\frac{q_i^T k}{\sqrt{d_k}}\right)} αij=softmaxj(dk qiTkj)=kexp(dk qiTk)exp(dk qiTkj)

  4. 加权求和:最后,利用注意力权重对值向量 V V V进行加权求和,得到上下文向量 c i c_i ci

    c i = ∑ j α i j v j c_i = \sum_{j} \alpha_{ij} v_j ci=jαijvj

矩阵形式

在实践中,我们通常会同时处理多个查询,因此上述操作可以表示为矩阵运算的形式:

Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

其中, Q ∈ R n × d k Q \in \mathbb{R}^{n \times d_k} QRn×dk K ∈ R m × d k K \in \mathbb{R}^{m \times d_k} KRm×dk V ∈ R m × d v V \in \mathbb{R}^{m \times d_v} VRm×dv分别是查询、键和值的矩阵, n n n是查询的数量, m m m是键/值的数量, d k d_k dk d v d_v dv分别是键和值的维度。

2.2.2 softmax函数

Softmax函数是一种归一化指数函数,它能够将一个K维向量z“压缩”到另一个K维实向量σ(z),使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。这样,输出就可以被解释为概率分布 1,即百分率占比,可以得出当前词与其余词的关系热度占比。

对于输入向量 Z = [ z 1 , z 2 , z 3 . . . . . z k ] Z = [z_1,z_2,z_3.....z_k] Z=[z1,z2,z3.....zk],Softmax函数定义如下
σ ( z ) i = e z i ∑ j = 1 K e z j \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} σ(z)i=j=1Kezjezi

数值稳定性的改进
为了避免数值溢出问题(例如上溢或下溢),通常会对输入进行平移操作,即从每个 z i z_i zi中减去最大值 max ⁡ ( z ) \max(z) max(z):
σ ( z ) i = e z i − max ⁡ ( z ) ∑ j = 1 K e z j − max ⁡ ( z ) \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} σ(z)i=j=1Kezjmax(z)ezimax(z)
示例代码块

import numpy as npdef softmax(x):"""Compute softmax values for each sets of scores in x."""e_x = np.exp(x - np.max(x))  # 防止溢出return e_x / e_x.sum()# 测试数据
x = np.array([-3, 2, -1, 0])
print(softmax(x))

2.2.3 多头机制

在Transformer架构中,为了模拟CNN能够从不同角度提取多种特征的能力,采用了“多头注意力机制”(Multi-Head Attention)。这一机制通过不同的注意力头(Attention Head)并行地执行多个独立的自注意力过程。每个头都使用各自的学习参数来处理输入数据的不同子空间,从而允许模型捕捉到输入序列内的各种复杂依赖关系 。通常情况下,设置8个这样的头已经足够有效。

在完成多头注意力计算后,每个头会输出一个特征表示。这些独立的特征表示随后会被拼接在一起,形成一个综合的特征表示。接下来,为了整合这些信息并减少维度,通常会在拼接后的特征上应用一个全连接层(Fully Connected Layer),这一步骤有时也被称为降维处理。这样做的目的是将多头注意力机制得到的高维特征映射回模型需要的较低维度,以便后续处理或预测任务的执行。


三.FNN与MoE策略

MoE模型中的每个专家(Expert)通常采用前馈神经网络结构( FeadFoward Network 如全连接网络或卷积网络)。例如,在Transformer模型中,MoE层替换了传统的前馈子层,每个专家独立处理输入数据的子集,通过并行计算提升模型容量。门控网络(Gating Network)负责动态分配输入到不同专家,其本身也是一个前馈网络,通常包含Softmax或Gating Tree结构,用于生成专家选择的概率分布。

混合专家模型(Mixture of Experts,MoE)是一种先进的机器学习策略,它通过将多个专门训练的子模型(称为“专家”)结合起来,并使用一个或多个门控网络来控制这些专家输出的权重。这种方法旨在提高模型性能和效率,特别是在处理复杂数据模式时的大模型训练。

在MoE架构中,有三个关键组件:专家、门控网络和稀疏激活。每个专家都是针对特定任务或数据特征而训练的子模型。例如,在图像分类任务中,一个专家可能专门识别纹理,而另一个专家可能识别边缘或形状。这种分工有助于整个模型更高效地处理问题,因为每个专家只处理它最适合的数据类型。

在这里插入图片描述

图3-1 Figure 2 | DeepSeekMoE的示意图

由于论发表已经非常详尽,因此不再赘述。以下将会给出论文地址

四.论文参考

4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型

DeepSeekMoE: Towards Ultimate Expert Specialization in
Mixture-of-Experts Language Models

4.2 模型越狱-拒绝由LLMs单一方向调解

Refusal in LLMs is mediated by a single direction

4.3 LLM MOE策略的演化

LLM MOE的进化之路,从普通简化 MOE,到 sparse moe,再到 deepseek 使用的 share_expert sparse moe


http://www.ppmy.cn/server/166236.html

相关文章

ES管理器焕新升级:紫色银狼主题来袭!

ES管理器(安卓版)迎来了一次令人眼前一亮的改头换面!此次更新最直观的变化集中在UI界面设计上。开发团队大胆突破,摒弃了以往稍显平庸的风格,引入了极具个性的全新主题——以热门游戏《崩坏:星穹铁道》中的…

Java实战经验分享

1. 项目优化与性能提升 面试问题: 聊聊你印象最深刻的项目,或者做了哪些优化 你在项目中如何解决缓存穿透问题? 缓存穿透是我们做缓存优化时最常遇到的问题,特别是当查询的对象在数据库中不存在时,缓存层和数据库都会…

800G光模块:引领未来数据中心与网络通信的新引擎

随着5G、云计算、人工智能和大数据技术的飞速发展,全球数据流量呈现爆发式增长。据预测,到2025年,全球数据总量将达到175ZB(泽字节),这对网络带宽和传输效率提出了前所未有的挑战。在这一背景下&#xff0c…

白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?

大家都知道,在设计的初期,我们通常会先绘制草图,然后再进行上色处理,最终才开始进行最终的设计工作。在这个上色的过程中,配色是至关重要的一环。这不仅方便了内部同事的评审,也让产品方和客户可以直观地了…

Dockerfile 文件详解

在平常的开发工作中,我们经常需要部署项目,一个项目开发完成后,使用 Docker 方式部署,那么首先得构造镜像,构造镜像最主要的就是 Dockerfile 文件的编写,今天简单来总结下 Dockerfile 文件的编写以及有哪些…

Flutter完整开发实战详解(六、 深入Widget原理)

Flutter 番外的世界系列文章专栏 首先我们需要明白,Widget 是什么?这里有一个 “总所周知” 的答就是:Widget并不真正的渲染对象 。是的,事实上在 Flutter 中渲染是经历了从 Widget 到 Element 再到 RenderObject 的过程。 我们都…

链表专题-03

链表专题(三) 两数相加 问题 [力扣2] 2. 两数相加 - 力扣(LeetCode) 问题描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加&#xff…

[渗透测试]热门搜索引擎推荐— — shodan篇

[渗透测试]热门搜索引擎推荐— — shodan篇 免责声明:本文仅用于分享渗透测试工具,大家使用时,一定需要遵守相关法律法规。 除了shodan,还有很多其他热门的,比如:fofa、奇安信的鹰图、钟馗之眼等&#xff0…