大模型核心组件结构与计算顺序详解(Embedding/FFN/LayerNorm等)

在大模型(如GPT、BERT、LLaMA等)的架构设计中,各个组件的协同工作是模型性能的核心保障。本文将详细解析大模型中Embedding、前馈神经网络(FFN)、LayerNorm、Softmax、MoE、残差连接的作用及计算顺序,帮助理解Transformer类模型的底层逻辑。

一、核心组件的作用与计算逻辑

1. Embedding层:将文本转化为向量表示

作用:将离散的输入token(如词语、子词)转换为连续的低维向量,捕捉基础语义信息,并融入位置信息。

计算顺序

  • 步骤1:分词与token映射
    原始文本通过分词工具(如BPE、WordPiece)拆分为token序列,每个token被映射为唯一的整数ID(如“自然语言”→[102, 345])。
  • 步骤2:词嵌入(Word Embedding)
    整数ID通过嵌入矩阵映射为固定维度的向量(如768维),公式:Embedding(token_id) = 嵌入矩阵[token_id]
  • 步骤3:位置编码(Positional Encoding)
    为解决Transformer对序列顺序不敏感的问题,叠加位置信息(可选两种方式):
    • 固定编码:使用正弦/余弦函数(原始Transformer),公式为:
      PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
      PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
    • 可学习编码:位置信息作为可训练参数(如GPT系列),通过反向传播优化。

输出:融合了语义和位置信息的向量序列(形状:[batch_size, seq_len, hidden_dim])。

2. 残差连接(Residual Connection)与LayerNorm:稳定训练的核心

作用

  • 残差连接:缓解深层网络的梯度消失问题,确保信息流直接传递(类似“高速公路”机制)。
  • LayerNorm:对输入向量进行标准化,减少分布偏移,加速训练收敛。

计算顺序
大模型中主流采用Pre-Norm结构(与原始Transformer的Post-Norm区分),具体流程:

LayerNorm(输入) → 子层(注意力/FFN/MoE) → 残差连接(输入 + 子层输出)
  • LayerNorm公式
    LayerNorm(x) = γ * (x - μ) / √(σ² + ε) + β
    其中μ为均值,σ²为方差,γβ为可学习参数(控制缩放和偏移)。
  • 残差连接公式
    Output = Input + Sublayer(LayerNorm(Input))

3. 自注意力机制(含Softmax):捕捉上下文关联

作用:计算序列中每个token与其他token的相关性,动态聚合上下文信息(如“他”指代前文的“小明”)。

计算顺序

  • 步骤1:生成Q、K、V矩阵
    输入向量通过3个线性层分别转换为Query(查询)、Key(键)、Value(值):
    Q = Input × W_QK = Input × W_KV = Input × W_V
    W_Q/W_K/W_V为可学习权重矩阵)。
  • 步骤2:计算注意力分数
    通过缩放点积计算token间的相关性:
    Score = (Q × K^T) / √d_k
    d_k为Q/K的维度,缩放避免分数过大导致Softmax梯度消失)。
  • 步骤3:Softmax归一化
    将分数转换为概率分布,确保权重和为1:
    Attention_Weight = Softmax(Score)
    (对序列长度维度计算,如[batch_size, num_heads, seq_len, seq_len])。
  • 步骤4:加权聚合Value
    根据注意力权重对Value进行加权求和,得到上下文向量:
    Context = Attention_Weight × V
  • 步骤5:多头注意力融合
    将多个头(如12头)的Context拼接,通过线性层输出:
    MultiHead_Output = Concat(Context_1, ..., Context_head) × W_O

4. 前馈神经网络(FFN)与MoE:增强非线性表达

(1)前馈神经网络(FFN)

作用:对注意力输出进行非线性变换,增强模型拟合能力。

计算顺序

FFN(Input) = Linear2(ReLU(Linear1(Input)))
  • 两层线性变换中间通过ReLU(或GELU)激活,例如:
    Linear1将768维映射到3072维,Linear2映射回768维。
(2)MoE(混合专家模型)

作用:替代FFN,通过多个“专家网络”处理不同任务,在参数量增加时保持计算效率。

计算顺序

  • 步骤1:门控网络(Gating Network)
    输入通过线性层和Softmax生成专家权重:
    Expert_Weight = Softmax(Linear_Gate(Input))
  • 步骤2:专家选择与加权
    选择Top-K个专家(如Top2),用权重对专家输出加权:
    MoE_Output = Σ(Expert_Weight_i × Expert_i(Input))
    (专家网络结构同FFN,不同专家专注于不同语义特征)。

