@_rohit_tiwari_:用PyTorch从头构建类似GPT的LLM > 将LLM架构拆分为简单部分 > 对初学者友好 > Fu…

X AI KOLs Timeline 工具

摘要

一个对初学者友好的动手GitHub仓库,将类似GPT的LLM架构拆分为简单部分,包含10个Jupyter笔记本,涵盖分词、注意力机制、Transformer块以及用PyTorch实现的微型GPT。

用PyTorch从头构建类似GPT的LLM > 将LLM架构拆分为简单部分。 > 对初学者友好。 > 完全动手实践。 https://github.com/analyticalrohit/llms-from-scratch… > 每一步都解释清楚。 > 只需10个笔记本。 01_tokenization.ipynb 02_token_embeddings.ipynb 03_positional_embeddings.ipynb 04_self_attention_mechanism.ipynb 05_multi_head_self_attention.ipynb 06_feedforward_neural_networks.ipynb 07_residual_connections.ipynb 08_layer_normalization.ipynb 09_transformer_block.ipynb 10_mini_gpt.ipynb
查看原文
查看缓存全文

缓存时间: 2026/06/05 17:17

从零开始用PyTorch构建GPT类大语言模型

将LLM架构拆解为简单部分
适合初学者
完全动手实践
https://github.com/analyticalrohit/llms-from-scratch…
每一步都有详细解释
仅需10个Jupyter笔记本

01_tokenization.ipynb
02_token_embeddings.ipynb
03_positional_embeddings.ipynb
04_self_attention_mechanism.ipynb
05_multi_head_self_attention.ipynb
06_feedforward_neural_networks.ipynb
07_residual_connections.ipynb
08_layer_normalization.ipynb
09_transformer_block.ipynb
10_mini_gpt.ipynb


analyticalrohit/llms-from-scratch

来源:https://github.com/analyticalrohit/llms-from-scratch

从零构建大语言模型

概述

本仓库是一份动手实践指南,教你用PyTorch构建类似ChatGPT的大语言模型。它将架构拆解为简单部分,并逐步解释每个部分。

LLM架构

我们先鸟瞰一下生成式预训练Transformer(GPT)类LLM的架构。
示例:Every moment is a beginning
LLM的工作原理是每次预测一个词或token。LLM通过迭代生成文本。每个预测出的词token会被追加到之前的输入中,形成下一次预测的上下文。

内容

代码笔记本

通过交互式Jupyter笔记本深入了解每个LLM组件的实践示例。

主题代码
Tokenization(分词)01_tokenization.ipynb
Token Embeddings(词嵌入)02_token_embeddings.ipynb
Positional Embeddings(位置嵌入)03_positional_embeddings.ipynb
Self Attention Mechanism(自注意力机制)04_self_attention_mechanism.ipynb
Multi-Head Self Attention(多头自注意力)05_multi_head_self_attention.ipynb
FeedForward Neural Networks(前馈神经网络)06_feedforward_neural_networks.ipynb
Residual Connections(残差连接)07_residual_connections.ipynb
Layer Normalization(层归一化)08_layer_normalization.ipynb
Transformer Block(Transformer块)09_transformer_block.ipynb
MiniGPT(迷你GPT)10_mini_gpt.ipynb

安装依赖

pip install -r requirements.txt

