当前位置: 首页 > news >正文

Transformer:现代大模型核心架构入门

Transformer 是一种让所有词同时互相"看"彼此的神经网络,而不是像之前的 RNN 那样一个字一个字地读。

一、为什么要抛弃 RNN?先看痛点

在 Transformer 出现之前,处理语言的主流方法是RNN(循环神经网络),它像人一样"一个字一个字地读"——必须处理完第1个字,才能处理第2个字,依此类推。

三大致命缺陷:

问题

具体表现

串行瓶颈

无法并行,1000个字的句子要走1000步,GPU利用率极低

梯度消失

第1个字的信息传递到第1000个字时,梯度近乎为零,"忘了开头说了什么"

长距离依赖弱

"小明……(中间500字)……他喜欢"中的"他"很难关联回"小明"

Transformer 的核心思路是:把"一个字一个字读"改成"所有字同时互相看",一步到位捕捉所有位置间的关系。

二、整体架构总览

先看整体骨架 :

三、词嵌入(Token Embedding):把文字变成数字

新手核心问题:计算机怎么理解"苹果"这个词?

计算机只认数字,所以第一步是把所有词映射成一个高维数字向量(比如 768维或 4096维的浮点数列表)。

  • 词表:把所有可能的词/子词列成一个大表(3.2万~12.8万个)
  • 每个词在表里有一个编号(Token ID)
  • 通过"嵌入层"(一张巨大的查找表),编号 → 向量

类比:就像字典,但字典里每个字的"解释"是一串768个数字,而不是文字说明。

四、位置编码(Positional Encoding):告诉模型"你在第几位"

新手疑问:Transformer既然所有词同时看,那它怎么知道"我爱你"和"你爱我"是不同的意思?

答:全靠位置编码。每个词的向量 + 该词所在位置的向量,叠加在一起,模型就能区分位置1的"我"和位置3的"我" 。

现代升级——RoPE 旋转位置编码:原始 sin/cos 位置编码有个缺点:训练时只见过512个位置,推理时遇到1000个位置就"懵了"。LLaMA、Qwen 等大模型用的RoPE通过旋转矩阵编码相对位置,外推能力更强,支持 32k、128k 甚至更长上下文。

五、核心灵魂:自注意力机制(Self-Attention)

这是整个 Transformer 最难理解、也最重要的部分。用一个生活类比来理解:

你在读"银行存了钱,然后去河岸散步"这句话。

看到"银行"时,你的大脑会自动把它和"钱"关联,而非"河岸"。这种"词与词之间的关联度计算",就是注意力机制在做的事。

三个角色——Q、K、V:

名称

全称

类比

作用

Q

Query(查询)

你想找什么

当前词发出的"提问"

K

Key(键)

档案的标签

每个词的"索引标签"

V

Value(值)

档案的内容

每个词实际携带的信息

计算步骤(5步):

  1. 用当前词的Q去和所有词的K点积 → 得到相似度分数
  2. 除以 √d(√d 是一个缩放系数,防止点积值过大导致 Softmax 梯度消失,是让 Transformer 能正常训练的关键细节。防止数值过大,梯度消失) →缩放
  3. 过 Softmax 归一化 → 得到 0~1 的注意力权重(所有词权重之和=1,把数字变成概率分布)
  4. 用权重对所有词的V加权求和 → 得到融合了上下文的新表

六、多头注意力(Multi-Head Attention):同时从多个角度"看"

新手疑问:为什么需要多个头(head)?

单头注意力一次只能聚焦一种语义关系。比如处理"小明让小红帮他做作业"时:

  • 第1个头 → 专注指代关系("他"=小明)
  • 第2个头 → 专注动作关系("让"的施受者)
  • 第3个头 → 专注实体关联(人物关系)
  • ……(通常 8~32 个头)

多个头并行计算,最后把结果拼接起来,表达能力远强于单头。

类比:用多台摄像机从不同角度拍同一场景,最后剪辑在一起,比单一视角信息更丰富。

七、掩码(Mask):GPT 类模型如何"防止作弊"

GPT 在训练时是给定前文预测下一个词——但如果训练时允许模型偷看答案(后面的词),那预测就没意义了。

掩码自注意力用一个下三角矩阵把未来的词遮住:

这就是"单向"的含义。

八、前馈神经网络(FFN):注意力之后的"深度加工"

注意力层负责收集信息(从其他词那里取来相关内容),FFN 层负责深度加工(对每个词的向量做独立变换)。

结构很简单:两层线性变换 + 一个激活函数。

组件

作用

类比

第1层线性

升维(例:768→3072)

把信息展开成更大空间

激活函数

引入非线性(GELU/SwiGLU)

筛选有用的特征

第2层线性

降维(3072→768)

压缩回原始维度

九、残差连接 + 层归一化:训练稳定性的关键

这两个组件不显眼,但极其重要——没有它们,几十层深的 Transformer 根本训练不收敛。

残差连接(Residual Connection):

输出 = 子层(x) + x ← 把输入直接加回来

好处:梯度可以直接从后面"跳回"前面,不用穿越重重非线性,有效防止梯度消失。

类比:高速公路旁边还有辅路——主干道走注意力/FFN,辅路直接走原始信号,两者汇合。

层归一化(LayerNorm):把每层的激活值归一化到均值0、方差1,防止数值爆炸,让训练更稳定。

为什么这能解决"梯度消失"?

训练时,梯度要从最后一层反向传回第一层。每经过一个子层,梯度就要乘以该层的导数——如果导数小于 1,乘几十次就接近 0 了(梯度消失)。

