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

Transformer基础架构详解(附图 + Python Demo)

一、为什么会有 Transformer?

在 Transformer 出现之前,主流模型是:

  • RNN(循环神经网络)
  • LSTM / GRU
import torch import torch.nn as nn # 定义RNN rnn = nn.RNN(input_size=128, hidden_size=128) # 输入:序列长度=5 x = torch.rand(5, 1, 128) h = torch.zeros(1, 1, 128) # 初始隐藏状态 outputs = [] for t in range(5): # ❗必须逐时间步计算(串行) out, h = rnn(x[t].unsqueeze(0), h) outputs.append(out) # outputs保存每个时间步结果
import torch import torch.nn as nn # 定义LSTM lstm = nn.LSTM(input_size=128, hidden_size=128) x = torch.rand(5, 1, 128) h = torch.zeros(1, 1, 128) # 隐藏状态 c = torch.zeros(1, 1, 128) # 细胞状态(关键!) outputs = [] for t in range(5): # ❗仍然是串行 out, (h, c) = lstm(x[t].unsqueeze(0), (h, c)) outputs.append(out)
# 此处是trasnformer案例 import torch import torch.nn as nn # 多头注意力 attn = nn.MultiheadAttention(embed_dim=128, num_heads=8) # 一次性输入整个序列 x = torch.rand(5, 1, 128) # Q = K = V = x(自注意力) output, weights = attn(x, x, x)

RNN和LSTM有两个致命问题:

  1. 无法并行计算(太慢)
  2. 长距离依赖难以捕捉

二、Transformer整体架构

二、整体架构(核心结构)

Input → Encoder → Decoder → Output
┌───────────────┐ Input → │ Encoder × N │ └───────────────┘ ↓ ┌───────────────┐ Target → │ Decoder × N │ → 输出 └───────────────┘

三、Encoder 结构(重点)

每一层Encoder包含两个核心模块:

在 Transformer 中,Encoder 是负责“理解输入”的部分

每一层 Encoder 都包含两个核心模块:

👉Self-Attention(自注意力) + Feed Forward(前馈网络)

输入 ↓ Multi-Head Self-Attention ↓ Add & LayerNorm ↓ Feed Forward Network ↓ Add & LayerNorm ↓ 输出

1️⃣ Self-Attention(自注意力)

1. 本质作用:👉让每个词都能“看”到句子中所有词,并决定关注谁

2. 举个直觉例子:The animal didn't cross the street because it was too tired

问题:“it”指谁?

  • animal ❓
  • street ❓

👉 Self-Attention 会自动学到:

“it”更关注“animal”

3. 数学计算过程(核心)

Step 1:生成 Q / K / V

输入向量 x 通过线性变换:

Q = xWq
K = xWk
V = xWv


Step 2:计算注意力权重


Step 3:加权求和


4. Multi-Head Attention(多头)

不是只做一次 Attention,而是:

Head1: 学语法关系 Head2: 学语义关系 Head3: 学位置关系 ...

最后拼接:

Concat(head1, head2, ...) → Linear

👉 本质:

从多个“角度”理解句子

5. PyTorch 简化实现

import torch import torch.nn.functional as F def self_attention(x): d_model = x.size(-1) Wq = torch.rand(d_model, d_model) Wk = torch.rand(d_model, d_model) Wv = torch.rand(d_model, d_model) Q = x @ Wq K = x @ Wk V = x @ Wv scores = Q @ K.transpose(-2, -1) / (d_model ** 0.5) weights = F.softmax(scores, dim=-1) return weights @ V x = torch.rand(1, 5, 64) out = self_attention(x) print(out.shape)

2️⃣ Feed Forward(前馈网络)

待完善...

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

相关文章:

  • driftnet使用教程
  • Nomic-Embed-Text-V2-MoE与操作系统:重装系统后快速恢复AI开发环境的完整流程
  • Qwen3-0.6B-FP8内网穿透部署方案:安全访问本地AI模型服务
  • CREST 分子构象采样工具:从理论到实践的全面指南
  • Pixel Dimension Fissioner 数据库课程设计辅助:从ER图到SQL语句全流程生成
  • HPatches数据集:计算机视觉特征匹配的终极指南
  • SuperStart开始菜单工具v2.1.1
  • 【PolarCTF】Don‘t touch me
  • 构建智能搜索引擎:文脉定序系统核心排序模块集成实战
  • 避开这些坑!uni-app导航栏开发中的5个高频错误(含微信小程序胶囊按钮适配技巧)
  • 保姆级教程:在SAP里创建一个能直接下载文件的HTTP接口(SICF配置避坑指南)
  • FastSurfer终极指南:如何在5分钟内完成深度学习大脑MRI分割?
  • NukeSurvivalToolkit:200+专业特效工具集如何重塑Nuke工作流
  • 通义千问1.8B模型入门:从部署到自动生成API文档全流程
  • 每日算法练习:LeetCode 134. 加油站 ✅
  • 避坑指南:Matlab计算THD时容易忽略的6个细节(附采样率设置建议)
  • 告别色彩乱象:novideo_srgb如何重新定义消费级显示器色彩校准
  • Qwen3-ForcedAligner-0.6B生产环境:中小企业本地ASR服务免API调用与隐私合规方案
  • 高效掌握ControlNet-v1-1_fp16_safetensors:从入门到实践的完整指南
  • 别再复制粘贴了!手把手教你用Vite+Vue3定制专属CKEditor5编辑器(含字体、高亮、对齐插件)
  • LoRa与LoRaWAN:物联网远距离通信的“基石”与“大脑
  • tkinter绘制组件(51)——高级滑动条
  • Artisan咖啡烘焙软件:3大核心功能解密,从入门到精通的完整指南
  • TCN-GRU这个组合模型算是把时间序列预测的两个经典结构玩出了花——时间卷积负责抓局部特征,GRU来捕捉时序依赖关系。咱直接上代码看看核心部分怎么搭的
  • Whisper-large-v3在媒体行业的应用:智能字幕生成系统
  • Qwen3-0.6B-FP8部署避坑指南:新手常见问题与解决方案
  • 嵌入式系统可靠性设计七项工程实践
  • Android AOA协议嵌入式实现:裸机/RTOS兼容的USB配件模式库
  • Vibe Coding技巧-用 AI 写代码越修 Bug 越崩溃?这四步法帮你告别来回拉扯
  • 爆火全球的“小龙虾“OpenClaw:你的下一个AI管家,还是安全定时炸弹?