如果你要安装支持CUDA的torch,请确保从PyTorch官网(https://pytorch.org/get-started/locally/)使用正确的安装命令,因为某些版本需要特定的安装方法。

Tokenization(分词)

分词是将文本拆分成更小单元(称为token)的过程。这些token是LLM处理的基本构建块。
输入句子:“Every moment is a beginning”
Tokens:[“Every”, “moment”, “is”, “a”, “beginning”]
这展示了一个分词器如何将句子拆分成token。分词后,每个唯一的token会被分配一个唯一的数字ID。下面是一个简单的可视化示例:

Token Embeddings(词嵌入)

现在我们有了一个数字列表,但这些数字本身并不携带任何含义。“Every”的ID“15745”并不能告诉机器“Every”是一个用来描述名词的限定词。这就是嵌入发挥作用的地方。
Token Embeddings本质上是token的数值表示(向量),即一个由描述其特征的数字组成的列表(向量)。

Positional Embeddings(位置嵌入)

想象一下句子:

  • The dog jumps on the cat.
  • The cat jumps on the dog.

单词相同,但含义完全不同,因为位置不同。我们的数值token ID和token嵌入本身并不能告诉LLM任何关于单词顺序的信息。这通过位置嵌入来解决。
位置嵌入是另一组数字列表(向量),它们被加到token嵌入上。这些向量帮助模型理解序列中每个token的绝对或相对位置。

Self Attention Mechanism(自注意力机制)

自注意力帮助模型理解句子中单词之间的关系。每个token可以查看其他token,并决定哪些token最重要,而不是单独读取每个单词。
以这句话为例:“Every moment is a beginning.”
为了理解单词“beginning”,模型会关注像“moment”和“Every”这样的词。这提供了上下文,帮助模型捕捉到“每个时刻都可能代表一个新的开始”这一概念。
我们计算所有Query和Key之间的点积,以衡量它们的匹配程度。结果会通过键维度的平方根进行缩放,以在训练过程中保持数值稳定。

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

现在每个token都包含了从序列中其他token收集到的信息。这是Transformer的核心思想。
在标准自注意力中,每个token可以关注序列中的所有其他token。但在语言模型中,预测时未来token不应可见。例如,在预测:Every moment is -> a 时,模型不应提前看到未来的单词beginning
因果自注意力通过使用一个掩码来解决这个问题,该掩码阻断了未来token的访问。掩码如下所示:

\begin{bmatrix} 1 & 0 & 0 \\ 1 & 1 & 0 \\ 1 & 1 & 1 \end{bmatrix}

其中:

  • 1 表示允许注意力
  • 0 表示阻止注意力

这确保了:

  • token 1 只能看到自己
  • token 2 可以看到 token 1 和 2
  • token 3 可以看到 token 1、2 和 3

现在每个token只能关注自身及其之前的token。这是仅解码器Transformer模型(如GPT)所使用的机制。

Multi-Head Self Attention(多头自注意力)

多头注意力允许Transformer同时学习不同类型的关系。模型不是使用单一的注意力机制,而是并行使用多个注意力头。每个头以不同的方式查看同一个句子,并学习其自身的关系模式。
以句子“Every moment is a beginning.”为例:
不同的注意力头可能关注不同的含义:

  • 一个头可能连接“moment” ↔ “beginning”,以理解更新或变化的概念。
  • 另一个头可能关注语法:“Every” ↔ “moment”,以理解“Every”在描述“moment”。
  • 另一个头可能关注句子含义:“is” ↔ “beginning”,以理解句子的主要陈述。

单个注意力头一次只能学习一种类型的关系。多个头使模型能够捕捉:语法、含义、长距离依赖、主宾关系和上下文模式。

工作原理:

  • 输入嵌入被分割成更小的部分,称为头。
  • 每个头独立执行注意力计算。
  • 所有头的输出被拼接在一起。
  • 一个最终的线性层将信息组合成一个表示。

每个头在独立的维度上工作。这使模型能够学习更丰富、更多样化的单词间关系。所有头的输出被组合成一个表示。这提高了模型理解语言的能力。

FeedForward Neural Networks(前馈神经网络)

注意力允许token在序列中相互通信并交换信息。例如,在句子“Every moment is a beginning.”中,注意力帮助token“beginning”从“moment”和“Every”等单词中收集上下文。但是,在信息混合之后,每个token仍然需要额外的处理来学习更复杂的模式。这就是前馈网络(通常称为FFN或MLP块)的作用。
前馈神经网络通常由两个线性层组成,中间有一个激活函数(如GELU),临时扩展隐藏维度(通常为4倍),以帮助模型学习更复杂的模式。

  • 线性层
  • 激活函数
  • 第二个线性层

Residual Connections(残差连接)

深度神经网络很难训练。随着网络变深,反向传播过程中的梯度可能会变得非常小或非常大。这被称为梯度消失或梯度爆炸问题。当梯度消失时,较浅的层学习非常缓慢,因为训练信号在向后传播经过许多层时会减弱。
残差连接(也称为跳跃连接)有助于解决这个问题。模型不是学习一个全新的变换,而是学习相对于原始值如何修改输入。原始输入被加回到层的输出中:

\text{Output} = x + \text{Sublayer}(x)

Transformer在以下两个位置周围都使用了残差连接:

  • 多头注意力
  • 前馈网络

残差连接帮助Transformer:

  • 训练更深的网络
  • 稳定梯度
  • 保留信息

它们是现代深度学习架构的核心构建块之一。

Layer Normalization(层归一化)

神经网络中的激活值在训练过程中可能会变得不稳定。当数据经过许多层时,数值可能会变得过大或过小。这使得优化变得困难,并可能减慢学习速度。层归一化有助于稳定这些激活值。它对每个token的特征进行独立归一化,使数值保持:

  • 均值 ≈ 0
  • 标准差 ≈ 1

这使训练更快、更稳定、更可靠。

假设一个token嵌入是:
x = [x_1, x_2, x_3]

LayerNorm计算:
均值 \mu = \frac{1}{n}\sum x_i
方差 \sigma^2 = \frac{1}{n}\sum (x_i - \mu)^2
归一化后的输出 \hat{x}_i =\frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}

