Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

前言

从零开始大模型

一套从单个神经元出发,只用 NumPy 一步步手搓出 GPT 的教程,提供中文版和英文版。

不依赖 PyTorch、TensorFlow 等深度学习框架:自动微分、网络层、优化器、注意力、Transformer、训练、推理、微调,全部从零实现,并配有逐步讲解的 Jupyter Notebook。

特点

教程目录

教程分为两部分,共 34 章,外加一篇框架总结。两部分的章节编号各自独立:第一部分是 01–16,第二部分是 01–18。

第一部分:神经网络基础

目录:artificial-neural-network,位于 tutorial/zh(中文版)和 tutorial/en(英文版)下。

目录章节内容
01-multilayer-perceptron01–10线性回归、损失函数、梯度下降、自动微分、学习率、迭代、批次、轮次、隐藏层、激活函数
02-recurrent-neural-network11–16编码、嵌入、交叉熵损失、循环神经网络、Adam 优化器、学习率调度器
03-core-framework总结汇总前 16 章,形成完整的核心深度学习框架(src/core)

第二部分:大语言模型基础

目录:large-language-model,位于 tutorial/zh(中文版)和 tutorial/en(英文版)下。

目录章节内容
01-tokenizer01–02词元嵌入、位置嵌入
02-attention03–06自注意力、因果注意力、加权注意力、多头注意力
03-pre-training07–10残差连接、归一化、随机失活、模型持久化
04-inference11–14采样策略(温度、Top-k、Top-p)、停止条件、键值缓存、批量推理
05-fine-tuning15–18SFT 数据准备与训练、DPO 数据准备与训练

快速开始

环境要求

安装

git clone https://github.com/gptmini/from-neuron-to-gpt.git
cd from-neuron-to-gpt

python -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate

pip install -r requirements.txt
pip install jupyterlab

数据

教程使用莎士比亚剧本 tinyshakespeare 作为训练数据,保存位置是 data/tinyshakespeare.txt。

运行教程

在项目根目录运行 jupyter lab,然后按编号顺序打开 tutorial/zh(中文版)或者 tutorial/en(英文版)下的 Notebook 即可。

用命令行运行完整流程

如果只想训练出模型,不想逐章阅读,可以在项目根目录依次运行三个脚本:

python -m src.gpt.gpt   # 预训练:下载数据、训练 GPT、生成示例文本
python -m src.sft.sft   # 监督微调:准备 SFT 样本、训练、生成示例文本
python -m src.dpo.dpo   # 直接偏好优化:准备 DPO 样本、训练、生成示例文本

三个阶段有依赖关系,必须按顺序运行:

阶段依赖产出(均在 data/ 目录)
预训练tinyshakespeare.txttinyshakespeare-gpt.npz
SFT预训练模型sft-samples.pkl、tinyshakespeare-sft.npz
DPO预训练模型、SFT 模型dpo-samples.pkl、tinyshakespeare-dpo.npz

03-pre-training/10 生成预训练模型,04-inference 和 05-fine-tuning 依次使用它。

模型规模

默认的 GPT 模型配置如下(对应第二部分“模型持久化”章节 03-pre-training/10,以及 src/gpt/gpt.py):

参数值
上下文尺寸256
嵌入尺寸384
注意力头数6
Transformer 模块数6
批大小16
训练轮次10
词表(字符级)65
参数量约 10.8M

03-pre-training/10 之前的章节为了方便快速运行,使用的是更小的配置;到“模型持久化”章节才换成上表的配置,目的是训练一个在推理和微调阶段可用的模型。模型完全在 CPU 上训练,规模较小,目的是看清每一步的原理,而不是追求生成质量。

运行环境与耗时

全部代码基于 Mac mini M4 / 16 GB 开发完成,完全运行在 CPU 上。

耗时与 CPU 性能、核数以及 NumPy 所链接的 BLAS 库有关,不同机器上的差别可能很大。

项目结构

.
├── data/                       # 训练数据(tinyshakespeare)及训练产生的模型参数、样本文件
├── src/
│   ├── core/                   # 核心框架:张量、网络层、激活函数、损失函数、优化器、
│   │                           #         学习率调度器、数据集、训练器
│   ├── gpt/                    # GPT 模型、数据集、损失函数、训练器;gpt.py 为预训练脚本
│   ├── sft/                    # 监督微调;sft.py 为微调脚本
│   └── dpo/                    # 直接偏好优化;dpo.py 为优化脚本
├── tutorial/
│   ├── zh/                     # 中文教程(Jupyter Notebook)
│   │   ├── artificial-neural-network/
│   │   ├── large-language-model/
│   │   └── myst.yml            # 教程站点(MyST / Jupyter Book)配置
│   └── en/                     # 英文教程,目录结构与 zh 相同
├── requirements.txt
└── LICENSE

致谢与参考

训练数据 tinyshakespeare 来自 Andrej Karpathy 的 char-rnn 项目。

主要参考文献: