news 2026/4/16 17:09:47

PyTorch手搓miniGPT!零基础也能看懂的GPT实现教程,建议收藏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch手搓miniGPT!零基础也能看懂的GPT实现教程,建议收藏

文章核心内容是使用PyTorch从零开始实现miniGPT模型,详细拆解了GPT工作流程和核心代码组件,包括词嵌入、位置编码、多头注意力机制、前馈网络和Transformer Block等。通过逐行代码解析,展示了如何构建能理解上下文的GPT模型架构,为后续训练做准备。这种从技术本质出发的讲解方式,适合想了解大模型内部机制的读者。


在 AI 时代,我们每天都在谈论 AI 大模型。我相信大家和我一样好奇,AI 大模型到底是怎么在对话框里,输出一串串结果的?今天,我不聊参数规模,也不聊商业落地,就回归技术本质,使用 PyTorch 从零开始,一行一行地“手搓”出一个 miniGPT。

GPT工作流简介

输入一句话 | 如“Today is” | 模型看不懂自然语言 ↓ Token 化 | 生成如[3105, 318] | 拆成模型认识的最小单位(Token ID) ↓ 词向量 + 位置向量 | 生成矩阵 | 提取出词义和词的顺序信息 ↓ Transformer Block | 生成新矩阵 | 不断把“词的表示”变得更懂上下文 ↓ 映射汇词表概率,输出下一个字符 | 如输出 'Friday' | 输出结果

核心代码逐块拆解

大模型主体:输入到输出

class GPT(nn.Module): def __init__(self, config): super().__init__() # 1. 词向量表:把 Token ID 变成向量 self.token_embedding_table = nn.Embedding(config.vocab_size, config.n_embd) # 2. 位置向量表:告诉模型词在句中的位置(GPT 没有时序概念,必须靠它) self.position_embedding_table = nn.Embedding(config.block_size, config.n_embd) # 3. 堆叠多层 Block,每一层都让模型更理解语义 self.blocks = nn.Sequential(*[Block(config) for _ in range(config.n_layer)]) # 4. 最终层归一化与输出头 self.ln_final = nn.LayerNorm(config.n_embd) self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False) def forward(self, idx, targets=None): B, T = idx.size() # 核心逻辑:词向量 + 位置向量 tok_emb = self.token_embedding_table(idx) pos_emb = self.position_embedding_table(torch.arange(T, device=idx.device)) x = tok_emb + pos_emb x = self.blocks(x) # 漫长的特征变换 x = self.ln_final(x) # 最后的归一化 logits = self.lm_head(x) # 映射回词表:预测每个词的概率分布 # 如果有目标值,计算 CrossEntropy 损失函数进行训练 # ... (略过损失计算逻辑)

参数配置:定义模型的结构,不参与计算

@dataclass class GPTconfig: block_size: int = 512 # 时间窗口:模型一次最多能“看”多长的文字 vocab_size: int = 50257 # 字典大小:模型认识多少个不同的词(Token) n_layer: int = 12 # 层数:堆叠多少层 Transformer 块 n_head: int = 12 # 头数:多头注意力的并行分支数 n_embd: int = 768 # 维度:每个词用多长的向量来表示 dropout: float = 0.1 # 随机失活:防止模型死记硬背(过拟合) head_size: int = n_embd // n_head # 每个注意力头分配到的特征维度

单头注意力:模型具备“理解力”的关键 其计算当前词与之前词的相关性,然后根据相关性把上下文信息融合进自己的向量表示。

class SingleHeadAttention(nn.Module): def __init__(self, config): super().__init__() # 定义 Q, K, V 三个线性变换矩阵 self.key = nn.Linear(config.n_embd, config.head_size, bias=False) self.query = nn.Linear(config.n_embd, config.head_size, bias=False) self.value = nn.Linear(config.n_embd, config.head_size, bias=False) # 注册掩码矩阵(Mask):核心技巧! # 使用 torch.tril 产生下三角矩阵,确保模型只能看到“过去”,不能偷看“未来” self.register_buffer("tril", torch.tril(torch.ones(config.block_size, config.block_size))) self.dropout = nn.Dropout(config.dropout) def forward(self, x): B, T, C = x.size() k, q, v = self.key(x), self.query(x), self.value(x) # 生成 Q, K, V # 计算注意力权重:$$Attention(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$$ wei = q @ k.transpose(-2, -1) * (k.shape[-1]**-0.5) # 掩码屏蔽:将“未来”的词权重设为负无穷,使其在 softmax 后概率为 0 wei = wei.masked_fill(self.tril[:T, :T] == 0, float('-inf')) wei = F.softmax(wei, dim=-1) # 归一化为概率 return wei @ v # 加权求和得到输出