这将特征变换为近似零均值和单位方差。在每个Transformer块内部,层归一化会被多次应用。

Transformer Block(Transformer块)

Transformer块结合了:

  • 多头注意力
  • 前馈神经网络
  • 残差连接
  • 层归一化

这是GPT模型的核心构建块。一个Transformer块以特定的顺序将这些部分链接在一起。
在GPT模型中(采用“预归一化”架构),顺序是:

  • LayerNorm
  • 多头注意力
  • 残差相加
  • LayerNorm
  • 前馈
  • 残差相加

通常在注意力和前馈层之后还会使用Dropout,以减少过拟合并提高泛化能力。
现代GPT模型将多个Transformer块堆叠在一起。每个块都会精炼token的表示。

MiniGPT(迷你GPT)

MiniGPT是一个使用Transformer块构建的小型GPT风格语言模型。它结合了:

  • 词嵌入
  • 位置嵌入
  • Transformer块
  • 层归一化
  • 输出投影层

该模型处理输入token并预测序列中的下一个token。

参数

参数描述
vocab_size词汇表中的token总数
block_size最大序列长度
embed_dim词嵌入大小
num_heads注意力头数
hidden_dim前馈网络的隐藏大小
num_layersTransformer块的数量

整体流程

text Input Tokens ↓ Token Embeddings ↓ Positional Embeddings ↓ Transformer Blocks ↓ LayerNorm ↓ Linear Layer ↓ Vocabulary Logits

MiniGPT以自回归方式训练。它利用之前的token预测下一个token。这是GPT风格语言模型的核心思想。

博客文章

在配套的博客中阅读完整的分解和见解。

  • LLM可视化指南(第一部分):从文本到数字:分词与嵌入(https://awesomeneuron.substack.com/p/a-visual-guide-to-llms-part-1)
  • LLM可视化指南(第二部分):深入Transformer架构

通讯

📌 加入来自150多个国家的10,000多名机器学习爱好者和专业人士。
✅ 通过可视化、易于理解的见解免费学习AI。
✅ 每周在收件箱中获取GenAI、RAG和LLM等前沿话题。
订阅AwesomeNeuron通讯(https://awesomeneuron.substack.com/)

贡献

欢迎贡献!如果你有改进、新笔记本或修复建议:

  1. Fork此仓库。
  2. 创建一个功能分支:git checkout -b feature/YourTopic
  3. notebooks/文件夹中添加或更新笔记本。
  4. 提交你的更改:git commit -m '添加或更新YourTopic笔记本'
  5. 推送你的分支:git push origin feature/YourTopic
  6. 开一个Pull Request供审查。

许可证

本项目基于MIT许可证授权


⭐️ 如果你觉得这个仓库有帮助,请考虑给它一颗星!
星历图(https://www.star-history.com/#analyticalrohit/llms-from-scratch&type=date&legend=top-left)

关键词:AI, Machine Learning, Deep Learning, PyTorch, Generative AI, LLMs, Transformers

相似文章

@Xx15573208: 看了很多 Transformer 的文章,能听懂原理,但真正坐下来写代码,完全无从下手。 LLMs-from-scratch 专门解决这个问题:配套《Build a Large Language Model》一书,带你用 PyTorch …

X AI KOLs Timeline

LLMs-from-scratch 是一个 GitHub 仓库,配套《Build a Large Language Model》一书,提供从零用 PyTorch 实现 GPT 的完整代码,涵盖预训练、微调、RLHF 等全流程,已获 93K+ stars,适合想深入理解大模型原理的开发者。