5. 输出层:生成最终预测

作用:将模型最后一层的隐藏向量转换为任务相关输出(如文本生成的下一个token概率)。

计算顺序

  • 对最终隐藏层进行线性变换,映射到词汇表维度:
    Logits = Linear(Last_Hidden_State)
  • (可选)通过Softmax生成概率分布:
    Token_Prob = Softmax(Logits)
    (生成任务中常用Greedy Search或采样策略选择下一个token)。

二、典型模型的完整计算流程(以GPT为例)

以GPT系列的解码器结构为例,完整顺序如下:

输入文本 → 分词 → Embedding + 位置编码 → [重复N层] → 输出层┌───────────────────────────────── 每层结构 ─────────────────────────────────┐│ LayerNorm → 多头自注意力(带因果掩码) → 残差连接 → LayerNorm → FFN/MoE → 残差连接 │└─────────────────────────────────────────────────────────────────────────────┘
  • 因果掩码:确保预测时只关注前文token(避免泄露未来信息)。
  • N层堆叠:如GPT-3有96层,通过深度提升模型容量。

三、关键细节总结

  1. LayerNorm位置:主流模型(GPT-3、LLaMA)采用Pre-Norm(先归一化再进子层),训练更稳定。
  2. 残差连接必要性:每个子层(注意力/FFN/MoE)后必须接残差,否则深层网络难以训练。
  3. MoE与FFN的选择:MoE在大参数量模型(如100B+)中更高效,FFN在中小模型中更常用。
  4. Softmax的应用场景:仅在注意力权重计算和输出层概率生成时使用,其他场景无需归一化。

通过理解上述组件的协作逻辑,可更清晰地把握大模型的训练与推理过程,为模型调优或自定义架构提供基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88944.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

希尔排序:突破传统排序的边界

一、算法思想希尔排序(Shell Sort),也被叫做缩小增量排序,是插入排序的一种改进版本。希尔排序的核心在于先将整个待排序的记录序列分割成若干个子序列,分别进行直接插入排序。随着增量逐渐减小,子序列的长…

Kafka事务消息与Exactly-Once语义实战指南

Kafka事务消息与Exactly-Once语义实战指南 在分布式微服务或大数据处理场景中,消息队列常被用于异步解耦、流量削峰和系统伸缩。对于重要业务消息,尤其是金融、订单、库存等场景,消息的精确投递(Exactly Once)和事务一…

26.将 Python 列表拆分为多个小块