十、训练 vs 推理:两种完全不同的工作模式

十一、现代大模型的关键优化

优化点

原始设计

现代大模型改进

代表模型

位置编码

绝对正弦/余弦

RoPE 旋转位置编码

LLaMA、Qwen、GPT

激活函数

ReLU

GELU / SwiGLU

LLaMA2/3、Qwen

归一化

Post-LN LayerNorm

Pre-LN RMSNorm

LLaMA、Mistral

注意力效率

标准 MHA

GQA 分组查询注意力

LLaMA3、Qwen2

显存优化

标准注意力

FlashAttention

几乎所有主流模型

超大模型

全激活 FFN

MoE 混合专家

Mixtral、DeepSeek

几个名词解释:

  • RMSNorm:LayerNorm 的简化版,省掉均值计算,只保留方差归一化,速度更快效果相当
  • GQA(分组查询注意力):多个 Q 头共享一组 K/V,大幅减少显存,推理速度提升 2-4×
  • FlashAttention:重写注意力计算内存访问模式,减少显存读写次数,对用户透明
  • MoE(混合专家):FFN 拆成 N 个"专家网络",每次只激活其中几个,实现"万亿参数量但计算成本只有百亿"的效果

十二、复杂度一眼看懂

自注意力:O(n² × d) n = 序列长度,d = 向量维度 ↑ 瓶颈在 n²,序列加倍 → 计算量变4倍RNN:O(n × d²) ↑ 瓶颈在 d²,短序列时比 Transformer 慢

结论:

  • 短文本(<512 tokens)→ Transformer 完全碾压 RNN
  • 超长文本(>100k tokens)→ 需要滑动窗口、稀疏注意力(Mistral Sliding Window)或 FlashAttention 降低 n² 开销

十三、一句话总结各核心组件

组件

一句话理解

Token Embedding词嵌入

把文字翻译成数字向量

Positional Encoding位置编码

在向量里塞入"这个词排第几位"的信息

Self-Attention自注意力机制

每个词去问所有词"你和我有多相关",加权收集信息

Multi-Head多头注意力

同时从8/16/32个角度做注意力,并行捕捉不同语义关系

Masked Attention掩码

遮住未来的词,保证自回归生成合法

Cross-Attention

让解码器"看一眼"编码器的全局理解(翻译/多模态用)

FFN前馈神经网络

对每个词独立做非线性变换,深度加工语义

残差连接

给梯度开辟直行通道,防止训练崩掉

LayerNorm/RMSNorm

每层数值归一化,训练稳定

KV Cache

推理时缓存已算的 K/V,不重复算,提速数倍

看完之后,是不是有所收获呢?若有内容不当的地方,欢迎交流!

http://www.jsqmd.com/news/1002243/

相关文章:

  • Rust周刊2026W23 | Rust基金会维护者基金、halloy 2026.7、Zstandard Rust实现、Roto一周年、gRPC-Rust路线图
  • 智能体时代的产品经理如何转型
  • GEE新手避坑指南:获取MODIS NDVI数据时,为什么你的值域总是不对?
  • Java毕设项目: 基于 SpringBoot 的医疗机构就诊服务管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 别再手动改文献了!用Better BibTex插件5分钟搞定Zotero导出格式,完美对齐Google Scholar
  • 别再让三坐标测量机闲着!NETDMIS5.0脱机编程实战:从CAD导入到虚拟找正,一次搞定
  • GPT-4参数量与稀疏激活真相:1.8万亿参数和2% per token的工程本质
  • 色弱的人
  • 细说RocketMQ双网卡问题
  • i.MX21架构解析:异构计算与低功耗设计如何重塑嵌入式多媒体
  • 用Arduino UNO和ULN2003驱动28BYJ-48步进电机,手把手教你做个迷你云台
  • PrivAct框架:多智能体协同的LLM隐私保护方案
  • VMware Workstation Pro 17 虚拟化技术指南:许可证管理与企业级部署方案
  • 5G NR HARQ配置避坑指南:异步、自适应参数怎么调?
  • 线程管理特点 线程属性 线程状态之间切换
  • 别再只会用装饰器了!用Python Hook机制给你的Flask/Django应用加个‘插件’功能
  • PVZ Toolkit技术架构解析:内存注入与跨版本兼容性实现
  • 组件库版本管理与语义化发布:从手动发包到自动化交付链路
  • 3大核心技术揭秘:ComfyUI-Easy-Use如何实现GPU资源高效释放
  • 数字信号控制器DSC:融合DSP与MCU优势,实现电机驱动与实时控制
  • 2026年浙江牛皮纸扑克牌源头厂家专业实力与选型全解析 - 品牌鉴赏官2026
  • 用STM32CubeMX给SD卡做个“体检”:手把手教你读取CID/CSD信息并计算容量(SPI+FATFS)
  • 手把手教你给i.MX RT1021核心板刷入MicroPython(附LCD驱动配置)
  • 终极免费Flash逆向工具:如何用JPEXS解构失落的SWF遗产
  • HP 3457A万用表Python自动化工具:GPIB控制+实时曲线+出厂精度比对
  • Fast-GitHub:彻底解决国内GitHub访问慢的创新技术方案
  • 电缆故障定位仪:实战选型、技术解析与效率提升指南
  • NSK LH65EL 导轨滑块升级及参数详解
  • Kimi版超级玛丽效果“惊人”,配额不足5厘米!
  • 从Griffin-Lim到WaveNet:声码器技术演进的五个关键“顿悟”时刻与未来猜想