多头并行:单头注意力可能只关注语法,多头则能同时关注逻辑、情感等

class MultiHeadAttention(nn.Module): def __init__(self, config): super().__init__() # 并行运行多个 SingleHeadAttention self.heads = nn.ModuleList([SingleHeadAttention(config) for _ in range(config.n_head)]) # 最后的线性投影层,将多头汇聚的信息进行融合 self.proj = nn.Linear(config.n_embd, config.n_embd) self.dropout = nn.Dropout(config.dropout) def forward(self, x): # 拼接所有头的输出:(B, T, head_size * n_head) -> (B, T, n_embd) out = torch.cat([h(x) for h in self.heads], dim=-1) return self.dropout(self.proj(out))

前馈网络:深度加工自己,对每一个词进行独立的深度特征提取

class FeedForward(nn.Module): def __init__(self, config): super().__init__() self.net = nn.Sequential( nn.Linear(config.n_embd, 4 * config.n_embd), # 先扩维 4 倍,增加特征表达力 nn.GELU(), # GPT 标配激活函数 nn.Linear(4 * config.n_embd, config.n_embd), # 再压回原维度 nn.Dropout(config.dropout) ) def forward(self, x): return self.net(x)

Block 块:将 Attention 和 FFN 封装成一个 Block,然后堆叠多层

class Block(nn.Module): def __init__(self, config): super().__init__() self.ln1 = nn.LayerNorm(config.n_embd) # 归一化层,保持训练稳定 self.att = MultiHeadAttention(config) self.ln2 = nn.LayerNorm(config.n_embd) self.ffn = FeedForward(config) def forward(self, x): x = x + self.att(self.ln1(x)) # 第一阶段:看上下文 x = x + self.ffn(self.ln2(x)) # 第二阶段:自我提升 return x

小结

现在,我们已经完成了GPT基本架构的构建,它拥有复杂的注意力机制和深邃的前馈网络。但是,此架构目前还是静止的——它还没有数据。在下一篇中,我们将介绍如何构建 DataLoader,将海量的文本数据转化为模型能吸收的养分,并开启真正的训练循环,见证智能的涌现。

​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
​​

为什么说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。


智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

​​

资料包有什么?

①从入门到精通的全套视频教程⑤⑥

包含提示词工程、RAG、Agent等技术点

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

④各大厂大模型面试题目详解

⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

​​​​

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:45:13

Vugu架构部署终极指南:现代Go+WebAssembly应用构建实践

Vugu架构部署终极指南:现代GoWebAssembly应用构建实践 【免费下载链接】vugu Vugu: A modern UI library for GoWebAssembly (experimental) 项目地址: https://gitcode.com/gh_mirrors/vu/vugu Vugu是一个专为Go语言设计的现代化UI库,充分利用We…

作者头像 李华
网站建设 2026/4/15 23:09:19

Photoshop AI插件革命:ComfyUI与Stable Diffusion无缝集成指南

还在为AI绘画工具与Photoshop之间的频繁切换而烦恼吗?今天,我们将为你揭秘Comfy-Photoshop-SD插件的完整使用方案,让设计师在熟悉的Photoshop环境中直接驾驭Stable Diffusion的强大AI绘画能力,实现真正的创意无界体验。 【免费下载…

作者头像 李华
网站建设 2026/4/16 14:02:22

YOLO模型训练冷启动问题解决:预加载权重+GPU缓存

YOLO模型训练冷启动问题解决:预加载权重GPU缓存 在工业级AI视觉系统中,实时性是决定成败的关键。哪怕只是几百毫秒的延迟波动,也可能导致流水线误判、自动驾驶避障失败或安防响应滞后。而当我们部署YOLO这类高性能目标检测模型时,…

作者头像 李华
网站建设 2026/4/16 12:24:03

ubuntu qt c++ 让应用程序发生崩溃就自己重启,有多少种方法

1.ubuntu qt c 让应用程序发生崩溃就自己重启,有多少种方法在Ubuntu下使用Qt和C实现应用程序崩溃后自动重启,可通过以下6种核心方法实现,每种方法均包含技术细节和适用场景:1. Qt内部自重启机制(推荐)实现逻…

作者头像 李华
网站建设 2026/4/16 10:18:58

儿童绘本插画生成器,输入绘本主题(童话/科普/成长),自动生成插画线稿,支持上色功能,帮助绘本作者快速出稿。

我将为您创建一个完整的儿童绘本插画生成器项目。 项目结构 children_book_illustrator/ ├── main.py # 主程序入口 ├── config.py # 配置文件 ├── illustration_generator.py # 插画生成核心模块 ├── coloring_module.py # 上色功能模块 ├── style_manage…

作者头像 李华