将 Python 列表拆分为多个小块(Chunk a List) 📌 场景 1:按份数 chunk_into_n(lst, n) 将一个列表平均拆分为 n 个块。如果不能整除,最后一块会包含剩余元素。 ✅ 示例代码 from math import ceildef chunk_into_n(lst, n):size = ceil(len

18.理解 Python 中的切片赋值

1. 切片语法回顾 标准切片语法格式为: [start_at : stop_before : step]start_at:起始索引(包含)stop_before:结束索引(不包含)step:步长(默认为 1)例如: lst = [1, 2,

论文 视黄素与细胞修复

王伟教授发布,通过对比兔子和老鼠耳朵穿孔后的复原,控制变量法发现了 视黄素对细胞修复的影响

JavaScript 的执行上下文

当 JS 引擎处理一段脚本内容的时候,它是以怎样的顺序解析和执行的?脚本中的那些变量是何时被定义的?它们之间错综复杂的访问关系又是怎样创建和链接的?要解释这些问题,就必须了解 JS 执行上下文的概念。 JavaScript引擎: JavaScript引擎是一个计算机程序,它接收JavaScri…

掉线监测-tezos rpc不能用,改为残疾网页监测

自从有了编程伴侣,备忘的需求变得更低了,明显不担心记不住语法需要记录的情景。然而还是保持习惯,就当写日记吧,记录一下自己时不时在瞎捣腾啥。tm,好人谁记日记。就是监控灰色各自前紧挨着出现了多少红色格子。一共查…

Spark Expression codegen

Expression codegen src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala def genCode(ctx: CodegenContext): ExprCode = {ctx.subExprEliminationExprs.get(ExpressionEquals(

Axios方法完成图书管理页面完整版

一、目的 需要实现的功能有包括&#xff1a; 从服务器发送请求&#xff0c;获取图书列表并渲染添加新图书编辑现有图书信息删除图书以上每一步都实现与服务器存储数据同步更改 二、基础配置 引入Axios库&#xff1a; <script src"https://cdn.jsdelivr.net/npm/ax…

SQLlite下载以及简单使用

SQLite Download Page cd D:\WK\2025\StudentManagerSystem\sqlite D: entManagerSystem\sqlite>sqlite3.exe 所建库的名字.db 一&#xff1a;命令 <1>打开某个数据库文件中 sqlite3 test.db<2>查看所有的命令介绍(英文) .help<3>退出当前数据库系统 .qu…

函数柯里化详解

一、函数柯里化&#xff1a; 是一种高阶函数技术&#xff0c;它将一个多参数函数转换为一系列单参数函数的链式调用。 核心概念 定义&#xff1a;将一个函数 f(a, b, c) 转换为 f(a)(b)© 的形式 **本质&#xff1a;**通过闭包保存参数&#xff0c;实现分步传参 关键特征&a…

C++11:constexpr 编译期性质

C11&#xff1a;constexpr & 编译期性质常量表达式 constexpr变量IiteralType函数自定义字面量参数匹配与重载规则静态断言常量表达式 constexpr const expression常量表达式&#xff0c;是C11引入的新特性&#xff0c;用于将表达式提前到编译期进行计算&#xff0c;从而减…

【每天一个知识点】多模态信息(Multimodal Information)

常用的多模态信息&#xff08;Multimodal Information&#xff09;指的是来源于多种感知通道/数据类型的内容&#xff0c;这些信息可以被整合处理&#xff0c;以提升理解、推理与生成能力。在人工智能和大模型系统中&#xff0c;典型的多模态信息主要包括以下几类&#xff1a;✅…

iOS 抓包工具精选对比:不同调试需求下的工具适配策略

iOS 抓包痛点始终存在&#xff1a;问题不是“抓不抓”&#xff0c;而是“怎么抓” 很多开发者都遇到过这样的情况&#xff1a; “接口没有返回&#xff0c;连日志都没打出来”“模拟器正常&#xff0c;真机无法请求”“加了 HTTPS 双向认证&#xff0c;抓不到了”“明明设置了 …

图像修复:深度学习实现老照片划痕修复+老照片上色

第一步&#xff1a;介绍 1&#xff09;GLCIC-PyTorch是一个基于PyTorch的开源项目&#xff0c;它实现了“全局和局部一致性图像修复”方法。该方法由Iizuka等人提出&#xff0c;主要用于图像修复任务&#xff0c;能够有效地恢复图像中被遮挡或损坏的部分。项目使用Python编程语…

css 边框颜色渐变

border-image: linear-gradient(90deg, rgba(207, 194, 195, 1), rgba(189, 189, 189, 0.2),rgba(207, 194, 195, 1)) 1;

本地 LLM API Python 项目分步指南

分步过程 需要Python 3.9 或更高版本。 安装 Ollama 并在本地下载 LLM 根据您的操作系统&#xff0c;您可以从其网站下载一个或另一个版本的 Ollama 。下载并启动后&#xff0c;打开终端并输入以下命令&#xff1a; ollama run llama3此命令将在本地拉取&#xff08;下载&…

日本的所得税计算方式

✅ 【1】所得税的计算步骤&#xff08;概要&#xff09; 日本的所得税大致按照以下顺序来计算&#xff1a; 1️⃣ 统计收入&#xff08;销售额、工资等&#xff09; 2️⃣ 扣除必要经费等&#xff0c;得到「所得金額」 3️⃣ 扣除各类「所得控除」&#xff08;所得扣除&#xf…

【langchain4j篇01】:5分钟上手langchain4j 1.1.0(SpringBoot整合使用)

目录 一、环境准备 二、创建项目、导入依赖 三、配置 application.yml 四、注入Bean&#xff0c;开箱即用 五、日志观察 一、环境准备 首先和快速上手 Spring AI 框架一样的前置条件&#xff1a;先申请一个 apikey &#xff0c;此部分步骤参考&#xff1a;【SpringAI篇01…

js运算符

运算符 jarringslee*赋值运算符 - / 对变量进行赋值的运算符&#xff0c;用于简化代码。左边是容器&#xff0c;右边是值一元运算符正号 符号- 赋予数据正值、负值自增 自减– 前置和后置&#xff1a;i和i&#xff1a;一般情况下习惯使用后置i&#xff0c;两者在单独…